<?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>63301</bug_id>
          
          <creation_ts>2011-06-23 16:29:42 -0700</creation_ts>
          <short_desc>Refactor ThreadableLoaderOptions and use it in ResourceLoader.</short_desc>
          <delta_ts>2011-08-25 12:55:28 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>koivisto</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>426604</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-06-23 16:29:42 -0700</bug_when>
    <thetext>ThreadableLoaderOptions has nothing to do with threading.  It&apos;s also makes a relatively concise way to pass around a bunch of configuration bits for the loader, rather than passing separate bits for resource callbacks, content sniffing, etc.  Ergo, rename it, put it in its own file, and use it as a parameter down to ResourceLoader.

(This would also be required if we wanted to generalize access control enforcement and preflighting and move it out of DocumentThreadableLoader, which I&apos;d like to do soon if folks agree it&apos;s a good idea.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426605</commentid>
    <comment_count>1</comment_count>
      <attachid>98430</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-06-23 16:30:02 -0700</bug_when>
    <thetext>Created attachment 98430
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426607</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 16:31:39 -0700</bug_when>
    <thetext>Attachment 98430 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/loader/ResourceLoadOptions.h:54:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/loader/ResourceLoadOptions.h:55:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 3 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426618</commentid>
    <comment_count>3</comment_count>
      <attachid>98430</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 16:45:22 -0700</bug_when>
    <thetext>Comment on attachment 98430
patch

Attachment 98430 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8939158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426641</commentid>
    <comment_count>4</comment_count>
      <attachid>98437</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-06-23 17:07:33 -0700</bug_when>
    <thetext>Created attachment 98437
Address ews&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426701</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 20:02:16 -0700</bug_when>
    <thetext>It&apos;s true that document resource loading (talking about images, stylesheets or scripts) is getting closer to programmatic loading (such as XMLHttpRequest or worker script loading, handled by ThreadableLoader). Some of the former will support CORS, while the latter will be cached in WebCore memory cache.

Having nothing to do with threading doesn&apos;t seem like a sound basis for this change though. The structure is a parameter block for ThreadableLoader, and making ThreadableLoader and ResourceLoader accept the same parameter block seems questionable before these classes themselves are merged into one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426711</commentid>
    <comment_count>6</comment_count>
      <attachid>98437</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-23 21:18:08 -0700</bug_when>
    <thetext>Comment on attachment 98437
Address ews&apos;s comments

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

&gt; Source/WebCore/loader/ResourceLoadOptions.h:51
&gt; +    ResourceLoadOptions() : sendLoadCallbacks(true), sniffContent(true), allowCredentials(true), forcePreflight(false), crossOriginRequestPolicy(AllowCrossOriginRequests), shouldBufferData(true) { }

This should probably be split into multiple lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426712</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-23 21:21:01 -0700</bug_when>
    <thetext>&gt; It&apos;s true that document resource loading (talking about images, stylesheets or scripts) is getting closer to programmatic loading (such as XMLHttpRequest or worker script loading, handled by ThreadableLoader). Some of the former will support CORS, while the latter will be cached in WebCore memory cache.

Is there a particular reason to keep them separate?  There seems to be value in decreasing the number of paths through the loader.  I guess one difference is that ThreadableLoader has to worry about what&apos;s synchronous and what&apos;s asynchronous.

&gt; Having nothing to do with threading doesn&apos;t seem like a sound basis for this change though. The structure is a parameter block for ThreadableLoader, and making ThreadableLoader and ResourceLoader accept the same parameter block seems questionable before these classes themselves are merged into one.

I think the goal is to merge these code paths in the future.  This seems like a positive step in that direction.  My only concern is callers setting options that aren&apos;t yet understood by the class they&apos;re using (before they&apos;re merged).  Maybe it would make sense to include some ASSERTs that as-yet unsupported options aren&apos;t used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426744</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 23:17:59 -0700</bug_when>
    <thetext>I do not see how this step is necessary at this stage. We don&apos;t even know for sure yet if we&apos;ll merge the loader classes, but we&apos;re already merging their parameter blocks, which have some parameters that are not applicable to both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426935</commentid>
    <comment_count>9</comment_count>
      <attachid>98504</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-06-24 09:57:46 -0700</bug_when>
    <thetext>Created attachment 98504
WIP for generalizing preflighting

Attached is a mostly working but hacky patch that does the ThreadableLoaderOptions rename and moves preflighting into a separate class attached to ResourceLoader.   Hopefully this gives a little more context into where I was thinking of going with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427087</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-24 13:42:42 -0700</bug_when>
    <thetext>It would be nice to get comments from folks who actively work on ResourceLoader, as well as on ThreadableLoader. Some of them are CC&apos;ed here, please do ask anyone else who may have an opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432987</commentid>
    <comment_count>11</comment_count>
      <attachid>98437</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-07-06 13:36:16 -0700</bug_when>
    <thetext>Comment on attachment 98437
Address ews&apos;s comments

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

At a meta level, I wonder a few things:

1. Why do we need to move down the preflight stuff into ResourceLoader (which adds more complexity at that level)? Does everything using ResourceLoader need them? Can we people who need preflight to using DocumentThreadableLoader (and perhaps rename *ThreadableLoader to *PreflightLoader or *CORSLoaders)?

2. Why not create a new struct ResourceLoaderOptions and derive ThreadableLoaderOptions from that? Only move the fields into ResourceLoaderOptions which actually do something. (With the current patch I can fill in fields that do nothing which would be confusing.)

&gt; Source/WebCore/notifications/Notification.cpp:172
&gt; +    options.allowCredentials = true;

This is flipping the value from false to true. While this looks correct, it would be good to do this as a separate bug instead of putting it in as a part of this bigger change.

&gt; Source/WebCore/loader/ResourceLoadOptions.h:50
&gt; +struct ResourceLoadOptions {

Seems like this should be ResourceLoad*er*Options.

&gt;&gt; Source/WebCore/loader/ResourceLoadOptions.h:51
&gt;&gt; +    ResourceLoadOptions() : sendLoadCallbacks(true), sniffContent(true), allowCredentials(true), forcePreflight(false), crossOriginRequestPolicy(AllowCrossOriginRequests), shouldBufferData(true) { }
&gt; 
&gt; This should probably be split into multiple lines.

Changing the defaults from restrictive/conservations options to less conservative options makes it too easy to introduce unintended security issues.

From example:
  allowCredentials from false to true.
  crossOriginRequestPolicy from DenyCrossOriginRequests to AllowCrossOriginRequests
etc.

Please change all of these back to what they were.  (Also this is addressing a different issues from &quot;Rename ThreadableLoaderOptions and use it down to ResourceLoader&quot;).

&gt; Source/WebCore/loader/ThreadableLoader.h:-48
&gt; -    enum StoredCredentials {

This placement is an artifact of history, so it shouldn&apos;t move to the file with ThreadableLoaderOptions but it should move elsewhere (possibly Source/WebCore/platform/network/ResourceHandle.h).

Regardless this is a separate issue from the one being addressed in this patch (of moving ThreadableLoaderOptions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433527</commentid>
    <comment_count>12</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-07-07 09:46:46 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 98437 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98437&amp;action=review
&gt; 
&gt; At a meta level, I wonder a few things:
&gt; 
&gt; 1. Why do we need to move down the preflight stuff into ResourceLoader (which adds more complexity at that level)? Does everything using ResourceLoader need them? Can we people who need preflight to using DocumentThreadableLoader (and perhaps rename *ThreadableLoader to *PreflightLoader or *CORSLoaders)?

Given the stated goal of https://bugs.webkit.org/show_bug.cgi?id=61225, I thought that it would make more sense to have the knowledge of CORS be at or below the cache layer, rather than making a user of the cache have to handle it.  I don&apos;t think it necessarily needs to be at ResourceLoader, but I guess it mostly depends whether we think CORS preflighting will be used in more places in the future.

&gt; 
&gt; 2. Why not create a new struct ResourceLoaderOptions and derive ThreadableLoaderOptions from that? Only move the fields into ResourceLoaderOptions which actually do something. (With the current patch I can fill in fields that do nothing which would be confusing.)

I had thought about that, but in the WIP I posted, all of ResourceLoaderOptions&apos; fields are used at the ResourceLoader level.  I was thinking it didn&apos;t make sense to do subclassing in the interim, but I don&apos;t feel strongly about that.

&gt; 
&gt; &gt; Source/WebCore/notifications/Notification.cpp:172
&gt; &gt; +    options.allowCredentials = true;
&gt; 
&gt; This is flipping the value from false to true. While this looks correct, it would be good to do this as a separate bug instead of putting it in as a part of this bigger change.
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadOptions.h:50
&gt; &gt; +struct ResourceLoadOptions {
&gt; 
&gt; Seems like this should be ResourceLoad*er*Options.
&gt; 
&gt; &gt;&gt; Source/WebCore/loader/ResourceLoadOptions.h:51
&gt; &gt;&gt; +    ResourceLoadOptions() : sendLoadCallbacks(true), sniffContent(true), allowCredentials(true), forcePreflight(false), crossOriginRequestPolicy(AllowCrossOriginRequests), shouldBufferData(true) { }
&gt; &gt; 
&gt; &gt; This should probably be split into multiple lines.
&gt; 
&gt; Changing the defaults from restrictive/conservations options to less conservative options makes it too easy to introduce unintended security issues.

Yeah, I had changed the defaults to what they are at the ResourceLoader level.  You&apos;re probably right that that&apos;s a risky idea.

&gt; 
&gt; From example:
&gt;   allowCredentials from false to true.
&gt;   crossOriginRequestPolicy from DenyCrossOriginRequests to AllowCrossOriginRequests
&gt; etc.
&gt; 
&gt; Please change all of these back to what they were.  (Also this is addressing a different issues from &quot;Rename ThreadableLoaderOptions and use it down to ResourceLoader&quot;).
&gt; 
&gt; &gt; Source/WebCore/loader/ThreadableLoader.h:-48
&gt; &gt; -    enum StoredCredentials {
&gt; 
&gt; This placement is an artifact of history, so it shouldn&apos;t move to the file with ThreadableLoaderOptions but it should move elsewhere (possibly Source/WebCore/platform/network/ResourceHandle.h).
&gt; 
&gt; Regardless this is a separate issue from the one being addressed in this patch (of moving ThreadableLoaderOptions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456524</commentid>
    <comment_count>13</comment_count>
      <attachid>105093</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-24 16:44:45 -0700</bug_when>
    <thetext>Created attachment 105093
Addressing levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456537</commentid>
    <comment_count>14</comment_count>
      <attachid>105093</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 16:59:55 -0700</bug_when>
    <thetext>Comment on attachment 105093
Addressing levin&apos;s comments

Attachment 105093 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9510057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456544</commentid>
    <comment_count>15</comment_count>
      <attachid>105093</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-24 17:16:42 -0700</bug_when>
    <thetext>Comment on attachment 105093
Addressing levin&apos;s comments

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

Just a few issues.

&gt; Source/WebCore/loader/ResourceLoaderOptions.h:44
&gt; +const ResourceLoaderOptions&amp; defaultResourceOptions();

I find it confusing that we have some called defaultResourceOptions which is different from what the default constructor does.

What makes this more &quot;default&quot; than the &quot;default&quot; constructor?

Ultimately, what I&apos;m getting at is that I think this is a bad name (and I don&apos;t know what a better name is because I don&apos;t understand it).

&gt; Source/WebCore/loader/ResourceLoader.h:183
&gt; +        ResourceLoaderOptions m_options;

What does it meant that ResourceLoaderOptions has this extra field that wasn&apos;t in ResourceLoader before?
    bool allowCredentials; // Whether HTTP credentials and cookies are sent with the request.

It seems odd to allow a new option to be passed in which isn&apos;t supported.

&gt; Source/WebCore/loader/ThreadableLoader.h:67
&gt; +        ThreadableLoaderOptions() : ResourceLoaderOptions(), preflightPolicy(ConsiderPreflight), crossOriginRequestPolicy(DenyCrossOriginRequests) { }

I&apos;m pretty sure you don&apos;t need to list &quot;ResourceLoaderOptions()&quot; here.

&gt; Source/WebCore/loader/ResourceLoaderOptions.cpp:38
&gt; +    static bool s_optionsInitialized = false;

This isn&apos;t thread-safe. Please add an ASSERT(isMainThread()); here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456885</commentid>
    <comment_count>16</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-25 08:51:14 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/loader/ResourceLoaderOptions.h:44
&gt; &gt; +const ResourceLoaderOptions&amp; defaultResourceOptions();
&gt; 
&gt; I find it confusing that we have some called defaultResourceOptions which is different from what the default constructor does.

Yeah....I wasn&apos;t quite sure how to handle this case where we have to deal with multiple different defaults.

So I think my options are:
(1) Rename defaultResourceOptions()
(2) Add a constructor that takes arguments for all the variables.
(3) Make ResourceLoaderOptions&apos; initial values be the ones in defaultResourceOptions(), and make the current initial values be overrides set by ThreadableLoaderOptions.
(4) Have several different classes have their own equivalent of defaultResourceOptions()

I&apos;m leaning toward (2).

&gt; &gt; Source/WebCore/loader/ResourceLoader.h:183
&gt; &gt; +        ResourceLoaderOptions m_options;
&gt; 
&gt; What does it meant that ResourceLoaderOptions has this extra field that wasn&apos;t in ResourceLoader before?
&gt;     bool allowCredentials; // Whether HTTP credentials and cookies are sent with the request.
&gt; 
&gt; It seems odd to allow a new option to be passed in which isn&apos;t supported.

Doh, I moved a variable that wasn&apos;t in use yet (again). Will move it back to ThreadableLoaderOptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456923</commentid>
    <comment_count>17</comment_count>
      <attachid>105202</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-25 09:49:59 -0700</bug_when>
    <thetext>Created attachment 105202
2 constructors, allowCredentials back to ThreadableLoaderOptions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456933</commentid>
    <comment_count>18</comment_count>
      <attachid>105202</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-25 09:58:29 -0700</bug_when>
    <thetext>Comment on attachment 105202
2 constructors, allowCredentials back to ThreadableLoaderOptions

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

&gt; Source/WebCore/loader/ResourceLoaderOptions.h:38
&gt; +    ResourceLoaderOptions(bool sendLoadCallbacksArg, bool sniffContentArg, bool shouldBufferDataArg) : sendLoadCallbacks(sendLoadCallbacksArg), sniffContent(sniffContentArg), shouldBufferData(shouldBufferDataArg) { }

I loathe this -- 3 bool arguments in a row. It makes all call sites impossible to read.

What does this do (without looking above):
  ResourceLoaderOptions(true, false, true);

Anyway this is basically what was there before so ok. If you add more bools in here, you should consider making them enums. (Even in a future patch, converting these to enums would be awesome.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456938</commentid>
    <comment_count>19</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-25 10:02:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 105202 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105202&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoaderOptions.h:38
&gt; &gt; +    ResourceLoaderOptions(bool sendLoadCallbacksArg, bool sniffContentArg, bool shouldBufferDataArg) : sendLoadCallbacks(sendLoadCallbacksArg), sniffContent(sniffContentArg), shouldBufferData(shouldBufferDataArg) { }
&gt; 
&gt; I loathe this -- 3 bool arguments in a row. It makes all call sites impossible to read.
&gt; 
&gt; What does this do (without looking above):
&gt;   ResourceLoaderOptions(true, false, true);
&gt; 
&gt; Anyway this is basically what was there before so ok. If you add more bools in here, you should consider making them enums. (Even in a future patch, converting these to enums would be awesome.)

Ok, I&apos;ll enum-ify these next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457077</commentid>
    <comment_count>20</comment_count>
      <attachid>105202</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 12:55:22 -0700</bug_when>
    <thetext>Comment on attachment 105202
2 constructors, allowCredentials back to ThreadableLoaderOptions

Clearing flags on attachment: 105202

Committed r93811: &lt;http://trac.webkit.org/changeset/93811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457078</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 12:55:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98430</attachid>
            <date>2011-06-23 16:30:02 -0700</date>
            <delta_ts>2011-06-23 17:07:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rlo.txt</filename>
            <type>text/plain</type>
            <size>49048</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gODkxMzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQw
LDYgKzIxNDAsNyBAQAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL1NpbmtEb2N1bWVu
dC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwCShyZXZpc2lvbiA4OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChtX3VybEZvclJlYWRpbmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1l
dGhvZCgiR0VUIik7CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAg
IFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJh
Y2tzID0gdHJ1ZTsKICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAgIG9wdGlv
bnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA4
OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODM1LDYgKzE4MzUsNyBAQAogICAgIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5o
IFwKICAgICBsb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oIFwKICAgICBsb2FkZXIvUHJvZ3Jl
c3NUcmFja2VyLmggXAorICAgIGxvYWRlci9SZXNvdXJjZUxvYWRPcHRpb25zLmggXAogICAgIGxv
YWRlci9SZXNvdXJjZUxvYWRlci5oIFwKICAgICBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaCBc
CiAgICAgbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4OTE2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQ3IEBACisyMDExLTA2LTE3ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVuYW1lIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIHRvIFJlc291cmNlTG9hZE9wdGlvbnMsCisg
ICAgICAgIG1vdmUgaXQgdG8gaXRzIG93biBmaWxlLCBhbmQgdXNlIGl0IGFsbCB0aGUgd2F5IGRv
d24KKyAgICAgICAgdG8gUmVzb3VyY2VMb2FkZXIuCisKKyAgICAgICAgQWxzbywgY2hhbmdlIGEg
Y291cGxlIG9mIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgY291cGxlCisgICAgICAgIFJlc291cmNl
TG9hZE9wdGlvbnMgbWVtYmVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9E
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRPcHRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAg
ICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
UmVxdWVzdC5jcHA6CisgICAgICAgICogbG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbToK
KyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6CisgICAgICAg
ICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKwogMjAxMS0wNi0xNyAgQWJoaXNoZWsgQXJ5YSAg
PGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjU4OTQsNiArMjU4OTQsMTAgQEAKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJlc291cmNl
TG9hZE9wdGlvbnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cbG9hZGVyXFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDg5MTM5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMiwxMCArMTEyLDExIEBACiAgICAgaWYgKCFtX2xhc3RFdmVudElkLmlzRW1wdHkoKSkK
ICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3QtRXZlbnQtSUQiLCBtX2xh
c3RFdmVudElkKTsKIAotICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAg
UmVzb3VyY2VMb2FkT3B0aW9ucyBvcHRpb25zOwogICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFj
a3MgPSB0cnVlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CiAgICAgb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwogCiAgICAgbV9sb2FkZXIgPSBUaHJl
YWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1
ZXN0LCBvcHRpb25zKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDcgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUg
IkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPcHRpb25zLmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgVVNFKFNPVVApCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHJldmlzaW9uIDg5MTM5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQAogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAgICAg
c3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAgICAgc3RydWN0IENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKLSAgICBzdHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnM7CisgICAgc3RydWN0IFJlc291cmNlTG9hZE9wdGlvbnM7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaCB7CiAgICAgICAg
IHR5cGVkZWYgVCBUeXBlOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8dHJ1ZSwgZmFsc2UsIFQ+IDogcHVibGlj
IENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VD4gewogICAgIH07CiAKLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucz4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucz4geworICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFk
Q29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlTG9hZE9wdGlvbnM+IDogcHVibGljIENy
b3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8UmVzb3VyY2VMb2FkT3B0aW9ucz4gewogICAgIH07
CiAKICAgICAvLyBDdXN0b20gY29weSBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAkocmV2aXNpb24gODkxMzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDggQEAKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSk7CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25z
OworICAgIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNuaWZmQ29u
dGVudCA9IGZhbHNlOwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CiAgICAg
b3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBjcm9zc09yaWdpblJlcXVlc3RQb2xp
Y3k7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CkBAIC04Nyw3ICs4OCw4
IEBACiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsK
KyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAgIG9wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA9IHRydWU7CiAgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBj
cm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9
IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4OTEzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSw3IEBACiAg
ICAgICAgICAgICAnbG9hZGVyL1BvbGljeUNoZWNrZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVy
L1Byb2dyZXNzVHJhY2tlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkTm90
aWZpZXIuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uLmNwcAkocmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxMSArMTY1LDExIEBA
CiAgICAgICAgIHJldHVybjsKICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiAgICAgbV9z
dGF0ZSA9IExvYWRpbmc7Ci0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAg
ICBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxi
YWNrcyA9IGZhbHNlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CiAgICAgb3B0
aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFs
cyA9IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
ID0gdHJ1ZTsKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IEFsbG93Q3Jv
c3NPcmlnaW5SZXF1ZXN0czsKICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIFJlc291cmNlUmVxdWVzdChpY29uVVJM
KCkpLCBvcHRpb25zKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg5MTM5KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01
MzI0LDYgKzUzMjQsNyBAQAogCQlEMDAwRUQyODExQzFCOUNEMDBDNDc3MjYgLyogU3ViZnJhbWVM
b2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQw
MDBFRDI2MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwMUEyN0FEMTBDOUJGRDgwMDAy
NkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0
U3RyaW5nLmNwcCAqLzsgfTsKIAkJRDAxQTI3QUUxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3Bs
aXRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwMUEyN0FDMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRDA1MTMxMkYxM0FCQkFD
QTAwQkIxQzlFIC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNv
dXJjZUxvYWRPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVD
RUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLzsgfTsKIAkJ
RDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjgwQTQwQkIyQzAw
QzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovOyB9OwogCQlEMDZDMEQ4RjBDRkQxMTQ2
MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92
ZUZvcm1hdENvbW1hbmQuaCAqLzsgfTsKQEAgLTExOTE1LDYgKzExOTE2LDcgQEAKIAkJRDAwMEVE
MjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYWNlU3BsaXRTdHJpbmcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDFBMjdBQzEwQzlCRkQ4MDAwMjZBNDIg
LyogU3BhY2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
cGFjZVNwbGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwNTEzMTJF
MTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjgwQTQw
QkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZUZvcm1hdENvbW1hbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NTU0LDYgKzE4NTU2LDcgQEAKIAkJ
CQk2NTZEMzcyNzBBREJBNURFMDBBNDU1NEQgLyogUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQk5
NzNFMzI1NDEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwICovLAog
CQkJCTk3M0UzMjU1MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oICov
LAorCQkJCUQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRPcHRpb25zLmgg
Ki8sCiAJCQkJRDBDRTU4RjYxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAgKi8sCiAJCQkJRDBDRTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNj
aGVkdWxlci5oICovLAogCQkJCTUxMzI3RDVGMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1l
bnQuY3BwICovLApAQCAtMjIyMjQsNiArMjIyMjcsNyBAQAogCQkJCTY1NkQzNzNGMEFEQkE1REUw
MEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkyODYzOTkx
MjUzQjhGQzAwRjc5MkQ2IC8qIFJlc291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDA1MTMxMkYxM0FCQkFDQTAwQkIxQzlFIC8qIFJlc291cmNlTG9hZE9w
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNFMCAvKiBS
ZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBDRTU4RjkxMjVFNEND
MjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEE4MUJGODUxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9hZFRpbWluZy5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDg5MTM5KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6
ZSgpID4gMCkKICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhl
YWRlcnMpOwogCi0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBSZXNv
dXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9
IHRydWU7CiAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKICAgICBvcHRpb25zLmZv
cmNlUHJlZmxpZ2h0ID0gdXBsb2FkRXZlbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tCShyZXZpc2lvbiA4OTEzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAKIAogTlNDYWNoZWRVUkxSZXNwb25zZSogUmVzb3VyY2VMb2FkZXI6
OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSog
cmVzcG9uc2UpCiB7Ci0gICAgaWYgKCFtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCisgICAg
aWYgKCFtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBmcmFtZUxvYWRlcigpLT5jbGllbnQoKS0+d2lsbENhY2hlUmVzcG9uc2UoZG9jdW1l
bnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByZXNwb25zZSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAko
cmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCwxMCBAQAogICAg
IFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gcmVzb3VyY2UtPmxvYWRQcmlvcml0eSgp
OwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShwcmlvcml0eSk7CiAKKyAgICBSZXNv
dXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7CiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBsb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxv
YWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPmZyYW1lKCksCi0gICAgICAgIHJl
cXVlc3QuZ2V0KCksIHJlc291cmNlUmVxdWVzdCwgcHJpb3JpdHksIHNlY3VyaXR5Q2hlY2ssIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgICAgICByZXF1ZXN0LmdldCgpLCByZXNvdXJj
ZVJlcXVlc3QsIHByaW9yaXR5LCBzZWN1cml0eUNoZWNrLCBvcHRpb25zKTsKICAgICBpZiAoIWxv
YWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZyYW1lcyB3ZXJlIHdhaXRpbmcgZm9yIHRo
aXMgcmV2YWxpZGF0aW9uPwogICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2Fubm90IHN0
YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIuY3BwCShyZXZpc2lvbiA4OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IFJlc291cmNlTG9hZGVyKGZy
YW1lLCB0cnVlLCB0cnVlKQorICAgIDogUmVzb3VyY2VMb2FkZXIoZnJhbWUpCiAgICAgLCBtX2Ns
aWVudChjbGllbnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMs
MTAgKzgzLDkgQEAKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFt
ZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzZWN1cml0eUNoZWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZEJ1ZmZl
ckRhdGEpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNr
LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogewotICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwg
Y2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
LCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZEJ1ZmZlckRhdGEpOworICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwg
Y2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBvcHRpb25zKTsKICAgICBpZiAobG9hZGVy
KQogICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7CiAgICAgcmV0
dXJuIGxvYWRlci5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gODkxMzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsOCArNTAsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEo
U3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qZGF0YUxlbmd0aCovKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciosIGRv
dWJsZSAvKmZpbmlzaFRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVyKiwg
Ym9vbCYgLypzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSovKSB7IHJldHVybiBmYWxzZTsgfQor
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT3B0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUmVzb3VyY2VMb2FkT3B0aW9uc19oCisjZGVmaW5lIFJlc291
cmNlTG9hZE9wdGlvbnNfaAorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBTdG9yZWRDcmVk
ZW50aWFscyB7CisgICAgQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICBEb05vdEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMKK307CisKK2VudW0gQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAg
ICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nlc3NDb250cm9sLAorICAgIEFs
bG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IFJlc291cmNlTG9hZE9wdGlvbnMg
eworICAgIFJlc291cmNlTG9hZE9wdGlvbnMoKSA6IHNlbmRMb2FkQ2FsbGJhY2tzKHRydWUpLCBz
bmlmZkNvbnRlbnQodHJ1ZSksIGFsbG93Q3JlZGVudGlhbHModHJ1ZSksIGZvcmNlUHJlZmxpZ2h0
KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0
cyksIHNob3VsZEJ1ZmZlckRhdGEodHJ1ZSkgeyB9CisgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNr
czsKKyAgICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7ICAv
LyBXaGV0aGVyIEhUVFAgY3JlZGVudGlhbHMgYW5kIGNvb2tpZXMgYXJlIHNlbnQgd2l0aCB0aGUg
cmVxdWVzdC4KKyAgICBib29sIGZvcmNlUHJlZmxpZ2h0OyAgLy8gSWYgQWNjZXNzQ29udHJvbCBp
cyB1c2VkLCB3aGV0aGVyIHRvIGZvcmNlIGEgcHJlZmxpZ2h0LgorICAgIENyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CisgICAgYm9vbCBzaG91bGRCdWZm
ZXJEYXRhOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW47Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBSZXNvdXJjZUxvYWRPcHRpb25zX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDg5
MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHlNb2RlW10gPSAibG9hZFJlc291cmNlU3luY2hyb25vdXNs
eU1vZGUiOwogCi1Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK1dvcmtlclRocmVh
ZGFibGVMb2FkZXI6OldvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9h
ZE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX3dvcmtlckNvbnRleHQod29ya2VyQ29udGV4dCkK
ICAgICAsIG1fd29ya2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBl
cjo6Y3JlYXRlKGNsaWVudCkpCiAgICAgLCBtX2JyaWRnZSgqKG5ldyBNYWluVGhyZWFkQnJpZGdl
KG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2Vy
TG9hZGVyUHJveHkoKSwgdGFza01vZGUsIHJlcXVlc3QsIG9wdGlvbnMsIHdvcmtlckNvbnRleHQt
PnVybCgpLnN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpKSkpCkBAIC02Niw3ICs2Niw3IEBACiAg
ICAgbV9icmlkZ2UuZGVzdHJveSgpOwogfQogCi12b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBj
bGllbnQsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQordm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRp
b25zKQogewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+cnVuTG9vcCgpOwogCkBAIC04OSw3ICs4OSw3IEBACiB9CiAKIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Ok1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgV29ya2Vy
TG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucywg
Y29uc3QgU3RyaW5nJiBvdXRnb2luZ1JlZmVycmVyKQogICAgIDogbV93b3JrZXJDbGllbnRXcmFw
cGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclByb3h5
KQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jcm9zc1RocmVhZFN0cmluZygpKQpAQCAtMTA0
LDcgKzEwNCw3IEBACiB7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRo
cmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBNYWluVGhyZWFkQnJpZGdlKiB0aGlzUHRyLCBQYXNzT3duUHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdSZWZlcnJlcikKK3ZvaWQgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRl
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNYWluVGhyZWFkQnJpZGdlKiB0aGlz
UHRyLCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERh
dGEsIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9ucywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1Jl
ZmVycmVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDg5MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4LDE1IEBACiAgICAgcmV0
dXJuIDA7CiB9CiAKLVJlc291cmNlTG9hZGVyOjpSZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUs
IGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYp
CitSZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNv
dXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1f
ZG9jdW1lbnRMb2FkZXIoZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKQor
ICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX2lkZW50aWZpZXIoMCkKICAgICAsIG1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUoZmFsc2UpCiAgICAgLCBtX2NhbGxlZFdpbGxDYW5jZWwoZmFs
c2UpCiAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKICAgICAsIG1fY2FsbGVkRGlkRmluaXNoTG9h
ZChmYWxzZSkKLSAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKQotICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNu
aWZmKQotICAgICwgbV9zaG91bGRCdWZmZXJEYXRhKHRydWUpCiAgICAgLCBtX2RlZmVyc0xvYWRp
bmcoZnJhbWUtPnBhZ2UoKS0+ZGVmZXJzTG9hZGluZygpKQogewogfQpAQCAtMTYyLDcgKzE2MCw3
IEBACiAgICAgfQogCiAgICAgaWYgKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKQotICAgICAgICBt
X2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdv
cmtpbmdDb250ZXh0KCksIG1fcmVxdWVzdCwgdGhpcywgbV9kZWZlcnNMb2FkaW5nLCBtX3Nob3Vs
ZENvbnRlbnRTbmlmZik7CisgICAgICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSwgbV9yZXF1ZXN0LCB0aGlz
LCBtX2RlZmVyc0xvYWRpbmcsIG1fb3B0aW9ucy5zbmlmZkNvbnRlbnQpOwogfQogCiB2b2lkIFJl
c291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTg2LDE3ICsx
ODQsMTcgQEAKIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0U2hvdWxkQnVmZmVyRGF0YShib29s
IHNob3VsZEJ1ZmZlckRhdGEpCiB7IAotICAgIG1fc2hvdWxkQnVmZmVyRGF0YSA9IHNob3VsZEJ1
ZmZlckRhdGE7IAorICAgIG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID0gc2hvdWxkQnVmZmVy
RGF0YTsgCiAKICAgICAvLyBSZXNldCBhbnkgYWxyZWFkeSBidWZmZXJlZCBkYXRhCi0gICAgaWYg
KCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisgICAgaWYgKCFtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0
YSkKICAgICAgICAgbV9yZXNvdXJjZURhdGEgPSAwOwogfQogICAgIAogCiB2b2lkIFJlc291cmNl
TG9hZGVyOjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGJvb2wgYWxsQXRP
bmNlKQogewotICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgIGlmICghbV9vcHRpb25z
LnNob3VsZEJ1ZmZlckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbGxBdE9uY2Up
IHsKQEAgLTIzMCw3ICsyMjgsNyBAQAogCiAgICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0
YXRlKTsKIAotICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsKKyAgICBpZiAo
bV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzKSB7CiAgICAgICAgIGlmICghbV9pZGVudGlmaWVy
KSB7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5wYWdlKCktPnByb2dyZXNz
KCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgIGZyYW1lTG9hZGVyKCkt
Pm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KG1faWRlbnRpZmll
ciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CkBAIC0yNjEsNyArMjU5LDcgQEAKICAgICBp
ZiAoRm9ybURhdGEqIGRhdGEgPSBtX3JlcXVlc3QuaHR0cEJvZHkoKSkKICAgICAgICAgZGF0YS0+
cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwogICAgICAgICAKLSAgICBpZiAobV9zZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFj
a3MpCiAgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZFJlY2VpdmVSZXNwb25z
ZSh0aGlzLCBtX3Jlc3BvbnNlKTsKIH0KIApAQCAtMjgxLDEzICsyNzksMTMgQEAKICAgICAvLyBG
SVhNRTogSWYgd2UgZ2V0IGEgcmVzb3VyY2Ugd2l0aCBtb3JlIHRoYW4gMkIgYnl0ZXMsIHRoaXMg
Y29kZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgLy8gSG93ZXZlciwgd2l0aCB0b2Rh
eSdzIGNvbXB1dGVycyBhbmQgbmV0d29ya2luZyBzcGVlZHMsIHRoaXMgd29uJ3QgaGFwcGVuIGlu
IHByYWN0aWNlLgogICAgIC8vIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggYSBnaWFudCBsb2NhbCBm
aWxlLgotICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgbV9mcmFtZSkKKyAg
ICBpZiAobV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmIG1fZnJhbWUpCiAgICAgICAgIGZy
YW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0
aCwgc3RhdGljX2Nhc3Q8aW50PihlbmNvZGVkRGF0YUxlbmd0aCkpOwogfQogCiB2b2lkIFJlc291
cmNlTG9hZGVyOjp3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKIHsKLSAgICBpZiAoIW1fc2hvdWxkQnVmZmVyRGF0YSkKKyAgICBpZiAoIW1fb3B0aW9u
cy5zaG91bGRCdWZmZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoIW1fcmVz
b3VyY2VEYXRhKTsKQEAgLTMxNSw3ICszMTMsNyBAQAogICAgIGlmIChtX2NhbGxlZERpZEZpbmlz
aExvYWQpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NhbGxlZERpZEZpbmlzaExvYWQgPSB0cnVl
OwotICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCisgICAgaWYgKG1fb3B0aW9u
cy5zZW5kTG9hZENhbGxiYWNrcykKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+
ZGlkRmluaXNoTG9hZCh0aGlzLCBmaW5pc2hUaW1lKTsKIH0KIApAQCAtMzMyLDcgKzMzMCw3IEBA
CiAgICAgaWYgKEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkpCiAgICAgICAg
IGRhdGEtPnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKTsKIAotICAgIGlmIChtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgIW1fY2FsbGVkRGlkRmluaXNoTG9hZCkKKyAgICBpZiAo
bV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2NhbGxlZERpZEZpbmlzaExvYWQpCiAg
ICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgZXJy
b3IpOwogCiAgICAgcmVsZWFzZVJlc291cmNlcygpOwpAQCAtMzgwLDcgKzM3OCw3IEBACiAgICAg
ICAgICAgICBtX2hhbmRsZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzICYmIG1faWRlbnRpZmllciAmJiAhbV9jYWxsZWREaWRGaW5pc2hM
b2FkKQorICAgICAgICBpZiAobV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmIG1faWRlbnRp
ZmllciAmJiAhbV9jYWxsZWREaWRGaW5pc2hMb2FkKQogICAgICAgICAgICAgZnJhbWVMb2FkZXIo
KS0+bm90aWZpZXIoKS0+ZGlkRmFpbFRvTG9hZCh0aGlzLCBub25OdWxsRXJyb3IpOwogICAgIH0K
IApAQCAtNDcwLDYgKzQ2OCw5IEBACiAKIGJvb2wgUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKCkKIHsKKyAgICBpZiAoIW1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHBy
b3RlY3Rvcih0aGlzKTsKICAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCktPnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCShyZXZp
c2lvbiA4OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykgCitQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRo
cmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykgCiB7CiAgICAgQVNTRVJU
KGNsaWVudCk7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIHJl
dHVybiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGNvbnRleHQpLCBjbGllbnQsIHJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFRocmVh
ZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50JiBjbGllbnQsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQordm9pZCBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRP
cHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDg5MTM5
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWFpblJl
c291cmNlTG9hZGVyOjpNYWluUmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lKQotICAgIDogUmVz
b3VyY2VMb2FkZXIoZnJhbWUsIHRydWUsIHRydWUpCisgICAgOiBSZXNvdXJjZUxvYWRlcihmcmFt
ZSkKICAgICAsIG1fZGF0YUxvYWRUaW1lcih0aGlzLCAmTWFpblJlc291cmNlTG9hZGVyOjpoYW5k
bGVEYXRhTG9hZE5vdykKICAgICAsIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQoZmFsc2UpCiAg
ICAgLCBtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5KGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gODkxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9wdGlv
bnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC01MCw3ICs1MSw3IEBACiBwdWJsaWM6CiAg
ICAgZnJpZW5kIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7
CiAKLSAgICBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNl
TG9hZChGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdywgU2Vj
dXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlLCBib29sIHNo
b3VsZEJ1ZmZlckRhdGEgPSB0cnVlKTsKKyAgICBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvdywgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywg
Y29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgPSBSZXNvdXJjZUxvYWRPcHRpb25zKCkpOwogICAg
IFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3Ry
ZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdm9pZCBhZGRNYWluUmVzb3VyY2VMb2FkKFJlc291cmNl
TG9hZGVyKik7CiAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24g
ODkxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw4IEBACiAgICAgY2xhc3MgV29ya2VyVGhyZWFk
YWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVMb2FkZXI+LCBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShXb3JrZXJDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgICAgIHN0YXRpYyB2b2lkIGxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25z
Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNy
ZWF0ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKHdv
cmtlckNvbnRleHQsIGNsaWVudCwgdGFza01vZGUsIHJlcXVlc3QsIG9wdGlvbnMpKTsKICAgICAg
ICAgfQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDog
cHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgewogICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAvLyBBbGwgZXhlY3V0ZWQgb24gdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFkLgotICAg
ICAgICAgICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGll
bnRXcmFwcGVyPiwgV29ya2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYsIGNv
bnN0IFN0cmluZyYgb3V0Z29pbmdSZWZlcnJlcik7CisgICAgICAgICAgICBNYWluVGhyZWFkQnJp
ZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+LCBXb3JrZXJMb2Fk
ZXJQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJy
ZXIpOwogICAgICAgICAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAgICAgICAgIHZvaWQgZGVzdHJv
eSgpOwogCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5U
aHJlYWREZXN0cm95KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKik7
CiAgICAgICAgICAgICB+TWFpblRocmVhZEJyaWRnZSgpOwogCi0gICAgICAgICAgICBzdGF0aWMg
dm9pZCBtYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWlu
VGhyZWFkQnJpZGdlKiwgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+
LCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1JlZmVycmVy
KTsKKyAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqLCBQYXNzT3duUHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4sIFJlc291cmNlTG9hZE9wdGlvbnMsIGNvbnN0IFN0cmlu
ZyYgb3V0Z29pbmdSZWZlcnJlcik7CiAgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFk
Q2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKik7CiAgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAg
ICAgICBTdHJpbmcgbV90YXNrTW9kZTsKICAgICAgICAgfTsKIAotICAgICAgICBXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29u
c3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMmKTsKKyAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3Jr
ZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01v
ZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsK
IAogICAgICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0OwogICAgICAg
ICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xpZW50V3Jh
cHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lv
biA4OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFJlc291cmNlTG9hZGVyX2gKIAog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
T3B0aW9ucy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKIApAQCAtMTMzLDE0ICsxMzQsMTQgQEAKIAogICAgICAgICBjb25zdCBL
VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3QudXJsKCk7IH0gCiAgICAgICAgIFJl
c291cmNlSGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQot
ICAgICAgICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBt
X3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KKyAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tz
OyB9CiAKICAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KIAogICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZl
ckRhdGEoYm9vbCBzaG91bGRCdWZmZXJEYXRhKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAg
UmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJv
b2wgc2hvdWxkQ29udGVudFNuaWZmKTsKKyAgICAgICAgUmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBj
b25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiA9IFJlc291cmNlTG9hZE9wdGlvbnMoKSk7CiAKICNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgICAgICBmcmllbmQgY2xhc3Mg
QXBwbGljYXRpb25DYWNoZUhvc3Q7ICAvLyBmb3IgYWNjZXNzIHRvIHJlcXVlc3QoKQpAQCAtMTYw
LDYgKzE2MSw3IEBACiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50TG9hZGVyPiBtX2RvY3VtZW50TG9hZGVyOwogICAgICAgICBSZXNvdXJjZVJl
c3BvbnNlIG1fcmVzcG9uc2U7CisgICAgICAgIFJlc291cmNlTG9hZE9wdGlvbnMgbV9vcHRpb25z
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhbmNl
bChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwpAQCAtMTc1LDkgKzE3Nyw2IEBACiAgICAgICAg
IGJvb2wgbV9jYW5jZWxsZWQ7CiAgICAgICAgIGJvb2wgbV9jYWxsZWREaWRGaW5pc2hMb2FkOwog
Ci0gICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgICAgICBib29s
IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgICAgICBib29sIG1fc2hvdWxkQnVmZmVyRGF0YTsK
ICAgICAgICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCBt
X2RlZmVycmVkUmVxdWVzdDsKICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gODkxMzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDggKzUxLDggQEAKICAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhy
ZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCAgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMmKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyPiBjcmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBSZXNvdXJjZUxv
YWRPcHRpb25zJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcj4gY3JlYXRlKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsKICAgICAgICAg
dmlydHVhbCB+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGNhbmNlbCgpOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgTG9hZEFzeW5jaHJv
bm91c2x5CiAgICAgICAgIH07CiAKLSAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERv
Y3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAg
ICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZUxvYWRPcHRpb25zJik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVx
dWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKQEAgLTgyLDcgKzgyLDYgQEAK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
LCBkb3VibGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRp
b24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwog
CkBAIC0xMDEsNyArMTAwLDcgQEAKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBt
X2xvYWRlcjsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAg
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyBtX29wdGlvbnM7CisgICAgICAgIFJlc291cmNlTG9hZE9wdGlvbnMgbV9vcHRpb25zOwogICAg
ICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CiAgICAgICAgIGJvb2wgbV9hc3luYzsKICAg
ICAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51
bGwgZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gODkxMzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2FkZXJfaAogI2RlZmluZSBUaHJlYWRh
YmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9wdGlvbnMuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NSwzNSArNDYsMTMgQEAKICAgICBjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAK
LSAgICBlbnVtIFN0b3JlZENyZWRlbnRpYWxzIHsKLSAgICAgICAgQWxsb3dTdG9yZWRDcmVkZW50
aWFscywKLSAgICAgICAgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzCi0gICAgfTsKLSAgICAK
LSAgICBlbnVtIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSB7Ci0gICAgICAgIERlbnlDcm9zc09y
aWdpblJlcXVlc3RzLAotICAgICAgICBVc2VBY2Nlc3NDb250cm9sLAotICAgICAgICBBbGxvd0Ny
b3NzT3JpZ2luUmVxdWVzdHMKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyB7Ci0gICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zKCkgOiBzZW5kTG9h
ZENhbGxiYWNrcyhmYWxzZSksIHNuaWZmQ29udGVudChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMo
ZmFsc2UpLCBmb3JjZVByZWZsaWdodChmYWxzZSksIGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeShE
ZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cyksIHNob3VsZEJ1ZmZlckRhdGEodHJ1ZSkgeyB9Ci0gICAg
ICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3M7Ci0gICAgICAgIGJvb2wgc25pZmZDb250ZW50Owot
ICAgICAgICBib29sIGFsbG93Q3JlZGVudGlhbHM7ICAvLyBXaGV0aGVyIEhUVFAgY3JlZGVudGlh
bHMgYW5kIGNvb2tpZXMgYXJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdC4KLSAgICAgICAgYm9vbCBm
b3JjZVByZWZsaWdodDsgIC8vIElmIEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBm
b3JjZSBhIHByZWZsaWdodC4KLSAgICAgICAgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3Nz
T3JpZ2luUmVxdWVzdFBvbGljeTsKLSAgICAgICAgYm9vbCBzaG91bGRCdWZmZXJEYXRhOwotICAg
ICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOwotICAgIH07Ci0KICAg
ICAvLyBVc2VmdWwgZm9yIGRvaW5nIGxvYWRlciBvcGVyYXRpb25zIGZyb20gYW55IHRocmVhZCAo
bm90IHRocmVhZHNhZmUsIAogICAgIC8vIGp1c3QgYWJsZSB0byBydW4gb24gdGhyZWFkcyBvdGhl
ciB0aGFuIHRoZSBtYWluIHRocmVhZCkuCiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlciB7CiAg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZGFibGVMb2FkZXIpOwogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBSZXNvdXJjZUxvYWRP
cHRpb25zJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOwogICAgICAgICB2b2lkIHJlZigpIHsgcmVm
VGhyZWFkYWJsZUxvYWRlcigpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDg5MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBA
QAogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHN1YnJlc291cmNlTG9hZGVyQ291
bnRlcigiU3VicmVzb3VyY2VMb2FkZXIiKTsKICNlbmRpZgogCi1TdWJyZXNvdXJjZUxvYWRlcjo6
U3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCog
Y2xpZW50LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmKQotICAgIDogUmVzb3VyY2VMb2FkZXIoZnJhbWUsIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MsIHNob3VsZENvbnRlbnRTbmlmZikKK1N1YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJj
ZUxvYWRlcihGcmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBSZXNvdXJjZUxvYWRlcihm
cmFtZSwgb3B0aW9ucykKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fbG9hZGluZ011
bHRpcGFydENvbnRlbnQoZmFsc2UpCiB7CkBAIC02MSw3ICs2MSw3IEBACiAjZW5kaWYKIH0KIAot
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShG
cmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBi
b29sIHNob3VsZEJ1ZmZlckRhdGEpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGll
bnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNr
UG9saWN5IHNlY3VyaXR5Q2hlY2ssIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMp
CiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05OSw4ICs5OSw3IEBA
CiAKICAgICBmbC0+YWRkRXh0cmFGaWVsZHNUb1N1YnJlc291cmNlUmVxdWVzdChuZXdSZXF1ZXN0
KTsKIAotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc3VibG9hZGVyKGFkb3B0UmVmKG5l
dyBTdWJyZXNvdXJjZUxvYWRlcihmcmFtZSwgY2xpZW50LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzLCBzaG91bGRDb250ZW50U25pZmYpKSk7Ci0gICAgc3VibG9hZGVyLT5zZXRTaG91bGRCdWZm
ZXJEYXRhKHNob3VsZEJ1ZmZlckRhdGEpOworICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
c3VibG9hZGVyKGFkb3B0UmVmKG5ldyBTdWJyZXNvdXJjZUxvYWRlcihmcmFtZSwgY2xpZW50LCBv
cHRpb25zKSkpOwogICAgIHN1YmxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YWRkU3VicmVzb3Vy
Y2VMb2FkZXIoc3VibG9hZGVyLmdldCgpKTsKICAgICBpZiAoIXN1YmxvYWRlci0+aW5pdChuZXdS
ZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMzUsMTcgKzIzNCw2IEBACiAgICAgbV9k
b2N1bWVudExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7CiB9CiAKLWJvb2wg
U3VicmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKLXsKLSAgICBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBib29sIHNob3Vs
ZFVzZTsKLSAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmdldFNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKHRoaXMsIHNob3VsZFVzZSkpCi0gICAgICAgIHJldHVybiBzaG91bGRVc2U7Ci0K
LSAgICByZXR1cm4gUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7
Ci19Ci0KIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewogICAg
IFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZp
c2lvbiA4OTEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsMTQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQsIGNvbnN0
IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgLy8gVGhlIGxvYWRlciB3aWxs
IGJlIGRlbGV0ZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgogICAgIFJlZlB0cjxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIExvYWRTeW5jaHJvbm91c2x5LCByZXF1
ZXN0LCBvcHRpb25zKSk7CiAgICAgQVNTRVJUKGxvYWRlci0+aGFzT25lUmVmKCkpOwogfQogCi1Q
YXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCitQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cj4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBSZWZQdHI8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNseSwgcmVx
dWVzdCwgb3B0aW9ucykpOwogICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKQEAgLTYzLDcgKzYz
LDcgQEAKICAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAotRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIEJsb2NraW5nQmVoYXZpb3IgYmxvY2tpbmdC
ZWhhdmlvciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogY2xpZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9u
cykKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAg
ICAgLCBtX29wdGlvbnMob3B0aW9ucykKQEAgLTI1NiwxOCArMjU2LDYgQEAKICAgICBtX2NsaWVu
dC0+ZGlkRmFpbChlcnJvcik7CiB9CiAKLWJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpn
ZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBi
b29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxv
YWRlciwgbG9hZGVyID09IG1fbG9hZGVyIHx8ICFtX2xvYWRlcik7Ci0KLSAgICBpZiAoIW1fb3B0
aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSB7Ci0gICAgICAgIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsgLy8gT25seSBGcmFtZUxvYWRlckNsaWVudCBjYW4gdWx0aW1hdGVseSBwZXJtaXQgY3Jl
ZGVudGlhbCB1c2UuCi19Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKICAgICBBU1NFUlQobG9h
ZGVyID09IG1fbG9hZGVyKTsKQEAgLTMxNywyMCArMzA1LDIyIEBACiAgICAgQVNTRVJUKG1fc2Ft
ZU9yaWdpblJlcXVlc3QgfHwgcmVxdWVzdFVSTC5wYXNzKCkuaXNFbXB0eSgpKTsKIAogICAgIGlm
IChtX2FzeW5jKSB7Ci0gICAgICAgIC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2Fk
IGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgICAgICBib29sIHNlbmRM
b2FkQ2FsbGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2FjdHVhbFJl
cXVlc3Q7Ci0gICAgICAgIGJvb2wgc25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVu
dCAmJiAhbV9hY3R1YWxSZXF1ZXN0OwotICAgICAgICAvLyBLZWVwIGJ1ZmZlcmluZyB0aGUgZGF0
YSBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgICAgICBib29sIHNob3VsZEJ1ZmZlckRh
dGEgPSBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSB8fCBtX2FjdHVhbFJlcXVlc3Q7CisgICAg
ICAgIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9ucyA9IG1fb3B0aW9uczsKKyAgICAgICAgaWYg
KG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICAgICAgLy8gRG9uJ3Qgc25pZmYgY29udGVudCBv
ciBzZW5kIGxvYWQgY2FsbGJhY2tzIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCisgICAgICAg
ICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gZmFsc2U7CisgICAgICAgICAgICBvcHRp
b25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgLy8gS2VlcCBidWZmZXJpbmcg
dGhlIGRhdGEgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KKyAgICAgICAgICAgIG9wdGlvbnMu
c2hvdWxkQnVmZmVyRGF0YSA9IHRydWU7CisgICAgICAgIH0KIAogICAgICAgICAvLyBDbGVhciB0
aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KICAgICAgICAgbV9sb2FkZXIgPSAw
OwotICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1
YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywgc2VuZExvYWRDYWxsYmFja3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNuaWZmQ29udGVudCwgc2hvdWxkQnVmZmVyRGF0YSk7CisgICAgICAgIG1fbG9h
ZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKG1f
ZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5TWVk
aXVtLCBzZWN1cml0eUNoZWNrLCBvcHRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICAvLyBGSVhNRTogVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMuc25pZmZDb250ZW50IGlz
IG5vdCBzdXBwb3J0ZWQgZm9yIHN5bmNocm9ub3VzIHJlcXVlc3RzLgorICAgIC8vIEZJWE1FOiBS
ZXNvdXJjZUxvYWRPcHRpb25zLnNuaWZmQ29udGVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzeW5j
aHJvbm91cyByZXF1ZXN0cy4KICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cyA9IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6
IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDg5MTM5KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAKICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tl
ci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZE5vdGlmaWVyLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT3B0aW9ucy5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDg5MTM5KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEy
ICs0MSwxMiBAQAogICAgIAogICAgIGNsYXNzIFN1YnJlc291cmNlTG9hZGVyIDogcHVibGljIFJl
c291cmNlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmID0gdHJ1ZSwgYm9vbCBzaG91bGRCdWZmZXJEYXRhID0gdHJ1ZSk7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBT
dWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5
Q2hlY2tQb2xpY3ksIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsKIAogICAgICAgICB2b2lk
IGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBib29s
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKKyAg
ICAgICAgU3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCos
IGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsKICAgICAgICAgdmlydHVhbCB+U3VicmVzb3Vy
Y2VMb2FkZXIoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSk7CkBAIC01Niw3ICs1Niw2IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
Q2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKTsgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENh
bmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7Cg==
</data>
<flag name="commit-queue"
          id="92654"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98437</attachid>
            <date>2011-06-23 17:07:33 -0700</date>
            <delta_ts>2011-08-24 16:44:45 -0700</delta_ts>
            <desc>Address ews&apos;s comments</desc>
            <filename>rlo2.txt</filename>
            <type>text/plain</type>
            <size>50831</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcg
QEAKICAgICBtX2NsaWVudCA9IGNsaWVudDsKICAgICBBU1NFUlQobV9jbGllbnQpOwogCi0gICAg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBSZXNvdXJjZUxvYWRPcHRpb25z
IG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7IC8vIEFsd2F5
cyBzZW5kIGNhbGxiYWNrcy4KICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IG1fb3B0aW9ucy5z
bmlmZkNvbnRlbnQ7CiAgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gbV9vcHRpb25zLmFs
bG93Q3JlZGVudGlhbHM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
ODk2MzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA2LTIzICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIHRvIFJlc291cmNlTG9hZE9wdGlvbnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzMwMQor
CisgICAgICAgICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpBc3NvY2lhdGVkVVJMTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorCiAyMDExLTA2LTIz
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGxlZCBERVBT
LgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA4OTYzMykKKysr
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIx
NDIsNiArMjE0Miw3IEBACiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT3B0aW9ucy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFNjaGVkdWxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU2lua0RvY3Vt
ZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5jcHAJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQAogICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7CiAgICAgcmVxdWVzdC5zZXRIVFRQ
TWV0aG9kKCJHRVQiKTsKIAotICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7Cisg
ICAgUmVzb3VyY2VMb2FkT3B0aW9ucyBvcHRpb25zOwogICAgIG9wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3MgPSB0cnVlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CiAgICAgb3B0
aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTE4NTEsNiArMTg1MSw3IEBACiAgICAgbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
LmggXAogICAgIGxvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmggXAogICAgIGxvYWRlci9Qcm9n
cmVzc1RyYWNrZXIuaCBcCisgICAgbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaCBcCiAgICAg
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmggXAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5o
IFwKICAgICBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDYtMjMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW5hbWUgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgdG8gUmVzb3VyY2VMb2FkT3B0aW9ucywK
KyAgICAgICAgbW92ZSBpdCB0byBpdHMgb3duIGZpbGUsIGFuZCB1c2UgaXQgYWxsIHRoZSB3YXkg
ZG93bgorICAgICAgICB0byBSZXNvdXJjZUxvYWRlci4KKworICAgICAgICBBbHNvLCBjaGFuZ2Ug
YSBjb3VwbGUgb2YgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBjb3VwbGUKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT3B0aW9ucyBtZW1iZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjMzMDEKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNw
cDoKKyAgICAgICAgKiBsb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6Cisg
ICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9U
aHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2Fk
ZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHA6CisgICAgICAgICog
bG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKiBub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbi5jcHA6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuY3BwOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisKIDIwMTEtMDYt
MjMgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjU5MDYsNiArMjU5
MDYsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cbG9hZGVyXFJlc291cmNlTG9hZE9wdGlvbnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMCArMTEyLDExIEBACiAgICAgaWYgKCFtX2xhc3RF
dmVudElkLmlzRW1wdHkoKSkKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxh
c3QtRXZlbnQtSUQiLCBtX2xhc3RFdmVudElkKTsKIAotICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7CisgICAgUmVzb3VyY2VMb2FkT3B0aW9ucyBvcHRpb25zOwogICAgIG9wdGlv
bnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0g
ZmFsc2U7CiAgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICBvcHRpb25z
LmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwogCiAg
ICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gODk2MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNs
aWVudC5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJOZXR3b3JraW5n
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgVVNFKFNP
VVApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJ
KHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRD
b3BpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQAogICAgIGNsYXNzIFJlc291
cmNlUmVzcG9uc2U7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7
CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKLSAgICBzdHJ1Y3Qg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnM7CisgICAgc3RydWN0IFJlc291cmNlTG9hZE9wdGlvbnM7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNz
VGhyb3VnaCB7CiAgICAgICAgIHR5cGVkZWYgVCBUeXBlOwpAQCAtNjIsNyArNjIsNyBAQAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8dHJ1ZSwg
ZmFsc2UsIFQ+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VD4gewogICAg
IH07CiAKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IGZhbHNlLCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucz4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3Bp
ZXJQYXNzVGhyb3VnaDxUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucz4geworICAgIHRlbXBsYXRlPD4g
c3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlTG9hZE9w
dGlvbnM+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8UmVzb3VyY2VMb2Fk
T3B0aW9ucz4gewogICAgIH07CiAKICAgICAvLyBDdXN0b20gY29weSBtZXRob2RzLgpJbmRleDog
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAkocmV2aXNp
b24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAKIAogICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CiAKLSAgICBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zOworICAgIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKKyAg
ICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50
aWFscyA9IHRydWU7CiAgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBjcm9z
c09yaWdpblJlcXVlc3RQb2xpY3k7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRy
dWU7CkBAIC04Nyw3ICs4OCw4IEBACiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIFJlc291cmNlTG9h
ZE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAg
IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CiAgICAgb3B0aW9ucy5jcm9zc09yaWdp
blJlcXVlc3RQb2xpY3kgPSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CiAgICAgb3B0aW9ucy5z
ZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4
OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
NjUxLDYgKzY1MSw3IEBACiAgICAgICAgICAgICAnbG9hZGVyL1BvbGljeUNoZWNrZXIuaCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oJywKICAgICAgICAgICAgICdsb2Fk
ZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNl
TG9hZE9wdGlvbnMuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvbm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL25v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NSwxMSArMTY1LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CiAgICAgbV9zdGF0ZSA9IExvYWRpbmc7Ci0gICAgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMgb3B0aW9uczsKKyAgICBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0
aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IGZhbHNlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50
ID0gZmFsc2U7CiAgICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyA9IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKICAgICBtX2xvYWRlciA9IFRocmVh
ZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIFJlc291
cmNlUmVxdWVzdChpY29uVVJMKCkpLCBvcHRpb25zKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg5NjMz
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01MzY5LDYgKzUzNjksNyBAQAogCQlEMDAwRUQyODExQzFCOUNEMDBD
NDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQwMDBFRDI2MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQw
MUEyN0FEMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMUEyN0FCMTBDOUJGRDgwMDAy
NkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAqLzsgfTsKIAkJRDAxQTI3QUUxMEM5QkZEODAw
MDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQwMUEyN0FDMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0
U3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRDA1MTMxMkYxM0FCQkFDQTAwQkIxQzlFIC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNTEzMTJFMTNBQkJB
Q0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8q
IEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21t
YW5kLmNwcCAqLzsgfTsKIAkJRDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovOyB9Owog
CQlEMDZDMEQ4RjBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0
NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCAqLzsgfTsKQEAgLTEyMDEwLDYgKzEy
MDExLDcgQEAKIAkJRDAwMEVEMjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFj
ZVNwbGl0U3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNw
YWNlU3BsaXRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDFBMjdB
QzEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRPcHRpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4
IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBS
ZW1vdmVGb3JtYXRDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW92ZUZvcm1hdENvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NzA1
LDYgKzE4NzA3LDcgQEAKIAkJCQk2NTZEMzcyNzBBREJBNURFMDBBNDU1NEQgLyogUmVzb3VyY2VM
b2FkZXIuaCAqLywKIAkJCQk5NzNFMzI1NDEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2Fk
Tm90aWZpZXIuY3BwICovLAogCQkJCTk3M0UzMjU1MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJj
ZUxvYWROb3RpZmllci5oICovLAorCQkJCUQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNv
dXJjZUxvYWRPcHRpb25zLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVFNENDMjAwRjNGMTk5IC8qIFJl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCiAJCQkJRDBDRTU4RjcxMjVFNENDMjAwRjNGMTk5
IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovLAogCQkJCTUxMzI3RDVGMTFBMzNBMkIwMDRG
OUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwICovLApAQCAtMjIzOTIsNiArMjIzOTUsNyBAQAogCQkJ
CTY1NkQzNzNGMEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDkyODYzOTkxMjUzQjhGQzAwRjc5MkQ2IC8qIFJlc291cmNlTG9hZEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDA1MTMxMkYxM0FCQkFDQTAwQkIxQzlF
IC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0Mjk1RkE0MTJC
MDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDBDRTU4RjkxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOEE4MUJGODUxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9h
ZFRpbWluZy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICAgaWYgKG1f
cmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVy
RmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwogCi0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMg
b3B0aW9uczsKKyAgICBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5z
ZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CiAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxz
ZTsKICAgICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0ID0gdXBsb2FkRXZlbnRzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tCShyZXZpc2lv
biA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAKIAogTlNDYWNoZWRVUkxSZXNwb25z
ZSogUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgTlND
YWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpCiB7Ci0gICAgaWYgKCFtX3NlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MpCisgICAgaWYgKCFtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jbGllbnQoKS0+d2lsbENh
Y2hlUmVzcG9uc2UoZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByZXNwb25zZSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDggKzEyMCwxMCBAQAogICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gcmVzb3Vy
Y2UtPmxvYWRQcmlvcml0eSgpOwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShwcmlv
cml0eSk7CiAKKyAgICBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5z
ZW5kTG9hZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7CiAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2No
ZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPmZy
YW1lKCksCi0gICAgICAgIHJlcXVlc3QuZ2V0KCksIHJlc291cmNlUmVxdWVzdCwgcHJpb3JpdHks
IHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgICAgICByZXF1
ZXN0LmdldCgpLCByZXNvdXJjZVJlcXVlc3QsIHByaW9yaXR5LCBzZWN1cml0eUNoZWNrLCBvcHRp
b25zKTsKICAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkp
IHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZyYW1lcyB3
ZXJlIHdhaXRpbmcgZm9yIHRoaXMgcmV2YWxpZGF0aW9uPwogICAgICAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5zdHJp
bmcoKS5sYXRpbjEoKS5kYXRhKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL05ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKEZyYW1l
KiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkKLSAgICA6
IFJlc291cmNlTG9hZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgIDogUmVzb3VyY2VMb2FkZXIo
ZnJhbWUpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gODk2MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsMTAgKzg0LDkgQEAKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3Vy
Y2VMb2FkKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0
eSwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
LCBib29sIHNob3VsZEJ1ZmZlckRhdGEpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFt
ZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzZWN1cml0eUNoZWNrLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZEJ1ZmZlckRhdGEp
OworICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBvcHRpb25z
KTsKICAgICBpZiAobG9hZGVyKQogICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBw
cmlvcml0eSk7CiAgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gODk2
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8q
ZGF0YUxlbmd0aCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJy
ZXNvdXJjZUxvYWRlciosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1
YnJlc291cmNlTG9hZGVyKiwgYm9vbCYgLypzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSovKSB7
IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jZi9SZXNvdXJjZUxvYWRlckNGTmV0LmNw
cAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2YvUmVzb3VyY2VM
b2FkZXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogYm9vbCBS
ZXNvdXJjZUxvYWRlcjo6c2hvdWxkQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UpCiB7Ci0gICAgaWYgKCFtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MpCisgICAgaWYgKCFtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3Mp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25zZSA9IENG
Q2FjaGVkVVJMUmVzcG9uc2VHZXRXcmFwcGVkUmVzcG9uc2UoY2FjaGVkUmVzcG9uc2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT3B0aW9ucy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVzb3VyY2VMb2FkT3B0aW9u
c19oCisjZGVmaW5lIFJlc291cmNlTG9hZE9wdGlvbnNfaAorCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBTdG9yZWRDcmVkZW50aWFscyB7CisgICAgQWxsb3dTdG9yZWRDcmVkZW50aWFscywK
KyAgICBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMKK307CisKK2VudW0gQ3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5IHsKKyAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKKyAgICBVc2VBY2Nl
c3NDb250cm9sLAorICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cworfTsKKworc3RydWN0IFJl
c291cmNlTG9hZE9wdGlvbnMgeworICAgIFJlc291cmNlTG9hZE9wdGlvbnMoKSA6IHNlbmRMb2Fk
Q2FsbGJhY2tzKHRydWUpLCBzbmlmZkNvbnRlbnQodHJ1ZSksIGFsbG93Q3JlZGVudGlhbHModHJ1
ZSksIGZvcmNlUHJlZmxpZ2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KEFsbG93
Q3Jvc3NPcmlnaW5SZXF1ZXN0cyksIHNob3VsZEJ1ZmZlckRhdGEodHJ1ZSkgeyB9CisgICAgYm9v
bCBzZW5kTG9hZENhbGxiYWNrczsKKyAgICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFs
bG93Q3JlZGVudGlhbHM7IC8vIFdoZXRoZXIgSFRUUCBjcmVkZW50aWFscyBhbmQgY29va2llcyBh
cmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7IC8vIElm
IEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgd2hldGhlciB0byBmb3JjZSBhIHByZWZsaWdodC4KKyAg
ICBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5OworICAg
IGJvb2wgc2hvdWxkQnVmZmVyRGF0YTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luOworfTsKKworfQorCisjZW5kaWYgLy8gUmVzb3VyY2VMb2FkT3B0aW9uc19oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
Y3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQAogCiBzdGF0
aWMgY29uc3QgY2hhciBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZVtdID0gImxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHlNb2RlIjsKIAotV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlv
bnMpCitXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV93b3JrZXJDb250ZXh0
KHdvcmtlckNvbnRleHQpCiAgICAgLCBtX3dvcmtlckNsaWVudFdyYXBwZXIoVGhyZWFkYWJsZUxv
YWRlckNsaWVudFdyYXBwZXI6OmNyZWF0ZShjbGllbnQpKQogICAgICwgbV9icmlkZ2UoKihuZXcg
TWFpblRocmVhZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dC0+
dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBvcHRpb25z
LCB3b3JrZXJDb250ZXh0LT51cmwoKS5zdHJpcHBlZEZvclVzZUFzUmVmZXJyZXIoKSkpKQpAQCAt
NjYsNyArNjYsNyBAQAogICAgIG1fYnJpZGdlLmRlc3Ryb3koKTsKIH0KIAotdm9pZCBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQq
IHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VM
b2FkT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29y
a2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKIApAQCAtODksNyArODksNyBAQAogfQog
CiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJp
ZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVu
dFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgY29uc3QgU3RyaW5nJiB0
YXNrTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1JlZmVycmVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdSZWZlcnJlcikKICAgICA6IG1f
d29ya2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwgbV9sb2FkZXJQ
cm94eShsb2FkZXJQcm94eSkKICAgICAsIG1fdGFza01vZGUodGFza01vZGUuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogewogfQogCi12b2lkIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVhZEJyaWRnZSogdGhpc1B0ciwgUGFz
c093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhLCBUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJy
ZXIpCit2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5U
aHJlYWRDcmVhdGVMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRo
cmVhZEJyaWRnZSogdGhpc1B0ciwgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVz
dERhdGE+IHJlcXVlc3REYXRhLCBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IFN0
cmluZyYgb3V0Z29pbmdSZWZlcnJlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE3ICs1
OCwxNSBAQAogICAgIHJldHVybiAwOwogfQogCi1SZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2Fk
ZXIoRnJhbWUqIGZyYW1lLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hv
dWxkQ29udGVudFNuaWZmKQorUmVzb3VyY2VMb2FkZXI6OlJlc291cmNlTG9hZGVyKEZyYW1lKiBm
cmFtZSwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fZnJhbWUo
ZnJhbWUpCiAgICAgLCBtX2RvY3VtZW50TG9hZGVyKGZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9j
dW1lbnRMb2FkZXIoKSkKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9pZGVudGlm
aWVyKDApCiAgICAgLCBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKGZhbHNlKQogICAgICwgbV9jYWxs
ZWRXaWxsQ2FuY2VsKGZhbHNlKQogICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCiAgICAgLCBtX2Nh
bGxlZERpZEZpbmlzaExvYWQoZmFsc2UpCi0gICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKLSAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZm
KHNob3VsZENvbnRlbnRTbmlmZikKLSAgICAsIG1fc2hvdWxkQnVmZmVyRGF0YSh0cnVlKQogICAg
ICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKIHsKIH0K
QEAgLTE2Miw3ICsxNjAsNyBAQAogICAgIH0KIAogICAgIGlmICghbV9yZWFjaGVkVGVybWluYWxT
dGF0ZSkKLSAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fZnJhbWUt
PmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLCBtX3JlcXVlc3QsIHRoaXMsIG1fZGVmZXJz
TG9hZGluZywgbV9zaG91bGRDb250ZW50U25pZmYpOworICAgICAgICBtX2hhbmRsZSA9IFJlc291
cmNlSGFuZGxlOjpjcmVhdGUobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCks
IG1fcmVxdWVzdCwgdGhpcywgbV9kZWZlcnNMb2FkaW5nLCBtX29wdGlvbnMuc25pZmZDb250ZW50
KTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVy
cykKQEAgLTE4NiwxNyArMTg0LDE3IEBACiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnNldFNob3Vs
ZEJ1ZmZlckRhdGEoYm9vbCBzaG91bGRCdWZmZXJEYXRhKQogeyAKLSAgICBtX3Nob3VsZEJ1ZmZl
ckRhdGEgPSBzaG91bGRCdWZmZXJEYXRhOyAKKyAgICBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0
YSA9IHNob3VsZEJ1ZmZlckRhdGE7IAogCiAgICAgLy8gUmVzZXQgYW55IGFscmVhZHkgYnVmZmVy
ZWQgZGF0YQotICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgIGlmICghbV9vcHRpb25z
LnNob3VsZEJ1ZmZlckRhdGEpCiAgICAgICAgIG1fcmVzb3VyY2VEYXRhID0gMDsKIH0KICAgICAK
IAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBib29sIGFsbEF0T25jZSkKIHsKLSAgICBpZiAoIW1fc2hvdWxkQnVmZmVyRGF0YSkKKyAg
ICBpZiAoIW1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYWxsQXRPbmNlKSB7CkBAIC0yMzAsNyArMjI4LDcgQEAKIAogICAgIEFTU0VSVCghbV9y
ZWFjaGVkVGVybWluYWxTdGF0ZSk7CiAKLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKSB7CisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcykgewogICAgICAgICBp
ZiAoIW1faWRlbnRpZmllcikgewogICAgICAgICAgICAgbV9pZGVudGlmaWVyID0gbV9mcmFtZS0+
cGFnZSgpLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgICAgICAg
ICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVx
dWVzdChtX2lkZW50aWZpZXIsIGRvY3VtZW50TG9hZGVyKCksIHJlcXVlc3QpOwpAQCAtMjYxLDcg
KzI1OSw3IEBACiAgICAgaWYgKEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkp
CiAgICAgICAgIGRhdGEtPnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKTsKICAgICAgICAg
Ci0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKKyAgICBpZiAobV9vcHRpb25z
LnNlbmRMb2FkQ2FsbGJhY2tzKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5k
aWRSZWNlaXZlUmVzcG9uc2UodGhpcywgbV9yZXNwb25zZSk7CiB9CiAKQEAgLTI4MSwxMyArMjc5
LDEzIEBACiAgICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNlIHdpdGggbW9yZSB0aGFu
IDJCIGJ5dGVzLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgogICAgIC8vIEhv
d2V2ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlz
IHdvbid0IGhhcHBlbiBpbiBwcmFjdGljZS4KICAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRo
IGEgZ2lhbnQgbG9jYWwgZmlsZS4KLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
ICYmIG1fZnJhbWUpCisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyAmJiBtX2Zy
YW1lKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaWRSZWNlaXZlRGF0YSh0
aGlzLCBkYXRhLCBsZW5ndGgsIHN0YXRpY19jYXN0PGludD4oZW5jb2RlZERhdGFMZW5ndGgpKTsK
IH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisg
ICAgaWYgKCFtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKCFtX3Jlc291cmNlRGF0YSk7CkBAIC0zMTUsNyArMzEzLDcgQEAKICAgICBpZiAo
bV9jYWxsZWREaWRGaW5pc2hMb2FkKQogICAgICAgICByZXR1cm47CiAgICAgbV9jYWxsZWREaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQor
ICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpCiAgICAgICAgIGZyYW1lTG9hZGVy
KCktPm5vdGlmaWVyKCktPmRpZEZpbmlzaExvYWQodGhpcywgZmluaXNoVGltZSk7CiB9CiAKQEAg
LTMzMiw3ICszMzAsNyBAQAogICAgIGlmIChGb3JtRGF0YSogZGF0YSA9IG1fcmVxdWVzdC5odHRw
Qm9keSgpKQogICAgICAgICBkYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CiAK
LSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzICYmICFtX2NhbGxlZERpZEZpbmlz
aExvYWQpCisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyAmJiAhbV9jYWxsZWRE
aWRGaW5pc2hMb2FkKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaWRGYWls
VG9Mb2FkKHRoaXMsIGVycm9yKTsKIAogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKQEAgLTM4MCw3
ICszNzgsNyBAQAogICAgICAgICAgICAgbV9oYW5kbGUgPSAwOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiBtX2lkZW50aWZpZXIgJiYgIW1f
Y2FsbGVkRGlkRmluaXNoTG9hZCkKKyAgICAgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxi
YWNrcyAmJiBtX2lkZW50aWZpZXIgJiYgIW1fY2FsbGVkRGlkRmluaXNoTG9hZCkKICAgICAgICAg
ICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgbm9uTnVs
bEVycm9yKTsKICAgICB9CiAKQEAgLTQ3MCw2ICs0NjgsOSBAQAogCiBib29sIFJlc291cmNlTG9h
ZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCiB7CisgICAgaWYgKCFtX29wdGlvbnMu
YWxsb3dDcmVkZW50aWFscykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgUmVmUHRyPFJl
c291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCkt
PmNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShkb2N1bWVudExvYWRlcigpLCBp
ZGVudGlmaWVyKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpIAorUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMp
IAogewogICAgIEFTU0VSVChjbGllbnQpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTU0LDcg
KzU0LDcgQEAKICAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgY2xpZW50LCByZXF1ZXN0LCBvcHRpb25zKTsK
IH0KIAotdm9pZCBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29u
c3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoY29udGV4dCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIE1haW5SZXNvdXJjZUxvYWRlcjo6TWFpblJlc291cmNlTG9hZGVyKEZyYW1lKiBm
cmFtZSkKLSAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgIDogUmVz
b3VyY2VMb2FkZXIoZnJhbWUpCiAgICAgLCBtX2RhdGFMb2FkVGltZXIodGhpcywgJk1haW5SZXNv
dXJjZUxvYWRlcjo6aGFuZGxlRGF0YUxvYWROb3cpCiAgICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRD
b250ZW50KGZhbHNlKQogICAgICwgbV93YWl0aW5nRm9yQ29udGVudFBvbGljeShmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJl
dmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNTAsNyArNTEs
NyBAQAogcHVibGljOgogICAgIGZyaWVuZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNl
TG9hZFNjaGVkdWxlcigpOwogCi0gICAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2No
ZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlMb3csIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
ID0gdHJ1ZSwgYm9vbCBzaG91bGRCdWZmZXJEYXRhID0gdHJ1ZSk7CisgICAgUGFzc1JlZlB0cjxT
dWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFBy
aW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3csIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBE
b1NlY3VyaXR5Q2hlY2ssIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmID0gUmVzb3VyY2VMb2Fk
T3B0aW9ucygpKTsKICAgICBQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBz
Y2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgYWRkTWFpblJlc291
cmNlTG9hZChSZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVy
Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOCBAQAogICAgIGNs
YXNzIFdvcmtlclRocmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIgewogICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyYpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBj
cmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgICAg
ICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgUmVz
b3VyY2VMb2FkT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlv
bnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBv
cHRpb25zKSk7CiAgICAgICAgIH0KQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgY2xhc3MgTWFp
blRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKICAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgLy8gQWxsIGV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29udGV4
dCdzIHRocmVhZC4KLSAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclByb3h5JiwgY29uc3QgU3Ry
aW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMmLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpOworICAgICAgICAg
ICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFw
cGVyPiwgV29ya2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiwgY29uc3QgU3RyaW5n
JiBvdXRnb2luZ1JlZmVycmVyKTsKICAgICAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgICAg
ICAgICB2b2lkIGRlc3Ryb3koKTsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICBz
dGF0aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFp
blRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgfk1haW5UaHJlYWRCcmlkZ2UoKTsKIAotICAg
ICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMsIGNvbnN0IFN0cmluZyYg
b3V0Z29pbmdSZWZlcnJlcik7CisgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3Jl
YXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKiwgUGFz
c093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+LCBSZXNvdXJjZUxvYWRPcHRp
b25zLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpOwogICAgICAgICAgICAgc3RhdGlj
IHZvaWQgbWFpblRocmVhZENhbmNlbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVh
ZEJyaWRnZSopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVk
IGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNl
bnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKQEAgLTEzNSw3ICsx
MzUsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG1fdGFza01vZGU7CiAgICAgICAgIH07CiAKLSAg
ICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAgIFdvcmtlclRocmVh
ZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25z
dCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZUxvYWRPcHRpb25zJik7CiAKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2Vy
Q29udGV4dDsKICAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiBt
X3dvcmtlckNsaWVudFdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuaAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBSZXNv
dXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9wdGlvbnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKQEAgLTEzMywxNCArMTM0LDE0IEBACiAK
ICAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0LnVybCgp
OyB9IAogICAgICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9o
YW5kbGUuZ2V0KCk7IH0KLSAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkg
Y29uc3QgeyByZXR1cm4gbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9CisgICAgICAgIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5z
ZW5kTG9hZENhbGxiYWNrczsgfQogCiAgICAgICAgIGJvb2wgcmVhY2hlZFRlcm1pbmFsU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOyB9CiAKICAgICAgICAgdm9p
ZCBzZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wgc2hvdWxkQnVmZmVyRGF0YSk7CiAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIFJlc291cmNlTG9hZGVyKEZyYW1lKiwgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CisgICAgICAgIFJlc291cmNl
TG9hZGVyKEZyYW1lKiwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgPSBSZXNvdXJjZUxvYWRP
cHRpb25zKCkpOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OyAgLy8gZm9yIGFjY2VzcyB0byBy
ZXF1ZXN0KCkKQEAgLTE2MCw2ICsxNjEsNyBAQAogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJh
bWU7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbV9kb2N1bWVudExvYWRlcjsKICAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgICAgICBSZXNvdXJjZUxvYWRP
cHRpb25zIG1fb3B0aW9uczsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCB2b2lkIHdpbGxDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKQEAgLTE3NSw5ICsx
NzcsNiBAQAogICAgICAgICBib29sIG1fY2FuY2VsbGVkOwogICAgICAgICBib29sIG1fY2FsbGVk
RGlkRmluaXNoTG9hZDsKIAotICAgICAgICBib29sIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
czsKLSAgICAgICAgYm9vbCBtX3Nob3VsZENvbnRlbnRTbmlmZjsKLSAgICAgICAgYm9vbCBtX3No
b3VsZEJ1ZmZlckRhdGE7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9kZWZlcnJlZFJlcXVlc3Q7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9u
IDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBACiAgICAgY2xhc3MgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQgIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRlKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zJik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9j
dW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShEb2N1bWVudCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRp
b25zJik7CiAgICAgICAgIHZpcnR1YWwgfkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAg
ICAgIExvYWRBc3luY2hyb25vdXNseQogICAgICAgICB9OwogCi0gICAgICAgIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBCbG9ja2lu
Z0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyYpOworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgQmxvY2tpbmdCZWhhdmlvciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYpOwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CkBA
IC04Miw3ICs4Miw2IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1
YnJlc291cmNlTG9hZGVyKiwgZG91YmxlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwo
U3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVy
KiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKIApAQCAtMTAxLDcgKzEwMCw3IEBACiAgICAgICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
IG1fY2xpZW50OwogICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICAgICAgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMgbV9vcHRpb25zOworICAgICAgICBSZXNvdXJjZUxvYWRPcHRpb25z
IG1fb3B0aW9uczsKICAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5SZXF1ZXN0OwogICAgICAgICBi
b29sIG1fYXN5bmM7CiAgICAgICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IG1fYWN0dWFsUmVx
dWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBwcmVmbGlnaHQgY2hlY2tz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9u
IDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyX2gK
ICNkZWZpbmUgVGhyZWFkYWJsZUxvYWRlcl9oCiAKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDUsMzUgKzQ2LDEzIEBA
CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50OwogCi0gICAgZW51bSBTdG9yZWRDcmVkZW50aWFscyB7Ci0gICAgICAgIEFs
bG93U3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFs
cwotICAgIH07Ci0gICAgCi0gICAgZW51bSBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgewotICAg
ICAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKLSAgICAgICAgVXNlQWNjZXNzQ29udHJvbCwK
LSAgICAgICAgQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1
Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgewotICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBh
bGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9yY2VQcmVmbGlnaHQoZmFsc2UpLCBjcm9zc09yaWdp
blJlcXVlc3RQb2xpY3koRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpLCBzaG91bGRCdWZmZXJEYXRh
KHRydWUpIHsgfQotICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOwotICAgICAgICBib29s
IHNuaWZmQ29udGVudDsKLSAgICAgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAgLy8gV2hldGhl
ciBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIGFyZSBzZW50IHdpdGggdGhlIHJlcXVlc3Qu
Ci0gICAgICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7ICAvLyBJZiBBY2Nlc3NDb250cm9sIGlzIHVz
ZWQsIHdoZXRoZXIgdG8gZm9yY2UgYSBwcmVmbGlnaHQuCi0gICAgICAgIENyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7Ci0gICAgICAgIGJvb2wgc2hvdWxk
QnVmZmVyRGF0YTsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
bjsKLSAgICB9OwotCiAgICAgLy8gVXNlZnVsIGZvciBkb2luZyBsb2FkZXIgb3BlcmF0aW9ucyBm
cm9tIGFueSB0aHJlYWQgKG5vdCB0aHJlYWRzYWZlLCAKICAgICAvLyBqdXN0IGFibGUgdG8gcnVu
IG9uIHRocmVhZHMgb3RoZXIgdGhhbiB0aGUgbWFpbiB0aHJlYWQpLgogICAgIGNsYXNzIFRocmVh
ZGFibGVMb2FkZXIgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRhYmxlTG9h
ZGVyKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYp
OwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAgICAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29u
c3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVM
b2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRP
cHRpb25zJik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICAgICAg
dm9pZCByZWYoKSB7IHJlZlRocmVhZGFibGVMb2FkZXIoKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDggKzQ0LDggQEAKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBzdWJy
ZXNvdXJjZUxvYWRlckNvdW50ZXIoIlN1YnJlc291cmNlTG9hZGVyIik7CiAjZW5kaWYKIAotU3Vi
cmVzb3VyY2VMb2FkZXI6OlN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiBmcmFtZSwgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqIGNsaWVudCwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBi
b29sIHNob3VsZENvbnRlbnRTbmlmZikKLSAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYpCitTdWJyZXNvdXJjZUxv
YWRlcjo6U3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNs
aWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQorICAgIDog
UmVzb3VyY2VMb2FkZXIoZnJhbWUsIG9wdGlvbnMpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAg
ICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KGZhbHNlKQogewpAQCAtNjEsNyArNjEsNyBA
QAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xp
ZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kg
c2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRhKQorUGFzc1JlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBjb25zdCBSZXNvdXJjZUxvYWRP
cHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtOTksOCArOTksNyBAQAogCiAgICAgZmwtPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNvdXJjZVJl
cXVlc3QobmV3UmVxdWVzdCk7CiAKLSAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHN1Ymxv
YWRlcihhZG9wdFJlZihuZXcgU3VicmVzb3VyY2VMb2FkZXIoZnJhbWUsIGNsaWVudCwgc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwotICAgIHN1YmxvYWRl
ci0+c2V0U2hvdWxkQnVmZmVyRGF0YShzaG91bGRCdWZmZXJEYXRhKTsKKyAgICBSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihuZXcgU3VicmVzb3VyY2VMb2FkZXIo
ZnJhbWUsIGNsaWVudCwgb3B0aW9ucykpKTsKICAgICBzdWJsb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmFkZFN1YnJlc291cmNlTG9hZGVyKHN1YmxvYWRlci5nZXQoKSk7CiAgICAgaWYgKCFzdWJs
b2FkZXItPmluaXQobmV3UmVxdWVzdCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjM1LDE3ICsy
MzQsNiBAQAogICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVN1YnJlc291cmNlTG9hZGVyKHRo
aXMpOwogfQogCi1ib29sIFN1YnJlc291cmNlTG9hZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSgpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwot
Ci0gICAgYm9vbCBzaG91bGRVc2U7Ci0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5nZXRT
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzLCBzaG91bGRVc2UpKQotICAgICAgICByZXR1
cm4gc2hvdWxkVXNlOwotCi0gICAgcmV0dXJuIFJlc291cmNlTG9hZGVyOjpzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSgpOwotfQotCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZSkKIHsKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogewogICAgIC8v
IFRoZSBsb2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBleGl0
cy4KICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJl
ZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCAmY2xpZW50LCBMb2FkU3lu
Y2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwogICAgIEFTU0VSVChsb2FkZXItPmhhc09u
ZVJlZigpKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorUGFzc1JlZlB0cjxEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMp
CiB7CiAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRS
ZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgY2xpZW50LCBMb2FkQXN5
bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMpKTsKICAgICBpZiAoIWxvYWRlci0+bV9sb2Fk
ZXIpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAK
LURvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3Vt
ZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBCbG9ja2luZ0Jl
aGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCogZG9jdW1lbnQsIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgQmxvY2tpbmdCZWhhdmlvciBibG9ja2luZ0Jl
aGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9h
ZE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCkBAIC0yNTYsMTggKzI1Niw2
IEBACiAgICAgbV9jbGllbnQtPmRpZEZhaWwoZXJyb3IpOwogfQogCi1ib29sIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9sb2FkZXIpOwot
Ci0gICAgaWYgKCFtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscykgewotICAgICAgICBzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgRnJhbWVMb2FkZXJDbGllbnQgY2FuIHVsdGlt
YXRlbHkgcGVybWl0IGNyZWRlbnRpYWwgdXNlLgotfQotCiB2b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7
CiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CkBAIC0zMTcsMjAgKzMwNSwyMiBAQAog
ICAgIEFTU0VSVChtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IHJlcXVlc3RVUkwucGFzcygpLmlzRW1w
dHkoKSk7CiAKICAgICBpZiAobV9hc3luYykgewotICAgICAgICAvLyBEb24ndCBzbmlmZiBjb250
ZW50IG9yIHNlbmQgbG9hZCBjYWxsYmFja3MgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KLSAg
ICAgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrcyA9IG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNr
cyAmJiAhbV9hY3R1YWxSZXF1ZXN0OwotICAgICAgICBib29sIHNuaWZmQ29udGVudCA9IG1fb3B0
aW9ucy5zbmlmZkNvbnRlbnQgJiYgIW1fYWN0dWFsUmVxdWVzdDsKLSAgICAgICAgLy8gS2VlcCBi
dWZmZXJpbmcgdGhlIGRhdGEgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KLSAgICAgICAgYm9v
bCBzaG91bGRCdWZmZXJEYXRhID0gbV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgfHwgbV9hY3R1
YWxSZXF1ZXN0OworICAgICAgICBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnMgPSBtX29wdGlv
bnM7CisgICAgICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgICAgIC8vIERvbid0
IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCBy
ZXF1ZXN0LgorICAgICAgICAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IGZhbHNlOwor
ICAgICAgICAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIC8v
IEtlZXAgYnVmZmVyaW5nIHRoZSBkYXRhIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCisgICAg
ICAgICAgICBvcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPSB0cnVlOworICAgICAgICB9CiAKICAg
ICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxsYmFja3MgZnJvbSBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9sZCBsb2FkZXIuCiAgICAg
ICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywg
cmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0sIHNlY3VyaXR5Q2hlY2ssIHNlbmRM
b2FkQ2FsbGJhY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlmZkNvbnRlbnQsIHNob3VsZEJ1ZmZlckRhdGEp
OworICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1
YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywgb3B0aW9ucyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgLy8gRklYTUU6IFRocmVhZGFibGVMb2FkZXJPcHRpb25z
LnNuaWZmQ29udGVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cy4K
KyAgICAvLyBGSVhNRTogUmVzb3VyY2VMb2FkT3B0aW9ucy5zbmlmZkNvbnRlbnQgaXMgbm90IHN1
cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMuCiAgICAgU3RvcmVkQ3JlZGVudGlhbHMg
c3RvcmVkQ3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA/IEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAKICAgICBWZWN0
b3I8Y2hhcj4gZGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZp
c2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2luY2x1
ZGUgIlBvbGljeUNoZWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWROb3RpZmllci5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9wdGlvbnMuaCIKICNpbmNsdWRlICJTdWJmcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA4OTYz
MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSwxMiArNDEsMTIgQEAKICAgICAKICAgICBjbGFzcyBTdWJyZXNvdXJjZUxv
YWRlciA6IHB1YmxpYyBSZXNvdXJjZUxvYWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gY3JlYXRlKEZyYW1lKiwgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNrUG9s
aWN5ID0gRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0
cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUsIGJvb2wgc2hvdWxkQnVmZmVyRGF0
YSA9IHRydWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
Y3JlYXRlKEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTZWN1cml0eUNoZWNrUG9saWN5LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJik7
CiAKICAgICAgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZik7CisgICAgICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJik7CiAgICAgICAgIHZp
cnR1YWwgflN1YnJlc291cmNlTG9hZGVyKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpOwpAQCAtNTYsNyArNTYsNiBAQAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAg
dmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0
aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7ICAgICAgICAKICAgICAgICAgdmly
dHVhbCB2b2lkIHdpbGxDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwo=
</data>
<flag name="review"
          id="92663"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98504</attachid>
            <date>2011-06-24 09:57:46 -0700</date>
            <delta_ts>2011-08-24 16:44:45 -0700</delta_ts>
            <desc>WIP for generalizing preflighting</desc>
            <filename>preflight.txt</filename>
            <type>text/plain</type>
            <size>77651</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gODk2MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQy
LDYgKzIxNDIsNyBAQAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL1NpbmtEb2N1bWVu
dC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChtX3VybEZvclJlYWRpbmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1l
dGhvZCgiR0VUIik7CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAg
IFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJh
Y2tzID0gdHJ1ZTsKICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAgIG9wdGlv
bnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzYsNyArNDM2LDcgQEAKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3Jl
IHRoZSBvcmlnaW5hbCBnbG9iYWwgZXJyb3IgaGFuZGxlciBhcyB3ZWxsLgogCiAgICAgICAgIGlm
IChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFJlc291
cmNlTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1
cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAg
ICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkodXJsLCBSZXNvdXJjZUxvYWRPcHRpb25zKCksIGVycm9yLCByZXNw
b25zZSwgZGF0YSk7CiAgICAgfQogCiAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayB0aGUgVVJMIGFn
YWluIGFmdGVyIHRoZSBsb2FkIHRvIGNhdGNoIHJlZGlyZWN0cy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUxLDYgKzE4NTEsNyBAQAogICAgIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlci5oIFwKICAgICBsb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oIFwKICAgICBs
b2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmggXAorICAgIGxvYWRlci9SZXNvdXJjZUxvYWRPcHRpb25z
LmggXAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oIFwKICAgICBsb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaCBcCiAgICAgbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
ODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjU5MDYsNiArMjU5MDYsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE9wdGlv
bnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDg5NjMzKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwx
MCArMTEyLDExIEBACiAgICAgaWYgKCFtX2xhc3RFdmVudElkLmlzRW1wdHkoKSkKICAgICAgICAg
cmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3QtRXZlbnQtSUQiLCBtX2xhc3RFdmVudElk
KTsKIAotICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgUmVzb3VyY2VM
b2FkT3B0aW9ucyBvcHRpb25zOwogICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVl
OwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CiAgICAgb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9
IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwogCiAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9h
ZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBvcHRp
b25zKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIkhUVFBIZWFk
ZXJNYXAuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlRocmVh
ZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPcHRpb25zLmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiAjaWYgVVNFKFNPVVApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQAogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAgICAgc3RydWN0IENy
b3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVz
b3VyY2VSZXF1ZXN0RGF0YTsKLSAgICBzdHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnM7Cisg
ICAgc3RydWN0IFJlc291cmNlTG9hZE9wdGlvbnM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaCB7CiAgICAgICAgIHR5cGVkZWYg
VCBUeXBlOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDcm9zc1RocmVhZENvcGllckJhc2U8dHJ1ZSwgZmFsc2UsIFQ+IDogcHVibGljIENyb3NzVGhy
ZWFkQ29waWVyUGFzc1Rocm91Z2g8VD4gewogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucz4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucz4geworICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlTG9hZE9wdGlvbnM+IDogcHVibGljIENyb3NzVGhyZWFk
Q29waWVyUGFzc1Rocm91Z2g8UmVzb3VyY2VMb2FkT3B0aW9ucz4gewogICAgIH07CiAKICAgICAv
LyBDdXN0b20gY29weSBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDggQEAKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNv
bnRleHQoKSk7CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIFJl
c291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZh
bHNlOwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CiAgICAgb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CiAgICAg
b3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CkBAIC04Nyw3ICs4OCw4IEBACiAgICAg
aWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyBvcHRpb25zOworICAgIFJlc291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRp
b25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9
IHRydWU7CiAgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBjcm9zc09yaWdp
blJlcXVlc3RQb2xpY3k7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSw3IEBACiAgICAgICAgICAg
ICAnbG9hZGVyL1BvbGljeUNoZWNrZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Byb2dyZXNz
VHJhY2tlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCcs
CisgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZE9wdGlvbnMuaCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oJywKICAgICAgICAgICAgICdsb2FkZXIv
UmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgn
LApJbmRleDogU291cmNlL1dlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNw
cAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlm
aWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxMSArMTY1LDExIEBACiAgICAgICAg
IHJldHVybjsKICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiAgICAgbV9zdGF0ZSA9IExv
YWRpbmc7Ci0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBSZXNvdXJj
ZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IGZh
bHNlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CiAgICAgb3B0aW9ucy5mb3Jj
ZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IEFsbG93
U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsK
ICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IEFsbG93Q3Jvc3NPcmlnaW5S
ZXF1ZXN0czsKICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHRoaXMsIFJlc291cmNlUmVxdWVzdChpY29uVVJMKCkpLCBvcHRp
b25zKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MzY5LDYgKzUz
NjksOSBAQAogCQlEMDAwRUQyODExQzFCOUNEMDBDNDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMDBFRDI2MTFD
MUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwMUEyN0FEMTBDOUJGRDgwMDAyNkE0MiAvKiBT
cGFjZVNwbGl0U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNw
cCAqLzsgfTsKIAkJRDAxQTI3QUUxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMUEyN0FD
MTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRDA1MTMxMkYxM0FCQkFDQTAwQkIxQzlF
IC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRP
cHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRDA1MTMzMzkxM0FDMDkxRTAwQkIxQzlFIC8qIFByZWZsaWdodFJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNTEzMzM4MTNBQzA5MUUw
MEJCMUM5RSAvKiBQcmVmbGlnaHRSZXF1ZXN0LmggKi87IH07CisJCUQwNTEzMzQwMTNBQzA5REUw
MEJCMUM5RSAvKiBQcmVmbGlnaHRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNTEzMzNFMTNBQzA5REUwMEJCMUM5RSAvKiBQcmVmbGln
aHRSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJRDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1h
dEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNw
cCAqLzsgfTsKIAkJRDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VE
MjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovOyB9OwogCQlEMDZD
MEQ4RjBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCAqLzsgfTsKQEAgLTEyMDEwLDYgKzEyMDEzLDkg
QEAKIAkJRDAwMEVEMjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0
U3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYWNlU3Bs
aXRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDFBMjdBQzEwQzlC
RkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUQwNTEzMTJFMTNBQkJBQ0EwMEJCMUM5RSAvKiBSZXNvdXJjZUxvYWRPcHRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZE9wdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDA1MTMzMzgxM0FDMDkxRTAwQkIxQzlFIC8qIFBy
ZWZsaWdodFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlZmxp
Z2h0UmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMDUxMzMzRTEzQUMw
OURFMDBCQjFDOUUgLyogUHJlZmxpZ2h0UmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQcmVmbGlnaHRSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjgwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZUZvcm1hdENvbW1hbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Njk5LDEyICsxODcwNSwxNSBAQAogCQkJ
CTk3MDU5OTc0MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oICovLAogCQkJCTk3
MDU5OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCAqLywKIAkJCQk5NzA1
OTk3NjEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oICovLAorCQkJCUQwNTEzMzNF
MTNBQzA5REUwMEJCMUM5RSAvKiBQcmVmbGlnaHRSZXF1ZXN0LmNwcCAqLywKKwkJCQlEMDUxMzMz
ODEzQUMwOTFFMDBCQjFDOUUgLyogUHJlZmxpZ2h0UmVxdWVzdC5oICovLAogCQkJCTFBMkE2ODIx
MEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuY3BwICovLAogCQkJCTFBMkE2ODIy
MEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuaCAqLywKIAkJCQk5M0UyMjdERTBB
RjU4OUFEMDBENDgzMjQgLyogUmVzb3VyY2VMb2FkZXIuY3BwICovLAogCQkJCTY1NkQzNzI3MEFE
QkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNC
N0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi8sCisJCQkJRDA1MTMx
MkUxM0FCQkFDQTAwQkIxQzlFIC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCAqLywKIAkJCQlEMENF
NThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKIAkJ
CQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8s
CiAJCQkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgKi8sCkBA
IC0yMjIzNyw2ICsyMjI0Niw3IEBACiAJCQkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBEN0QxMEU5QzFGMjUwMDBE
NkY3NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwRjJBNDQxMTM4
NjlBQUIwMDY2QzUzNCAvKiBwcmVwcm9jZXNzb3IucG0gaW4gSGVhZGVycyAqLywKKwkJCQlEMDUx
MzMzOTEzQUMwOTFFMDBCQjFDOUUgLyogUHJlZmxpZ2h0UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjcxRkU2REYxMTA5MUNCMzAwREFFRjc3IC8qIFByaW50Q29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThFQTdFQkMwQTE5NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzRUMwQ0Q2ODFCNTAwRkFEQTc1IC8qIFBy
b2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzOTIsNiArMjI0MDIsNyBAQAogCQkJ
CTY1NkQzNzNGMEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDkyODYzOTkxMjUzQjhGQzAwRjc5MkQ2IC8qIFJlc291cmNlTG9hZEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDA1MTMxMkYxM0FCQkFDQTAwQkIxQzlF
IC8qIFJlc291cmNlTG9hZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0Mjk1RkE0MTJC
MDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDBDRTU4RjkxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOEE4MUJGODUxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9h
ZFRpbWluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTE3NSw2ICsyNTE4Nyw3IEBACiAJCQkJMDY2
OEUxOTAwQUREOTY0MDAwNDEyOEUwIC8qIFBvcHVwTWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjE5QUY4MDgyNDVFNTkwMDFFOUFCQyAvKiBQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlEMDUxMzM0MDEzQUMwOURFMDBCQjFDOUUgLyogUHJlZmxpZ2h0
UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMg
LyogUHJpbnRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3RUJEMEExOTQ1RDAw
MEE4RUY1RiAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTQ0NjEzRUIwQ0Q2ODFCNDAwRkFEQTc1IC8qIFByb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDg5
NjMzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgp
ID4gMCkKICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRl
cnMpOwogCi0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBSZXNvdXJj
ZUxvYWRPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRy
dWU7CiAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKICAgICBvcHRpb25zLmZvcmNl
UHJlZmxpZ2h0ID0gdXBsb2FkRXZlbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsx
MjksNyBAQAogCiAgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxDYWNoZWRSZXNv
dXJjZUxvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogICAgICAgICBpZiAocmVx
dWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbENhY2hlZFJlc291cmNlTG9hZGVyLT5m
cmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICBnbG9i
YWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkodXJsLCBSZXNvdXJjZUxvYWRPcHRpb25zKCksIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CiAgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGdsb2JhbENhY2hlZFJlc291cmNl
TG9hZGVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNl
LnVybCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJl
dmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9SZXNvdXJjZUxvYWRl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogCiBOU0NhY2hlZFVSTFJl
c3BvbnNlKiBSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKIHsKLSAgICBpZiAoIW1fc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrcykKKyAgICBpZiAoIW1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcykK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT53
aWxsQ2FjaGVSZXNwb25zZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCksIHJlc3BvbnNl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
ODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTg3LDcgKzI1ODcsNyBAQAogICAgICAgICBsb2FkV2l0aE5hdmlnYXRpb25B
Y3Rpb24od29ya2luZ1Jlc291cmNlUmVxdWVzdCwgYWN0aW9uLCBsb2NrSGlzdG9yeSwgbG9hZFR5
cGUsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOyAgICAKIH0KIAotdW5zaWduZWQgbG9uZyBGcmFtZUxv
YWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkK
K3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRPcHRpb25zIG9wdGlvbnMs
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PGNoYXI+JiBkYXRhKQogewogICAgIFN0cmluZyByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJl
cjsKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0LnVy
bCgpLCByZWZlcnJlcikpCkBAIC0yNjE2LDcgKzI2MTYsNyBAQAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpKSB7CiAjZW5kaWYKLSAgICAgICAgICAgIFJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIG5ld1JlcXVl
c3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkobV9mcmFtZSwgbmV3
UmVxdWVzdCwgb3B0aW9ucywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKICNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1Jl
cXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3Bw
CShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDEwIEBACiAg
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSByZXNvdXJjZS0+bG9hZFByaW9yaXR5
KCk7CiAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFByaW9yaXR5KHByaW9yaXR5KTsKIAorICAgIFJl
c291cmNlTG9hZE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tz
ID0gc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2Fk
ZXI+IGxvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNl
TG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwKLSAgICAgICAg
cmVxdWVzdC5nZXQoKSwgcmVzb3VyY2VSZXF1ZXN0LCBwcmlvcml0eSwgc2VjdXJpdHlDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgICAgIHJlcXVlc3QuZ2V0KCksIHJlc291
cmNlUmVxdWVzdCwgcHJpb3JpdHksIHNlY3VyaXR5Q2hlY2ssIG9wdGlvbnMpOwogICAgIGlmICgh
bG9hZGVyIHx8IGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkgewogICAgICAgICAvLyBG
SVhNRTogV2hhdCBpZiByZXNvdXJjZXMgaW4gb3RoZXIgZnJhbWVzIHdlcmUgd2FpdGluZyBmb3Ig
dGhpcyByZXZhbGlkYXRpb24/CiAgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYW5ub3Qg
c3RhcnQgbG9hZGluZyAnJXMnIiwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRh
dGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlcjo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIoRnJhbWUqIGZyYW1lLCBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50KQotICAgIDogUmVzb3VyY2VMb2FkZXIo
ZnJhbWUsIHRydWUsIHRydWUpCisgICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSkKICAgICAsIG1f
Y2xpZW50KGNsaWVudCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NCwxMCArODQsOSBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZy
YW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBTZWN1cml0eUNoZWNr
UG9saWN5IHNlY3VyaXR5Q2hlY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQnVm
ZmVyRGF0YSkKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hl
Y2ssIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1l
LCBjbGllbnQsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3MsIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQnVmZmVyRGF0YSk7CisgICAgUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1l
LCBjbGllbnQsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIG9wdGlvbnMpOwogICAgIGlmIChsb2Fk
ZXIpCiAgICAgICAgIHNjaGVkdWxlTG9hZChsb2FkZXIuZ2V0KCksIHByaW9yaXR5KTsKICAgICBy
ZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0
YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypkYXRhTGVuZ3RoKi8pIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiwg
ZG91YmxlIC8qZmluaXNoVGltZSovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIq
LCBib29sJiAvKnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsgcmV0dXJuIGZhbHNlOyB9
CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPcHRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT3B0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRPcHRpb25zX2gKKyNkZWZpbmUgUmVz
b3VyY2VMb2FkT3B0aW9uc19oCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFN0b3JlZENy
ZWRlbnRpYWxzIHsKKyAgICBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAorICAgIERvTm90QWxsb3dT
dG9yZWRDcmVkZW50aWFscworfTsKKworZW51bSBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgewor
ICAgIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLAorICAgIFVzZUFjY2Vzc0NvbnRyb2wsCisgICAg
QWxsb3dDcm9zc09yaWdpblJlcXVlc3RzCit9OworCitzdHJ1Y3QgUmVzb3VyY2VMb2FkT3B0aW9u
cyB7CisgICAgUmVzb3VyY2VMb2FkT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3ModHJ1ZSks
IHNuaWZmQ29udGVudCh0cnVlKSwgYWxsb3dDcmVkZW50aWFscyh0cnVlKSwgZm9yY2VQcmVmbGln
aHQoZmFsc2UpLCBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3koQWxsb3dDcm9zc09yaWdpblJlcXVl
c3RzKSwgc2hvdWxkQnVmZmVyRGF0YSh0cnVlKSB7IH0KKyAgICBib29sIHNlbmRMb2FkQ2FsbGJh
Y2tzOworICAgIGJvb2wgc25pZmZDb250ZW50OworICAgIGJvb2wgYWxsb3dDcmVkZW50aWFsczsg
IC8vIFdoZXRoZXIgSFRUUCBjcmVkZW50aWFscyBhbmQgY29va2llcyBhcmUgc2VudCB3aXRoIHRo
ZSByZXF1ZXN0LgorICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7ICAvLyBJZiBBY2Nlc3NDb250cm9s
IGlzIHVzZWQsIHdoZXRoZXIgdG8gZm9yY2UgYSBwcmVmbGlnaHQuCisgICAgQ3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeTsKKyAgICBib29sIHNob3VsZEJ1
ZmZlckRhdGE7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKK307
CisKK30KKworI2VuZGlmIC8vIFJlc291cmNlTG9hZE9wdGlvbnNfaApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24g
ODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGVbXSA9ICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5TW9kZSI7CiAKLVdvcmtlclRocmVhZGFibGVMb2FkZXI6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
dGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VM
b2FkT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0
KQogICAgICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFw
cGVyOjpjcmVhdGUoY2xpZW50KSkKICAgICAsIG1fYnJpZGdlKCoobmV3IE1haW5UaHJlYWRCcmlk
Z2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3Jr
ZXJMb2FkZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVzdCwgb3B0aW9ucywgd29ya2VyQ29udGV4
dC0+dXJsKCkuc3RyaXBwZWRGb3JVc2VBc1JlZmVycmVyKCkpKSkKQEAgLTY2LDcgKzY2LDcgQEAK
ICAgICBtX2JyaWRnZS5kZXN0cm95KCk7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQm
IGNsaWVudCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9w
dGlvbnMpCiB7CiAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlckNvbnRleHQtPnRo
cmVhZCgpLT5ydW5Mb29wKCk7CiAKQEAgLTg5LDcgKzg5LDcgQEAKIH0KIAogV29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRy
PFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBXb3Jr
ZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgdGFza01vZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdSZWZlcnJlcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25z
LCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpCiAgICAgOiBtX3dvcmtlckNsaWVudFdy
YXBwZXIod29ya2VyQ2xpZW50V3JhcHBlcikKICAgICAsIG1fbG9hZGVyUHJveHkobG9hZGVyUHJv
eHkpCiAgICAgLCBtX3Rhc2tNb2RlKHRhc2tNb2RlLmNyb3NzVGhyZWFkU3RyaW5nKCkpCkBAIC0x
MDQsNyArMTA0LDcgQEAKIHsKIH0KIAotdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIFBhc3NPd25QdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSwgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMgb3B0aW9ucywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1JlZmVycmVyKQordm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9h
ZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRo
aXNQdHIsIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiByZXF1ZXN0
RGF0YSwgUmVzb3VyY2VMb2FkT3B0aW9ucyBvcHRpb25zLCBjb25zdCBTdHJpbmcmIG91dGdvaW5n
UmVmZXJyZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoY29u
dGV4dC0+aXNEb2N1bWVudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUHJlZmxpZ2h0UmVxdWVzdC5oIgog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtNTgsMTggKzU5LDE3IEBACiAgICAgcmV0
dXJuIDA7CiB9CiAKLVJlc291cmNlTG9hZGVyOjpSZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUs
IGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYp
CitSZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNv
dXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1f
ZG9jdW1lbnRMb2FkZXIoZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKQor
ICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX2lkZW50aWZpZXIoMCkKICAgICAsIG1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUoZmFsc2UpCiAgICAgLCBtX2NhbGxlZFdpbGxDYW5jZWwoZmFs
c2UpCiAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKICAgICAsIG1fY2FsbGVkRGlkRmluaXNoTG9h
ZChmYWxzZSkKLSAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKQotICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNu
aWZmKQotICAgICwgbV9zaG91bGRCdWZmZXJEYXRhKHRydWUpCiAgICAgLCBtX2RlZmVyc0xvYWRp
bmcoZnJhbWUtPnBhZ2UoKS0+ZGVmZXJzTG9hZGluZygpKQorICAgICwgbV9wcmVmbGlnaHQoYWRv
cHRQdHIobmV3IFByZWZsaWdodFJlcXVlc3QodGhpcykpKQogewogfQogCkBAIC0xMTEsNiArMTEx
LDIyIEBACiAgICAgbV9kZWZlcnJlZFJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKIH0KIAor
dm9pZCBSZXNvdXJjZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShGcmFtZSogZnJh
bWUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9u
cywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgaWYgKCFvcHRpb25zLnNlY3VyaXR5T3JpZ2luKQorICAg
ICAgICBvcHRpb25zLnNlY3VyaXR5T3JpZ2luID0gZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCk7CisgICAgUHJlZmxpZ2h0UmVxdWVzdCBwcmVmbGlnaHQoMCk7CisgICAgUHJlZmxp
Z2h0UG9saWN5IHByZWZsaWdodFBvbGljeSA9IFByZWZsaWdodFJlcXVlc3Q6OmRldGVybWluZVBy
ZWZsaWdodFBvbGljeShyZXF1ZXN0LCBvcHRpb25zLCBlcnJvcik7CisgICAgaWYgKHByZWZsaWdo
dFBvbGljeSA9PSBCbG9ja1dpdGhvdXRQcmVmbGlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAocHJlZmxpZ2h0UG9saWN5ID09IERvUHJlZmxpZ2h0KSB7CisgICAgICAgIGlmICgh
cHJlZmxpZ2h0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoZnJhbWUsIHJlcXVlc3QsIG9wdGlv
bnMsIGVycm9yLCByZXNwb25zZSwgZGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGZyYW1lLT5sb2Fk
ZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSwgcmVxdWVzdCwgb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFs
cywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKK30KKwogYm9vbCBSZXNvdXJjZUxvYWRlcjo6aW5p
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHIpCiB7CiAgICAgQVNTRVJUKCFtX2hhbmRsZSk7CkBA
IC0xNjEsOSArMTc3LDI2IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUpCi0gICAgICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZShtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSwgbV9yZXF1ZXN0
LCB0aGlzLCBtX2RlZmVyc0xvYWRpbmcsIG1fc2hvdWxkQ29udGVudFNuaWZmKTsKKyAgICBpZiAo
bV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX29w
dGlvbnMuc2VjdXJpdHlPcmlnaW4pCisgICAgICAgIG1fb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgUmVzb3VyY2VFcnJv
ciBlcnJvcjsKKyAgICBQcmVmbGlnaHRQb2xpY3kgcHJlZmxpZ2h0UG9saWN5ID0gbV9wcmVmbGln
aHQtPmRldGVybWluZVByZWZsaWdodFBvbGljeShtX3JlcXVlc3QsIG1fb3B0aW9ucywgZXJyb3Ip
OworICAgIGlmIChwcmVmbGlnaHRQb2xpY3kgPT0gTm9QcmVmbGlnaHQpCisgICAgICAgIGNyZWF0
ZUhhbmRsZSgpOworICAgIGVsc2UgaWYgKHByZWZsaWdodFBvbGljeSA9PSBCbG9ja1dpdGhvdXRQ
cmVmbGlnaHQpCisgICAgICAgIGRpZEZhaWwoZXJyb3IpOworICAgIGVsc2UKKyAgICAgICAgbV9w
cmVmbGlnaHQtPnN0YXJ0KG1fcmVxdWVzdCwgbV9vcHRpb25zKTsKKwogfQorICAgIAordm9pZCBS
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlSGFuZGxlKCkKK3sKKyAgICBtX2hhbmRsZSA9IFJlc291cmNl
SGFuZGxlOjpjcmVhdGUobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCksIG1f
cmVxdWVzdCwgdGhpcywgbV9kZWZlcnNMb2FkaW5nLCBtX29wdGlvbnMuc25pZmZDb250ZW50KTsK
K30KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykK
IHsKQEAgLTE4NiwxNyArMjE5LDE3IEBACiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnNldFNob3Vs
ZEJ1ZmZlckRhdGEoYm9vbCBzaG91bGRCdWZmZXJEYXRhKQogeyAKLSAgICBtX3Nob3VsZEJ1ZmZl
ckRhdGEgPSBzaG91bGRCdWZmZXJEYXRhOyAKKyAgICBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0
YSA9IHNob3VsZEJ1ZmZlckRhdGE7IAogCiAgICAgLy8gUmVzZXQgYW55IGFscmVhZHkgYnVmZmVy
ZWQgZGF0YQotICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgIGlmICghbV9vcHRpb25z
LnNob3VsZEJ1ZmZlckRhdGEpCiAgICAgICAgIG1fcmVzb3VyY2VEYXRhID0gMDsKIH0KICAgICAK
IAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBib29sIGFsbEF0T25jZSkKIHsKLSAgICBpZiAoIW1fc2hvdWxkQnVmZmVyRGF0YSkKKyAg
ICBpZiAoIW1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYWxsQXRPbmNlKSB7CkBAIC0yMzAsNyArMjYzLDcgQEAKIAogICAgIEFTU0VSVCghbV9y
ZWFjaGVkVGVybWluYWxTdGF0ZSk7CiAKLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKSB7CisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcykgewogICAgICAgICBp
ZiAoIW1faWRlbnRpZmllcikgewogICAgICAgICAgICAgbV9pZGVudGlmaWVyID0gbV9mcmFtZS0+
cGFnZSgpLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgICAgICAg
ICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVx
dWVzdChtX2lkZW50aWZpZXIsIGRvY3VtZW50TG9hZGVyKCksIHJlcXVlc3QpOwpAQCAtMjYxLDcg
KzI5NCw3IEBACiAgICAgaWYgKEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkp
CiAgICAgICAgIGRhdGEtPnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKTsKICAgICAgICAg
Ci0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKKyAgICBpZiAobV9vcHRpb25z
LnNlbmRMb2FkQ2FsbGJhY2tzKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5k
aWRSZWNlaXZlUmVzcG9uc2UodGhpcywgbV9yZXNwb25zZSk7CiB9CiAKQEAgLTI4MSwxMyArMzE0
LDEzIEBACiAgICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNlIHdpdGggbW9yZSB0aGFu
IDJCIGJ5dGVzLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgogICAgIC8vIEhv
d2V2ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlz
IHdvbid0IGhhcHBlbiBpbiBwcmFjdGljZS4KICAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRo
IGEgZ2lhbnQgbG9jYWwgZmlsZS4KLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
ICYmIG1fZnJhbWUpCisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyAmJiBtX2Zy
YW1lKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaWRSZWNlaXZlRGF0YSh0
aGlzLCBkYXRhLCBsZW5ndGgsIHN0YXRpY19jYXN0PGludD4oZW5jb2RlZERhdGFMZW5ndGgpKTsK
IH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisg
ICAgaWYgKCFtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKCFtX3Jlc291cmNlRGF0YSk7CkBAIC0zMTUsNyArMzQ4LDcgQEAKICAgICBpZiAo
bV9jYWxsZWREaWRGaW5pc2hMb2FkKQogICAgICAgICByZXR1cm47CiAgICAgbV9jYWxsZWREaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKLSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQor
ICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpCiAgICAgICAgIGZyYW1lTG9hZGVy
KCktPm5vdGlmaWVyKCktPmRpZEZpbmlzaExvYWQodGhpcywgZmluaXNoVGltZSk7CiB9CiAKQEAg
LTMzMiw3ICszNjUsNyBAQAogICAgIGlmIChGb3JtRGF0YSogZGF0YSA9IG1fcmVxdWVzdC5odHRw
Qm9keSgpKQogICAgICAgICBkYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CiAK
LSAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzICYmICFtX2NhbGxlZERpZEZpbmlz
aExvYWQpCisgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyAmJiAhbV9jYWxsZWRE
aWRGaW5pc2hMb2FkKQogICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaWRGYWls
VG9Mb2FkKHRoaXMsIGVycm9yKTsKIAogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKQEAgLTM4MCw3
ICs0MTMsNyBAQAogICAgICAgICAgICAgbV9oYW5kbGUgPSAwOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiBtX2lkZW50aWZpZXIgJiYgIW1f
Y2FsbGVkRGlkRmluaXNoTG9hZCkKKyAgICAgICAgaWYgKG1fb3B0aW9ucy5zZW5kTG9hZENhbGxi
YWNrcyAmJiBtX2lkZW50aWZpZXIgJiYgIW1fY2FsbGVkRGlkRmluaXNoTG9hZCkKICAgICAgICAg
ICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgbm9uTnVs
bEVycm9yKTsKICAgICB9CiAKQEAgLTQ3MCw2ICs1MDMsOSBAQAogCiBib29sIFJlc291cmNlTG9h
ZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCiB7CisgICAgaWYgKCFtX29wdGlvbnMu
YWxsb3dDcmVkZW50aWFscykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgUmVmUHRyPFJl
c291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCkt
PmNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShkb2N1bWVudExvYWRlcigpLCBp
ZGVudGlmaWVyKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpIAorUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMp
IAogewogICAgIEFTU0VSVChjbGllbnQpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTU0LDcg
KzU0LDcgQEAKICAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgY2xpZW50LCByZXF1ZXN0LCBvcHRpb25zKTsK
IH0KIAotdm9pZCBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29u
c3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoY29udGV4dCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIE1haW5SZXNvdXJjZUxvYWRlcjo6TWFpblJlc291cmNlTG9hZGVyKEZyYW1lKiBm
cmFtZSkKLSAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgIDogUmVz
b3VyY2VMb2FkZXIoZnJhbWUpCiAgICAgLCBtX2RhdGFMb2FkVGltZXIodGhpcywgJk1haW5SZXNv
dXJjZUxvYWRlcjo6aGFuZGxlRGF0YUxvYWROb3cpCiAgICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRD
b250ZW50KGZhbHNlKQogICAgICwgbV93YWl0aW5nRm9yQ29udGVudFBvbGljeShmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJl
dmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNTAsNyArNTEs
NyBAQAogcHVibGljOgogICAgIGZyaWVuZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNl
TG9hZFNjaGVkdWxlcigpOwogCi0gICAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2No
ZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlMb3csIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
ID0gdHJ1ZSwgYm9vbCBzaG91bGRCdWZmZXJEYXRhID0gdHJ1ZSk7CisgICAgUGFzc1JlZlB0cjxT
dWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFBy
aW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3csIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBE
b1NlY3VyaXR5Q2hlY2ssIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmID0gUmVzb3VyY2VMb2Fk
T3B0aW9ucygpKTsKICAgICBQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBz
Y2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgYWRkTWFpblJlc291
cmNlTG9hZChSZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVy
Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOCBAQAogICAgIGNs
YXNzIFdvcmtlclRocmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIgewogICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyYpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBj
cmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgICAg
ICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgUmVz
b3VyY2VMb2FkT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlv
bnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBv
cHRpb25zKSk7CiAgICAgICAgIH0KQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgY2xhc3MgTWFp
blRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKICAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgLy8gQWxsIGV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29udGV4
dCdzIHRocmVhZC4KLSAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclByb3h5JiwgY29uc3QgU3Ry
aW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMmLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpOworICAgICAgICAg
ICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFw
cGVyPiwgV29ya2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiwgY29uc3QgU3RyaW5n
JiBvdXRnb2luZ1JlZmVycmVyKTsKICAgICAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgICAg
ICAgICB2b2lkIGRlc3Ryb3koKTsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICBz
dGF0aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFp
blRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgfk1haW5UaHJlYWRCcmlkZ2UoKTsKIAotICAg
ICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMsIGNvbnN0IFN0cmluZyYg
b3V0Z29pbmdSZWZlcnJlcik7CisgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3Jl
YXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKiwgUGFz
c093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+LCBSZXNvdXJjZUxvYWRPcHRp
b25zLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIpOwogICAgICAgICAgICAgc3RhdGlj
IHZvaWQgbWFpblRocmVhZENhbmNlbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVh
ZEJyaWRnZSopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVk
IGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNl
bnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKQEAgLTEzNSw3ICsx
MzUsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG1fdGFza01vZGU7CiAgICAgICAgIH07CiAKLSAg
ICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAgIFdvcmtlclRocmVh
ZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25z
dCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZUxvYWRPcHRpb25zJik7CiAKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2Vy
Q29udGV4dDsKICAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiBt
X3dvcmtlckNsaWVudFdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuaAkocmV2aXNpb24gODk2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBSZXNv
dXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9wdGlvbnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKQEAgLTQ0LDYgKzQ1LDcgQEAKICAgICBj
bGFzcyBGcmFtZUxvYWRlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFJlc291cmNlSGFu
ZGxlOworICAgIGNsYXNzIFByZWZsaWdodFJlcXVlc3Q7CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVy
OwogICAgIAogICAgIGNsYXNzIFJlc291cmNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVz
b3VyY2VMb2FkZXI+LCBwcm90ZWN0ZWQgUmVzb3VyY2VIYW5kbGVDbGllbnQgewpAQCAtNTQsNiAr
NTYsOCBAQAogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpbml0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogCisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJh
bWUqLCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRPcHRpb25zJiwgUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworCiAgICAgICAgIEZy
YW1lTG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0OwogICAgICAgICBEb2N1bWVudExvYWRlciog
ZG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyLmdldCgpOyB9
CiAgICAgICAgIApAQCAtMTMzLDE0ICsxMzcsMTUgQEAKIAogICAgICAgICBjb25zdCBLVVJMJiB1
cmwoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3QudXJsKCk7IH0gCiAgICAgICAgIFJlc291cmNl
SGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQotICAgICAg
ICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KKyAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzOyB9CiAK
ICAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVh
Y2hlZFRlcm1pbmFsU3RhdGU7IH0KIAogICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEo
Ym9vbCBzaG91bGRCdWZmZXJEYXRhKTsKKyAgICAgICAgdm9pZCBwcmVmbGlnaHRTdWNjZXNzKCkg
eyBjcmVhdGVIYW5kbGUoKTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZXNvdXJjZUxv
YWRlcihGcmFtZSosIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRD
b250ZW50U25pZmYpOworICAgICAgICBSZXNvdXJjZUxvYWRlcihGcmFtZSosIGNvbnN0IFJlc291
cmNlTG9hZE9wdGlvbnMmID0gUmVzb3VyY2VMb2FkT3B0aW9ucygpKTsKIAogI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlv
bkNhY2hlSG9zdDsgIC8vIGZvciBhY2Nlc3MgdG8gcmVxdWVzdCgpCkBAIC0xNjAsMTAgKzE2NSwx
MiBAQAogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgICAgIFJlZlB0cjxEb2N1
bWVudExvYWRlcj4gbV9kb2N1bWVudExvYWRlcjsKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOworICAgICAgICBSZXNvdXJjZUxvYWRPcHRpb25zIG1fb3B0aW9uczsKICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYW5jZWwoY29uc3Qg
UmVzb3VyY2VFcnJvciYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbChjb25z
dCBSZXNvdXJjZUVycm9yJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSGFuZGxl
KCk7CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKICAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9yZXNvdXJjZURhdGE7CkBAIC0xNzUsMTEgKzE4MiwxMCBAQAogICAg
ICAgICBib29sIG1fY2FuY2VsbGVkOwogICAgICAgICBib29sIG1fY2FsbGVkRGlkRmluaXNoTG9h
ZDsKIAotICAgICAgICBib29sIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKLSAgICAgICAg
Ym9vbCBtX3Nob3VsZENvbnRlbnRTbmlmZjsKLSAgICAgICAgYm9vbCBtX3Nob3VsZEJ1ZmZlckRh
dGE7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgbV9kZWZlcnJlZFJlcXVlc3Q7CisKKyAgICAgICAgT3duUHRyPFByZWZsaWdodFJlcXVlc3Q+
IG1fcHJlZmxpZ2h0OwogICAgIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw4ICs1MSw4IEBACiAgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRo
cmVhZGFibGVMb2FkZXIsIHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJP
cHRpb25zJik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcj4gY3JlYXRlKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAg
IHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgUmVzb3VyY2VM
b2FkT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI+IGNyZWF0ZShEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJik7CiAgICAgICAg
IHZpcnR1YWwgfkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpOwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWwoKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgICAgIExvYWRBc3luY2hy
b25vdXNseQogICAgICAgICB9OwogCi0gICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihE
b2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAg
ICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiwgQmxvY2tpbmdCZWhhdmlvciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VMb2FkT3B0aW9ucyYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJl
cXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNl
bmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CkBAIC04MiwxNiArODIsMTEg
QEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBkb3VibGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxv
YWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxs
YXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogCiAgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAg
ICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpOwotICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1Jl
cXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAg
ICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2VzcygpOwotICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1
cmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbik7CiAK
ICAgICAgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0
eUNoZWNrUG9saWN5KTsKICAgICAgICAgYm9vbCBpc0FsbG93ZWRSZWRpcmVjdChjb25zdCBLVVJM
Jik7CkBAIC0xMDEsMTAgKzk2LDkgQEAKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBtX2xvYWRlcjsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyBtX29wdGlvbnM7CisgICAgICAgIFJlc291cmNlTG9hZE9wdGlvbnMgbV9vcHRpb25zOwog
ICAgICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CiAgICAgICAgIGJvb2wgbV9hc3luYzsK
LSAgICAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9u
LW51bGwgZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFk
YWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRh
YmxlTG9hZGVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Ro
cmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRl
ZiBUaHJlYWRhYmxlTG9hZGVyX2gKICNkZWZpbmUgVGhyZWFkYWJsZUxvYWRlcl9oCiAKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNDUsMzUgKzQ2LDEzIEBACiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
ICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OwogCi0gICAgZW51bSBTdG9yZWRDcmVk
ZW50aWFscyB7Ci0gICAgICAgIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgIERvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFscwotICAgIH07Ci0gICAgCi0gICAgZW51bSBDcm9zc09yaWdp
blJlcXVlc3RQb2xpY3kgewotICAgICAgICBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywKLSAgICAg
ICAgVXNlQWNjZXNzQ29udHJvbCwKLSAgICAgICAgQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzCi0g
ICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgewotICAgICAg
ICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBz
bmlmZkNvbnRlbnQoZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9yY2VQcmVmbGln
aHQoZmFsc2UpLCBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3koRGVueUNyb3NzT3JpZ2luUmVxdWVz
dHMpLCBzaG91bGRCdWZmZXJEYXRhKHRydWUpIHsgfQotICAgICAgICBib29sIHNlbmRMb2FkQ2Fs
bGJhY2tzOwotICAgICAgICBib29sIHNuaWZmQ29udGVudDsKLSAgICAgICAgYm9vbCBhbGxvd0Ny
ZWRlbnRpYWxzOyAgLy8gV2hldGhlciBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIGFyZSBz
ZW50IHdpdGggdGhlIHJlcXVlc3QuCi0gICAgICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7ICAvLyBJ
ZiBBY2Nlc3NDb250cm9sIGlzIHVzZWQsIHdoZXRoZXIgdG8gZm9yY2UgYSBwcmVmbGlnaHQuCi0g
ICAgICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7
Ci0gICAgICAgIGJvb2wgc2hvdWxkQnVmZmVyRGF0YTsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKLSAgICB9OwotCiAgICAgLy8gVXNlZnVsIGZvciBkb2lu
ZyBsb2FkZXIgb3BlcmF0aW9ucyBmcm9tIGFueSB0aHJlYWQgKG5vdCB0aHJlYWRzYWZlLCAKICAg
ICAvLyBqdXN0IGFibGUgdG8gcnVuIG9uIHRocmVhZHMgb3RoZXIgdGhhbiB0aGUgbWFpbiB0aHJl
YWQpLgogICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXIgewogICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUaHJlYWRhYmxlTG9hZGVyKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucyYpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRh
YmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYpOworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNh
bmNlbCgpID0gMDsKICAgICAgICAgdm9pZCByZWYoKSB7IHJlZlRocmVhZGFibGVMb2FkZXIoKTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCShy
ZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAKIHN0YXRpYyBXVEY6OlJlZkNv
dW50ZWRMZWFrQ291bnRlciBzdWJyZXNvdXJjZUxvYWRlckNvdW50ZXIoIlN1YnJlc291cmNlTG9h
ZGVyIik7CiAjZW5kaWYKIAotU3VicmVzb3VyY2VMb2FkZXI6OlN1YnJlc291cmNlTG9hZGVyKEZy
YW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgYm9vbCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKLSAgICA6IFJlc291
cmNlTG9hZGVyKGZyYW1lLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50
U25pZmYpCitTdWJyZXNvdXJjZUxvYWRlcjo6U3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1l
LCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRp
b25zJiBvcHRpb25zKQorICAgIDogUmVzb3VyY2VMb2FkZXIoZnJhbWUsIG9wdGlvbnMpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KGZhbHNl
KQogewpAQCAtNjEsNyArNjEsNyBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRh
KQorUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZShGcmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNr
LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTksOCArOTksNyBAQAogCiAgICAgZmwtPmFkZEV4dHJh
RmllbGRzVG9TdWJyZXNvdXJjZVJlcXVlc3QobmV3UmVxdWVzdCk7CiAKLSAgICBSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihuZXcgU3VicmVzb3VyY2VMb2FkZXIo
ZnJhbWUsIGNsaWVudCwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNu
aWZmKSkpOwotICAgIHN1YmxvYWRlci0+c2V0U2hvdWxkQnVmZmVyRGF0YShzaG91bGRCdWZmZXJE
YXRhKTsKKyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihu
ZXcgU3VicmVzb3VyY2VMb2FkZXIoZnJhbWUsIGNsaWVudCwgb3B0aW9ucykpKTsKICAgICBzdWJs
b2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFkZFN1YnJlc291cmNlTG9hZGVyKHN1YmxvYWRlci5n
ZXQoKSk7CiAgICAgaWYgKCFzdWJsb2FkZXItPmluaXQobmV3UmVxdWVzdCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjM1LDE3ICsyMzQsNiBAQAogICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92
ZVN1YnJlc291cmNlTG9hZGVyKHRoaXMpOwogfQogCi1ib29sIFN1YnJlc291cmNlTG9hZGVyOjpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgYm9vbCBzaG91bGRVc2U7Ci0gICAgaWYgKG1fY2xp
ZW50ICYmIG1fY2xpZW50LT5nZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzLCBzaG91
bGRVc2UpKQotICAgICAgICByZXR1cm4gc2hvdWxkVXNlOwotCi0gICAgcmV0dXJuIFJlc291cmNl
TG9hZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOwotfQotCiB2b2lkIFN1YnJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKICAgICBSZWZQdHI8U3VicmVzb3VyY2VM
b2FkZXI+IHByb3RlY3QodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gODk2MzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKLSNpbmNsdWRlICJD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgpAQCAtNDgsMTQgKzQ3LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9w
dGlvbnMpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRp
b25zJiBvcHRpb25zKQogewogICAgIC8vIFRoZSBsb2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNv
b24gYXMgdGhpcyBmdW5jdGlvbiBleGl0cy4KICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRv
Y3VtZW50LCAmY2xpZW50LCBMb2FkU3luY2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwog
ICAgIEFTU0VSVChsb2FkZXItPmhhc09uZVJlZigpKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQorUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihk
b2N1bWVudCwgY2xpZW50LCBMb2FkQXN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMpKTsK
ICAgICBpZiAoIWxvYWRlci0+bV9sb2FkZXIpCkBAIC02Myw3ICs2Miw3IEBACiAgICAgcmV0dXJu
IGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKLURvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogY2xpZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9w
dGlvbnMpCitEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cihEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgQmxv
Y2tpbmdCZWhhdmlvciBibG9ja2luZ0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9vcHRpb25zKG9w
dGlvbnMpCkBAIC03NCw1NCArNzMsOSBAQAogICAgIEFTU0VSVChjbGllbnQpOwogICAgIC8vIFNl
dHRpbmcgYW4gb3V0Z29pbmcgcmVmZXJlciBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgYXN5bmMg
Y29kZSBwYXRoLgogICAgIEFTU0VSVChtX2FzeW5jIHx8IHJlcXVlc3QuaHR0cFJlZmVycmVyKCku
aXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IG1fb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKSB7Ci0g
ICAgICAgIGxvYWRSZXF1ZXN0KHJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9PSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cykgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksICJDcm9zcyBvcmlnaW4gcmVxdWVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChtX29wdGlvbnMuY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwotCi0gICAgT3duUHRy
PFJlc291cmNlUmVxdWVzdD4gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KSk7Ci0gICAgdXBkYXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2wo
KmNyb3NzT3JpZ2luUmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMpOwotCi0gICAgaWYgKCFtX29wdGlvbnMuZm9yY2VQcmVmbGlnaHQgJiYgaXNTaW1w
bGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1ZXN0LT5odHRwTWV0aG9k
KCksIGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKLSAgICAgICAgbWFr
ZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmlnaW5SZXF1ZXN0KTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgbV9hY3R1YWxSZXF1ZXN0ID0gY3Jvc3NPcmlnaW5SZXF1ZXN0LnJl
bGVhc2UoKTsKLQotICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6
c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBt
X2FjdHVhbFJlcXVlc3QtPnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9hY3R1
YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxk
cygpKSkKLSAgICAgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoKm1fYWN0
dWFsUmVxdWVzdCk7Ci0gICAgfQotfQotCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
KHJlcXVlc3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpOwotCi0g
ICAgLy8gQ3Jvc3Mtb3JpZ2luIHJlcXVlc3RzIGFyZSBvbmx5IGRlZmluZWQgZm9yIEhUVFAuIFdl
IHdvdWxkIGNhdGNoIHRoaXMgd2hlbiBjaGVja2luZyByZXNwb25zZSBoZWFkZXJzIGxhdGVyLCBi
dXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHNlbmQgYSByZXF1ZXN0IHRoYXQncyBndWFyYW50ZWVk
IHRvIGJlIGRlbmllZC4KLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWxsb3dpbmcgc2ltcGxlIENP
UlMgcmVxdWVzdHMgdG8gbm9uLUhUVFAgVVJMcy4KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJv
dG9jb2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJj
ZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksICJDcm9zcyBvcmlnaW4gcmVxdWVzdHMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBIVFRQLiIp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGxvYWRSZXF1ZXN0KHJlcXVlc3QsIERv
U2VjdXJpdHlDaGVjayk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCi17Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IHByZWZsaWdodFJlcXVlc3QgPSBj
cmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChyZXF1ZXN0LCBzZWN1cml0eU9yaWdp
bigpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7Ci0gICAgbG9hZFJlcXVlc3QocHJlZmxp
Z2h0UmVxdWVzdCwgRG9TZWN1cml0eUNoZWNrKTsKLX0KLQogRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKICAgICBpZiAobV9sb2FkZXIpCkBA
IC0xNzksNDIgKzEzMywyMCBAQAogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKICAgICBTdHJpbmcg
YWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb247Ci0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkg
eworICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKICAgICAgICAgaWYgKCFwYXNzZXNB
Y2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBz
ZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAg
ICAgICAgIHByZWZsaWdodEZhaWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJv
ckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCks
IGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLQotICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNo
ZUl0ZW0+IHByZWZsaWdodFJlc3VsdCA9IGFkb3B0UHRyKG5ldyBDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlSXRlbShtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscykpOwotICAgICAgICBp
ZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UsIGFjY2Vzc0NvbnRyb2xFcnJvckRl
c2NyaXB0aW9uKQotICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NP
cmlnaW5NZXRob2QobV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIGFjY2Vzc0NvbnRyb2xF
cnJvckRlc2NyaXB0aW9uKQotICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dz
Q3Jvc3NPcmlnaW5IZWFkZXJzKG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpLCBh
Y2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAgICAgICAgIHByZWZsaWdodEZh
aWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIENyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFwcGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRv
U3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIHByZWZsaWdodFJlc3VsdC5yZWxlYXNl
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBt
X29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsK
LSAgICAgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29w
dGlvbnMuYWxsb3dDcmVkZW50aWFscywgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVy
cm9yRGVzY3JpcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXNwb25zZS51cmwoKS5z
dHJpbmcoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtX2NsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKICAgICB9CisKKyAgICBt
X2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKIH0KIAog
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogewogICAg
IEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBt
X2xvYWRlcik7Ci0KLSAgICAvLyBQcmVmbGlnaHQgZGF0YSBzaG91bGQgYmUgaW52aXNpYmxlIHRv
IGNsaWVudHMuCi0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCkBAIC0y
MjIsMTEgKzE1NCw2IEBACiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBBU1NFUlRfVU5V
U0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLQotICAgIC8vIFByZWZsaWdodCBkYXRh
IHNob3VsZCBiZSBpbnZpc2libGUgdG8gY2xpZW50cy4KLSAgICBpZiAobV9hY3R1YWxSZXF1ZXN0
KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFk
YXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCkBAIC0yMzksMTIgKzE2Niw3IEBACiAKIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgaWYgKG1fYWN0dWFsUmVxdWVz
dCkgewotICAgICAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotICAgICAgICBBU1NF
UlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9s
KTsKLSAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOwotICAgIH0gZWxzZQotICAgICAgICBtX2Ns
aWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKKyAgICBtX2Ns
aWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKIH0KIAogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC0yNTYsMTggKzE3OCw2IEBACiAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoZXJyb3IpOwogfQogCi1ib29sIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9sb2FkZXIpOwotCi0gICAg
aWYgKCFtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscykgewotICAgICAgICBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgRnJhbWVMb2FkZXJDbGllbnQgY2FuIHVsdGltYXRlbHkg
cGVybWl0IGNyZWRlbnRpYWwgdXNlLgotfQotCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7CiAgICAg
QVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CkBAIC0yOTIsNTMgKzIwMiwyNCBAQAogICAgIG1f
Y2xpZW50LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24obG9hZGVyLT5pZGVu
dGlmaWVyKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKSk7CiB9CiAKLXZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKCkKLXsKLSAgICBPd25QdHI8UmVz
b3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OwotICAgIGFjdHVhbFJlcXVlc3Quc3dhcChtX2Fj
dHVhbFJlcXVlc3QpOwotCi0gICAgYWN0dWFsUmVxdWVzdC0+c2V0SFRUUE9yaWdpbihzZWN1cml0
eU9yaWdpbigpLT50b1N0cmluZygpKTsKLQotICAgIC8vIEl0IHNob3VsZCBiZSBvayB0byBza2lw
IHRoZSBzZWN1cml0eSBjaGVjayBzaW5jZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0IHRoZSBwcmVm
bGlnaHQgcmVxdWVzdC4KLSAgICBsb2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgU2tpcFNlY3Vy
aXR5Q2hlY2spOwotfQotCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0
RmFpbHVyZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9u
KQotewotICAgIG1fYWN0dWFsUmVxdWVzdCA9IG51bGxwdHI7IC8vIFByZXZlbnQgZGlkRmluaXNo
TG9hZGluZygpIGZyb20gYnlwYXNzaW5nIGFjY2VzcyBjaGVjay4KLSAgICBtX2NsaWVudC0+ZGlk
RmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHVybCwgZXJy
b3JEZXNjcmlwdGlvbikpOwotfQotCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9h
ZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9s
aWN5IHNlY3VyaXR5Q2hlY2spCiB7Ci0gICAgLy8gQW55IGNyZWRlbnRpYWwgc2hvdWxkIGhhdmUg
YmVlbiByZW1vdmVkIGZyb20gdGhlIGNyb3NzLXNpdGUgcmVxdWVzdHMuCiAgICAgY29uc3QgS1VS
TCYgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgQVNTRVJUKG1fc2FtZU9yaWdpblJl
cXVlc3QgfHwgcmVxdWVzdFVSTC51c2VyKCkuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9zYW1l
T3JpZ2luUmVxdWVzdCB8fCByZXF1ZXN0VVJMLnBhc3MoKS5pc0VtcHR5KCkpOwogCiAgICAgaWYg
KG1fYXN5bmMpIHsKLSAgICAgICAgLy8gRG9uJ3Qgc25pZmYgY29udGVudCBvciBzZW5kIGxvYWQg
Y2FsbGJhY2tzIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCi0gICAgICAgIGJvb2wgc2VuZExv
YWRDYWxsYmFja3MgPSBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgJiYgIW1fYWN0dWFsUmVx
dWVzdDsKLSAgICAgICAgYm9vbCBzbmlmZkNvbnRlbnQgPSBtX29wdGlvbnMuc25pZmZDb250ZW50
ICYmICFtX2FjdHVhbFJlcXVlc3Q7Ci0gICAgICAgIC8vIEtlZXAgYnVmZmVyaW5nIHRoZSBkYXRh
IGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCi0gICAgICAgIGJvb2wgc2hvdWxkQnVmZmVyRGF0
YSA9IG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhIHx8IG1fYWN0dWFsUmVxdWVzdDsKLQogICAg
ICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJl
c291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KICAgICAg
ICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywgc2VuZExv
YWRDYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNuaWZmQ29udGVudCwgc2hvdWxkQnVmZmVyRGF0YSk7
CisgICAgICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3Vi
cmVzb3VyY2VMb2FkKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNl
TG9hZFByaW9yaXR5TWVkaXVtLCBzZWN1cml0eUNoZWNrLCBtX29wdGlvbnMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIEZJWE1FOiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cy5zbmlmZkNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMu
Ci0gICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxs
b3dDcmVkZW50aWFscyA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVk
Q3JlZGVudGlhbHM7Ci0KKyAgICAvLyBGSVhNRTogUmVzb3VyY2VMb2FkT3B0aW9ucy5zbmlmZkNv
bnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMuCiAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwogICAgIGlmIChtX2RvY3VtZW50LT5m
cmFtZSgpKQotICAgICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMs
IGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBt
X29wdGlvbnMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAKICAgICAvLyBObyBleGNlcHRpb24g
Zm9yIGZpbGU6Ly8vIHJlc291cmNlcywgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTYyMjk4Pi4KICAg
ICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFuIEhUVFAgcmVzcG9uc2UsIHRoZW4gaXQgd2Fzbid0IGEg
bmV0d29yayBlcnJvciBpbiBmYWN0LgpAQCAtMzQ2LDEzICsyMjcsMjcgQEAKICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWwoZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIAorICAg
IGlmICghZXJyb3IuaXNOdWxsKCkgJiYgZXJyb3IuZG9tYWluKCkgPT0gZXJyb3JEb21haW5XZWJL
aXRJbnRlcm5hbCkgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogRnJhbWVMb2FkZXI6OmxvYWRTeW5jaHJv
bm91c2x5KCkgZG9lcyBub3QgdGVsbCB1cyB3aGV0aGVyIGEgcmVkaXJlY3QgaGFwcGVuZWQgb3Ig
bm90LCBzbyB3ZSBndWVzcyBieSBjb21wYXJpbmcgdGhlCiAgICAgLy8gcmVxdWVzdCBhbmQgcmVz
cG9uc2UgVVJMcy4gVGhpcyBpc24ndCBhIHBlcmZlY3QgdGVzdCB0aG91Z2gsIHNpbmNlIGEgc2Vy
dmVyIGNhbiBzZXJ2ZSBhIHJlZGlyZWN0IHRvIHRoZSBzYW1lIFVSTCB0aGF0IHdhcwogICAgIC8v
IHJlcXVlc3RlZC4gQWxzbyBjb21wYXJpbmcgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIFVSTHMg
YXMgc3RyaW5ncyB3aWxsIGZhaWwgaWYgdGhlIHJlcXVlc3RVUkwgc3RpbGwgaGFzIGl0cyBjcmVk
ZW50aWFscy4KICAgICBpZiAocmVxdWVzdFVSTCAhPSByZXNwb25zZS51cmwoKSAmJiAhaXNBbGxv
d2VkUmVkaXJlY3QocmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWls
UmVkaXJlY3RDaGVjaygpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChyZXF1ZXN0VVJM
LnVzZXIoKS5pc0VtcHR5KCkgJiYgcmVxdWVzdFVSTC5wYXNzKCkuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBLVVJMIHJlcXVlc3RVUkxDb3B5ID0gcmVxdWVzdFVS
TDsKKyAgICAgICAgcmVxdWVzdFVSTENvcHkuc2V0VXNlcihTdHJpbmcoKSk7CisgICAgICAgIHJl
cXVlc3RVUkxDb3B5LnNldFBhc3MoU3RyaW5nKCkpOworICAgICAgICBpZiAocmVxdWVzdFVSTENv
cHkgIT0gcmVzcG9uc2UudXJsKCkpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVk
aXJlY3RDaGVjaygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShy
ZXZpc2lvbiA4OTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0NiwxMCBAQAogICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiYWNjZXB0IikKICAgICAgICAgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgImFjY2VwdC1sYW5ndWFnZSIpCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJjb250ZW50LWxhbmd1YWdlIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIm9yaWdpbiIpKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
Y29udGVudC1sZW5ndGgiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAib3Jp
Z2luIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInJlZmVyZXIiKQorICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAidXNlci1hZ2VudCIpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFByZWZsaWdodCBpcyByZXF1aXJlZCBmb3IgTUlNRSB0eXBl
cyB0aGF0IGNhbiBub3QgYmUgc2VudCB2aWEgZm9ybSBzdWJtaXNzaW9uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDg5NjMzKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAK
ICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgogI2luY2x1
ZGUgIlJlc291cmNlTG9hZE5vdGlmaWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT3B0aW9u
cy5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxv
YWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTE4LDcgKzExOCw3IEBACiAjaWYgRU5BQkxFKFdF
Ql9BUkNISVZFKSB8fCBFTkFCTEUoTUhUTUwpCiAgICAgdm9pZCBsb2FkQXJjaGl2ZShQYXNzUmVm
UHRyPEFyY2hpdmU+KTsKICNlbmRpZgotICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAg
IHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUxvYWRPcHRpb25zLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNw
b25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CiAKICAgICB2b2lkIGNoYW5nZUxvY2F0aW9uKFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9
IHRydWUsIGJvb2wgcmVmcmVzaCA9IGZhbHNlKTsKICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wgbG9j
a0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgUmVmZXJyZXJQb2xpY3kpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDg5
NjMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDEyICs0MSwxMiBAQAogICAgIAogICAgIGNsYXNzIFN1YnJlc291cmNl
TG9hZGVyIDogcHVibGljIFJlc291cmNlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQ
b2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9
IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSwgYm9vbCBzaG91bGRCdWZmZXJE
YXRhID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMm
KTsKIAogICAgICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgU3VicmVzb3VyY2VM
b2FkZXJDbGllbnQqLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKTsKKyAgICAgICAgU3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmKTsKICAgICAgICAg
dmlydHVhbCB+U3VicmVzb3VyY2VMb2FkZXIoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CkBAIC01Niw3ICs1Niw2IEBACiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxs
YXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUHJlZmxpZ2h0UmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1ByZWZsaWdodFJlcXVlc3QuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL1ByZWZsaWdodFJlcXVlc3QuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcmVm
bGlnaHRSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIK
KyNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQcmVmbGlnaHRSZXF1ZXN0OjpQcmVmbGlnaHRSZXF1ZXN0KFJlc291
cmNlTG9hZGVyKiBsb2FkZXIpCisgICAgOiBtX3Jlc291cmNlTG9hZGVyKGxvYWRlcikKK3sKK30K
KworUHJlZmxpZ2h0UG9saWN5IFByZWZsaWdodFJlcXVlc3Q6OmRldGVybWluZVByZWZsaWdodFBv
bGljeShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMm
IG9wdGlvbnMsIFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChlcnJvci5pc051
bGwoKSk7CisKKyAgICBpZiAob3B0aW9ucy5zZWN1cml0eU9yaWdpbi0+Y2FuUmVxdWVzdChyZXF1
ZXN0LnVybCgpKSB8fCBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBBbGxvd0Ny
b3NzT3JpZ2luUmVxdWVzdHMpIHsKKyAgICAgICAgcmV0dXJuIE5vUHJlZmxpZ2h0OworICAgIH0K
KyAgICAKKyAgICBpZiAob3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gRGVueUNy
b3NzT3JpZ2luUmVxdWVzdHMpIHsKKyAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksICJDcm9zcyBv
cmlnaW4gcmVxdWVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBCbG9j
a1dpdGhvdXRQcmVmbGlnaHQ7CisgICAgfQorCisgICAgQVNTRVJUKG9wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOworICAgIHVwZGF0ZVJlcXVlc3RG
b3JBY2Nlc3NDb250cm9sKHJlcXVlc3QsIG9wdGlvbnMuc2VjdXJpdHlPcmlnaW4uZ2V0KCksIG9w
dGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisKKyAgICBpZiAoIW9wdGlvbnMuZm9yY2VQcmVmbGln
aHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVzdC5odHRwTWV0aG9k
KCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkgeworICAgICAgICAvLyBDcm9zcy1vcmln
aW4gcmVxdWVzdHMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgSFRUUC4gV2Ugd291bGQgY2F0Y2ggdGhp
cyB3aGVuIGNoZWNraW5nIHJlc3BvbnNlIGhlYWRlcnMgbGF0ZXIsIGJ1dCB0aGVyZSBpcyBubyBy
ZWFzb24gdG8gc2VuZCBhIHJlcXVlc3QgdGhhdCdzIGd1YXJhbnRlZWQgdG8gYmUgZGVuaWVkLgor
ICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWxsb3dpbmcgc2ltcGxlIENPUlMgcmVxdWVzdHMg
dG8gbm9uLUhUVFAgVVJMcy4KKyAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSW5I
VFRQRmFtaWx5KCkpIHsKKyAgICAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbldlYktpdEludGVybmFsLCAwLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCAiQ3Jvc3Mgb3Jp
Z2luIHJlcXVlc3RzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgSFRUUC4iKTsKKyAgICAgICAgICAg
IHJldHVybiBCbG9ja1dpdGhvdXRQcmVmbGlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE5vUHJlZmxpZ2h0OworICAgIH0KKyAgICAgICAgCisgICAgaWYgKENyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVmbGlnaHQob3B0aW9ucy5zZWN1cml0
eU9yaWdpbi0+dG9TdHJpbmcoKSwgcmVxdWVzdC51cmwoKSwgb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzLCByZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKSB7
CisgICAgICAgIGlmICghcmVxdWVzdC5odHRwT3JpZ2luKCkpCisgICAgICAgICAgICByZXF1ZXN0
LnNldEhUVFBPcmlnaW4ob3B0aW9ucy5zZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7CisgICAg
ICAgIHJldHVybiBOb1ByZWZsaWdodDsKKyAgICB9CisKKyAgICByZXR1cm4gRG9QcmVmbGlnaHQ7
Cit9CisKK3ZvaWQgUHJlZmxpZ2h0UmVxdWVzdDo6c3RhcnQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fYWN0dWFs
UmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbV9vcHRpb25zID0gb3B0aW9uczsKKyAgICBSZXNvdXJj
ZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCA9IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRS
ZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMuc2VjdXJpdHlPcmlnaW4uZ2V0KCksIG9wdGlvbnMuYWxs
b3dDcmVkZW50aWFscyk7ICAgIAorICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShtX3Jlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLCBw
cmVmbGlnaHRSZXF1ZXN0LCB0aGlzLCBmYWxzZSwgZmFsc2UpOworfQorCitib29sIFByZWZsaWdo
dFJlcXVlc3Q6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRnJhbWUqIGZyYW1lLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlv
bnMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPGNoYXI+JiBkYXRhKQoreworICAgIG1fYWN0dWFsUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAg
bV9vcHRpb25zID0gb3B0aW9uczsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVz
dCA9IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMu
c2VjdXJpdHlPcmlnaW4uZ2V0KCksIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisKKyAgICB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSAwOworICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICBp
ZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgaWRlbnRpZmllciA9IHBh
Z2UtPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdChp
ZGVudGlmaWVyLCBkb2N1bWVudExvYWRlciwgcHJlZmxpZ2h0UmVxdWVzdCk7CisgICAgfQorICAg
IGZyYW1lLT5sb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoZG9j
dW1lbnRMb2FkZXIsIGlkZW50aWZpZXIsIHByZWZsaWdodFJlcXVlc3QsIFJlc291cmNlUmVzcG9u
c2UoKSk7CisgICAgICAgIAorICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSwgcHJlZmxpZ2h0UmVx
dWVzdCwgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6
IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAg
ICBmcmFtZS0+bG9hZGVyKCktPm5vdGlmaWVyKCktPnNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3Nh
Z2VzKGRvY3VtZW50TG9hZGVyLCBpZGVudGlmaWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIC0x
LCBlcnJvcik7CisKKyAgICBpZiAocmVxdWVzdC51cmwoKSAhPSByZXNwb25zZS51cmwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2Ny
aXB0aW9uOworICAgIGlmICghY2hlY2tSZXNwb25zZShyZXNwb25zZSwgYWNjZXNzQ29udHJvbEVy
cm9yRGVzY3JpcHRpb24pKSB7CisgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbldlYktpdEludGVybmFsLCAwLCByZXNwb25zZS51cmwoKSwgYWNjZXNzQ29udHJvbEVycm9y
RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKyAgICAKK3ZvaWQgUHJlZmxpZ2h0UmVxdWVzdDo6d2lsbFNlbmRSZXF1ZXN0KFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBpZiAocmVkaXJlY3RSZXNwb25zZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXNvdXJjZUxvYWRlci0+ZGlkRmFpbChS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJsKCks
ICJQcmVmbGlnaHQgZmFpbGVkIGR1ZSB0byByZWRpcmVjdCIpKTsKKyAgICByZXF1ZXN0ID0gUmVz
b3VyY2VSZXF1ZXN0KCk7Cit9CisKK3ZvaWQgUHJlZmxpZ2h0UmVxdWVzdDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUp
OworCisgICAgU3RyaW5nIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uOworICAgIGlmICgh
Y2hlY2tSZXNwb25zZShyZXNwb25zZSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKQor
ICAgICAgICBtX3Jlc291cmNlTG9hZGVyLT5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21h
aW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRl
c2NyaXB0aW9uKSk7Cit9CisgICAgCit2b2lkIFByZWZsaWdodFJlcXVlc3Q6OmRpZEZpbmlzaExv
YWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCit7CisgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5nKG1fcmVzb3VyY2VMb2FkZXItPmZyYW1l
TG9hZGVyKCktPmZyYW1lKCksIG1fcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKSwgZmluaXNo
VGltZSk7CisgICAgbV9yZXNvdXJjZUxvYWRlci0+cHJlZmxpZ2h0U3VjY2VzcygpOworICAgIG1f
aGFuZGxlID0gMDsKK30KKwordm9pZCBQcmVmbGlnaHRSZXF1ZXN0OjpkaWRGYWlsKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fcmVzb3VyY2VMb2Fk
ZXItPmRpZEZhaWwoZXJyb3IpOworfQorICAgIAordm9pZCBQcmVmbGlnaHRSZXF1ZXN0Ojp3YXNC
bG9ja2VkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBt
X2hhbmRsZSk7CisgICAgbV9yZXNvdXJjZUxvYWRlci0+d2FzQmxvY2tlZChoYW5kbGUpOworfQor
ICAgIAordm9pZCBQcmVmbGlnaHRSZXF1ZXN0OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUpCit7CisgICAgQVNTRVJUKGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgbV9yZXNv
dXJjZUxvYWRlci0+Y2Fubm90U2hvd1VSTChoYW5kbGUpOworfQorCitib29sIFByZWZsaWdodFJl
cXVlc3Q6OmNoZWNrUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFN0
cmluZyYgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFwYXNzZXNB
Y2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBt
X29wdGlvbnMuc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3duUHRyPENyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtPiBwcmVmbGlnaHRSZXN1bHQgPSBhZG9wdFB0cihuZXcgQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9vcHRpb25zLmFsbG93Q3JlZGVudGlh
bHMpKTsKKyAgICBpZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UsIGFjY2Vzc0Nv
bnRyb2xFcnJvckRlc2NyaXB0aW9uKQorICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxv
d3NDcm9zc09yaWdpbk1ldGhvZChtX2FjdHVhbFJlcXVlc3QuaHR0cE1ldGhvZCgpLCBhY2Nlc3ND
b250cm9sRXJyb3JEZXNjcmlwdGlvbikKKyAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxs
b3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKG1fYWN0dWFsUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCks
IGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50
cnkobV9vcHRpb25zLnNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3Qu
dXJsKCksIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJl
ZmxpZ2h0UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVm
bGlnaHRSZXF1ZXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJl
ZmxpZ2h0UmVxdWVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQcmVmbGlnaHRSZXF1ZXN0X2gKKyNkZWZpbmUgUHJlZmxpZ2h0UmVxdWVzdF9oCisKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9wdGlv
bnMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOworY2xhc3MgTmV0d29ya2lu
Z0NvbnRleHQ7CitjbGFzcyBSZXNvdXJjZUxvYWRlcjsKKworZW51bSBQcmVmbGlnaHRQb2xpY3kg
eworICAgIEJsb2NrV2l0aG91dFByZWZsaWdodCwKKyAgICBOb1ByZWZsaWdodCwKKyAgICBEb1By
ZWZsaWdodCAgICAKK307CisKK2NsYXNzIFByZWZsaWdodFJlcXVlc3QgOiBwcml2YXRlIFJlc291
cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQcmVmbGlnaHRSZXF1ZXN0KFJlc291cmNl
TG9hZGVyKik7CisgICAgCisgICAgc3RhdGljIFByZWZsaWdodFBvbGljeSBkZXRlcm1pbmVQcmVm
bGlnaHRQb2xpY3koUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkT3B0aW9ucyYs
IFJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIHN0YXJ0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlTG9hZE9wdGlvbnMmIG9wdGlvbnMpOworICAgIGJvb2wgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
TG9hZE9wdGlvbnMmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsgCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgdmlydHVhbCB2
b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2Fubm90
U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgYm9vbCBjaGVja1Jlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBTdHJpbmcmKTsKKworICAgIFJlc291cmNlTG9hZGVyKiBtX3Jl
c291cmNlTG9hZGVyOworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CisgICAg
UmVzb3VyY2VMb2FkT3B0aW9ucyBtX29wdGlvbnM7CisgICAgUmVzb3VyY2VSZXF1ZXN0IG1fYWN0
dWFsUmVxdWVzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBy
ZWZsaWdodFJlcXVlc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105093</attachid>
            <date>2011-08-24 16:44:45 -0700</date>
            <delta_ts>2011-08-25 09:49:59 -0700</delta_ts>
            <desc>Addressing levin&apos;s comments</desc>
            <filename>rlo4.txt</filename>
            <type>text/plain</type>
            <size>33327</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTM3MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY1
LDYgKzIxNjUsOCBAQAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmNwcCBcCisJU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyT3B0aW9ucy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkTm90aWZpZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90
aWZpZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkzNzI1KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg5MSw2ICs4OTEsNyBAQAogICAgIGxv
YWRlci9Qcm9ncmVzc1RyYWNrZXIuY3BwIFwKICAgICBsb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxl
ci5jcHAgXAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgXAorICAgIGxvYWRlci9SZXNv
dXJjZUxvYWRlck9wdGlvbnMuY3BwIFwgCiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVy
LmNwcCBcCiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgXAogICAgIGxvYWRl
ci9TaW5rRG9jdW1lbnQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNzQ4KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAK
KzIwMTEtMDgtMjQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBTcGxpdCBzb21lIG9mIHRoZSB2YXJpYWJsZXMgb3V0IG9mIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zCisgICAgICAgIGludG8gYSBzdXBlcmNsYXNzLCBSZXNvdXJjZUxvYWRlck9wdGlvbnMuIFVz
ZSBSZXNvdXJjZUxvYWRlck9wdGlvbnMKKyAgICAgICAgYWxsIHRoZSB3YXkgZG93biB0byBSZXNv
dXJjZUxvYWRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYzMzAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZWZyYWN0b3Igb25seS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlck9wdGlv
bnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg6
IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tOgorCiAyMDEx
LTA4LTI0ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lvbi5tb2JpPgogCiAg
ICAgICAgIFtFRkxdIEZpeCBidWlsZCB3aXRoIEVOQUJMRV9HRU9MT0NBVElPTi4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5
MzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjI0Niw2ICsyNjI0NiwxNCBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVy
XFJlc291cmNlTG9hZGVyT3B0aW9ucy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJl
c291cmNlTG9hZE5vdGlmaWVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA5MzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtNTczLDYgKzU3Myw3IEBACiAgICAgICAgICAgICAnbG9hZGVyL1Jl
c291cmNlTG9hZE5vdGlmaWVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaCcsCiAgICAgICAgICAgICAn
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aCcsCkBAIC0yNzY4LDYgKzI3NjksNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxv
YWROb3RpZmllci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwJywKKyAgICAg
ICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgnLAogICAgICAgICAgICAgJ2xv
YWRlci9TaW5rRG9jdW1lbnQuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvU2lua0RvY3VtZW50
LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDkzNzI1KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkxMSw2ICs5MTEsNyBAQAogICAgIGxvYWRlci9S
ZXNvdXJjZUxvYWROb3RpZmllci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKKyAgICBsb2FkZXIvUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmNwcAogICAgIGxvYWRlci9TaW5rRG9jdW1lbnQuY3BwCiAgICAgbG9hZGVy
L1N1YmZyYW1lTG9hZGVyLmNwcAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDkzNzI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDUwLDEyICs1NDUwLDE0IEBACiAJ
CUQwN0RFQUJBMEEzNjU1NEEwMENBMzBGOCAvKiBJbnNlcnRMaXN0Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA3REVBQjgwQTM2NTU0QTAw
Q0EzMEY4IC8qIEluc2VydExpc3RDb21tYW5kLmggKi87IH07CiAJCUQwODZGRTk4MDlENTNBQUIw
MDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMDg2RkU5NjA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFu
ZC5oICovOyB9OwogCQlEMDg2RkU5OTA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDg2RkU5
NzA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5jcHAgKi87IH07CisJCUQwQTNBNzMx
MTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQTNBNzMwMTQwNUEzOTgwMEZCOEVE
MyAvKiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEIwNTU2ODA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRl
TGlua0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovOyB9
OwogCQlEMEIwNTU2OTA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBCMDU1NjcwOUM2
NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNwcCAqLzsgfTsKIAkJRDBDRTU4Rjgx
MjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMENFNThGNjEyNUU0Q0MyMDBGM0Yx
OTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJRDBDRTU4RjkxMjVFNEND
MjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBDRTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJl
c291cmNlTG9hZFNjaGVkdWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUQwRDE0MUIyMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDBEMTQxQjAxMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAg
Ki87IH07CiAJCUQwRDE0MUIzMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRDE0
MUIxMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEMEVEMDhCMzE0MDVBRjcw
MDBBNzg1QUEgLyogUmVzb3VyY2VMb2FkZXJPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRUQwOEIyMTQwNUFGNzAwMEE3ODVBQSAvKiBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMuY3BwICovOyB9OwogCQlEMEZGMkE1RDExRjhDNDVBMDA3RTc0
RTAgLyogUGluZ0xvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBEMEZGMkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi87
IH07CiAJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEZGMkE1QzExRjhDNDVBMDA3
RTc0RTAgLyogUGluZ0xvYWRlci5oICovOyB9OwogCQlEMjNDQTU1RDBBQjBFQUFFMDA1MTA4QTUg
LyogSlNSYW5nZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDIzQ0E1NUMwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24u
aCAqLzsgfTsKQEAgLTEyMTg5LDEyICsxMjE5MSwxNCBAQAogCQlEMDdERUFCODBBMzY1NTRBMDBD
QTMwRjggLyogSW5zZXJ0TGlzdENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc2VydExpc3RDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwODZGRTk2MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rQ29tbWFuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwQTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAv
KiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVhdGVMaW5rQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlu
a0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3JlYXRl
TGlua0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMENFNThGNjEy
NUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQ0U1OEY3MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRDE0
MUIwMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBEMTQxQjExMkIyQkY1MjAwRTM5NjIwIC8q
IENhY2hlZFJlc291cmNlUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RDBFRDA4QjIxNDA1QUY3MDAwQTc4NUFBIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck9wdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEZGMkE1QjExRjhDNDVBMDA3RTc0
RTAgLyogUGluZ0xvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQaW5nTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBGRjJBNUMx
MUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGluZ0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjND
QTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24uaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBSYW5nZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xODk2Niw2ICsxODk3MCw4IEBACiAJCQkJMUEyQTY4MjIwQjVCRURFNzAwMDJBNDgwIC8q
IFByb2dyZXNzVHJhY2tlci5oICovLAogCQkJCTkzRTIyN0RFMEFGNTg5QUQwMEQ0ODMyNCAvKiBS
ZXNvdXJjZUxvYWRlci5jcHAgKi8sCiAJCQkJNjU2RDM3MjcwQURCQTVERTAwQTQ1NTREIC8qIFJl
c291cmNlTG9hZGVyLmggKi8sCisJCQkJRDBFRDA4QjIxNDA1QUY3MDAwQTc4NUFBIC8qIFJlc291
cmNlTG9hZGVyT3B0aW9ucy5jcHAgKi8sCisJCQkJRDBBM0E3MzAxNDA1QTM5ODAwRkI4RUQzIC8q
IFJlc291cmNlTG9hZGVyT3B0aW9ucy5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5
MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUxMDg4M0I3QzAw
NUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVFNEND
MjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yMzQwNSw2ICsy
MzQxMSw3IEBACiAJCQkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlERjlBRkQ3MjEzRkMzMUQ4MDAx
NUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlEMEEzQTczMTE0MDVBMzk4MDBGQjhFRDMgLyogUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI2MjEwLDYgKzI2MjE3LDcgQEAK
IAkJCQlGRDIzQTEyNTEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExNDE0QjUxM0EwRjA1MDAwMTk5OTZDIC8q
IFdlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERjlBRkQ3MzEz
RkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBp
biBTb3VyY2VzICovLAorCQkJCUQwRUQwOEIzMTQwNUFGNzAwMEE3ODVBQSAvKiBSZXNvdXJjZUxv
YWRlck9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRlck9wdGlvbnNfaAorI2RlZmluZSBSZXNvdXJj
ZUxvYWRlck9wdGlvbnNfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdHJ1Y3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zIHsKKyAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMoKSA6IHNlbmRM
b2FkQ2FsbGJhY2tzKGZhbHNlKSwgc25pZmZDb250ZW50KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFs
cyhmYWxzZSksIHNob3VsZEJ1ZmZlckRhdGEodHJ1ZSkgeyB9CisgICAgYm9vbCBzZW5kTG9hZENh
bGxiYWNrczsKKyAgICBib29sIHNuaWZmQ29udGVudDsKKyAgICBib29sIGFsbG93Q3JlZGVudGlh
bHM7IC8vIFdoZXRoZXIgSFRUUCBjcmVkZW50aWFscyBhbmQgY29va2llcyBhcmUgc2VudCB3aXRo
IHRoZSByZXF1ZXN0LgorICAgIGJvb2wgc2hvdWxkQnVmZmVyRGF0YTsKK307CisgICAgCitjb25z
dCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIGRlZmF1bHRSZXNvdXJjZU9wdGlvbnMoKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZSAgICAKKworI2VuZGlmIC8vIFJlc291cmNlTG9hZGVyT3B0aW9u
c19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJN
YWMubW0JKHJldmlzaW9uIDkzNzI1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9SZXNv
dXJjZUxvYWRlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogCiBOU0Nh
Y2hlZFVSTFJlc3BvbnNlKiBSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUmVzb3Vy
Y2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKIHsKLSAgICBpZiAoIW1f
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKKyAgICBpZiAoIW1fb3B0aW9ucy5zZW5kTG9hZENh
bGxiYWNrcykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPmNs
aWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCks
IHJlc3BvbnNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiA5MzcyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjMsOSArMTIzLDExIEBACiAKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBw
cmlvcml0eSA9IHJlc291cmNlLT5sb2FkUHJpb3JpdHkoKTsKICAgICByZXNvdXJjZVJlcXVlc3Qu
c2V0UHJpb3JpdHkocHJpb3JpdHkpOworICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25z
ID0gZGVmYXVsdFJlc291cmNlT3B0aW9ucygpOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFj
a3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwogCiAgICAgUmVmUHRyPFN1YnJlc291cmNl
TG9hZGVyPiBsb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNv
dXJjZUxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPmZyYW1lKCksCi0gICAg
ICAgIHJlcXVlc3QuZ2V0KCksIHJlc291cmNlUmVxdWVzdCwgcHJpb3JpdHksIHNlY3VyaXR5Q2hl
Y2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgICAgICByZXF1ZXN0LmdldCgpLCBy
ZXNvdXJjZVJlcXVlc3QsIHByaW9yaXR5LCBzZWN1cml0eUNoZWNrLCBvcHRpb25zKTsKICAgICBp
ZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpIHsKICAgICAgICAg
Ly8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZyYW1lcyB3ZXJlIHdhaXRpbmcg
Zm9yIHRoaXMgcmV2YWxpZGF0aW9uPwogICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2Fu
bm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEo
KS5kYXRhKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCShyZXZpc2lvbiA5MzcyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDE0ICsyOSwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
LSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcihGcmFt
ZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgdHJ1ZSwgdHJ1ZSkKKyAgICA6IFJlc291cmNlTG9hZGVy
KGZyYW1lLCBkZWZhdWx0UmVzb3VyY2VPcHRpb25zKCkpCiAgICAgLCBtX2NsaWVudChjbGllbnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAkocmV2aXNpb24gOTM3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDkgQEAK
ICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0
eUNoZWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZEJ1ZmZlckRhdGEpCitQYXNz
UmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxl
U3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0
eSBwcmlvcml0eSwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCBjbGllbnQsIHJl
cXVlc3QsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENv
bnRlbnRTbmlmZiwgc2hvdWxkQnVmZmVyRGF0YSk7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCBjbGllbnQsIHJl
cXVlc3QsIHNlY3VyaXR5Q2hlY2ssIG9wdGlvbnMpOwogICAgIGlmIChsb2FkZXIpCiAgICAgICAg
IHNjaGVkdWxlTG9hZChsb2FkZXIuZ2V0KCksIHByaW9yaXR5KTsKICAgICByZXR1cm4gbG9hZGVy
LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNw
cAkocmV2aXNpb24gOTM3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgcmV0dXJuIDA7CiB9
CiAKLVJlc291cmNlTG9hZGVyOjpSZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUsIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCitSZXNvdXJj
ZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBSZXNvdXJjZUxvYWRlck9wdGlv
bnMgb3B0aW9ucykKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX2RvY3VtZW50TG9hZGVy
KGZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkKICAgICAsIG1faWRlbnRp
ZmllcigwKQpAQCAtNjYsMTAgKzY2LDggQEAKICAgICAsIG1fY2FsbGVkV2lsbENhbmNlbChmYWxz
ZSkKICAgICAsIG1fY2FuY2VsbGVkKGZhbHNlKQogICAgICwgbV9jYWxsZWREaWRGaW5pc2hMb2Fk
KGZhbHNlKQotICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MpCi0gICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25p
ZmYpCi0gICAgLCBtX3Nob3VsZEJ1ZmZlckRhdGEodHJ1ZSkKICAgICAsIG1fZGVmZXJzTG9hZGlu
ZyhmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCisgICAgLCBtX29wdGlvbnMob3B0aW9u
cykKIHsKIH0KIApAQCAtMTYyLDcgKzE2MCw3IEBACiAgICAgfQogCiAgICAgaWYgKCFtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlKQotICAgICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVh
dGUobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCksIG1fcmVxdWVzdCwgdGhp
cywgbV9kZWZlcnNMb2FkaW5nLCBtX3Nob3VsZENvbnRlbnRTbmlmZik7CisgICAgICAgIG1faGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2lu
Z0NvbnRleHQoKSwgbV9yZXF1ZXN0LCB0aGlzLCBtX2RlZmVyc0xvYWRpbmcsIG1fb3B0aW9ucy5z
bmlmZkNvbnRlbnQpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzKQpAQCAtMTg2LDE3ICsxODQsMTcgQEAKIAogdm9pZCBSZXNvdXJjZUxvYWRl
cjo6c2V0U2hvdWxkQnVmZmVyRGF0YShib29sIHNob3VsZEJ1ZmZlckRhdGEpCiB7IAotICAgIG1f
c2hvdWxkQnVmZmVyRGF0YSA9IHNob3VsZEJ1ZmZlckRhdGE7IAorICAgIG1fb3B0aW9ucy5zaG91
bGRCdWZmZXJEYXRhID0gc2hvdWxkQnVmZmVyRGF0YTsgCiAKICAgICAvLyBSZXNldCBhbnkgYWxy
ZWFkeSBidWZmZXJlZCBkYXRhCi0gICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisgICAgaWYg
KCFzaG91bGRCdWZmZXJEYXRhKQogICAgICAgICBtX3Jlc291cmNlRGF0YSA9IDA7CiB9CiAgICAg
CiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCwgYm9vbCBhbGxBdE9uY2UpCiB7Ci0gICAgaWYgKCFtX3Nob3VsZEJ1ZmZlckRhdGEpCisg
ICAgaWYgKCFtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGFsbEF0T25jZSkgewpAQCAtMjM2LDcgKzIzNCw3IEBACiAKICAgICBBU1NFUlQoIW1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUpOwogCi0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcykgeworICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpIHsKICAgICAgICAg
aWYgKCFtX2lkZW50aWZpZXIpIHsKICAgICAgICAgICAgIG1faWRlbnRpZmllciA9IG1fZnJhbWUt
PnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgICAgICAg
ICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJl
cXVlc3QobV9pZGVudGlmaWVyLCBkb2N1bWVudExvYWRlcigpLCByZXF1ZXN0KTsKQEAgLTI3OSw3
ICsyNzcsNyBAQAogICAgIGlmIChGb3JtRGF0YSogZGF0YSA9IG1fcmVxdWVzdC5odHRwQm9keSgp
KQogICAgICAgICBkYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CiAgICAgICAg
IAotICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCisgICAgaWYgKG1fb3B0aW9u
cy5zZW5kTG9hZENhbGxiYWNrcykKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIG1fcmVzcG9uc2UpOwogfQogCkBAIC0zMDUsMTMgKzMw
MywxMyBAQAogICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQgYSByZXNvdXJjZSB3aXRoIG1vcmUgdGhh
biAyQiBieXRlcywgdGhpcyBjb2RlIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4KICAgICAvLyBI
b3dldmVyLCB3aXRoIHRvZGF5J3MgY29tcHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhp
cyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2UuCiAgICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0
aCBhIGdpYW50IGxvY2FsIGZpbGUuCi0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cyAmJiBtX2ZyYW1lKQorICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgJiYgbV9m
cmFtZSkKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkUmVjZWl2ZURhdGEo
dGhpcywgZGF0YSwgbGVuZ3RoLCBzdGF0aWNfY2FzdDxpbnQ+KGVuY29kZWREYXRhTGVuZ3RoKSk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTdG9wQnVmZmVyaW5nRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQor
ICAgIGlmICghbV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEFTU0VSVCghbV9yZXNvdXJjZURhdGEpOwpAQCAtMzM5LDcgKzMzNyw3IEBACiAgICAgaWYg
KG1fY2FsbGVkRGlkRmluaXNoTG9hZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY2FsbGVkRGlk
RmluaXNoTG9hZCA9IHRydWU7Ci0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykK
KyAgICBpZiAobV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzKQogICAgICAgICBmcmFtZUxvYWRl
cigpLT5ub3RpZmllcigpLT5kaWRGaW5pc2hMb2FkKHRoaXMsIGZpbmlzaFRpbWUpOwogfQogCkBA
IC0zNTYsNyArMzU0LDcgQEAKICAgICBpZiAoRm9ybURhdGEqIGRhdGEgPSBtX3JlcXVlc3QuaHR0
cEJvZHkoKSkKICAgICAgICAgZGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwog
Ci0gICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiAhbV9jYWxsZWREaWRGaW5p
c2hMb2FkKQorICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgJiYgIW1fY2FsbGVk
RGlkRmluaXNoTG9hZCkKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkRmFp
bFRvTG9hZCh0aGlzLCBlcnJvcik7CiAKICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CkBAIC00MDQs
NyArNDAyLDcgQEAKICAgICAgICAgICAgIG1faGFuZGxlID0gMDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgbV9pZGVudGlmaWVyICYmICFt
X2NhbGxlZERpZEZpbmlzaExvYWQpCisgICAgICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3MgJiYgbV9pZGVudGlmaWVyICYmICFtX2NhbGxlZERpZEZpbmlzaExvYWQpCiAgICAgICAg
ICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaWRGYWlsVG9Mb2FkKHRoaXMsIG5vbk51
bGxFcnJvcik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291
cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gOTM3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBNYWluUmVzb3VyY2VMb2FkZXI6Ok1haW5SZXNvdXJj
ZUxvYWRlcihGcmFtZSogZnJhbWUpCi0gICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgdHJ1ZSwg
dHJ1ZSkKKyAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCBkZWZhdWx0UmVzb3VyY2VPcHRpb25z
KCkpCiAgICAgLCBtX2RhdGFMb2FkVGltZXIodGhpcywgJk1haW5SZXNvdXJjZUxvYWRlcjo6aGFu
ZGxlRGF0YUxvYWROb3cpCiAgICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KGZhbHNlKQog
ICAgICwgbV93YWl0aW5nRm9yQ29udGVudFBvbGljeShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDkzNzI1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9w
dGlvbnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC01MCw3ICs1MSw3IEBACiBwdWJsaWM6
CiAgICAgZnJpZW5kIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCk7CiAKLSAgICBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdywg
U2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlLCBib29s
IHNob3VsZEJ1ZmZlckRhdGEgPSB0cnVlKTsKKyAgICBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNv
dXJjZUxvYWRQcmlvcml0eUxvdywgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVj
aywgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiA9IGRlZmF1bHRSZXNvdXJjZU9wdGlvbnMo
KSk7CiAgICAgUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQ
bHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2b2lkIGFkZE1haW5SZXNvdXJjZUxvYWQo
UmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDkzNzI1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgUmVzb3VyY2VMb2FkZXJfaAogCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCiAKQEAgLTEzNCwxNCArMTM1LDE0IEBACiAKICAgICAgICAgY29uc3QgS1VSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0LnVybCgpOyB9IAogICAgICAgICBSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KLSAgICAgICAg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzOyB9CisgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrczsgfQogCiAg
ICAgICAgIGJvb2wgcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlOyB9CiAKICAgICAgICAgdm9pZCBzZXRTaG91bGRCdWZmZXJEYXRhKGJv
b2wgc2hvdWxkQnVmZmVyRGF0YSk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFJlc291cmNl
TG9hZGVyKEZyYW1lKiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZik7CisgICAgICAgIFJlc291cmNlTG9hZGVyKEZyYW1lKiwgUmVzb3VyY2VM
b2FkZXJPcHRpb25zKTsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBhY2Nlc3Mg
dG8gcmVxdWVzdCgpCkBAIC0xNzcsMTEgKzE3OCw5IEBACiAgICAgICAgIGJvb2wgbV9jYW5jZWxs
ZWQ7CiAgICAgICAgIGJvb2wgbV9jYWxsZWREaWRGaW5pc2hMb2FkOwogCi0gICAgICAgIGJvb2wg
bV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgICAgICBib29sIG1fc2hvdWxkQ29udGVu
dFNuaWZmOwotICAgICAgICBib29sIG1fc2hvdWxkQnVmZmVyRGF0YTsKICAgICAgICAgYm9vbCBt
X2RlZmVyc0xvYWRpbmc7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX2RlZmVycmVkUmVxdWVz
dDsKKyAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICB9OwogCiBp
bmxpbmUgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgUmVzb3VyY2VMb2FkZXI6OnJlc3BvbnNlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAkocmV2
aXNpb24gOTM3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2Fk
ZXJfaAogI2RlZmluZSBUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTYyLDE0ICs2
MywxMCBAQAogICAgICAgICBQcmV2ZW50UHJlZmxpZ2h0CiAgICAgfTsKIAotICAgIHN0cnVjdCBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB7Ci0gICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25z
KCkgOiBzZW5kTG9hZENhbGxiYWNrcyhmYWxzZSksIHNuaWZmQ29udGVudChmYWxzZSksIGFsbG93
Q3JlZGVudGlhbHMoZmFsc2UpLCBwcmVmbGlnaHRQb2xpY3koQ29uc2lkZXJQcmVmbGlnaHQpLCBj
cm9zc09yaWdpblJlcXVlc3RQb2xpY3koRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMpLCBzaG91bGRC
dWZmZXJEYXRhKHRydWUpIHsgfQotICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOwotICAg
ICAgICBib29sIHNuaWZmQ29udGVudDsKLSAgICAgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAg
Ly8gV2hldGhlciBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIGFyZSBzZW50IHdpdGggdGhl
IHJlcXVlc3QuCisgICAgc3RydWN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zIDogcHVibGljIFJl
c291cmNlTG9hZGVyT3B0aW9ucyB7CisgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zKCkg
OiBSZXNvdXJjZUxvYWRlck9wdGlvbnMoKSwgcHJlZmxpZ2h0UG9saWN5KENvbnNpZGVyUHJlZmxp
Z2h0KSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSB7
IH0KICAgICAgICAgUHJlZmxpZ2h0UG9saWN5IHByZWZsaWdodFBvbGljeTsgLy8gSWYgQWNjZXNz
Q29udHJvbCBpcyB1c2VkLCBob3cgdG8gZGV0ZXJtaW5lIGlmIGEgcHJlZmxpZ2h0IGlzIG5lZWRl
ZC4KICAgICAgICAgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBv
bGljeTsKLSAgICAgICAgYm9vbCBzaG91bGRCdWZmZXJEYXRhOwogICAgICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gOTM3MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw4ICs0NCw4IEBACiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgc3Vi
cmVzb3VyY2VMb2FkZXJDb3VudGVyKCJTdWJyZXNvdXJjZUxvYWRlciIpOwogI2VuZGlmCiAKLVN1
YnJlc291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUsIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYpCi0gICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKQorU3VicmVzb3VyY2VM
b2FkZXI6OlN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAg
IDogUmVzb3VyY2VMb2FkZXIoZnJhbWUsIG9wdGlvbnMpCiAgICAgLCBtX2NsaWVudChjbGllbnQp
CiAgICAgLCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KGZhbHNlKQogewpAQCAtNjEsNyArNjEs
NyBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291
cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCog
Y2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xp
Y3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRhKQorUGFzc1JlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC05OSw4ICs5OSw3IEBACiAKICAgICBmbC0+YWRkRXh0cmFGaWVsZHNUb1N1YnJlc291
cmNlUmVxdWVzdChuZXdSZXF1ZXN0KTsKIAotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
c3VibG9hZGVyKGFkb3B0UmVmKG5ldyBTdWJyZXNvdXJjZUxvYWRlcihmcmFtZSwgY2xpZW50LCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYpKSk7Ci0gICAgc3Vi
bG9hZGVyLT5zZXRTaG91bGRCdWZmZXJEYXRhKHNob3VsZEJ1ZmZlckRhdGEpOworICAgIFJlZlB0
cjxTdWJyZXNvdXJjZUxvYWRlcj4gc3VibG9hZGVyKGFkb3B0UmVmKG5ldyBTdWJyZXNvdXJjZUxv
YWRlcihmcmFtZSwgY2xpZW50LCBvcHRpb25zKSkpOwogICAgIHN1YmxvYWRlci0+ZG9jdW1lbnRM
b2FkZXIoKS0+YWRkU3VicmVzb3VyY2VMb2FkZXIoc3VibG9hZGVyLmdldCgpKTsKICAgICBpZiAo
IXN1YmxvYWRlci0+aW5pdChuZXdSZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlck9wdGlvbnMu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIGRlZmF1bHRSZXNvdXJjZU9wdGlvbnMo
KQoreworICAgIHN0YXRpYyBib29sIHNfb3B0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAg
c3RhdGljIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIGlmIChzX29wdGlvbnNJ
bml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIG9wdGlvbnM7CisgICAgCisgICAgc19vcHRpb25z
SW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVl
OworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gdHJ1ZTsKKyAgICBvcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMgPSB0cnVlOworICAgIHJldHVybiBvcHRpb25zOworfQorICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDkzNzI1KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0MiwxMSArMzQyLDE0IEBACiAgICAgQVNTRVJUKG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgcmVx
dWVzdFVSTC5wYXNzKCkuaXNFbXB0eSgpKTsKIAogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAg
IC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHBy
ZWZsaWdodCByZXF1ZXN0LgotICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzID0gbV9vcHRp
b25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2FjdHVhbFJlcXVlc3Q7Ci0gICAgICAgIGJvb2wg
c25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudCAmJiAhbV9hY3R1YWxSZXF1ZXN0
OwotICAgICAgICAvLyBLZWVwIGJ1ZmZlcmluZyB0aGUgZGF0YSBmb3IgdGhlIHByZWZsaWdodCBy
ZXF1ZXN0LgotICAgICAgICBib29sIHNob3VsZEJ1ZmZlckRhdGEgPSBtX29wdGlvbnMuc2hvdWxk
QnVmZmVyRGF0YSB8fCBtX2FjdHVhbFJlcXVlc3Q7CisgICAgICAgIFRocmVhZGFibGVMb2FkZXJP
cHRpb25zIG9wdGlvbnMgPSBtX29wdGlvbnM7CisgICAgICAgIGlmIChtX2FjdHVhbFJlcXVlc3Qp
IHsKKyAgICAgICAgICAgIC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxi
YWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgorICAgICAgICAgICAgb3B0aW9ucy5zZW5k
TG9hZENhbGxiYWNrcyA9IGZhbHNlOworICAgICAgICAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgIC8vIEtlZXAgYnVmZmVyaW5nIHRoZSBkYXRhIGZvciB0aGUg
cHJlZmxpZ2h0IHJlcXVlc3QuCisgICAgICAgICAgICBvcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEg
PSB0cnVlOworICAgICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAo
bV9hY3R1YWxSZXF1ZXN0KSB7CkBAIC0zNjAsOCArMzYzLDcgQEAKIAogICAgICAgICAvLyBDbGVh
ciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVy
OjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KICAgICAgICAgbV9sb2FkZXIg
PSAwOwotICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVs
ZVN1YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywgc2VuZExvYWRDYWxsYmFja3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNuaWZmQ29udGVudCwgc2hvdWxkQnVmZmVyRGF0YSk7CisgICAgICAgIG1f
bG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2Fk
KG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5
TWVkaXVtLCBzZWN1cml0eUNoZWNrLCBvcHRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCShy
ZXZpc2lvbiA5MzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTIgQEAKICAgICAKICAgICBjbGFzcyBT
dWJyZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUxvYWRlciB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gY3JlYXRlKEZyYW1l
KiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1
cml0eUNoZWNrUG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUsIGJvb2wgc2hv
dWxkQnVmZmVyRGF0YSA9IHRydWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gY3JlYXRlKEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNrUG9saWN5LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKTsKIAogICAgICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9
IDA7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwg
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Ms
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKKyAgICAgICAgU3VicmVzb3VyY2VMb2FkZXIoRnJh
bWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9u
cyYpOwogICAgICAgICB2aXJ0dWFsIH5TdWJyZXNvdXJjZUxvYWRlcigpOwogICAgICAgICAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsK
</data>
<flag name="review"
          id="101147"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="101148"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105202</attachid>
            <date>2011-08-25 09:49:59 -0700</date>
            <delta_ts>2011-08-25 12:55:21 -0700</delta_ts>
            <desc>2 constructors, allowCredentials back to ThreadableLoaderOptions</desc>
            <filename>rlo5.txt</filename>
            <type>text/plain</type>
            <size>26757</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTM3OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY1
LDYgKzIxNjUsNyBAQAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWROb3RpZmllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWROb3RpZmllci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Mzc5MikKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTA4LTI1
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BsaXQgc29t
ZSBvZiB0aGUgdmFyaWFibGVzIG91dCBvZiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucworICAgICAg
ICBpbnRvIGEgc3VwZXJjbGFzcywgUmVzb3VyY2VMb2FkZXJPcHRpb25zLiBVc2UgUmVzb3VyY2VM
b2FkZXJPcHRpb25zCisgICAgICAgIGFsbCB0aGUgd2F5IGRvd24gdG8gUmVzb3VyY2VMb2FkZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzMwMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgcmVmcmFjdG9yIG9ubHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgICog
bG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL05ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6Cisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg6
IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tOgorCiAyMDEx
LTA4LTI1ICBKb2huIEJhdGVzICA8amJhdGVzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBMZWFraW5nIFNrQml0bWFwcyBmb3IgYmFja2dyb3VuZCBpbWFnZXMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5Mzc5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjI0Niw2ICsyNjI0NiwxMCBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIgogCQkJCT4K
IAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDkzNzkwKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01NzMsNiArNTczLDcg
QEAKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oJywKICAgICAgICAgICAgICdsb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZGVy
T3B0aW9ucy5oJywKICAgICAgICAgICAgICdsb2FkZXIvU3ViZnJhbWVMb2FkZXIuaCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oJywKQEAgLTI3NjgsNiArMjc2OSw3IEBACiAgICAg
ICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcCcsCiAgICAgICAgICAgICAn
bG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9SZXNvdXJjZUxvYWRlck9w
dGlvbnMuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9TaW5rRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5Mzc5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ1
MCw2ICs1NDUwLDcgQEAKIAkJRDA3REVBQkEwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RD
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MDdERUFCODBBMzY1NTRBMDBDQTMwRjggLyogSW5zZXJ0TGlzdENvbW1hbmQuaCAqLzsgfTsKIAkJ
RDA4NkZFOTgwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwODZGRTk2MDlENTNBQUIwMDVCQzc0
RCAvKiBVbmxpbmtDb21tYW5kLmggKi87IH07CiAJCUQwODZGRTk5MDlENTNBQUIwMDVCQzc0RCAv
KiBVbmxpbmtDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQwODZGRTk3MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmNwcCAq
LzsgfTsKKwkJRDBBM0E3MzExNDA1QTM5ODAwRkI4RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBBM0E3
MzAxNDA1QTM5ODAwRkI4RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwQjA1NTY4MDlDNjcwMDEw
MDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxp
bmtDb21tYW5kLmggKi87IH07CiAJCUQwQjA1NTY5MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVM
aW5rQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICov
OyB9OwogCQlEMENFNThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQ0U1
OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovOyB9OwpA
QCAtMTIxODksNiArMTIxOTAsNyBAQAogCQlEMDdERUFCODBBMzY1NTRBMDBDQTMwRjggLyogSW5z
ZXJ0TGlzdENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2Vy
dExpc3RDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODZGRTk2MDlE
NTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVubGlua0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQwQTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxv
YWRlck9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQjA1NTY2MDlD
NjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDcmVhdGVMaW5rQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3JlYXRlTGlua0NvbW1hbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMENFNThGNjEyNUU0Q0MyMDBGM0Yx
OTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODk2Niw2ICsxODk2OCw3IEBACiAJCQkJMUEyQTY4MjIwQjVCRURFNzAw
MDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5oICovLAogCQkJCTkzRTIyN0RFMEFGNTg5QUQwMEQ0
ODMyNCAvKiBSZXNvdXJjZUxvYWRlci5jcHAgKi8sCiAJCQkJNjU2RDM3MjcwQURCQTVERTAwQTQ1
NTREIC8qIFJlc291cmNlTG9hZGVyLmggKi8sCisJCQkJRDBBM0E3MzAxNDA1QTM5ODAwRkI4RUQz
IC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUxMDg4M0I3
QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVF
NENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yMzQwNSw2
ICsyMzQwOCw3IEBACiAJCQkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlERjlBRkQ3MjEzRkMzMUQ4
MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRh
aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlEMEEzQTczMTE0MDVBMzk4MDBGQjhFRDMgLyogUmVz
b3VyY2VMb2FkZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlTG9hZGVyT3B0aW9uc19oCisjZGVmaW5lIFJl
c291cmNlTG9hZGVyT3B0aW9uc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0cnVj
dCBSZXNvdXJjZUxvYWRlck9wdGlvbnMgeworICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucygpIDog
c2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBzaG91bGRCdWZm
ZXJEYXRhKHRydWUpIHsgfQorICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyhib29sIHNlbmRMb2Fk
Q2FsbGJhY2tzQXJnLCBib29sIHNuaWZmQ29udGVudEFyZywgYm9vbCBzaG91bGRCdWZmZXJEYXRh
QXJnKSA6IHNlbmRMb2FkQ2FsbGJhY2tzKHNlbmRMb2FkQ2FsbGJhY2tzQXJnKSwgc25pZmZDb250
ZW50KHNuaWZmQ29udGVudEFyZyksIHNob3VsZEJ1ZmZlckRhdGEoc2hvdWxkQnVmZmVyRGF0YUFy
ZykgeyB9CisgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrczsKKyAgICBib29sIHNuaWZmQ29udGVu
dDsKKyAgICBib29sIHNob3VsZEJ1ZmZlckRhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlICAgIAorCisjZW5kaWYgLy8gUmVzb3VyY2VMb2FkZXJPcHRpb25zX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQkocmV2aXNpb24g
OTM3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBACiAKIE5TQ2FjaGVkVVJMUmVzcG9uc2Uq
IFJlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIE5TQ2Fj
aGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKQogewotICAgIGlmICghbV9zZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKQorICAgIGlmICghbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCktPndpbGxDYWNo
ZVJlc3BvbnNlKGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcmVzcG9uc2UpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDkzNzkwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3
ICsxMjUsNyBAQAogICAgIHJlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShwcmlvcml0eSk7CiAK
ICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IHJlc291cmNlTG9hZFNjaGVk
dWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKSwKLSAgICAgICAgcmVxdWVzdC5nZXQoKSwgcmVzb3VyY2VSZXF1ZXN0
LCBwcmlvcml0eSwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7Cisg
ICAgICAgIHJlcXVlc3QuZ2V0KCksIHJlc291cmNlUmVxdWVzdCwgcHJpb3JpdHksIHNlY3VyaXR5
Q2hlY2ssIFJlc291cmNlTG9hZGVyT3B0aW9ucyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCB0
cnVlLCB0cnVlKSk7CiAgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5yZWFjaGVkVGVybWluYWxT
dGF0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291cmNlcyBpbiBvdGhlciBm
cmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8KICAgICAgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5nICclcyciLCByZXNvdXJjZS0+dXJs
KCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAkocmV2aXNpb24gOTM3
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgogCisjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6TmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIoRnJhbWUqIGZyYW1lLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNs
aWVudCogY2xpZW50KQotICAgIDogUmVzb3VyY2VMb2FkZXIoZnJhbWUsIHRydWUsIHRydWUpCisg
ICAgOiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKHRydWUsIHRy
dWUsIHRydWUpKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogewogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDkz
NzkwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDEwICs4NSw5IEBACiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0
cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJl
c291cmNlTG9hZChGcmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJp
b3JpdHksIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRhKQorUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRl
cj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSog
ZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIFNlY3VyaXR5Q2hl
Y2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQogewotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3Vy
Y2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZEJ1ZmZl
ckRhdGEpOworICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3Vy
Y2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBv
cHRpb25zKTsKICAgICBpZiAobG9hZGVyKQogICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdl
dCgpLCBwcmlvcml0eSk7CiAgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDkzNzkwKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1SZXNvdXJjZUxvYWRlcjo6UmVz
b3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Ms
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQorUmVzb3VyY2VMb2FkZXI6OlJlc291cmNlTG9hZGVy
KEZyYW1lKiBmcmFtZSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMpCiAgICAgOiBtX2Zy
YW1lKGZyYW1lKQogICAgICwgbV9kb2N1bWVudExvYWRlcihmcmFtZS0+bG9hZGVyKCktPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgLCBtX2lkZW50aWZpZXIoMCkKQEAgLTY2LDEwICs2Niw4
IEBACiAgICAgLCBtX2NhbGxlZFdpbGxDYW5jZWwoZmFsc2UpCiAgICAgLCBtX2NhbmNlbGxlZChm
YWxzZSkKICAgICAsIG1fY2FsbGVkRGlkRmluaXNoTG9hZChmYWxzZSkKLSAgICAsIG1fc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQotICAgICwgbV9z
aG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICwgbV9zaG91bGRCdWZm
ZXJEYXRhKHRydWUpCiAgICAgLCBtX2RlZmVyc0xvYWRpbmcoZnJhbWUtPnBhZ2UoKS0+ZGVmZXJz
TG9hZGluZygpKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiB7CiB9CiAKQEAgLTE2Miw3ICsx
NjAsNyBAQAogICAgIH0KIAogICAgIGlmICghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKLSAgICAg
ICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fZnJhbWUtPmxvYWRlcigpLT5u
ZXR3b3JraW5nQ29udGV4dCgpLCBtX3JlcXVlc3QsIHRoaXMsIG1fZGVmZXJzTG9hZGluZywgbV9z
aG91bGRDb250ZW50U25pZmYpOworICAgICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpj
cmVhdGUobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCksIG1fcmVxdWVzdCwg
dGhpcywgbV9kZWZlcnNMb2FkaW5nLCBtX29wdGlvbnMuc25pZmZDb250ZW50KTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4Niwx
NyArMTg0LDE3IEBACiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnNldFNob3VsZEJ1ZmZlckRhdGEo
Ym9vbCBzaG91bGRCdWZmZXJEYXRhKQogeyAKLSAgICBtX3Nob3VsZEJ1ZmZlckRhdGEgPSBzaG91
bGRCdWZmZXJEYXRhOyAKKyAgICBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9IHNob3VsZEJ1
ZmZlckRhdGE7IAogCiAgICAgLy8gUmVzZXQgYW55IGFscmVhZHkgYnVmZmVyZWQgZGF0YQotICAg
IGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgIGlmICghc2hvdWxkQnVmZmVyRGF0YSkKICAg
ICAgICAgbV9yZXNvdXJjZURhdGEgPSAwOwogfQogICAgIAogCiB2b2lkIFJlc291cmNlTG9hZGVy
OjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGJvb2wgYWxsQXRPbmNlKQog
ewotICAgIGlmICghbV9zaG91bGRCdWZmZXJEYXRhKQorICAgIGlmICghbV9vcHRpb25zLnNob3Vs
ZEJ1ZmZlckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhbGxBdE9uY2UpIHsKQEAg
LTIzNiw3ICsyMzQsNyBAQAogCiAgICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsK
IAotICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsKKyAgICBpZiAobV9vcHRp
b25zLnNlbmRMb2FkQ2FsbGJhY2tzKSB7CiAgICAgICAgIGlmICghbV9pZGVudGlmaWVyKSB7CiAg
ICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmNy
ZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlm
aWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KG1faWRlbnRpZmllciwgZG9j
dW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CkBAIC0yNzksNyArMjc3LDcgQEAKICAgICBpZiAoRm9y
bURhdGEqIGRhdGEgPSBtX3JlcXVlc3QuaHR0cEJvZHkoKSkKICAgICAgICAgZGF0YS0+cmVtb3Zl
R2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwogICAgICAgICAKLSAgICBpZiAobV9zZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKQorICAgIGlmIChtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MpCiAg
ICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlz
LCBtX3Jlc3BvbnNlKTsKIH0KIApAQCAtMzA1LDEzICszMDMsMTMgQEAKICAgICAvLyBGSVhNRTog
SWYgd2UgZ2V0IGEgcmVzb3VyY2Ugd2l0aCBtb3JlIHRoYW4gMkIgYnl0ZXMsIHRoaXMgY29kZSB3
b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgLy8gSG93ZXZlciwgd2l0aCB0b2RheSdzIGNv
bXB1dGVycyBhbmQgbmV0d29ya2luZyBzcGVlZHMsIHRoaXMgd29uJ3QgaGFwcGVuIGluIHByYWN0
aWNlLgogICAgIC8vIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggYSBnaWFudCBsb2NhbCBmaWxlLgot
ICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgbV9mcmFtZSkKKyAgICBpZiAo
bV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmIG1fZnJhbWUpCiAgICAgICAgIGZyYW1lTG9h
ZGVyKCktPm5vdGlmaWVyKCktPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCwgc3Rh
dGljX2Nhc3Q8aW50PihlbmNvZGVkRGF0YUxlbmd0aCkpOwogfQogCiB2b2lkIFJlc291cmNlTG9h
ZGVyOjp3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKLSAgICBpZiAoIW1fc2hvdWxkQnVmZmVyRGF0YSkKKyAgICBpZiAoIW1fb3B0aW9ucy5zaG91
bGRCdWZmZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoIW1fcmVzb3VyY2VE
YXRhKTsKQEAgLTMzOSw3ICszMzcsNyBAQAogICAgIGlmIChtX2NhbGxlZERpZEZpbmlzaExvYWQp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2NhbGxlZERpZEZpbmlzaExvYWQgPSB0cnVlOwotICAg
IGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCisgICAgaWYgKG1fb3B0aW9ucy5zZW5k
TG9hZENhbGxiYWNrcykKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkRmlu
aXNoTG9hZCh0aGlzLCBmaW5pc2hUaW1lKTsKIH0KIApAQCAtMzU2LDcgKzM1NCw3IEBACiAgICAg
aWYgKEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkpCiAgICAgICAgIGRhdGEt
PnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKTsKIAotICAgIGlmIChtX3NlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MgJiYgIW1fY2FsbGVkRGlkRmluaXNoTG9hZCkKKyAgICBpZiAobV9vcHRp
b25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2NhbGxlZERpZEZpbmlzaExvYWQpCiAgICAgICAg
IGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgZXJyb3IpOwog
CiAgICAgcmVsZWFzZVJlc291cmNlcygpOwpAQCAtNDA0LDcgKzQwMiw3IEBACiAgICAgICAgICAg
ICBtX2hhbmRsZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9zZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzICYmIG1faWRlbnRpZmllciAmJiAhbV9jYWxsZWREaWRGaW5pc2hMb2FkKQor
ICAgICAgICBpZiAobV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmIG1faWRlbnRpZmllciAm
JiAhbV9jYWxsZWREaWRGaW5pc2hMb2FkKQogICAgICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90
aWZpZXIoKS0+ZGlkRmFpbFRvTG9hZCh0aGlzLCBub25OdWxsRXJyb3IpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlz
aW9uIDkzNzkwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogTWFpblJlc291cmNlTG9hZGVyOjpNYWluUmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lKQot
ICAgIDogUmVzb3VyY2VMb2FkZXIoZnJhbWUsIHRydWUsIHRydWUpCisgICAgOiBSZXNvdXJjZUxv
YWRlcihmcmFtZSwgUmVzb3VyY2VMb2FkZXJPcHRpb25zKHRydWUsIHRydWUsIHRydWUpKQogICAg
ICwgbV9kYXRhTG9hZFRpbWVyKHRoaXMsICZNYWluUmVzb3VyY2VMb2FkZXI6OmhhbmRsZURhdGFM
b2FkTm93KQogICAgICwgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudChmYWxzZSkKICAgICAsIG1f
d2FpdGluZ0ZvckNvbnRlbnRQb2xpY3koZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiA5Mzc5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKICNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNTAsNyArNTEsNyBAQAogcHVibGljOgogICAgIGZy
aWVuZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi0g
ICAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQo
RnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3csIFNlY3VyaXR5
Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSwgYm9vbCBzaG91bGRC
dWZmZXJEYXRhID0gdHJ1ZSk7CisgICAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2No
ZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlMb3csIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgPSBSZXNvdXJjZUxvYWRlck9wdGlvbnModHJ1ZSwgdHJ1
ZSwgdHJ1ZSkpOwogICAgIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Q2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdm9pZCBhZGRNYWluUmVzb3Vy
Y2VMb2FkKFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIq
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA5
Mzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFJlc291cmNlTG9hZGVyX2gKIAogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJP
cHRpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgogCkBAIC0xMzQsMTQgKzEzNSwxNCBAQAogCiAgICAgICAgIGNvbnN0IEtV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdC51cmwoKTsgfSAKICAgICAgICAgUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9Ci0g
ICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1f
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQorICAgICAgICBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3M7
IH0KIAogICAgICAgICBib29sIHJlYWNoZWRUZXJtaW5hbFN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9yZWFjaGVkVGVybWluYWxTdGF0ZTsgfQogCiAgICAgICAgIHZvaWQgc2V0U2hvdWxkQnVmZmVy
RGF0YShib29sIHNob3VsZEJ1ZmZlckRhdGEpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBS
ZXNvdXJjZUxvYWRlcihGcmFtZSosIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYpOworICAgICAgICBSZXNvdXJjZUxvYWRlcihGcmFtZSosIFJl
c291cmNlTG9hZGVyT3B0aW9ucyk7CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQogICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7ICAvLyBmb3Ig
YWNjZXNzIHRvIHJlcXVlc3QoKQpAQCAtMTc3LDExICsxNzgsOSBAQAogICAgICAgICBib29sIG1f
Y2FuY2VsbGVkOwogICAgICAgICBib29sIG1fY2FsbGVkRGlkRmluaXNoTG9hZDsKIAotICAgICAg
ICBib29sIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKLSAgICAgICAgYm9vbCBtX3Nob3Vs
ZENvbnRlbnRTbmlmZjsKLSAgICAgICAgYm9vbCBtX3Nob3VsZEJ1ZmZlckRhdGE7CiAgICAgICAg
IGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9kZWZlcnJl
ZFJlcXVlc3Q7CisgICAgICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAg
fTsKIAogaW5saW5lIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIFJlc291cmNlTG9hZGVyOjpyZXNw
b25zZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
LmgJKHJldmlzaW9uIDkzNzkwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBUaHJlYWRh
YmxlTG9hZGVyX2gKICNkZWZpbmUgVGhyZWFkYWJsZUxvYWRlcl9oCiAKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlck9wdGlvbnMuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC02
MiwxNCArNjMsMTEgQEAKICAgICAgICAgUHJldmVudFByZWZsaWdodAogICAgIH07CiAKLSAgICBz
dHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgewotICAgICAgICBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2Up
LCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgcHJlZmxpZ2h0UG9saWN5KENvbnNpZGVyUHJlZmxp
Z2h0KSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSwg
c2hvdWxkQnVmZmVyRGF0YSh0cnVlKSB7IH0KLSAgICAgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNr
czsKLSAgICAgICAgYm9vbCBzbmlmZkNvbnRlbnQ7CisgICAgc3RydWN0IFRocmVhZGFibGVMb2Fk
ZXJPcHRpb25zIDogcHVibGljIFJlc291cmNlTG9hZGVyT3B0aW9ucyB7CisgICAgICAgIFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zKCkgOiBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgcHJlZmxpZ2h0
UG9saWN5KENvbnNpZGVyUHJlZmxpZ2h0KSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlD
cm9zc09yaWdpblJlcXVlc3RzKSB7IH0KICAgICAgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAg
Ly8gV2hldGhlciBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIGFyZSBzZW50IHdpdGggdGhl
IHJlcXVlc3QuCiAgICAgICAgIFByZWZsaWdodFBvbGljeSBwcmVmbGlnaHRQb2xpY3k7IC8vIElm
IEFjY2Vzc0NvbnRyb2wgaXMgdXNlZCwgaG93IHRvIGRldGVybWluZSBpZiBhIHByZWZsaWdodCBp
cyBuZWVkZWQuCiAgICAgICAgIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJl
cXVlc3RQb2xpY3k7Ci0gICAgICAgIGJvb2wgc2hvdWxkQnVmZmVyRGF0YTsKICAgICAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKICAgICB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDkzNzkw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQAogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3Vu
dGVyIHN1YnJlc291cmNlTG9hZGVyQ291bnRlcigiU3VicmVzb3VyY2VMb2FkZXIiKTsKICNlbmRp
ZgogCi1TdWJyZXNvdXJjZUxvYWRlcjo6U3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lLCBT
dWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQotICAgIDogUmVzb3VyY2VMb2FkZXIoZnJh
bWUsIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENvbnRlbnRTbmlmZikKK1N1YnJl
c291cmNlTG9hZGVyOjpTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSogZnJhbWUsIFN1YnJlc291cmNl
TG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKKyAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCBvcHRpb25zKQogICAgICwgbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudChmYWxzZSkKIHsKQEAgLTYx
LDcgKzYxLDcgQEAKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBT
dWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNo
ZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQnVmZmVyRGF0YSkKK1Bhc3NSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZy
YW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtOTksOCArOTksNyBAQAogCiAgICAgZmwtPmFkZEV4dHJhRmllbGRzVG9T
dWJyZXNvdXJjZVJlcXVlc3QobmV3UmVxdWVzdCk7CiAKLSAgICBSZWZQdHI8U3VicmVzb3VyY2VM
b2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihuZXcgU3VicmVzb3VyY2VMb2FkZXIoZnJhbWUsIGNs
aWVudCwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwot
ICAgIHN1YmxvYWRlci0+c2V0U2hvdWxkQnVmZmVyRGF0YShzaG91bGRCdWZmZXJEYXRhKTsKKyAg
ICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHN1YmxvYWRlcihhZG9wdFJlZihuZXcgU3VicmVz
b3VyY2VMb2FkZXIoZnJhbWUsIGNsaWVudCwgb3B0aW9ucykpKTsKICAgICBzdWJsb2FkZXItPmRv
Y3VtZW50TG9hZGVyKCktPmFkZFN1YnJlc291cmNlTG9hZGVyKHN1YmxvYWRlci5nZXQoKSk7CiAg
ICAgaWYgKCFzdWJsb2FkZXItPmluaXQobmV3UmVxdWVzdCkpCiAgICAgICAgIHJldHVybiAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAJKHJldmlzaW9uIDkzNzkwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MiwxMSArMzQyLDE0
IEBACiAgICAgQVNTRVJUKG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgcmVxdWVzdFVSTC5wYXNzKCku
aXNFbXB0eSgpKTsKIAogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIC8vIERvbid0IHNuaWZm
IGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0
LgotICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2Fs
bGJhY2tzICYmICFtX2FjdHVhbFJlcXVlc3Q7Ci0gICAgICAgIGJvb2wgc25pZmZDb250ZW50ID0g
bV9vcHRpb25zLnNuaWZmQ29udGVudCAmJiAhbV9hY3R1YWxSZXF1ZXN0OwotICAgICAgICAvLyBL
ZWVwIGJ1ZmZlcmluZyB0aGUgZGF0YSBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgICAg
ICBib29sIHNob3VsZEJ1ZmZlckRhdGEgPSBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSB8fCBt
X2FjdHVhbFJlcXVlc3Q7CisgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnMg
PSBtX29wdGlvbnM7CisgICAgICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgICAg
IC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHBy
ZWZsaWdodCByZXF1ZXN0LgorICAgICAgICAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9
IGZhbHNlOworICAgICAgICAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIC8vIEtlZXAgYnVmZmVyaW5nIHRoZSBkYXRhIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVl
c3QuCisgICAgICAgICAgICBvcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPSB0cnVlOworICAgICAg
ICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0
KSB7CkBAIC0zNjAsOCArMzYzLDcgQEAKIAogICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNv
IHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBu
b3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KICAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBt
X2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9h
ZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0
eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywgc2VuZExvYWRDYWxsYmFja3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNu
aWZmQ29udGVudCwgc2hvdWxkQnVmZmVyRGF0YSk7CisgICAgICAgIG1fbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKG1fZG9jdW1lbnQtPmZy
YW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtLCBzZWN1cml0
eUNoZWNrLCBvcHRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA5Mzc5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwxMiArNDEsMTIgQEAKICAgICAKICAgICBjbGFzcyBTdWJyZXNvdXJjZUxvYWRl
ciA6IHB1YmxpYyBSZXNvdXJjZUxvYWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gY3JlYXRlKEZyYW1lKiwgU3VicmVzb3VyY2VM
b2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNrUG9saWN5
ID0gRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVl
LCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUsIGJvb2wgc2hvdWxkQnVmZmVyRGF0YSA9
IHRydWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gY3Jl
YXRlKEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBTZWN1cml0eUNoZWNrUG9saWN5LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsK
IAogICAgICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQqLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKTsKKyAgICAgICAgU3VicmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBTdWJyZXNvdXJj
ZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOwogICAgICAgICB2
aXJ0dWFsIH5TdWJyZXNvdXJjZUxvYWRlcigpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2
b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>