<?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>174311</bug_id>
          
          <creation_ts>2017-07-10 07:40:41 -0700</creation_ts>
          <short_desc>Web Inspector: Refactoring: replace InspectorCanvasAgent::CanvasEntry with a helper class</short_desc>
          <delta_ts>2017-07-18 15:24:59 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1326997</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 07:40:41 -0700</bug_when>
    <thetext>The current helper structure `struct CanvasEntry` is inconvenient as a HashMap value type, and doesn&apos;t scale well as canvas instrumentation grows.

Add InspectorCanvas, following the pattern used by InspectorStyleSheet and other ancillary Inspector classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327017</commentid>
    <comment_count>1</comment_count>
      <attachid>314985</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 08:59:51 -0700</bug_when>
    <thetext>Created attachment 314985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327022</commentid>
    <comment_count>2</comment_count>
      <attachid>314986</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 09:08:32 -0700</bug_when>
    <thetext>Created attachment 314986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327025</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 09:11:25 -0700</bug_when>
    <thetext>Attachment 314986 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 11 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>1327035</commentid>
    <comment_count>4</comment_count>
      <attachid>314989</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 09:22:47 -0700</bug_when>
    <thetext>Created attachment 314989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327037</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 09:25:05 -0700</bug_when>
    <thetext>Attachment 314989 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 11 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>1327058</commentid>
    <comment_count>6</comment_count>
      <attachid>314995</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 10:50:45 -0700</bug_when>
    <thetext>Created attachment 314995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327060</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 10:53:09 -0700</bug_when>
    <thetext>Attachment 314995 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 12 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>1327067</commentid>
    <comment_count>8</comment_count>
      <attachid>314995</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-07-10 11:02:21 -0700</bug_when>
    <thetext>Comment on attachment 314995
Patch

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

I think you need to add InspectorCanvas.cpp to InspectorAllInOne.cpp for win/wpe.

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:71
&gt; +    contextType = Inspector::Protocol::Canvas::ContextType::Canvas2D;

Style: this should be indented.

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:74
&gt; +    contextType = Inspector::Protocol::Canvas::ContextType::WebGL;

Ditto.

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:78
&gt; +    contextType = Inspector::Protocol::Canvas::ContextType::WebGL2;

Ditto.

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:82
&gt; +    contextType = Inspector::Protocol::Canvas::ContextType::WebGPU;

Ditto.

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:244
&gt; +        String identifier = unbindCanvas(*inspectorCanvas);
&gt;          if (m_enabled)
&gt; -            m_frontendDispatcher-&gt;canvasRemoved(canvasEntry.identifier);
&gt; +            m_frontendDispatcher-&gt;canvasRemoved(identifier);

See comment below.

    if (unbindCanvas(*inspectorCanvas) &amp;&amp; m_enabled)
        m_frontendDispatcher-&gt;canvasRemoved(inspectorCanvas-&gt;identifier());

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:297
&gt; +    auto* inspectorCanvas = findInspectorCanvas(canvasElement);

NIT: in the above functions, you&apos;ve been using `InspectorCanvas*` instead of `auto*`.  Please stay consistent to using one or the other.

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:302
&gt; +    String identifier = unbindCanvas(*inspectorCanvas);

See comment below.

    if (!unbindCanvas(*inspectorCanvas) || !m_enabled)
        return;
...
    m_removedCanvasIdentifiers.append(inspectorCanvas-&gt;identifier());

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:341
&gt; +String InspectorCanvasAgent::unbindCanvas(InspectorCanvas&amp; inspectorCanvas)

Is it necessary to have this function return the identifier of the InspectorCanvas?  I&apos;d rather have this return a boolean as to whether the remove was successful or not.  The callsites still have access to the InspectorCanvas, so they can just get the identifier from that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327070</commentid>
    <comment_count>9</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 11:07:01 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #7)
&gt; Attachment 314995 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces
&gt; around :  [whitespace/init] [4]
&gt; Total errors found: 1 in 12 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

This is a false positive. Filed https://bugs.webkit.org/show_bug.cgi?id=174315.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327073</commentid>
    <comment_count>10</comment_count>
      <attachid>314995</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 11:16:35 -0700</bug_when>
    <thetext>Comment on attachment 314995
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:297
&gt;&gt; +    auto* inspectorCanvas = findInspectorCanvas(canvasElement);
&gt; 
&gt; NIT: in the above functions, you&apos;ve been using `InspectorCanvas*` instead of `auto*`.  Please stay consistent to using one or the other.

Good catch. I meant to fix these now that InspectorCanvas::create is returning a Ref instead of a RefPtr.

&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:341
&gt;&gt; +String InspectorCanvasAgent::unbindCanvas(InspectorCanvas&amp; inspectorCanvas)
&gt; 
&gt; Is it necessary to have this function return the identifier of the InspectorCanvas?  I&apos;d rather have this return a boolean as to whether the remove was successful or not.  The callsites still have access to the InspectorCanvas, so they can just get the identifier from that.

I adopted the convention from InspectorCSSAgent::unbindStyleSheet. It comes in handy when the identifier is needed after removing the canvas entry, such as in InspectorCanvasAgent::canvasDestoyed. Also, after the canvas is unbound the InspectorCanvas* is not guaranteed to be valid. The identifier could be copied beforehand, but this feels cleaner to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327074</commentid>
    <comment_count>11</comment_count>
      <attachid>314997</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 11:18:12 -0700</bug_when>
    <thetext>Created attachment 314997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327075</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 11:19:53 -0700</bug_when>
    <thetext>Attachment 314997 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 7 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>1327083</commentid>
    <comment_count>13</comment_count>
      <attachid>315000</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 11:42:15 -0700</bug_when>
    <thetext>Created attachment 315000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327085</commentid>
    <comment_count>14</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 11:43:46 -0700</bug_when>
    <thetext>(In reply to Matt Baker from comment #13)
&gt; Created attachment 315000 [details]
&gt; Patch

Added missing file to CMakeLists.txt and updated Changelogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327086</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 11:44:56 -0700</bug_when>
    <thetext>Attachment 315000 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 13 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>1327200</commentid>
    <comment_count>16</comment_count>
      <attachid>315000</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-07-10 14:19:19 -0700</bug_when>
    <thetext>Comment on attachment 315000
Patch

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

r=me

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:241
&gt; +    for (auto&amp; inspectorCanvas : inspectorCanvases) {

Shouldn&apos;t this be an `auto*`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327203</commentid>
    <comment_count>17</comment_count>
      <attachid>315000</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 14:22:15 -0700</bug_when>
    <thetext>Comment on attachment 315000
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:241
&gt;&gt; +    for (auto&amp; inspectorCanvas : inspectorCanvases) {
&gt; 
&gt; Shouldn&apos;t this be an `auto*`?

It should. As written the type will be InspectorCanvas*&amp;, which isn&apos;t an error but is weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327206</commentid>
    <comment_count>18</comment_count>
      <attachid>315030</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-10 14:27:53 -0700</bug_when>
    <thetext>Created attachment 315030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327238</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-10 16:04:54 -0700</bug_when>
    <thetext>Attachment 315030 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 13 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>1330082</commentid>
    <comment_count>20</comment_count>
      <attachid>315030</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 13:17:03 -0700</bug_when>
    <thetext>Comment on attachment 315030
Patch

Rejecting attachment 315030 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 315030, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
nes).
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/inspector/canvas/css-canvas-clients-expected.txt
patching file LayoutTests/inspector/canvas/requestContent-2d-expected.txt
patching file LayoutTests/inspector/canvas/requestNode-expected.txt
patching file LayoutTests/inspector/canvas/resolveCanvasContext-2d-expected.txt

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/4143460</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330136</commentid>
    <comment_count>21</comment_count>
      <attachid>315844</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-18 14:53:35 -0700</bug_when>
    <thetext>Created attachment 315844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330140</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-18 14:55:35 -0700</bug_when>
    <thetext>Attachment 315844 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorCanvas.cpp:57:  Missing spaces around :  [whitespace/init] [4]
Total errors found: 1 in 13 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>1330159</commentid>
    <comment_count>23</comment_count>
      <attachid>315844</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 15:24:58 -0700</bug_when>
    <thetext>Comment on attachment 315844
Patch

Clearing flags on attachment: 315844

Committed r219634: &lt;http://trac.webkit.org/changeset/219634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330160</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 15:24:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314985</attachid>
            <date>2017-07-10 08:59:51 -0700</date>
            <delta_ts>2017-07-10 09:08:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710085950.patch</filename>
            <type>text/plain</type>
            <size>36466</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg3MDU1MzIxOTY5MjA4
Mzk3YjdkMzMwMTlmYTJmZWE2ODgwNjJkNi4uMzcyODJjN2VmNzRhMjEyZmZiMGE5ZjI3NDY3ZmQ0
ODZkN2UxMDUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2
ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZh
c0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpnZXRDYW52YXNFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YnVpbGRPYmplY3RGb3JDYW52YXMpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorCiAyMDE3LTA3LTA3ICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFWUGxheWVyIGNhbiBjb250aW51
ZSB0byBiZSBhY3RpdmUgYWZ0ZXIgcmVsZWFzZWQgYnkgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAxNmQ0NTlmYWYwYTU2ODJiZGZmNmUzOWI3ZDk4OTU1MGZmMjBlODcy
Li5mOTI5MzViZTUyNjEzMGVhYzIyMDljNjM2NmU1OTM2M2U5OGZmNDY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yODc2LDYg
KzI4NzYsOCBAQAogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMzQURF
MDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTY5QTZDQkFDMUM2QkU0MkMwMEI4MzZFOSAv
KiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwNzFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJp
bGl0eVNWR0VsZW1lbnQuY3BwICovOyB9OwogCQk2OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyog
QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5oICovOyB9OworCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVj
dG9yQ2FudmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi87IH07CisJ
CTZBMjJFODczMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NzIxRjEwNDJDNDAw
RjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5jcHAgKi87IH07CiAJCTZBMzJEN0NFMUExNkQ4QzAw
MDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwICovOyB9OwogCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52
YXNBZ2VudC5oICovOyB9OwogCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzQ4
MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDcyNyw2ICsxMDcyOSw4IEBACiAJCTY1
RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Njk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjk3MTAxMDgxQzZCRTE1NTAw
MThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZBMjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkE0QjZENjQxOUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZh
c0FnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZh
c0FnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY2MTlEMjI1RDgw
MDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MjQ3LDYgKzE3MjUxLDggQEAKIAkJCQk3QTU0ODgx
NTE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmggKi8sCiAJCQkJQjg4NUU4RDIx
MUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8s
CiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oICovLAorCQkJCTZBMjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JD
YW52YXMuY3BwICovLAorCQkJCTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JD
YW52YXMuaCAqLywKIAkJCQk2QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuY3BwICovLAogCQkJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0
b3JDYW52YXNBZ2VudC5oICovLAogCQkJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNw
ZWN0b3JDbGllbnQuY3BwICovLApAQCAtMjc3OTgsNiArMjc4MDQsNyBAQAogCQkJCTkzMzA5REYw
MDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOURGMjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4ODVFOEQ1MTFFMDZERDIwMDlGRkJGNCAvKiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZBMjJF
ODcwMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZBNEI2RDY1MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3ODgsNiArMzE3OTUsNyBA
QAogCQkJCTkzMzA5REVGMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYxMDk5RTY0OTIwMDU2RTU4
MSAvKiBJbnNlcnRUZXh0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCODg1RThENDEx
RTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTZBMjJFODczMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52
YXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkEzMkQ3Q0UxQTE2RDhDMDAwNDEyRjBCIC8qIElu
c3BlY3RvckNhbnZhc0FnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMUYyQjUyMTI2QzYx
QjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM4
MUI5NUIwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEzYWI2NmJmZWIyNWYzNWMwMWE4NWY4YThmMWMwMGE1YzRjZDFkOWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFz
LmgiCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clBhZ2VBZ2VudC5oIgorI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKKyNpZiBFTkFC
TEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjZW5kaWYKKyNp
ZiBFTkFCTEUoV0VCR0wyKQorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNl
bmRpZgorI2lmIEVOQUJMRShXRUJHUFUpCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyaW5nQ29udGV4
dC5oIgorI2VuZGlmCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
ZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhczo6Y3JlYXRlKEhUTUxDYW52YXNF
bGVtZW50JiBjYW52YXMsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JDYW52YXMoY2FudmFzLCBjc3NDYW52YXNOYW1lKSk7
Cit9CisKK0luc3BlY3RvckNhbnZhczo6SW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50
JiBjYW52YXMsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSkKKyAgICA6IG1faWRlbnRpZmll
cigiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSkKKyAg
ICAsIG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fY3NzQ2FudmFzTmFtZShjc3NDYW52YXNOYW1l
KQoreworfQorCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3Bl
Y3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVudGluZ0FnZW50cykKK3sKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX2NhbnZhcy5k
b2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CisgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IG1fY2FudmFzLnJlbmRlcmluZ0NvbnRleHQo
KTsKKworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGUgY29udGV4
dFR5cGU7CisgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCisg
ICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBl
OjpDYW52YXMyRDsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgZWxzZSBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKKyAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMOworI2VuZGlmCisjaWYgRU5BQkxFKFdF
QkdMMikKKyAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkK
KyAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5
cGU6OldlYkdMMjsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJHUFUpCisgICAgZWxzZSBpZiAoaXM8
V2ViR1BVUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHUFU7CisjZW5kaWYKKyAg
ICBlbHNlIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNvbnRleHRU
eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7
CisgICAgfQorCisgICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNhbnZhczo6Y3JlYXRlKCkKKyAgICAgICAgLnNldENhbnZhc0lkKG1faWRlbnRpZmllcikKKyAg
ICAgICAgLnNldEZyYW1lSWQoaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQo
KS0+ZnJhbWVJZChmcmFtZSkpCisgICAgICAgIC5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZSkK
KyAgICAgICAgLnJlbGVhc2UoKTsKKworICAgIGlmICghbV9jc3NDYW52YXNOYW1lLmlzRW1wdHko
KSkKKyAgICAgICAgY2FudmFzLT5zZXRDc3NDYW52YXNOYW1lKG1fY3NzQ2FudmFzTmFtZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKTsKKyAgICAgICAgaW50IG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmbV9jYW52YXMpOworICAgICAgICBpZiAoIW5vZGVJZCkgewor
ICAgICAgICAgICAgaWYgKGludCBkb2N1bWVudE5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJ
ZCgmbV9jYW52YXMuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICBFcnJvclN0cmluZyBp
Z25vcmVkOworICAgICAgICAgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJv
bnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZtX2NhbnZhcyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZUlkKQorICAgICAgICAgICAgY2FudmFzLT5z
ZXROb2RlSWQobm9kZUlkKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKSB7CisgICAgICAgIGlmIChzdGQ6
Om9wdGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMgPSBkb3duY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KSkgeworICAgICAgICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0cmlidXRlcyhJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAg
ICAgICAgIC5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSkKKyAgICAgICAgICAgICAgICAuc2V0
RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpCisgICAgICAgICAgICAgICAgLnNldFN0ZW5jaWwoYXR0
cmlidXRlcy0+c3RlbmNpbCkKKyAgICAgICAgICAgICAgICAuc2V0QW50aWFsaWFzKGF0dHJpYnV0
ZXMtPmFudGlhbGlhcykKKyAgICAgICAgICAgICAgICAuc2V0UHJlbXVsdGlwbGllZEFscGhhKGF0
dHJpYnV0ZXMtPnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgICAgICAgICAuc2V0UHJlc2Vy
dmVEcmF3aW5nQnVmZmVyKGF0dHJpYnV0ZXMtPnByZXNlcnZlRHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgICAgICAuc2V0RmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdChhdHRyaWJ1dGVzLT5m
YWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KQorICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkp
OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoc2l6ZV90IG1lbW9yeUNvc3Qg
PSBtX2NhbnZhcy5tZW1vcnlDb3N0KCkpCisgICAgICAgIGNhbnZhcy0+c2V0TWVtb3J5Q29zdCht
ZW1vcnlDb3N0KTsKKworICAgIHJldHVybiBjYW52YXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI2NjczOWIzM2QxNDBiNTg5OTg2N2ExZmNiNjgxMGQzYTgyZjc5ZmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1M
Q2FudmFzRWxlbWVudDsKK2NsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JDYW52YXMgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbnNwZWN0b3JDYW52YXM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRy
PEluc3BlY3RvckNhbnZhcz4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgU3RyaW5n
JiBjc3NDYW52YXNOYW1lKTsKKworICAgIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcigpIHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQorICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSB7IHJl
dHVybiBtX2NhbnZhczsgfQorICAgIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSgpIHsgcmV0
dXJuIG1fY3NzQ2FudmFzTmFtZTsgfQorCisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhJbnN0cnVtZW50aW5nQWdlbnRzJik7
CisKKyAgICB+SW5zcGVjdG9yQ2FudmFzKCkgeyB9CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9y
Q2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBjc3NDYW52YXNOYW1lKTsK
KworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgSFRNTENhbnZhc0VsZW1lbnQmIG1fY2Fu
dmFzOworICAgIFN0cmluZyBtX2Nzc0NhbnZhc05hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwCmluZGV4IGE2YTVkYmFkYTYxODhjOWU4Y2FkY2ZiMWU1ODYxNzZiYmU0NjgxOTAu
LjZmMjJlNjVhNWUxYjhmMzA2NGY3MjA5YmE1NTY5MzcwMDIyNGMzYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApAQCAtMzEsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgpA
QCAtNjQsMTIgKzYzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50
KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQp
CitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQ2Fu
dmFzIiksIGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihzdGQ6Om1ha2VfdW5p
cXVlPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5k
Um91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpDYW52YXNCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpKQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCi0gICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAm
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQpCiB7CiB9CkBA
IC05NiwxMSArOTQsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JT
dHJpbmcmKQogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
cGFpciA6IG1fY2FudmFzRW50cmllcykgewotICAgICAgICBhdXRvKiBjYW52YXNFbGVtZW50ID0g
cGFpci5rZXk7Ci0gICAgICAgIGF1dG8mIGNhbnZhc0VudHJ5ID0gcGFpci52YWx1ZTsKLSAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxkT2JqZWN0Rm9yQ2FudmFz
KGNhbnZhc0VudHJ5LCAqY2FudmFzRWxlbWVudCkpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIGlu
c3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKQor
ICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRkZWQoaW5zcGVjdG9yQ2FudmFz
LT5idWlsZE9iamVjdEZvckNhbnZhcyhtX2luc3RydW1lbnRpbmdBZ2VudHMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCkBAIC0xMTgsMzIg
KzExMywyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JikKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQqIG5vZGVJZCkKIHsKLSAg
ICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNFbnRyeShjYW52YXNJ
ZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAgIEluc3BlY3RvckNhbnZh
cyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBj
YW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKLSAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmNhbnZhc0VudHJ5LT5lbGVtZW50LT5kb2N1
bWVudCgpKTsKKyAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmluc3BlY3RvckNhbnZhcy0+Y2FudmFz
KCkuZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkgewogICAgICAgICBlcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRG9jdW1lbnQgaGFzIG5vdCBiZWVuIHJlcXVlc3RlZCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm5vZGVJZCA9IG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJp
bmcsIGRvY3VtZW50Tm9kZUlkLCBjYW52YXNFbnRyeS0+ZWxlbWVudCk7CisgICAgKm5vZGVJZCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJv
bnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCAmaW5zcGVjdG9yQ2FudmFzLT5jYW52
YXMoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBj
b250ZW50KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9IGdldENhbnZh
c0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyIik7CisgICAg
SW5zcGVjdG9yQ2FudmFzKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMo
ZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQg
PSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbmRl
cmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250
ZXh0KSkgewotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGNhbnZhc0VudHJ5
LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CisgICAgICAg
IEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS50
b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5yZWxlYXNlTWVzc2FnZSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTU1LDcgKzE0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGdsID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZT4oY29udGV4dCk7CiAKICAgICAgICAgZ2wtPnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3Bl
Y3Rvcih0cnVlKTsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQgPSBjYW52YXNF
bnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOworICAg
ICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFz
KCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogICAgICAgICBnbC0+c2V0
UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAogICAgICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0xOTQsMTMgKzE4NSwxMSBAQCBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnRleHRBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQ2FudmFz
UmVuZGVyaW5nQwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFzQ29u
dGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNv
bnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50
cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2Fu
dmFzRW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQg
Y2FudmFzIGlkZW50aWZpZXIiKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNhbnZh
cyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOworICAgIGlm
ICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgRnJhbWUq
IGZyYW1lID0gY2FudmFzRW50cnktPmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBG
cmFtZSogZnJhbWUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRvY3VtZW50KCkuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJDYW52YXMgYmVsb25ncyB0byBhIGRvY3VtZW50IHdpdGhvdXQgYSBmcmFtZSIpOwogICAgICAg
ICByZXR1cm47CkBAIC0yMTAsNyArMTk5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAg
IGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNj
cmlwdEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbnRyeS0+
ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbmRlcmluZ0NvbnRleHQoKTsK
ICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBjb250ZXh0QXNTY3JpcHRWYWx1ZShzdGF0ZSwgY29u
dGV4dCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTIyOSw3MSArMjE4LDcyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2
aWdhdGVkKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rv
cjxIVE1MQ2FudmFzRWxlbWVudCo+IGNhbnZhc2VzRm9yRnJhbWU7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVzLmtleXMoKSkgewotICAgICAgICBp
ZiAoY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpID09ICZmcmFtZSkKLSAgICAgICAg
ICAgIGNhbnZhc2VzRm9yRnJhbWUuYXBwZW5kKGNhbnZhc0VsZW1lbnQpOworICAgIFZlY3RvcjxJ
bnNwZWN0b3JDYW52YXMqPiBpbnNwZWN0b3JDYW52YXNlczsKKyAgICBmb3IgKFJlZlB0cjxJbnNw
ZWN0b3JDYW52YXM+JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNh
bnZhcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5k
b2N1bWVudCgpLmZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAgICAgICAgaW5zcGVjdG9yQ2FudmFz
ZXMuYXBwZW5kKGluc3BlY3RvckNhbnZhcy5nZXQoKSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRv
KiBjYW52YXNFbGVtZW50IDogY2FudmFzZXNGb3JGcmFtZSkgewotICAgICAgICBhdXRvIGNhbnZh
c0VudHJ5ID0gbV9jYW52YXNFbnRyaWVzLnRha2UoY2FudmFzRWxlbWVudCk7CisgICAgZm9yIChh
dXRvJiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52YXNlcykgeworICAgICAgICBTdHJp
bmcgaWRlbnRpZmllciA9IHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFzKTsKICAgICAgICAg
aWYgKG1fZW5hYmxlZCkKLSAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNS
ZW1vdmVkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIpOworICAgICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7CiAgICAgfQogfQogCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQm
IGNhbnZhc0VsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQoIW1fY2Fu
dmFzVG9DU1NDYW52YXNJZC5jb250YWlucygmY2FudmFzRWxlbWVudCkpOwotICAgIEFTU0VSVCgh
bV9jYW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgaWYgKGZpbmRJ
bnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX2NhbnZhc1RvQ1NTQ2FudmFz
SWQuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1ND
YW52YXNOYW1lLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgbV9jYW52YXNUb0NTU0Nh
bnZhc05hbWUuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxl
bWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBpZiAobV9jYW52YXNFbnRyaWVzLmNvbnRhaW5z
KCZjYW52YXNFbGVtZW50KSkgeworICAgIGlmIChmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Vs
ZW1lbnQpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgQ2FudmFzRW50cnkgbmV3Q2FudmFzRW50cnkoImNhbnZhczoiICsgSWRl
bnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCksICZjYW52YXNFbGVtZW50KTsKLSAg
ICBuZXdDYW52YXNFbnRyeS5jc3NDYW52YXNOYW1lID0gbV9jYW52YXNUb0NTU0NhbnZhc0lkLnRh
a2UoJmNhbnZhc0VsZW1lbnQpOwotCi0gICAgbV9jYW52YXNFbnRyaWVzLnNldCgmY2FudmFzRWxl
bWVudCwgbmV3Q2FudmFzRW50cnkpOwogICAgIGNhbnZhc0VsZW1lbnQuYWRkT2JzZXJ2ZXIoKnRo
aXMpOwogCi0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcg
Y3NzQ2FudmFzTmFtZSA9IG1fY2FudmFzVG9DU1NDYW52YXNOYW1lLnRha2UoJmNhbnZhc0VsZW1l
bnQpOworICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gSW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUo
Y2FudmFzRWxlbWVudCwgY3NzQ2FudmFzTmFtZSk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Y2FudmFzQWRkZWQoYnVpbGRPYmplY3RGb3JDYW52YXMobmV3Q2FudmFzRW50cnksIGNhbnZh
c0VsZW1lbnQpKTsKKyAgICBpZiAobV9lbmFibGVkKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2FudmFzQWRkZWQoaW5zcGVjdG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyht
X2luc3RydW1lbnRpbmdBZ2VudHMpKTsKKworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2Fu
dmFzLnNldChpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShpbnNwZWN0b3JD
YW52YXMpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFz
TWVtb3J5KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewotICAgIENhbnZhc0Vu
dHJ5KiBjYW52YXNFbnRyeSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0VsZW1lbnQpOwotICAgIGlm
ICghY2FudmFzRW50cnkpCisgICAgSW5zcGVjdG9yQ2FudmFzKiBpbnNwZWN0b3JDYW52YXMgPSBm
aW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIGlmICghaW5zcGVjdG9yQ2Fu
dmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFz
TWVtb3J5Q2hhbmdlZChjYW52YXNFbnRyeS0+aWRlbnRpZmllciwgY2FudmFzRWxlbWVudC5tZW1v
cnlDb3N0KCkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2Vk
KGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmllcigpLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3Qo
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChIVE1M
Q2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBhdXRvIGl0ID0gbV9jYW52YXNF
bnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2NhbnZhc0VudHJp
ZXMuZW5kKCkpCisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZh
cyhjYW52YXNFbGVtZW50KTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKKyAgICBpZiAo
IWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGNhbnZhc0lk
ZW50aWZpZXIgPSBpdC0+dmFsdWUuaWRlbnRpZmllcjsKLSAgICBtX2NhbnZhc0VudHJpZXMucmVt
b3ZlKGl0KTsKLQorICAgIFN0cmluZyBpZGVudGlmaWVyID0gdW5iaW5kQ2FudmFzKCppbnNwZWN0
b3JDYW52YXMpOwogICAgIGlmICghbV9lbmFibGVkKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBXZWJDb3JlOjpDYW52YXNPYnNlcnZlcjo6Y2FudmFzRGVzdHJveWVkIGlzIGNhbGxlZCBpbiBy
ZXNwb25zZSB0byB0aGUgR0MgZGVzdHJveWluZyB0aGUgSFRNTENhbnZhc0VsZW1lbnQuCiAgICAg
Ly8gRHVlIHRvIHRoZSBzaW5nbGUtcHJvY2VzcyBtb2RlbCB1c2VkIGluIFdlYktpdDEsIHRoZSBl
dmVudCBtdXN0IGJlIGRpc3BhdGNoZWQgZnJvbSBhIHRpbWVyIHRvIHByZXZlbnQKICAgICAvLyB0
aGUgZnJvbnRlbmQgZnJvbSBtYWtpbmcgSlMgYWxsb2NhdGlvbnMgd2hpbGUgdGhlIEdDIGlzIHN0
aWxsIGFjdGl2ZS4KLSAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5hcHBlbmQoY2FudmFz
SWRlbnRpZmllcik7CisgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50
aWZpZXIpOwogCiAgICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7CkBAIC0zMDQsMTExICsyOTQsNTYgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX3JlbW92
ZWRDYW52YXNJZGVudGlmaWVycy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
Y29uc3QgYXV0byYgaWRlbnRpZmllciA6IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzKQotICAg
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsKKyAg
ICBpZiAobV9lbmFibGVkKSB7CisgICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IG1fcmVt
b3ZlZENhbnZhc0lkZW50aWZpZXJzKQorICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7CisgICAgfQogCiAgICAgbV9yZW1vdmVkQ2FudmFz
SWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2xl
YXJDYW52YXNEYXRhKCkKIHsKLSAgICBmb3IgKGF1dG8qIGNhbnZhc0VsZW1lbnQgOiBtX2NhbnZh
c0VudHJpZXMua2V5cygpKQotICAgICAgICBjYW52YXNFbGVtZW50LT5yZW1vdmVPYnNlcnZlcigq
dGhpcyk7CisgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0lu
c3BlY3RvckNhbnZhcy52YWx1ZXMoKSkKKyAgICAgICAgaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMo
KS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiAKLSAgICBtX2NhbnZhc0VudHJpZXMuY2xlYXIoKTsK
LSAgICBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQuY2xlYXIoKTsKKyAgICBtX2lkZW50aWZpZXJUb0lu
c3BlY3RvckNhbnZhcy5jbGVhcigpOworICAgIG1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNsZWFy
KCk7CiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIAogICAgIGlmICht
X3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIuc3RvcCgpOwogfQogCi1JbnNwZWN0
b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkqIEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRDYW52
YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKK1N0cmluZyBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2Fu
dmFzKQogewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fY2FudmFzRW50cmllcy5maW5kKCZjYW52
YXNFbGVtZW50KTsKLSAgICBpZiAoZmluZFJlc3VsdCAhPSBtX2NhbnZhc0VudHJpZXMuZW5kKCkp
Ci0gICAgICAgIHJldHVybiAmZmluZFJlc3VsdC0+dmFsdWU7CisgICAgQVNTRVJUKCFtX2NhbnZh
c1RvQ1NTQ2FudmFzTmFtZS5jb250YWlucygmaW5zcGVjdG9yQ2FudmFzLmNhbnZhcygpKSk7CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBTdHJpbmcgaWRlbnRpZmllciA9IGluc3BlY3RvckNh
bnZhcy5pZGVudGlmaWVyKCk7CisgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMucmVt
b3ZlKGlkZW50aWZpZXIpOworCisgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLUluc3BlY3Rv
ckNhbnZhc0FnZW50OjpDYW52YXNFbnRyeSogSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZh
c0VudHJ5KGNvbnN0IFN0cmluZyYgY2FudmFzSWRlbnRpZmllcikKK0luc3BlY3RvckNhbnZhcyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIHsKLSAgICBmb3IgKGF1dG8m
IGNhbnZhc0VudHJ5IDogbV9jYW52YXNFbnRyaWVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChj
YW52YXNFbnRyeS5pZGVudGlmaWVyID09IGNhbnZhc0lkZW50aWZpZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gJmNhbnZhc0VudHJ5OworICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGluc3BlY3Rv
ckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChpZGVudGlmaWVyKTsK
KyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykgeworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiTm8gY2FudmFzIGZvciBnaXZlbiBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5z
cGVjdG9yQ2FudmFzLmdldCgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFz
OjpDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50OjpidWlsZE9iamVjdEZvckNhbnZhcyhjb25z
dCBDYW52YXNFbnRyeSYgY2FudmFzRW50cnksIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVt
ZW50KQorSW5zcGVjdG9yQ2FudmFzKiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3Rv
ckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBGcmFtZSog
ZnJhbWUgPSBjYW52YXNFbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCk7
Ci0KLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlIGNvbnRleHRU
eXBlOwotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQpKQotICAg
ICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5
cGU6OkNhbnZhczJEOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBlbHNlIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMOwotI2VuZGlmCi0jaWYgRU5B
QkxFKFdFQkdMMikKLSAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250
ZXh0KSkKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRUeXBlOjpXZWJHTDI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR1BVKQotICAgIGVs
c2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250
ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQ
VTsKLSNlbmRpZgotICAgIGVsc2UgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRU
eXBlOjpDYW52YXMyRDsKLSAgICB9Ci0KLSAgICBhdXRvIGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQotICAgICAgICAuc2V0Q2FudmFzSWQoY2Fu
dmFzRW50cnkuaWRlbnRpZmllcikKLSAgICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZy
YW1lSWQoZnJhbWUpKQotICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpCi0gICAg
ICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBpZiAoIWNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUuaXNF
bXB0eSgpKQotICAgICAgICBjYW52YXMtPnNldENzc0NhbnZhc05hbWUoY2FudmFzRW50cnkuY3Nz
Q2FudmFzTmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpOwotICAgICAg
ICBpbnQgbm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZjYW52YXNFbGVtZW50KTsKLSAg
ICAgICAgaWYgKCFub2RlSWQpIHsKLSAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNhbnZhc0VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKLSAg
ICAgICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgICAgIG5vZGVJ
ZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQs
ICZjYW52YXNFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChub2RlSWQpCi0gICAgICAgICAgICBjYW52YXMtPnNldE5vZGVJZChub2RlSWQpOworICAgIGZv
ciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpID09ICZj
YW52YXNFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5nZXQoKTsK
ICAgICB9CiAKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNvbnRleHQpKSB7Ci0gICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlPihjb250ZXh0KS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAg
Y2FudmFzLT5zZXRDb250ZXh0QXR0cmlidXRlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQotICAgICAgICAgICAgICAgIC5zZXRBbHBoYShh
dHRyaWJ1dGVzLT5hbHBoYSkKLSAgICAgICAgICAgICAgICAuc2V0RGVwdGgoYXR0cmlidXRlcy0+
ZGVwdGgpCi0gICAgICAgICAgICAgICAgLnNldFN0ZW5jaWwoYXR0cmlidXRlcy0+c3RlbmNpbCkK
LSAgICAgICAgICAgICAgICAuc2V0QW50aWFsaWFzKGF0dHJpYnV0ZXMtPmFudGlhbGlhcykKLSAg
ICAgICAgICAgICAgICAuc2V0UHJlbXVsdGlwbGllZEFscGhhKGF0dHJpYnV0ZXMtPnByZW11bHRp
cGxpZWRBbHBoYSkKLSAgICAgICAgICAgICAgICAuc2V0UHJlc2VydmVEcmF3aW5nQnVmZmVyKGF0
dHJpYnV0ZXMtPnByZXNlcnZlRHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICAuc2V0RmFp
bElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdChhdHRyaWJ1dGVzLT5mYWlsSWZNYWpvclBlcmZvcm1h
bmNlQ2F2ZWF0KQotICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpZiAoc2l6ZV90IG1lbW9yeUNvc3QgPSBjYW52YXNFbGVtZW50Lm1l
bW9yeUNvc3QoKSkKLSAgICAgICAgY2FudmFzLT5zZXRNZW1vcnlDb3N0KG1lbW9yeUNvc3QpOwot
Ci0gICAgcmV0dXJuIGNhbnZhczsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuaAppbmRleCA3MzMwNzNkZGQxNzYyMGE0ZmViM2I2OGVlYjkyNDQ5YmFjODYxMzlm
Li4wYjQ0NDQ3NzZlNDc2OWJlOTE3ZjIzNDg4NDMxZDBmZWQ4ZWE5YTkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtMjYsNiArMjYs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckNhbnZhcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldlYkFnZW50QmFz
ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oPgpAQCAtNDIsNyArNDMsNiBAQCBjbGFzcyBJbmplY3RlZFNjcmlw
dE1hbmFnZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yUGFnZUFn
ZW50OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIEluc3BlY3RvckNhbnZhc0FnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIENhbnZhc09ic2VyCiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ2FudmFzQWdlbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3RvckNhbnZhc0FnZW50KFdl
YkFnZW50Q29udGV4dCYsIEluc3BlY3RvclBhZ2VBZ2VudCopOworICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYpOwogICAgIHZpcnR1YWwgfkluc3BlY3Rv
ckNhbnZhc0FnZW50KCkgeyB9CiAKICAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
ciopIG92ZXJyaWRlOwpAQCAtNzcsMzMgKzc3LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbnZh
c0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAg
IHN0cnVjdCBDYW52YXNFbnRyeSB7Ci0gICAgICAgIFN0cmluZyBpZGVudGlmaWVyOwotICAgICAg
ICBTdHJpbmcgY3NzQ2FudmFzTmFtZTsKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1l
bnQgPSB7IG51bGxwdHIgfTsKLQotICAgICAgICBDYW52YXNFbnRyeSgpIHsgfQotCi0gICAgICAg
IENhbnZhc0VudHJ5KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhc0VsZW1lbnQpCi0gICAgICAgICAgICA6IGlkZW50aWZpZXIoaWRlbnRpZmllcikKLSAg
ICAgICAgICAgICwgZWxlbWVudChjYW52YXNFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICB9OwotCiAgICAgdm9pZCBjYW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKCk7CiAgICAgdm9p
ZCBjbGVhckNhbnZhc0RhdGEoKTsKLSAgICBDYW52YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoSFRN
TENhbnZhc0VsZW1lbnQmKTsKLSAgICBDYW52YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoY29uc3Qg
U3RyaW5nJik7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBi
dWlsZE9iamVjdEZvckNhbnZhcyhjb25zdCBDYW52YXNFbnRyeSYsIEhUTUxDYW52YXNFbGVtZW50
Jik7CisgICAgU3RyaW5nIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKKyAgICBJbnNw
ZWN0b3JDYW52YXMqIGFzc2VydEluc3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYpOworICAgIEluc3BlY3RvckNhbnZhcyogZmluZEluc3BlY3RvckNhbnZhcyhIVE1MQ2Fu
dmFzRWxlbWVudCYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJv
bnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKIAotICAgIEhhc2hNYXA8SFRN
TENhbnZhc0VsZW1lbnQqLCBDYW52YXNFbnRyeT4gbV9jYW52YXNFbnRyaWVzOwotICAgIEhhc2hN
YXA8SFRNTENhbnZhc0VsZW1lbnQqLCBTdHJpbmc+IG1fY2FudmFzVG9DU1NDYW52YXNJZDsKKyAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4+IG1faWRlbnRpZmllclRv
SW5zcGVjdG9yQ2FudmFzOworICAgIEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQqLCBTdHJpbmc+
IG1fY2FudmFzVG9DU1NDYW52YXNOYW1lOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZENh
bnZhc0lkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fdGltZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQg
eyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IDRmODExM2QwZmNjY2IwODI0NjliMjJhMmU1ZDRlNDlhZTRlZTdjNWEu
LmRlN2M5MzFiMmVkMDU3MmI0MzcwMTM3NjM1NTdkZjM3N2U4MTVjMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE4NCw3ICsx
ODQsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UmIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3RvckxheWVyVHJlZUFnZW50PihwYWdlQ29udGV4dCkpOwogICAg
IG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvcldvcmtlckFnZW50Pihw
YWdlQ29udGV4dCkpOwogCi0gICAgYXV0byBjYW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBhZ2VDb250ZXh0LCBwYWdlQWdlbnQpOworICAgIGF1
dG8gY2FudmFzQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckNhbnZhc0FnZW50
PihwYWdlQ29udGV4dCk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JD
YW52YXNBZ2VudChjYW52YXNBZ2VudFB0ci5nZXQoKSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdU
Rk1vdmUoY2FudmFzQWdlbnRQdHIpKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgwN2RlOWQxYTM5N2ExZjlmNWZmY2Q4
ZGRmOGZkNjYwNTI5N2NmMDMuLmViNDNiMGJkMWU1Nzg5ODJjMDAxZDg3YzEyYTQ3ZDEzOGM5OTZk
ZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNy0xMCAgTWF0dCBCYWtlciAgPG1hdHRi
YWtlckBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUmVmYWN0b3Jpbmc6IHJl
cGxhY2UgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNhbnZhc0VudHJ5IHdpdGggYSBoZWxwZXIgY2xh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDMx
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZWQgdGVzdCBleHBlY3RhdGlvbnMgZm9yIG5ldyBlcnJvciBzdHJpbmdzLgorCisgICAgICAgICog
aW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1leHBlY3RlZC50eHQ6CisK
IDIwMTctMDctMDcgIE1hdHQgTGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGp1c3RlZCB0ZXN0IGV4cGVjdGF0aW9ucyBmb3Igd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQt
dHJhY2suaHRtbC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVx
dWVzdENvbnRlbnQtMmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZh
cy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQKaW5kZXggZThiOWQ1YmNlMDVmZjA5Yzdi
ZWY1NjVjY2U2NTZhMDI1NjRlZWZlNi4uNGUxOTlkZjYwNjhmMWQxZjJjZWU5Mzk2NGI1NDNkNzAx
NzM0ZjU4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0
Q29udGVudC0yZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZh
cy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQKQEAgLTcsNSArNyw1IEBAIGRhdGE6aW1h
Z2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBU3dBQUFDV0NBWUFBQUJrVzdY
U0FBQUFBWE5TUjBJQXJzCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVxdWVzdENv
bnRlbnQuaW52YWxpZENhbnZhc0lkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVy
cm9yOiBJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyCitFcnJvcjogTm8gY2FudmFzIGZvciBnaXZl
biBpZGVudGlmaWVyLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMv
cmVxdWVzdE5vZGUtZXhwZWN0ZWQudHh0CmluZGV4IDlhY2QzNzZjMjMyMTYzZjk4MzJiZDBiMzNk
MTY4ZjRmMjgzNGZlMjAuLjcxNWM0MzFiMGU5MmE1YjZhNDZkNzFmZGE0NjVlNmQyMWU3MWI0M2Mg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUt
ZXhwZWN0ZWQudHh0CkBAIC0xNyw1ICsxNyw1IEBAIFBBU1M6IENhbnZhcyAiQ2FudmFzIDIiIGhh
cyBub2RlIHdpdGggdHlwZSAiQ0FOVkFTIi4KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IENhbnZh
cy5yZXF1ZXN0Tm9kZS5pbnZhbGlkQ2FudmFzSWQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVy
cm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMg
Zm9yIGdpdmVuIGlkZW50aWZpZXIuCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jYW52YXMvcmVzb2x2ZUNhbnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1leHBlY3RlZC50eHQK
aW5kZXggZDkyMWYyNDg5ZDI1NmZiNTE4ZjRjNmU0ZGY5NjlhMTY2ODFiNDJmMC4uNmVkNjMzZGE4
NDgzNjhkOTY1YjkwNGIyNDYyNjRmOTZmNTAwNjg5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1l
eHBlY3RlZC50eHQKQEAgLTgsNSArOCw1IEBAIFBBU1M6IFBheWxvYWQgc2hvdWxkIGhhdmUgY2xh
c3NOYW1lICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLgogCiAtLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogQ2FudmFzLnJlc29sdmVDYW52YXNDb250ZXh0LmludmFsaWRJZGVudGlmaWVyCiBQQVNTOiBT
aG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVy
CitFcnJvcjogTm8gY2FudmFzIGZvciBnaXZlbiBpZGVudGlmaWVyLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314986</attachid>
            <date>2017-07-10 09:08:32 -0700</date>
            <delta_ts>2017-07-10 09:22:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710090831.patch</filename>
            <type>text/plain</type>
            <size>36600</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uMTM4Zjc5OTg5MGM0NmZhNGRiMjk3YzJlYzBjYzM3
MmZkODU3N2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2
ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZh
c0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpnZXRDYW52YXNFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YnVpbGRPYmplY3RGb3JDYW52YXMpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorCiAyMDE3LTA3LTEwICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4dCBpcyBtaXNz
aW5nIGluIGlCb29rcyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTZkNDU5ZmFmMGE1NjgyYmRmZjZlMzli
N2Q5ODk1NTBmZjIwZTg3Mi4uZjkyOTM1YmU1MjYxMzBlYWMyMjA5YzYzNjZlNTkzNjNlOThmZjQ2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjg3Niw2ICsyODc2LDggQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFD
NkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThD
N0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZC
RTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEg
LyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLzsgfTsKKwkJNkEyMkU4NzAxRjEwNDE4NjAw
RjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNh
bnZhcy5oICovOyB9OworCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2Fu
dmFzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovOyB9OwogCQk2
QTMyRDdDRTFBMTZEOEMwMDA0MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjYxOUQyMjVE
ODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKIAkJNkE0QjZENjUx
OUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKIAkJNkIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA3MjcsNiAr
MTA3MjksOCBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5
NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyog
SW5zcGVjdG9yQ2FudmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5z
cGVjdG9yQ2FudmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDYW52YXNBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEg
LyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2
ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzI0Nyw2ICsxNzI1MSw4
IEBACiAJCQkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICov
LAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLywKKwkJCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8sCiAJCQkJNkE0QjZENjYxOUQyMjVEODAwNkYxMUQz
IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLywKIAkJCQk2QTRCNkQ2NDE5RDIyNTE5MDA2
RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLywKIAkJCQk3QTFGMkI1MTEyNkM2MUIy
MDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI3Nzk4LDYgKzI3ODA0LDcg
QEAKIAkJCQk5MzMwOURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5MjAwNTZFNTgx
IC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1RThENTExRTA2
REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
Nzg4LDYgKzMxNzk1LDcgQEAKIAkJCQk5MzMwOURFRjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURG
MTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMg
LyogSW5zcGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZBMzJEN0NFMUExNkQ4
QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2FiNjZiZmViMjVmMzVjMDFhODVmOGE4ZjFjMDBh
NWM0Y2QxZDliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNhbnZhcy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGluc3BlY3Rvci9JZGVudGlm
aWVyc0ZhY3RvcnkuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmNy
ZWF0ZShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05h
bWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ2FudmFzKGNhbnZhcywg
Y3NzQ2FudmFzTmFtZSkpOworfQorCitJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpCisg
ICAgOiBtX2lkZW50aWZpZXIoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJ
ZGVudGlmaWVyKCkpCisgICAgLCBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2Nzc0NhbnZhc05h
bWUoY3NzQ2FudmFzTmFtZSkKK3sKK30KKworUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gbV9jYW52YXMuZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBtX2NhbnZhcy5y
ZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNv
bnRleHRUeXBlIGNvbnRleHRUeXBlOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KGNvbnRleHQpKQorICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisjaWYgRU5BQkxFKFdFQkdMKQorICAgIGVsc2Ug
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyNlbmRp
ZgorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQor
ICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQorICAgIGNv
bnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2Vi
R1BVOworI2VuZGlmCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOworICAgIH0KKworICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRDYW52YXNJZCht
X2lkZW50aWZpZXIpCisgICAgICAgIC5zZXRGcmFtZUlkKGluc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yUGFnZUFnZW50KCktPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAuc2V0Q29udGV4dFR5
cGUoY29udGV4dFR5cGUpCisgICAgICAgIC5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1fY3NzQ2Fu
dmFzTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhbnZhcy0+c2V0Q3NzQ2FudmFzTmFtZShtX2Nz
c0NhbnZhc05hbWUpOworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgICAg
IGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzKTsKKyAgICAgICAg
aWYgKCFub2RlSWQpIHsKKyAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21B
Z2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzLmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgICAgICAgICBub2RlSWQgPSBkb21BZ2Vu
dC0+cHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmbV9jYW52YXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGVJZCkKKyAgICAg
ICAgICAgIGNhbnZhcy0+c2V0Tm9kZUlkKG5vZGVJZCk7CisgICAgfQorCisjaWYgRU5BQkxFKFdF
QkdMKQorICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgewor
ICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1
dGVzID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCktPmdldENv
bnRleHRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJp
YnV0ZXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpCisgICAg
ICAgICAgICAgICAgLnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKQorICAgICAgICAgICAgICAg
IC5zZXRTdGVuY2lsKGF0dHJpYnV0ZXMtPnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgLnNldEFu
dGlhbGlhcyhhdHRyaWJ1dGVzLT5hbnRpYWxpYXMpCisgICAgICAgICAgICAgICAgLnNldFByZW11
bHRpcGxpZWRBbHBoYShhdHRyaWJ1dGVzLT5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgICAg
ICAgICAgLnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihhdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdp
bmdCdWZmZXIpCisgICAgICAgICAgICAgICAgLnNldEZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZl
YXQoYXR0cmlidXRlcy0+ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkKKyAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNp
emVfdCBtZW1vcnlDb3N0ID0gbV9jYW52YXMubWVtb3J5Q29zdCgpKQorICAgICAgICBjYW52YXMt
PnNldE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7CisKKyAgICByZXR1cm4gY2FudmFzOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjY3MzliMzNkMTQwYjU4OTk4NjdhMWZjYjY4MTBkM2E4
MmY3OWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRz
OworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQ2FudmFz
IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVu
dCYsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSk7CisKKyAgICBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBIVE1MQ2FudmFzRWxlbWVu
dCYgY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNzc0Nh
bnZhc05hbWUoKSB7IHJldHVybiBtX2Nzc0NhbnZhc05hbWU7IH0KKworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoSW5zdHJ1
bWVudGluZ0FnZW50cyYpOworCisgICAgfkluc3BlY3RvckNhbnZhcygpIHsgfQorCitwcml2YXRl
OgorICAgIEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IFN0cmluZyYg
Y3NzQ2FudmFzTmFtZSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEhUTUxDYW52
YXNFbGVtZW50JiBtX2NhbnZhczsKKyAgICBTdHJpbmcgbV9jc3NDYW52YXNOYW1lOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAyMGYwYmFhZmUwZmFhMzhmY2NhYWU1NTM5
OGU1OTlkNGM1ZTUxMGU1Li40MDk4NWJmNDM2MDBmOGFmNGU4M2RhYWY0MjhmMWQ5Zjc0ZDYwNGEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNs
dWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgpAQCAtNjUsMTIgKzY0LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3Bl
Y3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQpCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdl
bnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFT
Q0lJTGl0ZXJhbCgiQ2FudmFzIiksIGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hl
cihzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPihj
b250ZXh0LmZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERpc3Bh
dGNoZXIsIHRoaXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBt
X3RpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVy
RmlyZWQpCiB7CiB9CkBAIC05NywxMSArOTUsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgcGFpciA6IG1fY2FudmFzRW50cmllcykgewotICAgICAgICBhdXRvKiBj
YW52YXNFbGVtZW50ID0gcGFpci5rZXk7Ci0gICAgICAgIGF1dG8mIGNhbnZhc0VudHJ5ID0gcGFp
ci52YWx1ZTsKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxk
T2JqZWN0Rm9yQ2FudmFzKGNhbnZhc0VudHJ5LCAqY2FudmFzRWxlbWVudCkpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2Fu
dmFzLnZhbHVlcygpKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRkZWQo
aW5zcGVjdG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyhtX2luc3RydW1lbnRpbmdBZ2Vu
dHMpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCkBAIC0xMTksMzIgKzExNCwyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJikKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQq
IG5vZGVJZCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52
YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAg
IEluc3BlY3RvckNhbnZhcyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFz
KGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmNhbnZhc0VudHJ5
LT5lbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmluc3BlY3Rv
ckNhbnZhcy0+Y2FudmFzKCkuZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkg
ewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRG9jdW1lbnQgaGFzIG5vdCBi
ZWVuIHJlcXVlc3RlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm5vZGVJZCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJv
bnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBjYW52YXNFbnRyeS0+ZWxlbWVudCk7
CisgICAgKm5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgp
LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCAmaW5zcGVj
dG9yQ2FudmFzLT5jYW52YXMoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
cXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52
YXNJZCwgU3RyaW5nKiBjb250ZW50KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNF
bnRyeSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVu
dGlmaWVyIik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJ
bnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3Rv
ckNhbnZhcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgp
OworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMt
PmNhbnZhcygpLnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihjb250ZXh0KSkgewotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3Vs
dCA9IGNhbnZhc0VudHJ5LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9w
bmciKSk7CisgICAgICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXMoKS50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAg
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5yZWxlYXNlTWVzc2FnZSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTU2LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAg
ICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGdsID0gZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCk7CiAKICAgICAgICAgZ2wtPnNldFByZXZlbnRCdWZm
ZXJDbGVhckZvckluc3BlY3Rvcih0cnVlKTsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiBy
ZXN1bHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1h
Z2UvcG5nIikpOworICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3Rv
ckNhbnZhcy0+Y2FudmFzKCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwog
ICAgICAgICBnbC0+c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAog
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0yMTAsMTMgKzIwMSwxMSBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRleHRBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgQ2FudmFzUmVuZGVyaW5nQwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpy
ZXNvbHZlQ2FudmFzQ29udGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgY2FudmFzSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7Ci0gICAg
Y29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQp
OwotICAgIGlmICghY2FudmFzRW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIkludmFsaWQgY2FudmFzIGlkZW50aWZpZXIiKTsKKyAgICBJbnNwZWN0b3JDYW52YXMq
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCi0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzRW50cnktPmVsZW1lbnQtPmRvY3VtZW50KCku
ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRv
Y3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJDYW52YXMgYmVsb25ncyB0byBhIGRvY3VtZW50IHdpdGhvdXQgYSBm
cmFtZSIpOwogICAgICAgICByZXR1cm47CkBAIC0yMjYsNyArMjE1LDcgQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdAogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5pbmplY3RlZFNjcmlwdEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQg
PSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbmRl
cmluZ0NvbnRleHQoKTsKICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBjb250ZXh0QXNTY3JpcHRW
YWx1ZShzdGF0ZSwgY29udGV4dCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI0NSwyNSArMjM0LDI4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmZyYW1lTmF2aWdhdGVkKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFZlY3RvcjxIVE1MQ2FudmFzRWxlbWVudCo+IGNhbnZhc2VzRm9yRnJhbWU7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVzLmtleXMo
KSkgewotICAgICAgICBpZiAoY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpID09ICZm
cmFtZSkKLSAgICAgICAgICAgIGNhbnZhc2VzRm9yRnJhbWUuYXBwZW5kKGNhbnZhc0VsZW1lbnQp
OworICAgIFZlY3RvcjxJbnNwZWN0b3JDYW52YXMqPiBpbnNwZWN0b3JDYW52YXNlczsKKyAgICBm
b3IgKFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZp
ZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXMoKS5kb2N1bWVudCgpLmZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAgICAgICAg
aW5zcGVjdG9yQ2FudmFzZXMuYXBwZW5kKGluc3BlY3RvckNhbnZhcy5nZXQoKSk7CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvKiBjYW52YXNFbGVtZW50IDogY2FudmFzZXNGb3JGcmFtZSkgewotICAg
ICAgICBhdXRvIGNhbnZhc0VudHJ5ID0gbV9jYW52YXNFbnRyaWVzLnRha2UoY2FudmFzRWxlbWVu
dCk7CisgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52YXNlcykg
eworICAgICAgICBTdHJpbmcgaWRlbnRpZmllciA9IHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2Fu
dmFzKTsKICAgICAgICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5jYW52YXNSZW1vdmVkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIpOworICAgICAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7CiAgICAg
fQogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMoSFRN
TENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAg
ICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNJZC5jb250YWlucygmY2FudmFzRWxlbWVudCkp
OwotICAgIEFTU0VSVCghbV9jYW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7
CisgICAgaWYgKGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX2Nh
bnZhc1RvQ1NTQ2FudmFzSWQuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKKyAgICBBU1NFUlQo
IW1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAg
bV9jYW52YXNUb0NTU0NhbnZhc05hbWUuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMo
SFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCkBAIC0yNzcsNDggKzI2OSw0NiBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcyhI
VE1MQ2FudmFzRWxlbWVudCYgY2FudgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRD
cmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVt
ZW50KQogewotICAgIGlmIChtX2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZhc0VsZW1lbnQp
KSB7CisgICAgaWYgKGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBD
YW52YXNFbnRyeSBuZXdDYW52YXNFbnRyeSgiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6
OmNyZWF0ZUlkZW50aWZpZXIoKSwgJmNhbnZhc0VsZW1lbnQpOwotICAgIG5ld0NhbnZhc0VudHJ5
LmNzc0NhbnZhc05hbWUgPSBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQudGFrZSgmY2FudmFzRWxlbWVu
dCk7Ci0KLSAgICBtX2NhbnZhc0VudHJpZXMuc2V0KCZjYW52YXNFbGVtZW50LCBuZXdDYW52YXNF
bnRyeSk7CiAgICAgY2FudmFzRWxlbWVudC5hZGRPYnNlcnZlcigqdGhpcyk7CiAKLSAgICBpZiAo
IW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBjc3NDYW52YXNOYW1lID0g
bV9jYW52YXNUb0NTU0NhbnZhc05hbWUudGFrZSgmY2FudmFzRWxlbWVudCk7CisgICAgYXV0byBp
bnNwZWN0b3JDYW52YXMgPSBJbnNwZWN0b3JDYW52YXM6OmNyZWF0ZShjYW52YXNFbGVtZW50LCBj
c3NDYW52YXNOYW1lKTsKKworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jYW52YXNBZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0Rm9yQ2Fu
dmFzKG1faW5zdHJ1bWVudGluZ0FnZW50cykpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmNhbnZhc0FkZGVkKGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG5ld0NhbnZhc0VudHJ5LCBjYW52YXNF
bGVtZW50KSk7CisgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuc2V0KGluc3BlY3Rv
ckNhbnZhcy0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKGluc3BlY3RvckNhbnZhcykpOwogfQogCiB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRNTENhbnZh
c0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5
ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkK
KyAgICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52
YXMoY2FudmFzRWxlbWVudCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGNh
bnZhc0VudHJ5LT5pZGVudGlmaWVyLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CisgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc01lbW9yeUNoYW5nZWQoaW5zcGVjdG9yQ2FudmFz
LT5pZGVudGlmaWVyKCksIGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50JiBj
YW52YXNFbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBtX2NhbnZhc0VudHJpZXMuZmluZCgmY2Fu
dmFzRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY2FudmFzRW50cmllcy5lbmQoKSkKKyAgICBh
dXRvKiBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQp
OworICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgY2FudmFzSWRlbnRpZmllciA9IGl0LT52
YWx1ZS5pZGVudGlmaWVyOwotICAgIG1fY2FudmFzRW50cmllcy5yZW1vdmUoaXQpOwotCisgICAg
U3RyaW5nIGlkZW50aWZpZXIgPSB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNhbnZhcyk7CiAgICAg
aWYgKCFtX2VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlYkNvcmU6OkNhbnZh
c09ic2VydmVyOjpjYW52YXNEZXN0cm95ZWQgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBH
QyBkZXN0cm95aW5nIHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KICAgICAvLyBEdWUgdG8gdGhlIHNp
bmdsZS1wcm9jZXNzIG1vZGVsIHVzZWQgaW4gV2ViS2l0MSwgdGhlIGV2ZW50IG11c3QgYmUgZGlz
cGF0Y2hlZCBmcm9tIGEgdGltZXIgdG8gcHJldmVudAogICAgIC8vIHRoZSBmcm9udGVuZCBmcm9t
IG1ha2luZyBKUyBhbGxvY2F0aW9ucyB3aGlsZSB0aGUgR0MgaXMgc3RpbGwgYWN0aXZlLgotICAg
IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLmFwcGVuZChjYW52YXNJZGVudGlmaWVyKTsKKyAg
ICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7CiAKICAgICBp
ZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMF9z
KTsKQEAgLTMyOSwxMTEgKzMxOSw1NiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52
YXNEZXN0cm95ZWRUaW1lckZpcmVkKCkKICAgICBpZiAoIW1fcmVtb3ZlZENhbnZhc0lkZW50aWZp
ZXJzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpZGVu
dGlmaWVyIDogbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMpCi0gICAgICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jYW52YXNSZW1vdmVkKGlkZW50aWZpZXIpOworICAgIGlmIChtX2VuYWJsZWQp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVkQ2FudmFzSWRlbnRp
ZmllcnMpCisgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChp
ZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVh
cigpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZhc0RhdGEoKQog
ewotICAgIGZvciAoYXV0byogY2FudmFzRWxlbWVudCA6IG1fY2FudmFzRW50cmllcy5rZXlzKCkp
Ci0gICAgICAgIGNhbnZhc0VsZW1lbnQtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBmb3Ig
KGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZh
bHVlcygpKQorICAgICAgICBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbW92ZU9ic2VydmVy
KCp0aGlzKTsKIAotICAgIG1fY2FudmFzRW50cmllcy5jbGVhcigpOwotICAgIG1fY2FudmFzVG9D
U1NDYW52YXNJZC5jbGVhcigpOworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmNs
ZWFyKCk7CisgICAgbV9jYW52YXNUb0NTU0NhbnZhc05hbWUuY2xlYXIoKTsKICAgICBtX3JlbW92
ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogCiAgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUo
KSkKICAgICAgICAgbV90aW1lci5zdG9wKCk7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpD
YW52YXNFbnRyeSogSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KEhUTUxDYW52
YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQorU3RyaW5nIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1
bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7Ci0gICAgYXV0
byBmaW5kUmVzdWx0ID0gbV9jYW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQpOwotICAg
IGlmIChmaW5kUmVzdWx0ICE9IG1fY2FudmFzRW50cmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
ICZmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNOYW1l
LmNvbnRhaW5zKCZpbnNwZWN0b3JDYW52YXMuY2FudmFzKCkpKTsKIAotICAgIHJldHVybiBudWxs
cHRyOworICAgIFN0cmluZyBpZGVudGlmaWVyID0gaW5zcGVjdG9yQ2FudmFzLmlkZW50aWZpZXIo
KTsKKyAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy5yZW1vdmUoaWRlbnRpZmllcik7
CisKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNh
bnZhc0VudHJ5KiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkoY29uc3QgU3Ry
aW5nJiBjYW52YXNJZGVudGlmaWVyKQorSW5zcGVjdG9yQ2FudmFzKiBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewotICAgIGZvciAoYXV0byYgY2FudmFzRW50cnkgOiBt
X2NhbnZhc0VudHJpZXMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbnZhc0VudHJ5LmlkZW50
aWZpZXIgPT0gY2FudmFzSWRlbnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiAmY2FudmFzRW50
cnk7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gaW5zcGVjdG9yQ2FudmFzID0gbV9pZGVu
dGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghaW5zcGVj
dG9yQ2FudmFzKSB7CisgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJObyBjYW52
YXMgZm9yIGdpdmVuIGlkZW50aWZpZXIuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0
KCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0VudHJ5JiBj
YW52YXNFbnRyeSwgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCitJbnNwZWN0b3JD
YW52YXMqIEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52
YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhc0Vs
ZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGUgY29udGV4dFR5cGU7Ci0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7Ci0j
aWYgRU5BQkxFKFdFQkdMKQotICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4o
Y29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR0w7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAg
IGVsc2UgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBj
b250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6Oldl
YkdMMjsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJHUFUpCi0gICAgZWxzZSBpZiAoaXM8V2ViR1BV
UmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwotI2VuZGlmCi0gICAg
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwor
ICAgIGZvciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JD
YW52YXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygp
ID09ICZjYW52YXNFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5n
ZXQoKTsKICAgICB9CiAKLSAgICBhdXRvIGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q2FudmFzOjpjcmVhdGUoKQotICAgICAgICAuc2V0Q2FudmFzSWQoY2FudmFzRW50cnku
aWRlbnRpZmllcikKLSAgICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJh
bWUpKQotICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpCi0gICAgICAgIC5yZWxl
YXNlKCk7Ci0KLSAgICBpZiAoIWNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQot
ICAgICAgICBjYW52YXMtPnNldENzc0NhbnZhc05hbWUoY2FudmFzRW50cnkuY3NzQ2FudmFzTmFt
ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpOwotICAgICAgICBpbnQgbm9k
ZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZjYW52YXNFbGVtZW50KTsKLSAgICAgICAgaWYg
KCFub2RlSWQpIHsKLSAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21BZ2Vu
dC0+Ym91bmROb2RlSWQoJmNhbnZhc0VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAg
ICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgICAgIG5vZGVJZCA9IGRvbUFn
ZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZjYW52YXNF
bGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlSWQp
Ci0gICAgICAgICAgICBjYW52YXMtPnNldE5vZGVJZChub2RlSWQpOwotICAgIH0KLQotI2lmIEVO
QUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4
dCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
YXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQp
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBjYW52YXMtPnNldENvbnRl
eHRBdHRyaWJ1dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0
ZXM6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEFscGhhKGF0dHJpYnV0ZXMtPmFscGhh
KQotICAgICAgICAgICAgICAgIC5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCkKLSAgICAgICAg
ICAgICAgICAuc2V0U3RlbmNpbChhdHRyaWJ1dGVzLT5zdGVuY2lsKQotICAgICAgICAgICAgICAg
IC5zZXRBbnRpYWxpYXMoYXR0cmlidXRlcy0+YW50aWFsaWFzKQotICAgICAgICAgICAgICAgIC5z
ZXRQcmVtdWx0aXBsaWVkQWxwaGEoYXR0cmlidXRlcy0+cHJlbXVsdGlwbGllZEFscGhhKQotICAg
ICAgICAgICAgICAgIC5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0cmlidXRlcy0+cHJlc2Vy
dmVEcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIC5zZXRGYWlsSWZNYWpvclBlcmZvcm1h
bmNlQ2F2ZWF0KGF0dHJpYnV0ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpCi0gICAg
ICAgICAgICAgICAgLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAg
IGlmIChzaXplX3QgbWVtb3J5Q29zdCA9IGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKQotICAg
ICAgICBjYW52YXMtPnNldE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7Ci0KLSAgICByZXR1cm4gY2Fu
dmFzOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4
IDBhMGVhODg4YWU3MmI4ZmM2ZGQ1ODA2ODY0OWNjMDZmNTk1ZmY1ZGIuLjA3ZDE2ZTBiODQyYTIw
YjgwZjFjMjIyOTg4YTlmNWNmMTY1ZjViNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
Q2FudmFzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CkBAIC00Miw3ICs0Myw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKQEAg
LTUxLDcgKzUxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQ2FudmFzT2JzZXIKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0Jiwg
SW5zcGVjdG9yUGFnZUFnZW50Kik7CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ2FudmFzQWdlbnQo
V2ViQWdlbnRDb250ZXh0Jik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKSB7
IH0KIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CkBA
IC03OSwzMyArNzksMTggQEAgcHVibGljOgogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxD
YW52YXNFbGVtZW50Jikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IENhbnZhc0Vu
dHJ5IHsKLSAgICAgICAgU3RyaW5nIGlkZW50aWZpZXI7Ci0gICAgICAgIFN0cmluZyBjc3NDYW52
YXNOYW1lOwotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCA9IHsgbnVsbHB0ciB9
OwotCi0gICAgICAgIENhbnZhc0VudHJ5KCkgeyB9Ci0KLSAgICAgICAgQ2FudmFzRW50cnkoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCkK
LSAgICAgICAgICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAgICAgLCBlbGVt
ZW50KGNhbnZhc0VsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICB2
b2lkIGNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FudmFzRGF0
YSgpOwotICAgIENhbnZhc0VudHJ5KiBnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYp
OwotICAgIENhbnZhc0VudHJ5KiBnZXRDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmKTsKLSAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2Fu
dmFzKGNvbnN0IENhbnZhc0VudHJ5JiwgSFRNTENhbnZhc0VsZW1lbnQmKTsKKyAgICBTdHJpbmcg
dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYpOworICAgIEluc3BlY3RvckNhbnZhcyogYXNz
ZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgSW5z
cGVjdG9yQ2FudmFzKiBmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50Jik7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNoZXI+
IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OwogCi0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCos
IENhbnZhc0VudHJ5PiBtX2NhbnZhc0VudHJpZXM7Ci0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxl
bWVudCosIFN0cmluZz4gbV9jYW52YXNUb0NTU0NhbnZhc0lkOworICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXM7
CisgICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9jYW52YXNUb0NTU0Nh
bnZhc05hbWU7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnM7
CiAgICAgVGltZXIgbV90aW1lcjsKICAgICBib29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
NGY4MTEzZDBmY2NjYjA4MjQ2OWIyMmEyZTVkNGU0OWFlNGVlN2M1YS4uZGU3YzkzMWIyZWQwNTcy
YjQzNzAxMzc2MzU1N2RmMzc3ZTgxNWMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSYgcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAgICAgbV9hZ2VudHMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yV29ya2VyQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAK
LSAgICBhdXRvIGNhbnZhc0FnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDYW52
YXNBZ2VudD4ocGFnZUNvbnRleHQsIHBhZ2VBZ2VudCk7CisgICAgYXV0byBjYW52YXNBZ2VudFB0
ciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBhZ2VDb250ZXh0KTsK
ICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckNhbnZhc0FnZW50KGNhbnZh
c0FnZW50UHRyLmdldCgpKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZShjYW52YXNBZ2Vu
dFB0cikpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggN2FiZmY3NDc0MjE3NzU2YmJlZmE1ZWUzNWRiYWEwZjkyNzI3YjI1
MS4uMWRmMTZjMjQ5ZWViOTQ5MGM5MWY1YmQwOTQ4Y2YyZThmMGFhODk3NCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDE3LTA3LTEwICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVjdGF0
aW9ucyBmb3IgbmV3IGVycm9yIHN0cmluZ3MuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2Fu
dmFzL3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFz
L3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dDoKKwogMjAxNy0wNy0xMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrIG9mIHRleHQgaXMg
bWlzc2luZyBpbiBpQm9va3Mgc2FtcGxlIGJvb2tzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dAppbmRl
eCBlOGI5ZDViY2UwNWZmMDljN2JlZjU2NWNjZTY1NmEwMjU2NGVlZmU2Li40ZTE5OWRmNjA2OGYx
ZDFmMmNlZTkzOTY0YjU0M2Q3MDE3MzRmNTg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dApAQCAt
Nyw1ICs3LDUgQEAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFTd0FBQUNXQ0FZQUFBQmtXN1hTQUFBQUFYTlNSMElBcnMKIAogLS0gUnVubmluZyB0ZXN0IGNh
c2U6IENhbnZhcy5yZXF1ZXN0Q29udGVudC5pbnZhbGlkQ2FudmFzSWQKIFBBU1M6IFNob3VsZCBw
cm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9y
OiBObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50aWZpZXIuCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKaW5kZXggOWFjZDM3
NmMyMzIxNjNmOTgzMmJkMGIzM2QxNjhmNGYyODM0ZmUyMC4uNzE1YzQzMWIwZTkyYTViNmE0NmQ3
MWZkYTQ2NWU2ZDIxZTcxYjQzYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKQEAgLTE3LDUgKzE3LDUgQEAgUEFTUzog
Q2FudmFzICJDYW52YXMgMiIgaGFzIG5vZGUgd2l0aCB0eXBlICJDQU5WQVMiLgogCiAtLSBSdW5u
aW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVlc3ROb2RlLmludmFsaWRDYW52YXNJZAogUEFTUzog
U2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRpZmll
cgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250
ZXh0LTJkLWV4cGVjdGVkLnR4dAppbmRleCBkOTIxZjI0ODlkMjU2ZmI1MThmNGM2ZTRkZjk2OWEx
NjY4MWI0MmYwLi42ZWQ2MzNkYTg0ODM2OGQ5NjViOTA0YjI0NjI2NGY5NmY1MDA2ODk1IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250ZXh0
LTJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29s
dmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dApAQCAtOCw1ICs4LDUgQEAgUEFTUzogUGF5
bG9hZCBzaG91bGQgaGF2ZSBjbGFzc05hbWUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIuCiAK
IC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVzb2x2ZUNhbnZhc0NvbnRleHQuaW52YWxp
ZElkZW50aWZpZXIKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IEludmFs
aWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50aWZp
ZXIuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314989</attachid>
            <date>2017-07-10 09:22:47 -0700</date>
            <delta_ts>2017-07-10 10:50:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710092247.patch</filename>
            <type>text/plain</type>
            <size>37899</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uMTM4Zjc5OTg5MGM0NmZhNGRiMjk3YzJlYzBjYzM3
MmZkODU3N2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2
ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZh
c0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpnZXRDYW52YXNFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YnVpbGRPYmplY3RGb3JDYW52YXMpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorCiAyMDE3LTA3LTEwICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4dCBpcyBtaXNz
aW5nIGluIGlCb29rcyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTZkNDU5ZmFmMGE1NjgyYmRmZjZlMzli
N2Q5ODk1NTBmZjIwZTg3Mi4uZjkyOTM1YmU1MjYxMzBlYWMyMjA5YzYzNjZlNTkzNjNlOThmZjQ2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjg3Niw2ICsyODc2LDggQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFD
NkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThD
N0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZC
RTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEg
LyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLzsgfTsKKwkJNkEyMkU4NzAxRjEwNDE4NjAw
RjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNh
bnZhcy5oICovOyB9OworCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2Fu
dmFzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovOyB9OwogCQk2
QTMyRDdDRTFBMTZEOEMwMDA0MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjYxOUQyMjVE
ODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKIAkJNkE0QjZENjUx
OUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKIAkJNkIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA3MjcsNiAr
MTA3MjksOCBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5
NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyog
SW5zcGVjdG9yQ2FudmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5z
cGVjdG9yQ2FudmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDYW52YXNBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEg
LyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2
ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzI0Nyw2ICsxNzI1MSw4
IEBACiAJCQkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICov
LAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLywKKwkJCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8sCiAJCQkJNkE0QjZENjYxOUQyMjVEODAwNkYxMUQz
IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLywKIAkJCQk2QTRCNkQ2NDE5RDIyNTE5MDA2
RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLywKIAkJCQk3QTFGMkI1MTEyNkM2MUIy
MDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI3Nzk4LDYgKzI3ODA0LDcg
QEAKIAkJCQk5MzMwOURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5MjAwNTZFNTgx
IC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1RThENTExRTA2
REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
Nzg4LDYgKzMxNzk1LDcgQEAKIAkJCQk5MzMwOURFRjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURG
MTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMg
LyogSW5zcGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZBMzJEN0NFMUExNkQ4
QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2FiNjZiZmViMjVmMzVjMDFhODVmOGE4ZjFjMDBh
NWM0Y2QxZDliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNhbnZhcy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGluc3BlY3Rvci9JZGVudGlm
aWVyc0ZhY3RvcnkuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmNy
ZWF0ZShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05h
bWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ2FudmFzKGNhbnZhcywg
Y3NzQ2FudmFzTmFtZSkpOworfQorCitJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpCisg
ICAgOiBtX2lkZW50aWZpZXIoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJ
ZGVudGlmaWVyKCkpCisgICAgLCBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2Nzc0NhbnZhc05h
bWUoY3NzQ2FudmFzTmFtZSkKK3sKK30KKworUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gbV9jYW52YXMuZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBtX2NhbnZhcy5y
ZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNv
bnRleHRUeXBlIGNvbnRleHRUeXBlOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KGNvbnRleHQpKQorICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisjaWYgRU5BQkxFKFdFQkdMKQorICAgIGVsc2Ug
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyNlbmRp
ZgorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQor
ICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQorICAgIGNv
bnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2Vi
R1BVOworI2VuZGlmCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOworICAgIH0KKworICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRDYW52YXNJZCht
X2lkZW50aWZpZXIpCisgICAgICAgIC5zZXRGcmFtZUlkKGluc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yUGFnZUFnZW50KCktPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAuc2V0Q29udGV4dFR5
cGUoY29udGV4dFR5cGUpCisgICAgICAgIC5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1fY3NzQ2Fu
dmFzTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhbnZhcy0+c2V0Q3NzQ2FudmFzTmFtZShtX2Nz
c0NhbnZhc05hbWUpOworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgICAg
IGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzKTsKKyAgICAgICAg
aWYgKCFub2RlSWQpIHsKKyAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21B
Z2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzLmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgICAgICAgICBub2RlSWQgPSBkb21BZ2Vu
dC0+cHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmbV9jYW52YXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGVJZCkKKyAgICAg
ICAgICAgIGNhbnZhcy0+c2V0Tm9kZUlkKG5vZGVJZCk7CisgICAgfQorCisjaWYgRU5BQkxFKFdF
QkdMKQorICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgewor
ICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1
dGVzID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCktPmdldENv
bnRleHRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJp
YnV0ZXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpCisgICAg
ICAgICAgICAgICAgLnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKQorICAgICAgICAgICAgICAg
IC5zZXRTdGVuY2lsKGF0dHJpYnV0ZXMtPnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgLnNldEFu
dGlhbGlhcyhhdHRyaWJ1dGVzLT5hbnRpYWxpYXMpCisgICAgICAgICAgICAgICAgLnNldFByZW11
bHRpcGxpZWRBbHBoYShhdHRyaWJ1dGVzLT5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgICAg
ICAgICAgLnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihhdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdp
bmdCdWZmZXIpCisgICAgICAgICAgICAgICAgLnNldEZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZl
YXQoYXR0cmlidXRlcy0+ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkKKyAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNp
emVfdCBtZW1vcnlDb3N0ID0gbV9jYW52YXMubWVtb3J5Q29zdCgpKQorICAgICAgICBjYW52YXMt
PnNldE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7CisKKyAgICByZXR1cm4gY2FudmFzOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjY3MzliMzNkMTQwYjU4OTk4NjdhMWZjYjY4MTBkM2E4
MmY3OWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRz
OworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQ2FudmFz
IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVu
dCYsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSk7CisKKyAgICBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBIVE1MQ2FudmFzRWxlbWVu
dCYgY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNzc0Nh
bnZhc05hbWUoKSB7IHJldHVybiBtX2Nzc0NhbnZhc05hbWU7IH0KKworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoSW5zdHJ1
bWVudGluZ0FnZW50cyYpOworCisgICAgfkluc3BlY3RvckNhbnZhcygpIHsgfQorCitwcml2YXRl
OgorICAgIEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IFN0cmluZyYg
Y3NzQ2FudmFzTmFtZSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEhUTUxDYW52
YXNFbGVtZW50JiBtX2NhbnZhczsKKyAgICBTdHJpbmcgbV9jc3NDYW52YXNOYW1lOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAyMGYwYmFhZmUwZmFhMzhmY2NhYWU1NTM5
OGU1OTlkNGM1ZTUxMGU1Li45ZjJkZDhkYzc0MjcwOWI0YzZiNTE5OWY4Y2U2N2FkMTUyZDU3NTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNs
dWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgpAQCAtNjUsMTIgKzY0LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3Bl
Y3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQpCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdl
bnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFT
Q0lJTGl0ZXJhbCgiQ2FudmFzIiksIGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hl
cihzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPihj
b250ZXh0LmZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERpc3Bh
dGNoZXIsIHRoaXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBt
X3RpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVy
RmlyZWQpCiB7CiB9CkBAIC05NywxMSArOTUsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgcGFpciA6IG1fY2FudmFzRW50cmllcykgewotICAgICAgICBhdXRvKiBj
YW52YXNFbGVtZW50ID0gcGFpci5rZXk7Ci0gICAgICAgIGF1dG8mIGNhbnZhc0VudHJ5ID0gcGFp
ci52YWx1ZTsKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxk
T2JqZWN0Rm9yQ2FudmFzKGNhbnZhc0VudHJ5LCAqY2FudmFzRWxlbWVudCkpOwotICAgIH0KKyAg
ICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2Fu
dmFzLnZhbHVlcygpKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRkZWQo
aW5zcGVjdG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyhtX2luc3RydW1lbnRpbmdBZ2Vu
dHMpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCkBAIC0xMTksMzIgKzExNCwyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJikKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQq
IG5vZGVJZCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52
YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAg
IEluc3BlY3RvckNhbnZhcyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFz
KGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmNhbnZhc0VudHJ5
LT5lbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmluc3BlY3Rv
ckNhbnZhcy0+Y2FudmFzKCkuZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkg
ewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRG9jdW1lbnQgaGFzIG5vdCBi
ZWVuIHJlcXVlc3RlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm5vZGVJZCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJv
bnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBjYW52YXNFbnRyeS0+ZWxlbWVudCk7
CisgICAgKm5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgp
LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCAmaW5zcGVj
dG9yQ2FudmFzLT5jYW52YXMoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
cXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52
YXNJZCwgU3RyaW5nKiBjb250ZW50KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNF
bnRyeSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVu
dGlmaWVyIik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJ
bnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3Rv
ckNhbnZhcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgp
OworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMt
PmNhbnZhcygpLnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihjb250ZXh0KSkgewotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3Vs
dCA9IGNhbnZhc0VudHJ5LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9w
bmciKSk7CisgICAgICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXMoKS50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAg
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5yZWxlYXNlTWVzc2FnZSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTU2LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAg
ICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGdsID0gZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCk7CiAKICAgICAgICAgZ2wtPnNldFByZXZlbnRCdWZm
ZXJDbGVhckZvckluc3BlY3Rvcih0cnVlKTsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiBy
ZXN1bHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1h
Z2UvcG5nIikpOworICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3Rv
ckNhbnZhcy0+Y2FudmFzKCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwog
ICAgICAgICBnbC0+c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAog
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0xNzMsMTQgKzE2NCwxMiBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpy
ZXF1ZXN0Q1NTQ2FudmFzQ2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pj4mIHJlc3VsdCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRD
YW52YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBl
cnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOwor
ICAgIEluc3BlY3RvckNhbnZhcyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2Fu
dmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgOiBjYW52
YXNFbnRyeS0+ZWxlbWVudC0+Y3NzQ2FudmFzQ2xpZW50cygpKSB7CisgICAgZm9yIChFbGVtZW50
KiBlbGVtZW50IDogaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5jc3NDYW52YXNDbGllbnRzKCkp
IHsKICAgICAgICAgaWYgKGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmZWxlbWVudC0+ZG9jdW1lbnQoKSkp
CiAgICAgICAgICAgICByZXN1bHQtPmFkZEl0ZW0obV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvckRPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnRO
b2RlSWQsIGVsZW1lbnQpKTsKICAgICB9CkBAIC0yMTAsMTMgKzE5OSwxMSBAQCBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnRleHRBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQ2Fu
dmFzUmVuZGVyaW5nQwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFz
Q29udGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQs
IGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7Ci0gICAgY29uc3QgQ2FudmFz
RW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICgh
Y2FudmFzRW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFs
aWQgY2FudmFzIGlkZW50aWZpZXIiKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNh
bnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOworICAg
IGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgRnJh
bWUqIGZyYW1lID0gY2FudmFzRW50cnktPmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRvY3VtZW50KCkuZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJDYW52YXMgYmVsb25ncyB0byBhIGRvY3VtZW50IHdpdGhvdXQgYSBmcmFtZSIpOwogICAg
ICAgICByZXR1cm47CkBAIC0yMjYsNyArMjEzLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAog
ICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3Rl
ZFNjcmlwdEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbnRy
eS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbmRlcmluZ0NvbnRleHQo
KTsKICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBjb250ZXh0QXNTY3JpcHRWYWx1ZShzdGF0ZSwg
Y29udGV4dCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTI0NSw4MCArMjMyLDgxIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1l
TmF2aWdhdGVkKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZl
Y3RvcjxIVE1MQ2FudmFzRWxlbWVudCo+IGNhbnZhc2VzRm9yRnJhbWU7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVzLmtleXMoKSkgewotICAgICAg
ICBpZiAoY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpID09ICZmcmFtZSkKLSAgICAg
ICAgICAgIGNhbnZhc2VzRm9yRnJhbWUuYXBwZW5kKGNhbnZhc0VsZW1lbnQpOworICAgIFZlY3Rv
cjxJbnNwZWN0b3JDYW52YXMqPiBpbnNwZWN0b3JDYW52YXNlczsKKyAgICBmb3IgKFJlZlB0cjxJ
bnNwZWN0b3JDYW52YXM+JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3Rv
ckNhbnZhcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMo
KS5kb2N1bWVudCgpLmZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAgICAgICAgaW5zcGVjdG9yQ2Fu
dmFzZXMuYXBwZW5kKGluc3BlY3RvckNhbnZhcy5nZXQoKSk7CiAgICAgfQogCi0gICAgZm9yIChh
dXRvKiBjYW52YXNFbGVtZW50IDogY2FudmFzZXNGb3JGcmFtZSkgewotICAgICAgICBhdXRvIGNh
bnZhc0VudHJ5ID0gbV9jYW52YXNFbnRyaWVzLnRha2UoY2FudmFzRWxlbWVudCk7CisgICAgZm9y
IChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52YXNlcykgeworICAgICAgICBT
dHJpbmcgaWRlbnRpZmllciA9IHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFzKTsKICAgICAg
ICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52
YXNSZW1vdmVkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIpOworICAgICAgICAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7CiAgICAgfQogfQogCiB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMoSFRNTENhbnZhc0VsZW1l
bnQmIGNhbnZhc0VsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQoIW1f
Y2FudmFzVG9DU1NDYW52YXNJZC5jb250YWlucygmY2FudmFzRWxlbWVudCkpOwotICAgIEFTU0VS
VCghbV9jYW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgaWYgKGZp
bmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX2NhbnZhc1RvQ1NTQ2Fu
dmFzSWQuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9D
U1NDYW52YXNOYW1lLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgbV9jYW52YXNUb0NT
U0NhbnZhc05hbWUuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoSFRNTENhbnZhc0Vs
ZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0Vu
dHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRy
eSkKKyAgICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JD
YW52YXMoY2FudmFzRWxlbWVudCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jc3NDYW52YXNDbGllbnROb2Rl
c0NoYW5nZWQoY2FudmFzRW50cnktPmlkZW50aWZpZXIpOworICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5jc3NDYW52YXNDbGllbnROb2Rlc0NoYW5nZWQoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlm
aWVyKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewotICAg
IGlmIChtX2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZhc0VsZW1lbnQpKSB7CisgICAgaWYg
KGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDYW52YXNFbnRyeSBu
ZXdDYW52YXNFbnRyeSgiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50
aWZpZXIoKSwgJmNhbnZhc0VsZW1lbnQpOwotICAgIG5ld0NhbnZhc0VudHJ5LmNzc0NhbnZhc05h
bWUgPSBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQudGFrZSgmY2FudmFzRWxlbWVudCk7Ci0KLSAgICBt
X2NhbnZhc0VudHJpZXMuc2V0KCZjYW52YXNFbGVtZW50LCBuZXdDYW52YXNFbnRyeSk7CiAgICAg
Y2FudmFzRWxlbWVudC5hZGRPYnNlcnZlcigqdGhpcyk7CiAKLSAgICBpZiAoIW1fZW5hYmxlZCkK
LSAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBjc3NDYW52YXNOYW1lID0gbV9jYW52YXNUb0NT
U0NhbnZhc05hbWUudGFrZSgmY2FudmFzRWxlbWVudCk7CisgICAgYXV0byBpbnNwZWN0b3JDYW52
YXMgPSBJbnNwZWN0b3JDYW52YXM6OmNyZWF0ZShjYW52YXNFbGVtZW50LCBjc3NDYW52YXNOYW1l
KTsKKworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
YW52YXNBZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG1faW5zdHJ1
bWVudGluZ0FnZW50cykpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVk
KGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG5ld0NhbnZhc0VudHJ5LCBjYW52YXNFbGVtZW50KSk7Cisg
ICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuc2V0KGluc3BlY3RvckNhbnZhcy0+aWRl
bnRpZmllcigpLCBXVEZNb3ZlKGluc3BlY3RvckNhbnZhcykpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRNTENhbnZhc0VsZW1lbnQmIGNh
bnZhc0VsZW1lbnQpCiB7Ci0gICAgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFz
RW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkKKyAgICBJbnNwZWN0
b3JDYW52YXMqIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxl
bWVudCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGNhbnZhc0VudHJ5LT5p
ZGVudGlmaWVyLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CisgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNhbnZhc01lbW9yeUNoYW5nZWQoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVy
KCksIGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50
KQogewotICAgIGF1dG8gaXQgPSBtX2NhbnZhc0VudHJpZXMuZmluZCgmY2FudmFzRWxlbWVudCk7
Ci0gICAgaWYgKGl0ID09IG1fY2FudmFzRW50cmllcy5lbmQoKSkKKyAgICBhdXRvKiBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIEFTU0VS
VChpbnNwZWN0b3JDYW52YXMpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgY2FudmFzSWRlbnRpZmllciA9IGl0LT52YWx1ZS5pZGVudGlm
aWVyOwotICAgIG1fY2FudmFzRW50cmllcy5yZW1vdmUoaXQpOwotCisgICAgU3RyaW5nIGlkZW50
aWZpZXIgPSB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFtX2VuYWJs
ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlYkNvcmU6OkNhbnZhc09ic2VydmVyOjpj
YW52YXNEZXN0cm95ZWQgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBHQyBkZXN0cm95aW5n
IHRoZSBIVE1MQ2FudmFzRWxlbWVudC4KICAgICAvLyBEdWUgdG8gdGhlIHNpbmdsZS1wcm9jZXNz
IG1vZGVsIHVzZWQgaW4gV2ViS2l0MSwgdGhlIGV2ZW50IG11c3QgYmUgZGlzcGF0Y2hlZCBmcm9t
IGEgdGltZXIgdG8gcHJldmVudAogICAgIC8vIHRoZSBmcm9udGVuZCBmcm9tIG1ha2luZyBKUyBh
bGxvY2F0aW9ucyB3aGlsZSB0aGUgR0MgaXMgc3RpbGwgYWN0aXZlLgotICAgIG1fcmVtb3ZlZENh
bnZhc0lkZW50aWZpZXJzLmFwcGVuZChjYW52YXNJZGVudGlmaWVyKTsKKyAgICBtX3JlbW92ZWRD
YW52YXNJZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7CiAKICAgICBpZiAoIW1fdGltZXIu
aXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMF9zKTsKQEAgLTMyOSwx
MTEgKzMxNyw1NiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRU
aW1lckZpcmVkKCkKICAgICBpZiAoIW1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbV9y
ZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
YW52YXNSZW1vdmVkKGlkZW50aWZpZXIpOworICAgIGlmIChtX2VuYWJsZWQpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMpCisgICAg
ICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsK
KyAgICB9CiAKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQogCiB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZhc0RhdGEoKQogewotICAgIGZvciAo
YXV0byogY2FudmFzRWxlbWVudCA6IG1fY2FudmFzRW50cmllcy5rZXlzKCkpCi0gICAgICAgIGNh
bnZhc0VsZW1lbnQtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGluc3Bl
Y3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKQorICAg
ICAgICBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIAot
ICAgIG1fY2FudmFzRW50cmllcy5jbGVhcigpOwotICAgIG1fY2FudmFzVG9DU1NDYW52YXNJZC5j
bGVhcigpOworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmNsZWFyKCk7CisgICAg
bV9jYW52YXNUb0NTU0NhbnZhc05hbWUuY2xlYXIoKTsKICAgICBtX3JlbW92ZWRDYW52YXNJZGVu
dGlmaWVycy5jbGVhcigpOwogCiAgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV90aW1lci5zdG9wKCk7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52YXNFbnRyeSog
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KEhUTUxDYW52YXNFbGVtZW50JiBj
YW52YXNFbGVtZW50KQorU3RyaW5nIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMo
SW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7Ci0gICAgYXV0byBmaW5kUmVzdWx0
ID0gbV9jYW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQpOwotICAgIGlmIChmaW5kUmVz
dWx0ICE9IG1fY2FudmFzRW50cmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZmaW5kUmVzdWx0
LT52YWx1ZTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNvbnRhaW5zKCZp
bnNwZWN0b3JDYW52YXMuY2FudmFzKCkpKTsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIFN0
cmluZyBpZGVudGlmaWVyID0gaW5zcGVjdG9yQ2FudmFzLmlkZW50aWZpZXIoKTsKKyAgICBtX2lk
ZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICByZXR1
cm4gaWRlbnRpZmllcjsKIH0KIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNhbnZhc0VudHJ5KiBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBjYW52YXNJ
ZGVudGlmaWVyKQorSW5zcGVjdG9yQ2FudmFzKiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0
SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyKQogewotICAgIGZvciAoYXV0byYgY2FudmFzRW50cnkgOiBtX2NhbnZhc0VudHJp
ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIgPT0gY2Fu
dmFzSWRlbnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiAmY2FudmFzRW50cnk7CisgICAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gaW5zcGVjdG9yQ2FudmFzID0gbV9pZGVudGlmaWVyVG9JbnNw
ZWN0b3JDYW52YXMuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKSB7
CisgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJObyBjYW52YXMgZm9yIGdpdmVu
IGlkZW50aWZpZXIuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0KCk7CiB9CiAKLVJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0VudHJ5JiBjYW52YXNFbnRyeSwg
SFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCitJbnNwZWN0b3JDYW52YXMqIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBj
YW52YXNFbGVtZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhc0VsZW1lbnQuZG9jdW1l
bnQoKS5mcmFtZSgpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52
YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dFR5cGUgY29udGV4dFR5cGU7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7Ci0jaWYgRU5BQkxFKFdF
QkdMKQotICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0g
ICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0
VHlwZTo6V2ViR0w7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIGVsc2UgaWYgKGlz
PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKLSNlbmRp
ZgotI2lmIEVOQUJMRShXRUJHUFUpCi0gICAgZWxzZSBpZiAoaXM8V2ViR1BVUmVuZGVyaW5nQ29u
dGV4dD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwotI2VuZGlmCi0gICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgIGZvciAoYXV0
byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFsdWVz
KCkpIHsKKyAgICAgICAgaWYgKCZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpID09ICZjYW52YXNF
bGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5nZXQoKTsKICAgICB9
CiAKLSAgICBhdXRvIGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFz
OjpjcmVhdGUoKQotICAgICAgICAuc2V0Q2FudmFzSWQoY2FudmFzRW50cnkuaWRlbnRpZmllcikK
LSAgICAgICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQotICAgICAg
ICAuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAg
ICBpZiAoIWNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQotICAgICAgICBjYW52
YXMtPnNldENzc0NhbnZhc05hbWUoY2FudmFzRW50cnkuY3NzQ2FudmFzTmFtZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gZG9tQWdl
bnQtPmJvdW5kTm9kZUlkKCZjYW52YXNFbGVtZW50KTsKLSAgICAgICAgaWYgKCFub2RlSWQpIHsK
LSAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2Rl
SWQoJmNhbnZhc0VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAgICAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9k
ZVRvRnJvbnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZjYW52YXNFbGVtZW50KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlSWQpCi0gICAgICAgICAg
ICBjYW52YXMtPnNldE5vZGVJZChub2RlSWQpOwotICAgIH0KLQotI2lmIEVOQUJMRShXRUJHTCkK
LSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKLSAgICAg
ICAgaWYgKHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9
IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLT5nZXRDb250ZXh0
QXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVz
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgp
Ci0gICAgICAgICAgICAgICAgLnNldEFscGhhKGF0dHJpYnV0ZXMtPmFscGhhKQotICAgICAgICAg
ICAgICAgIC5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCkKLSAgICAgICAgICAgICAgICAuc2V0
U3RlbmNpbChhdHRyaWJ1dGVzLT5zdGVuY2lsKQotICAgICAgICAgICAgICAgIC5zZXRBbnRpYWxp
YXMoYXR0cmlidXRlcy0+YW50aWFsaWFzKQotICAgICAgICAgICAgICAgIC5zZXRQcmVtdWx0aXBs
aWVkQWxwaGEoYXR0cmlidXRlcy0+cHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICAgICAgICAg
IC5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0cmlidXRlcy0+cHJlc2VydmVEcmF3aW5nQnVm
ZmVyKQotICAgICAgICAgICAgICAgIC5zZXRGYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KGF0
dHJpYnV0ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpCi0gICAgICAgICAgICAgICAg
LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChzaXplX3Qg
bWVtb3J5Q29zdCA9IGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKQotICAgICAgICBjYW52YXMt
PnNldE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7Ci0KLSAgICByZXR1cm4gY2FudmFzOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IDBhMGVhODg4YWU3
MmI4ZmM2ZGQ1ODA2ODY0OWNjMDZmNTk1ZmY1ZGIuLjA3ZDE2ZTBiODQyYTIwYjgwZjFjMjIyOTg4
YTlmNWNmMTY1ZjViNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNBZ2VudC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CkBAIC00Miw3
ICs0Myw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKQEAgLTUxLDcgKzUxLDcg
QEAgY2xhc3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgQ2FudmFzT2JzZXIKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNw
ZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yUGFn
ZUFnZW50Kik7CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250
ZXh0Jik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKSB7IH0KIAogICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CkBAIC03OSwzMyArNzks
MTggQEAgcHVibGljOgogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50
Jikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IENhbnZhc0VudHJ5IHsKLSAgICAg
ICAgU3RyaW5nIGlkZW50aWZpZXI7Ci0gICAgICAgIFN0cmluZyBjc3NDYW52YXNOYW1lOwotICAg
ICAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCA9IHsgbnVsbHB0ciB9OwotCi0gICAgICAg
IENhbnZhc0VudHJ5KCkgeyB9Ci0KLSAgICAgICAgQ2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCkKLSAgICAgICAgICAg
IDogaWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAgICAgLCBlbGVtZW50KGNhbnZhc0Vs
ZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICB2b2lkIGNhbnZhc0Rl
c3Ryb3llZFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FudmFzRGF0YSgpOwotICAgIENh
bnZhc0VudHJ5KiBnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIENhbnZh
c0VudHJ5KiBnZXRDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmKTsKLSAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENh
bnZhc0VudHJ5JiwgSFRNTENhbnZhc0VsZW1lbnQmKTsKKyAgICBTdHJpbmcgdW5iaW5kQ2FudmFz
KEluc3BlY3RvckNhbnZhcyYpOworICAgIEluc3BlY3RvckNhbnZhcyogYXNzZXJ0SW5zcGVjdG9y
Q2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yQ2FudmFz
KiBmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50Jik7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmRE
aXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1f
cGFnZUFnZW50OwogCi0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIENhbnZhc0VudHJ5
PiBtX2NhbnZhc0VudHJpZXM7Ci0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIFN0cmlu
Zz4gbV9jYW52YXNUb0NTU0NhbnZhc0lkOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yQ2FudmFzPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXM7CisgICAgSGFzaE1h
cDxIVE1MQ2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9jYW52YXNUb0NTU0NhbnZhc05hbWU7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnM7CiAgICAgVGltZXIg
bV90aW1lcjsKICAgICBib29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNGY4MTEzZDBmY2Nj
YjA4MjQ2OWIyMmEyZTVkNGU0OWFlNGVlN2M1YS4uZGU3YzkzMWIyZWQwNTcyYjQzNzAxMzc2MzU1
N2RmMzc3ZTgxNWMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6
Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSYgcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0
b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8SW5zcGVjdG9yV29ya2VyQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAKLSAgICBhdXRvIGNh
bnZhc0FnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDYW52YXNBZ2VudD4ocGFn
ZUNvbnRleHQsIHBhZ2VBZ2VudCk7CisgICAgYXV0byBjYW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBhZ2VDb250ZXh0KTsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckNhbnZhc0FnZW50KGNhbnZhc0FnZW50UHRyLmdl
dCgpKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZShjYW52YXNBZ2VudFB0cikpOwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggN2FiZmY3NDc0MjE3NzU2YmJlZmE1ZWUzNWRiYWEwZjkyNzI3YjI1MS4uMWRmMTZjMjQ5
ZWViOTQ5MGM5MWY1YmQwOTQ4Y2YyZThmMGFhODk3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDE3LTA3LTEwICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBSZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Q2FudmFzRW50cnkgd2l0aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgbmV3
IGVycm9yIHN0cmluZ3MuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250
ZW50LTJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RO
b2RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52
YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dDoKKwogMjAxNy0wNy0xMCAgWmFsYW4gQnVqdGFzICA8
emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrIG9mIHRleHQgaXMgbWlzc2luZyBpbiBp
Qm9va3Mgc2FtcGxlIGJvb2tzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dAppbmRleCBlOGI5ZDViY2Uw
NWZmMDljN2JlZjU2NWNjZTY1NmEwMjU2NGVlZmU2Li40ZTE5OWRmNjA2OGYxZDFmMmNlZTkzOTY0
YjU0M2Q3MDE3MzRmNTg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dApAQCAtNyw1ICs3LDUgQEAg
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFTd0FBQUNXQ0FZ
QUFBQmtXN1hTQUFBQUFYTlNSMElBcnMKIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IENhbnZhcy5y
ZXF1ZXN0Q29udGVudC5pbnZhbGlkQ2FudmFzSWQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVy
cm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMg
Zm9yIGdpdmVuIGlkZW50aWZpZXIuCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jYW52YXMvcmVxdWVzdE5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKaW5kZXggOWFjZDM3NmMyMzIxNjNmOTgz
MmJkMGIzM2QxNjhmNGYyODM0ZmUyMC4uNzE1YzQzMWIwZTkyYTViNmE0NmQ3MWZkYTQ2NWU2ZDIx
ZTcxYjQzYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0
Tm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1
ZXN0Tm9kZS1leHBlY3RlZC50eHQKQEAgLTE3LDUgKzE3LDUgQEAgUEFTUzogQ2FudmFzICJDYW52
YXMgMiIgaGFzIG5vZGUgd2l0aCB0eXBlICJDQU5WQVMiLgogCiAtLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogQ2FudmFzLnJlcXVlc3ROb2RlLmludmFsaWRDYW52YXNJZAogUEFTUzogU2hvdWxkIHByb2R1
Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRpZmllcgorRXJyb3I6IE5v
IGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4dC0yZC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVj
dGVkLnR4dAppbmRleCBkOTIxZjI0ODlkMjU2ZmI1MThmNGM2ZTRkZjk2OWExNjY4MWI0MmYwLi42
ZWQ2MzNkYTg0ODM2OGQ5NjViOTA0YjI0NjI2NGY5NmY1MDA2ODk1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250
ZXh0LTJkLWV4cGVjdGVkLnR4dApAQCAtOCw1ICs4LDUgQEAgUEFTUzogUGF5bG9hZCBzaG91bGQg
aGF2ZSBjbGFzc05hbWUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIuCiAKIC0tIFJ1bm5pbmcg
dGVzdCBjYXNlOiBDYW52YXMucmVzb2x2ZUNhbnZhc0NvbnRleHQuaW52YWxpZElkZW50aWZpZXIK
IFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlk
ZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50aWZpZXIuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314995</attachid>
            <date>2017-07-10 10:50:45 -0700</date>
            <delta_ts>2017-07-10 11:18:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710105044.patch</filename>
            <type>text/plain</type>
            <size>38490</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uMTM4Zjc5OTg5MGM0NmZhNGRiMjk3YzJlYzBjYzM3
MmZkODU3N2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2
ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZh
c0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpnZXRDYW52YXNFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YnVpbGRPYmplY3RGb3JDYW52YXMpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorCiAyMDE3LTA3LTEwICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4dCBpcyBtaXNz
aW5nIGluIGlCb29rcyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTZkNDU5ZmFmMGE1NjgyYmRmZjZlMzli
N2Q5ODk1NTBmZjIwZTg3Mi4uZjkyOTM1YmU1MjYxMzBlYWMyMjA5YzYzNjZlNTkzNjNlOThmZjQ2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjg3Niw2ICsyODc2LDggQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFD
NkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThD
N0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZC
RTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEg
LyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLzsgfTsKKwkJNkEyMkU4NzAxRjEwNDE4NjAw
RjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNh
bnZhcy5oICovOyB9OworCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2Fu
dmFzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovOyB9OwogCQk2
QTMyRDdDRTFBMTZEOEMwMDA0MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjYxOUQyMjVE
ODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKIAkJNkE0QjZENjUx
OUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKIAkJNkIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA3MjcsNiAr
MTA3MjksOCBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5
NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyog
SW5zcGVjdG9yQ2FudmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5z
cGVjdG9yQ2FudmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDYW52YXNBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEg
LyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2
ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzI0Nyw2ICsxNzI1MSw4
IEBACiAJCQkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICov
LAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLywKKwkJCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8sCiAJCQkJNkE0QjZENjYxOUQyMjVEODAwNkYxMUQz
IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLywKIAkJCQk2QTRCNkQ2NDE5RDIyNTE5MDA2
RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLywKIAkJCQk3QTFGMkI1MTEyNkM2MUIy
MDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI3Nzk4LDYgKzI3ODA0LDcg
QEAKIAkJCQk5MzMwOURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5MjAwNTZFNTgx
IC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1RThENTExRTA2
REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
Nzg4LDYgKzMxNzk1LDcgQEAKIAkJCQk5MzMwOURFRjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURG
MTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMg
LyogSW5zcGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZBMzJEN0NFMUExNkQ4
QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2VjYTkwYzQ2M2FiZGVkYjQ2MTk4OTUyOGU2NGIw
ZTA3MWI5YjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNhbnZhcy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGluc3BlY3Rvci9JZGVudGlm
aWVyc0ZhY3RvcnkuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWY8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmNyZWF0
ZShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ2FudmFzKGNhbnZhcywgY3Nz
Q2FudmFzTmFtZSkpOworfQorCitJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNhbnZhcyhIVE1M
Q2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpCisgICAg
OiBtX2lkZW50aWZpZXIoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVu
dGlmaWVyKCkpCisgICAgLCBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2Nzc0NhbnZhc05hbWUo
Y3NzQ2FudmFzTmFtZSkKK3sKK30KKworUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gbV9jYW52YXMuZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBtX2NhbnZhcy5yZW5k
ZXJpbmdDb250ZXh0KCk7CisKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRl
eHRUeXBlIGNvbnRleHRUeXBlOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KGNvbnRleHQpKQorICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFz
OjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisjaWYgRU5BQkxFKFdFQkdMKQorICAgIGVsc2UgaWYg
KGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyNlbmRpZgor
I2lmIEVOQUJMRShXRUJHTDIpCisgICAgZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4oY29udGV4dCkpCisgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52
YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorICAg
IGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQorICAgIGNvbnRl
eHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR1BV
OworI2VuZGlmCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5
cGU6OkNhbnZhczJEOworICAgIH0KKworICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRDYW52YXNJZChtX2lk
ZW50aWZpZXIpCisgICAgICAgIC5zZXRGcmFtZUlkKGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yUGFnZUFnZW50KCktPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAuc2V0Q29udGV4dFR5cGUo
Y29udGV4dFR5cGUpCisgICAgICAgIC5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1fY3NzQ2FudmFz
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhbnZhcy0+c2V0Q3NzQ2FudmFzTmFtZShtX2Nzc0Nh
bnZhc05hbWUpOworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgICAgIGlu
dCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzKTsKKyAgICAgICAgaWYg
KCFub2RlSWQpIHsKKyAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21BZ2Vu
dC0+Ym91bmROb2RlSWQoJm1fY2FudmFzLmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICAgICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+
cHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmbV9jYW52YXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGVJZCkKKyAgICAgICAg
ICAgIGNhbnZhcy0+c2V0Tm9kZUlkKG5vZGVJZCk7CisgICAgfQorCisjaWYgRU5BQkxFKFdFQkdM
KQorICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgeworICAg
ICAgICBpZiAoc3RkOjpvcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVz
ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCktPmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0
ZXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRl
KCkKKyAgICAgICAgICAgICAgICAuc2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpCisgICAgICAg
ICAgICAgICAgLnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKQorICAgICAgICAgICAgICAgIC5z
ZXRTdGVuY2lsKGF0dHJpYnV0ZXMtPnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgLnNldEFudGlh
bGlhcyhhdHRyaWJ1dGVzLT5hbnRpYWxpYXMpCisgICAgICAgICAgICAgICAgLnNldFByZW11bHRp
cGxpZWRBbHBoYShhdHRyaWJ1dGVzLT5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgICAgICAg
ICAgLnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihhdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdpbmdC
dWZmZXIpCisgICAgICAgICAgICAgICAgLnNldEZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQo
YXR0cmlidXRlcy0+ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkKKyAgICAgICAgICAgICAg
ICAucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNpemVf
dCBtZW1vcnlDb3N0ID0gbV9jYW52YXMubWVtb3J5Q29zdCgpKQorICAgICAgICBjYW52YXMtPnNl
dE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7CisKKyAgICByZXR1cm4gY2FudmFzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jZGZjMzI2MjkzYzhhMzM2ODU4MzNmNTc3ZDhhMTE5OWE1OGFk
YWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQ2FudmFzIGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxJbnNwZWN0b3JDYW52YXM+IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSk7CisKKyAgICBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2Fu
dmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05h
bWUoKSB7IHJldHVybiBtX2Nzc0NhbnZhc05hbWU7IH0KKworICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNhbnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoSW5zdHJ1bWVudGlu
Z0FnZW50cyYpOworCisgICAgfkluc3BlY3RvckNhbnZhcygpIHsgfQorCitwcml2YXRlOgorICAg
IEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgY3NzQ2Fu
dmFzTmFtZSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEhUTUxDYW52YXNFbGVt
ZW50JiBtX2NhbnZhczsKKyAgICBTdHJpbmcgbV9jc3NDYW52YXNOYW1lOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAyMGYwYmFhZmUwZmFhMzhmY2NhYWU1NTM5OGU1OTlk
NGM1ZTUxMGU1Li45ZjJkZDhkYzc0MjcwOWI0YzZiNTE5OWY4Y2U2N2FkMTUyZDU3NTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclBh
Z2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oIgpAQCAtNjUsMTIgKzY0LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNh
bnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQpCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQoV2Vi
QWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0
ZXJhbCgiQ2FudmFzIiksIGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPihjb250ZXh0
LmZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpD
YW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERpc3BhdGNoZXIs
IHRoaXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNj
cmlwdE1hbmFnZXIpCi0gICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX3RpbWVy
KCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQp
CiB7CiB9CkBAIC05NywxMSArOTUsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAotICAgIGZvciAoY29u
c3QgYXV0byYgcGFpciA6IG1fY2FudmFzRW50cmllcykgewotICAgICAgICBhdXRvKiBjYW52YXNF
bGVtZW50ID0gcGFpci5rZXk7Ci0gICAgICAgIGF1dG8mIGNhbnZhc0VudHJ5ID0gcGFpci52YWx1
ZTsKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxkT2JqZWN0
Rm9yQ2FudmFzKGNhbnZhc0VudHJ5LCAqY2FudmFzRWxlbWVudCkpOwotICAgIH0KKyAgICBmb3Ig
KGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZh
bHVlcygpKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRkZWQoaW5zcGVj
dG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyhtX2luc3RydW1lbnRpbmdBZ2VudHMpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCkBA
IC0xMTksMzIgKzExNCwyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJikKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQqIG5vZGVJ
ZCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNFbnRy
eShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAgIEluc3Bl
Y3RvckNhbnZhcyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9y
U3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmNhbnZhc0VudHJ5LT5lbGVt
ZW50LT5kb2N1bWVudCgpKTsKKyAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkuZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRG9jdW1lbnQgaGFzIG5vdCBiZWVuIHJl
cXVlc3RlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQo
ZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBjYW52YXNFbnRyeS0+ZWxlbWVudCk7CisgICAg
Km5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNo
Tm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCAmaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXMoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RD
b250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwg
U3RyaW5nKiBjb250ZW50KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9
IGdldENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVy
Iik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0
b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZh
cykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZh
cygpLnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihjb250ZXh0KSkgewotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGNh
bnZhc0VudHJ5LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7
CisgICAgICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2FudmFzLT5j
YW52YXMoKS50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5yZWxlYXNlTWVzc2FnZSgpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTU2LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGdsID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oY29udGV4dCk7CiAKICAgICAgICAgZ2wtPnNldFByZXZlbnRCdWZmZXJDbGVh
ckZvckluc3BlY3Rvcih0cnVlKTsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQg
PSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5n
IikpOworICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogICAgICAg
ICBnbC0+c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0xNzMsMTQgKzE2NCwxMiBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q1NTQ2FudmFzQ2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIHJl
c3VsdCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNF
bnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAgIElu
c3BlY3RvckNhbnZhcyogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVy
cm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxpbnQ+OjpjcmVhdGUoKTsKLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgOiBjYW52YXNFbnRy
eS0+ZWxlbWVudC0+Y3NzQ2FudmFzQ2xpZW50cygpKSB7CisgICAgZm9yIChFbGVtZW50KiBlbGVt
ZW50IDogaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5jc3NDYW52YXNDbGllbnRzKCkpIHsKICAg
ICAgICAgaWYgKGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNw
ZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmZWxlbWVudC0+ZG9jdW1lbnQoKSkpCiAgICAg
ICAgICAgICByZXN1bHQtPmFkZEl0ZW0obV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRP
TUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQs
IGVsZW1lbnQpKTsKICAgICB9CkBAIC0yMTAsMTMgKzE5OSwxMSBAQCBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnRleHRBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQ2FudmFzUmVu
ZGVyaW5nQwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFzQ29udGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0
IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkq
IGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFz
RW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2Fu
dmFzIGlkZW50aWZpZXIiKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNhbnZhcyA9
IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOworICAgIGlmICgh
aW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgRnJhbWUqIGZy
YW1lID0gY2FudmFzRW50cnktPmVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBGcmFt
ZSogZnJhbWUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRvY3VtZW50KCkuZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJD
YW52YXMgYmVsb25ncyB0byBhIGRvY3VtZW50IHdpdGhvdXQgYSBmcmFtZSIpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yMjYsNyArMjEzLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVz
b2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGF1
dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlw
dEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsK
IAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbnRyeS0+ZWxl
bWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbmRlcmluZ0NvbnRleHQoKTsKICAg
ICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBjb250ZXh0QXNTY3JpcHRWYWx1ZShzdGF0ZSwgY29udGV4
dCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTI0NSw4MCArMjMyLDgxIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdh
dGVkKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxI
VE1MQ2FudmFzRWxlbWVudCo+IGNhbnZhc2VzRm9yRnJhbWU7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVzLmtleXMoKSkgewotICAgICAgICBpZiAo
Y2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpID09ICZmcmFtZSkKLSAgICAgICAgICAg
IGNhbnZhc2VzRm9yRnJhbWUuYXBwZW5kKGNhbnZhc0VsZW1lbnQpOworICAgIFZlY3RvcjxJbnNw
ZWN0b3JDYW52YXMqPiBpbnNwZWN0b3JDYW52YXNlczsKKyAgICBmb3IgKFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZh
cy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5kb2N1
bWVudCgpLmZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAgICAgICAgaW5zcGVjdG9yQ2FudmFzZXMu
YXBwZW5kKGluc3BlY3RvckNhbnZhcy5nZXQoKSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvKiBj
YW52YXNFbGVtZW50IDogY2FudmFzZXNGb3JGcmFtZSkgewotICAgICAgICBhdXRvIGNhbnZhc0Vu
dHJ5ID0gbV9jYW52YXNFbnRyaWVzLnRha2UoY2FudmFzRWxlbWVudCk7CisgICAgZm9yIChhdXRv
JiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52YXNlcykgeworICAgICAgICBTdHJpbmcg
aWRlbnRpZmllciA9IHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFzKTsKICAgICAgICAgaWYg
KG1fZW5hYmxlZCkKLSAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNSZW1v
dmVkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIpOworICAgICAgICAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7CiAgICAgfQogfQogCiB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmIGNh
bnZhc0VsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQoIW1fY2FudmFz
VG9DU1NDYW52YXNJZC5jb250YWlucygmY2FudmFzRWxlbWVudCkpOwotICAgIEFTU0VSVCghbV9j
YW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgaWYgKGZpbmRJbnNw
ZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQu
c2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52
YXNOYW1lLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7CisgICAgbV9jYW52YXNUb0NTU0NhbnZh
c05hbWUuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoSFRNTENhbnZhc0VsZW1lbnQm
IGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0g
Z2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkKKyAg
ICBJbnNwZWN0b3JDYW52YXMqIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMo
Y2FudmFzRWxlbWVudCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jc3NDYW52YXNDbGllbnROb2Rlc0NoYW5n
ZWQoY2FudmFzRW50cnktPmlkZW50aWZpZXIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
c3NDYW52YXNDbGllbnROb2Rlc0NoYW5nZWQoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCkp
OwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJp
bmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewotICAgIGlmICht
X2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZhc0VsZW1lbnQpKSB7CisgICAgaWYgKGZpbmRJ
bnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDYW52YXNFbnRyeSBuZXdDYW52
YXNFbnRyeSgiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIo
KSwgJmNhbnZhc0VsZW1lbnQpOwotICAgIG5ld0NhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUgPSBt
X2NhbnZhc1RvQ1NTQ2FudmFzSWQudGFrZSgmY2FudmFzRWxlbWVudCk7Ci0KLSAgICBtX2NhbnZh
c0VudHJpZXMuc2V0KCZjYW52YXNFbGVtZW50LCBuZXdDYW52YXNFbnRyeSk7CiAgICAgY2FudmFz
RWxlbWVudC5hZGRPYnNlcnZlcigqdGhpcyk7CiAKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOworICAgIFN0cmluZyBjc3NDYW52YXNOYW1lID0gbV9jYW52YXNUb0NTU0NhbnZh
c05hbWUudGFrZSgmY2FudmFzRWxlbWVudCk7CisgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBJ
bnNwZWN0b3JDYW52YXM6OmNyZWF0ZShjYW52YXNFbGVtZW50LCBjc3NDYW52YXNOYW1lKTsKKwor
ICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNB
ZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG1faW5zdHJ1bWVudGlu
Z0FnZW50cykpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxk
T2JqZWN0Rm9yQ2FudmFzKG5ld0NhbnZhc0VudHJ5LCBjYW52YXNFbGVtZW50KSk7CisgICAgbV9p
ZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuc2V0KGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmll
cigpLCBXVEZNb3ZlKGluc3BlY3RvckNhbnZhcykpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0Vs
ZW1lbnQpCiB7Ci0gICAgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnko
Y2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkKKyAgICBJbnNwZWN0b3JDYW52
YXMqIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCk7
CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGNhbnZhc0VudHJ5LT5pZGVudGlm
aWVyLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPmNhbnZhc01lbW9yeUNoYW5nZWQoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCksIGNh
bnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewot
ICAgIGF1dG8gaXQgPSBtX2NhbnZhc0VudHJpZXMuZmluZCgmY2FudmFzRWxlbWVudCk7Ci0gICAg
aWYgKGl0ID09IG1fY2FudmFzRW50cmllcy5lbmQoKSkKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52
YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIEFTU0VSVChpbnNw
ZWN0b3JDYW52YXMpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmcgY2FudmFzSWRlbnRpZmllciA9IGl0LT52YWx1ZS5pZGVudGlmaWVyOwot
ICAgIG1fY2FudmFzRW50cmllcy5yZW1vdmUoaXQpOwotCisgICAgU3RyaW5nIGlkZW50aWZpZXIg
PSB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFtX2VuYWJsZWQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlYkNvcmU6OkNhbnZhc09ic2VydmVyOjpjYW52YXNE
ZXN0cm95ZWQgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBHQyBkZXN0cm95aW5nIHRoZSBI
VE1MQ2FudmFzRWxlbWVudC4KICAgICAvLyBEdWUgdG8gdGhlIHNpbmdsZS1wcm9jZXNzIG1vZGVs
IHVzZWQgaW4gV2ViS2l0MSwgdGhlIGV2ZW50IG11c3QgYmUgZGlzcGF0Y2hlZCBmcm9tIGEgdGlt
ZXIgdG8gcHJldmVudAogICAgIC8vIHRoZSBmcm9udGVuZCBmcm9tIG1ha2luZyBKUyBhbGxvY2F0
aW9ucyB3aGlsZSB0aGUgR0MgaXMgc3RpbGwgYWN0aXZlLgotICAgIG1fcmVtb3ZlZENhbnZhc0lk
ZW50aWZpZXJzLmFwcGVuZChjYW52YXNJZGVudGlmaWVyKTsKKyAgICBtX3JlbW92ZWRDYW52YXNJ
ZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7CiAKICAgICBpZiAoIW1fdGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMF9zKTsKQEAgLTMyOSwxMTEgKzMx
Nyw1NiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKCkKICAgICBpZiAoIW1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVk
Q2FudmFzSWRlbnRpZmllcnMpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNS
ZW1vdmVkKGlkZW50aWZpZXIpOworICAgIGlmIChtX2VuYWJsZWQpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMpCisgICAgICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsKKyAgICB9
CiAKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQogCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZhc0RhdGEoKQogewotICAgIGZvciAoYXV0byog
Y2FudmFzRWxlbWVudCA6IG1fY2FudmFzRW50cmllcy5rZXlzKCkpCi0gICAgICAgIGNhbnZhc0Vs
ZW1lbnQtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGluc3BlY3RvckNh
bnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKQorICAgICAgICBp
bnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIAotICAgIG1f
Y2FudmFzRW50cmllcy5jbGVhcigpOwotICAgIG1fY2FudmFzVG9DU1NDYW52YXNJZC5jbGVhcigp
OworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmNsZWFyKCk7CisgICAgbV9jYW52
YXNUb0NTU0NhbnZhc05hbWUuY2xlYXIoKTsKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVy
cy5jbGVhcigpOwogCiAgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1l
ci5zdG9wKCk7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52YXNFbnRyeSogSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNF
bGVtZW50KQorU3RyaW5nIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVj
dG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7Ci0gICAgYXV0byBmaW5kUmVzdWx0ID0gbV9j
YW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9
IG1fY2FudmFzRW50cmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZmaW5kUmVzdWx0LT52YWx1
ZTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNvbnRhaW5zKCZpbnNwZWN0
b3JDYW52YXMuY2FudmFzKCkpKTsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIFN0cmluZyBp
ZGVudGlmaWVyID0gaW5zcGVjdG9yQ2FudmFzLmlkZW50aWZpZXIoKTsKKyAgICBtX2lkZW50aWZp
ZXJUb0luc3BlY3RvckNhbnZhcy5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNhbnZhc0VudHJ5KiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBjYW52YXNJZGVudGlm
aWVyKQorSW5zcGVjdG9yQ2FudmFzKiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVj
dG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQogewotICAgIGZvciAoYXV0byYgY2FudmFzRW50cnkgOiBtX2NhbnZhc0VudHJpZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIgPT0gY2FudmFzSWRl
bnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiAmY2FudmFzRW50cnk7CisgICAgUmVmUHRyPElu
c3BlY3RvckNhbnZhcz4gaW5zcGVjdG9yQ2FudmFzID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JD
YW52YXMuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKSB7CisgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50
aWZpZXIuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0KCk7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0VudHJ5JiBjYW52YXNFbnRyeSwgSFRNTENh
bnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCitJbnNwZWN0b3JDYW52YXMqIEluc3BlY3RvckNh
bnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNF
bGVtZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhc0VsZW1lbnQuZG9jdW1lbnQoKS5m
cmFtZSgpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVt
ZW50LnJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGUgY29udGV4dFR5cGU7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7Ci0jaWYgRU5BQkxFKFdFQkdMKQot
ICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAg
IGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIGVsc2UgaWYgKGlzPFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKLSNlbmRpZgotI2lm
IEVOQUJMRShXRUJHUFUpCi0gICAgZWxzZSBpZiAoaXM8V2ViR1BVUmVuZGVyaW5nQ29udGV4dD4o
Y29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwotI2VuZGlmCi0gICAgZWxzZSB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgIGZvciAoYXV0byYgaW5z
cGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFsdWVzKCkpIHsK
KyAgICAgICAgaWYgKCZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpID09ICZjYW52YXNFbGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5nZXQoKTsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVh
dGUoKQotICAgICAgICAuc2V0Q2FudmFzSWQoY2FudmFzRW50cnkuaWRlbnRpZmllcikKLSAgICAg
ICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQotICAgICAgICAuc2V0
Q29udGV4dFR5cGUoY29udGV4dFR5cGUpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBpZiAo
IWNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQotICAgICAgICBjYW52YXMtPnNl
dENzc0NhbnZhc05hbWUoY2FudmFzRW50cnkuY3NzQ2FudmFzTmFtZSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gZG9tQWdlbnQtPmJv
dW5kTm9kZUlkKCZjYW52YXNFbGVtZW50KTsKLSAgICAgICAgaWYgKCFub2RlSWQpIHsKLSAgICAg
ICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNh
bnZhc0VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAgICAgICBFcnJvclN0cmluZyBp
Z25vcmVkOwotICAgICAgICAgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJv
bnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZjYW52YXNFbGVtZW50KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlSWQpCi0gICAgICAgICAgICBjYW52
YXMtPnNldE5vZGVJZChub2RlSWQpOwotICAgIH0KLQotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBp
ZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKLSAgICAgICAgaWYg
KHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLT5nZXRDb250ZXh0QXR0cmli
dXRlcygpKSB7Ci0gICAgICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVzKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCi0gICAg
ICAgICAgICAgICAgLnNldEFscGhhKGF0dHJpYnV0ZXMtPmFscGhhKQotICAgICAgICAgICAgICAg
IC5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCkKLSAgICAgICAgICAgICAgICAuc2V0U3RlbmNp
bChhdHRyaWJ1dGVzLT5zdGVuY2lsKQotICAgICAgICAgICAgICAgIC5zZXRBbnRpYWxpYXMoYXR0
cmlidXRlcy0+YW50aWFsaWFzKQotICAgICAgICAgICAgICAgIC5zZXRQcmVtdWx0aXBsaWVkQWxw
aGEoYXR0cmlidXRlcy0+cHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICAgICAgICAgIC5zZXRQ
cmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0cmlidXRlcy0+cHJlc2VydmVEcmF3aW5nQnVmZmVyKQot
ICAgICAgICAgICAgICAgIC5zZXRGYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KGF0dHJpYnV0
ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpCi0gICAgICAgICAgICAgICAgLnJlbGVh
c2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChzaXplX3QgbWVtb3J5
Q29zdCA9IGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKQotICAgICAgICBjYW52YXMtPnNldE1l
bW9yeUNvc3QobWVtb3J5Q29zdCk7Ci0KLSAgICByZXR1cm4gY2FudmFzOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IDBhMGVhODg4YWU3MmI4ZmM2
ZGQ1ODA2ODY0OWNjMDZmNTk1ZmY1ZGIuLjA3ZDE2ZTBiODQyYTIwYjgwZjFjMjIyOTg4YTlmNWNm
MTY1ZjViNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CkBAIC00Miw3ICs0Myw2
IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKQEAgLTUxLDcgKzUxLDcgQEAgY2xh
c3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgQ2FudmFzT2JzZXIKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JD
YW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
SW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yUGFnZUFnZW50
Kik7CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKSB7IH0KIAogICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CkBAIC03OSwzMyArNzksMTggQEAg
cHVibGljOgogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IENhbnZhc0VudHJ5IHsKLSAgICAgICAgU3Ry
aW5nIGlkZW50aWZpZXI7Ci0gICAgICAgIFN0cmluZyBjc3NDYW52YXNOYW1lOwotICAgICAgICBI
VE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCA9IHsgbnVsbHB0ciB9OwotCi0gICAgICAgIENhbnZh
c0VudHJ5KCkgeyB9Ci0KLSAgICAgICAgQ2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCkKLSAgICAgICAgICAgIDogaWRl
bnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAgICAgLCBlbGVtZW50KGNhbnZhc0VsZW1lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3ll
ZFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FudmFzRGF0YSgpOwotICAgIENhbnZhc0Vu
dHJ5KiBnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIENhbnZhc0VudHJ5
KiBnZXRDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0Vu
dHJ5JiwgSFRNTENhbnZhc0VsZW1lbnQmKTsKKyAgICBTdHJpbmcgdW5iaW5kQ2FudmFzKEluc3Bl
Y3RvckNhbnZhcyYpOworICAgIEluc3BlY3RvckNhbnZhcyogYXNzZXJ0SW5zcGVjdG9yQ2FudmFz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBmaW5k
SW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50Jik7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFn
ZW50OwogCi0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIENhbnZhc0VudHJ5PiBtX2Nh
bnZhc0VudHJpZXM7Ci0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9j
YW52YXNUb0NTU0NhbnZhc0lkOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXM7CisgICAgSGFzaE1hcDxIVE1M
Q2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9jYW52YXNUb0NTU0NhbnZhc05hbWU7CiAgICAgVmVj
dG9yPFN0cmluZz4gbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnM7CiAgICAgVGltZXIgbV90aW1l
cjsKICAgICBib29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNGY4MTEzZDBmY2NjYjA4MjQ2
OWIyMmEyZTVkNGU0OWFlNGVlN2M1YS4uZGU3YzkzMWIyZWQwNTcyYjQzNzAxMzc2MzU1N2RmMzc3
ZTgxNWMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSYgcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAg
ICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ+KHBhZ2VDb250ZXh0KSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8
SW5zcGVjdG9yV29ya2VyQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAKLSAgICBhdXRvIGNhbnZhc0Fn
ZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDYW52YXNBZ2VudD4ocGFnZUNvbnRl
eHQsIHBhZ2VBZ2VudCk7CisgICAgYXV0byBjYW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBhZ2VDb250ZXh0KTsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvckNhbnZhc0FnZW50KGNhbnZhc0FnZW50UHRyLmdldCgpKTsK
ICAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZShjYW52YXNBZ2VudFB0cikpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
N2FiZmY3NDc0MjE3NzU2YmJlZmE1ZWUzNWRiYWEwZjkyNzI3YjI1MS4uMWRmMTZjMjQ5ZWViOTQ5
MGM5MWY1YmQwOTQ4Y2YyZThmMGFhODk3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA3
LTEwICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBSZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFz
RW50cnkgd2l0aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgbmV3IGVycm9y
IHN0cmluZ3MuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJk
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3ROb2RlLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250
ZXh0LTJkLWV4cGVjdGVkLnR4dDoKKwogMjAxNy0wNy0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrIG9mIHRleHQgaXMgbWlzc2luZyBpbiBpQm9va3Mg
c2FtcGxlIGJvb2tzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9j
c3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9jc3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDBlOTFlZmIwZTc4YjFm
OWQ5YjM5NjBhNTI3MWZhMzFlYTYzYWQzNzQuLjlhZWIzZmRjNjk0NzRlODE2NTgxMTIwOWIyMzQx
YjZiMWI4MjNmNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvY3Nz
LWNhbnZhcy1jbGllbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y2FudmFzL2Nzcy1jYW52YXMtY2xpZW50cy1leHBlY3RlZC50eHQKQEAgLTE4LDUgKzE4LDUgQEAg
UEFTUzogVGhlcmUgc2hvdWxkIGJlIG5vIGNsaWVudCBub2Rlcy4KIAogLS0gUnVubmluZyB0ZXN0
IGNhc2U6IENhbnZhcy5DU1NDYW52YXNDbGllbnRzLkludmFsaWRDYW52YXNJZAogUEFTUzogU2hv
dWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRpZmllcgor
RXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVk
LnR4dAppbmRleCBlOGI5ZDViY2UwNWZmMDljN2JlZjU2NWNjZTY1NmEwMjU2NGVlZmU2Li40ZTE5
OWRmNjA2OGYxZDFmMmNlZTkzOTY0YjU0M2Q3MDE3MzRmNTg2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVk
LnR4dApAQCAtNyw1ICs3LDUgQEAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFTd0FBQUNXQ0FZQUFBQmtXN1hTQUFBQUFYTlNSMElBcnMKIAogLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IENhbnZhcy5yZXF1ZXN0Q29udGVudC5pbnZhbGlkQ2FudmFzSWQKIFBBU1M6
IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZp
ZXIKK0Vycm9yOiBObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50aWZpZXIuCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKaW5k
ZXggOWFjZDM3NmMyMzIxNjNmOTgzMmJkMGIzM2QxNjhmNGYyODM0ZmUyMC4uNzE1YzQzMWIwZTky
YTViNmE0NmQ3MWZkYTQ2NWU2ZDIxZTcxYjQzYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKQEAgLTE3LDUgKzE3LDUg
QEAgUEFTUzogQ2FudmFzICJDYW52YXMgMiIgaGFzIG5vZGUgd2l0aCB0eXBlICJDQU5WQVMiLgog
CiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVlc3ROb2RlLmludmFsaWRDYW52YXNJ
ZAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMg
aWRlbnRpZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFzQ29udGV4
dC0yZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVD
YW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dAppbmRleCBkOTIxZjI0ODlkMjU2ZmI1MThmNGM2
ZTRkZjk2OWExNjY4MWI0MmYwLi42ZWQ2MzNkYTg0ODM2OGQ5NjViOTA0YjI0NjI2NGY5NmY1MDA2
ODk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52
YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2Fu
dmFzL3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dApAQCAtOCw1ICs4LDUgQEAg
UEFTUzogUGF5bG9hZCBzaG91bGQgaGF2ZSBjbGFzc05hbWUgIkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCIuCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVzb2x2ZUNhbnZhc0NvbnRl
eHQuaW52YWxpZElkZW50aWZpZXIKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJy
b3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMgZm9yIGdpdmVu
IGlkZW50aWZpZXIuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314997</attachid>
            <date>2017-07-10 11:18:12 -0700</date>
            <delta_ts>2017-07-10 11:42:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710111811.patch</filename>
            <type>text/plain</type>
            <size>35168</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uMTM4Zjc5OTg5MGM0NmZhNGRiMjk3YzJlYzBjYzM3
MmZkODU3N2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2
ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZh
c0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpnZXRDYW52YXNFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YnVpbGRPYmplY3RGb3JDYW52YXMpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorCiAyMDE3LTA3LTEwICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4dCBpcyBtaXNz
aW5nIGluIGlCb29rcyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTZkNDU5ZmFmMGE1NjgyYmRmZjZlMzli
N2Q5ODk1NTBmZjIwZTg3Mi4uZjkyOTM1YmU1MjYxMzBlYWMyMjA5YzYzNjZlNTkzNjNlOThmZjQ2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjg3Niw2ICsyODc2LDggQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2OUE2Q0JBQzFD
NkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZCRTE1NTAwMThD
N0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlBNkNCQUQxQzZC
RTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEg
LyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLzsgfTsKKwkJNkEyMkU4NzAxRjEwNDE4NjAw
RjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNh
bnZhcy5oICovOyB9OworCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2Fu
dmFzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovOyB9OwogCQk2
QTMyRDdDRTFBMTZEOEMwMDA0MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjYxOUQyMjVE
ODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKIAkJNkE0QjZENjUx
OUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKIAkJNkIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA3MjcsNiAr
MTA3MjksOCBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5
U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5
NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyog
SW5zcGVjdG9yQ2FudmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5z
cGVjdG9yQ2FudmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDYW52YXNBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEg
LyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2
ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzI0Nyw2ICsxNzI1MSw4
IEBACiAJCQkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICov
LAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLywKKwkJCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8sCiAJCQkJNkE0QjZENjYxOUQyMjVEODAwNkYxMUQz
IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLywKIAkJCQk2QTRCNkQ2NDE5RDIyNTE5MDA2
RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLywKIAkJCQk3QTFGMkI1MTEyNkM2MUIy
MDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI3Nzk4LDYgKzI3ODA0LDcg
QEAKIAkJCQk5MzMwOURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5MjAwNTZFNTgx
IC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1RThENTExRTA2
REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
Nzg4LDYgKzMxNzk1LDcgQEAKIAkJCQk5MzMwOURFRjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURG
MTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMg
LyogSW5zcGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZBMzJEN0NFMUExNkQ4
QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmMxM2QxNDFlZWJlZTU1ZTU5NjJiMTZkY2U1MmUx
MDcwMWY1NDRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNhbnZhcy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGluc3BlY3Rvci9JZGVudGlm
aWVyc0ZhY3RvcnkuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWY8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmNyZWF0
ZShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ2FudmFzKGNhbnZhcywgY3Nz
Q2FudmFzTmFtZSkpOworfQorCitJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNhbnZhcyhIVE1M
Q2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpCisgICAg
OiBtX2lkZW50aWZpZXIoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVu
dGlmaWVyKCkpCisgICAgLCBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2Nzc0NhbnZhc05hbWUo
Y3NzQ2FudmFzTmFtZSkKK3sKK30KKworUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gbV9jYW52YXMuZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBtX2NhbnZhcy5yZW5k
ZXJpbmdDb250ZXh0KCk7CisKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRl
eHRUeXBlIGNvbnRleHRUeXBlOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KGNvbnRleHQpKQorICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworI2lmIEVOQUJMRShXRUJHTCkKKyAgICBlbHNl
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQorICAgICAgICBjb250ZXh0
VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMOwor
I2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Pihjb250ZXh0KSkKKyAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisjZW5kaWYKKyNpZiBFTkFCTEUo
V0VCR1BVKQorICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQp
KQorICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29u
dGV4dFR5cGU6OldlYkdQVTsKKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICB9CisKKyAgICBhdXRvIGNhbnZhcyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAgICAgICAu
c2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQorICAgICAgICAuc2V0RnJhbWVJZChpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpLT5mcmFtZUlkKGZyYW1lKSkKKyAgICAgICAg
LnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlKQorICAgICAgICAucmVsZWFzZSgpOworCisgICAg
aWYgKCFtX2Nzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQorICAgICAgICBjYW52YXMtPnNldENzc0Nh
bnZhc05hbWUobV9jc3NDYW52YXNOYW1lKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2Vu
dCgpOworICAgICAgICBpbnQgbm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZtX2NhbnZh
cyk7CisgICAgICAgIGlmICghbm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoaW50IGRvY3VtZW50
Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZtX2NhbnZhcy5kb2N1bWVudCgpKSkgewor
ICAgICAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgICAgICAgICAgbm9k
ZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChpZ25vcmVkLCBkb2N1bWVudE5vZGVJ
ZCwgJm1fY2FudmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChu
b2RlSWQpCisgICAgICAgICAgICBjYW52YXMtPnNldE5vZGVJZChub2RlSWQpOworICAgIH0KKwor
I2lmIEVOQUJMRShXRUJHTCkKKyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4o
Y29udGV4dCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNv
bnRleHQpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBjYW52YXMtPnNl
dENvbnRleHRBdHRyaWJ1dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgLnNldEFscGhhKGF0dHJpYnV0ZXMt
PmFscGhhKQorICAgICAgICAgICAgICAgIC5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCkKKyAg
ICAgICAgICAgICAgICAuc2V0U3RlbmNpbChhdHRyaWJ1dGVzLT5zdGVuY2lsKQorICAgICAgICAg
ICAgICAgIC5zZXRBbnRpYWxpYXMoYXR0cmlidXRlcy0+YW50aWFsaWFzKQorICAgICAgICAgICAg
ICAgIC5zZXRQcmVtdWx0aXBsaWVkQWxwaGEoYXR0cmlidXRlcy0+cHJlbXVsdGlwbGllZEFscGhh
KQorICAgICAgICAgICAgICAgIC5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0cmlidXRlcy0+
cHJlc2VydmVEcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIC5zZXRGYWlsSWZNYWpvclBl
cmZvcm1hbmNlQ2F2ZWF0KGF0dHJpYnV0ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQp
CisgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworICAgIGlmIChzaXplX3QgbWVtb3J5Q29zdCA9IG1fY2FudmFzLm1lbW9yeUNvc3QoKSkKKyAg
ICAgICAgY2FudmFzLT5zZXRNZW1vcnlDb3N0KG1lbW9yeUNvc3QpOworCisgICAgcmV0dXJuIGNh
bnZhczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RmYzMyNjI5M2M4YTMzNjg1ODMz
ZjU3N2Q4YTExOTlhNThhZGFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sT2JqZWN0cy5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xhc3MgSW5zdHJ1
bWVudGluZ0FnZW50czsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIElu
c3BlY3RvckNhbnZhcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpOworCisgICAgY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgSFRNTENh
bnZhc0VsZW1lbnQmIGNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFzOyB9CisgICAgY29uc3QgU3Ry
aW5nJiBjc3NDYW52YXNOYW1lKCkgeyByZXR1cm4gbV9jc3NDYW52YXNOYW1lOyB9CisKKyAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2Fu
dmFzKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKKworICAgIH5JbnNwZWN0b3JDYW52YXMoKSB7IH0K
KworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25z
dCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpOworCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKKyAg
ICBIVE1MQ2FudmFzRWxlbWVudCYgbV9jYW52YXM7CisgICAgU3RyaW5nIG1fY3NzQ2FudmFzTmFt
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggMjBmMGJhYWZlMGZhYTM4
ZmNjYWFlNTUzOThlNTk5ZDRjNWU1MTBlNS4uYWYwOWJiNTg1MmY5Y2YwOTFlYmY1NWM3MWQ2MmQ2
ZGM4YWE4MzBiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKLSNpbmNs
dWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJK
U01haW5UaHJlYWRFeGVjU3RhdGUuaCIKQEAgLTY1LDEyICs2NCwxMSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckNhbnZhc0Fn
ZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQorSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3Rv
ckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3RvckFn
ZW50QmFzZShBU0NJSUxpdGVyYWwoIkNhbnZhcyIpLCBjb250ZXh0KQogICAgICwgbV9mcm9udGVu
ZERpc3BhdGNoZXIoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkNhbnZhc0Zyb250ZW5kRGlz
cGF0Y2hlcj4oY29udGV4dC5mcm9udGVuZFJvdXRlcikpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShjb250ZXh0LmJh
Y2tlbmREaXNwYXRjaGVyLCB0aGlzKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGNv
bnRleHQuaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50
KQogICAgICwgbV90aW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0
cm95ZWRUaW1lckZpcmVkKQogewogfQpAQCAtOTcsMTEgKzk1LDggQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7
CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtX2NhbnZhc0VudHJpZXMpIHsKLSAgICAg
ICAgYXV0byogY2FudmFzRWxlbWVudCA9IHBhaXIua2V5OwotICAgICAgICBhdXRvJiBjYW52YXNF
bnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNB
ZGRlZChidWlsZE9iamVjdEZvckNhbnZhcyhjYW52YXNFbnRyeSwgKmNhbnZhc0VsZW1lbnQpKTsK
LSAgICB9CisgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0lu
c3BlY3RvckNhbnZhcy52YWx1ZXMoKSkKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNh
bnZhc0FkZGVkKGluc3BlY3RvckNhbnZhcy0+YnVpbGRPYmplY3RGb3JDYW52YXMobV9pbnN0cnVt
ZW50aW5nQWdlbnRzKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmKQpAQCAtMTE5LDMyICsxMTQsMjggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52
YXNJZCwgaW50KiBub2RlSWQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5
ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFzRW50cnkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2FudmFzIGlkZW50aWZp
ZXIiKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMo
ZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmY2FudmFzRW50cnkt
PmVsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmaW5zcGVjdG9y
Q2FudmFzLT5jYW52YXMoKS5kb2N1bWVudCgpKTsKICAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKSB7
CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJEb2N1bWVudCBoYXMgbm90IGJl
ZW4gcmVxdWVzdGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqbm9kZUlkID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIGNhbnZhc0VudHJ5LT5lbGVtZW50KTsK
KyAgICAqbm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkt
PnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsICZpbnNwZWN0
b3JDYW52YXMtPmNhbnZhcygpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVx
dWVzdENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZh
c0lkLCBTdHJpbmcqIGNvbnRlbnQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0Vu
dHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFzRW50cnkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2FudmFzIGlkZW50
aWZpZXIiKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52
YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJl
bmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihj
b250ZXh0KSkgewotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGNhbnZhc0Vu
dHJ5LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CisgICAg
ICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMo
KS50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKS5yZWxlYXNlTWVzc2FnZSgpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTU2LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250
ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGdsID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZT4oY29udGV4dCk7CiAKICAgICAgICAgZ2wtPnNldFByZXZlbnRCdWZmZXJDbGVhckZvcklu
c3BlY3Rvcih0cnVlKTsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQgPSBjYW52
YXNFbnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwor
ICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Y2Fu
dmFzKCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogICAgICAgICBnbC0+
c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAogICAgICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0xNzMsMTQgKzE2NCwxMiBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q1NTQ2Fu
dmFzQ2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNh
bnZhc0lkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIHJlc3VsdCkK
IHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNFbnRyeShj
YW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJvclN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAgIGF1dG8qIGlu
c3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFz
SWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50IDogY2FudmFzRW50cnktPmVsZW1lbnQtPmNzc0Nh
bnZhc0NsaWVudHMoKSkgeworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA6IGluc3BlY3RvckNh
bnZhcy0+Y2FudmFzKCkuY3NzQ2FudmFzQ2xpZW50cygpKSB7CiAgICAgICAgIGlmIChpbnQgZG9j
dW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+
Ym91bmROb2RlSWQoJmVsZW1lbnQtPmRvY3VtZW50KCkpKQogICAgICAgICAgICAgcmVzdWx0LT5h
ZGRJdGVtKG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9k
ZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBlbGVtZW50KSk7CiAgICAg
fQpAQCAtMjEwLDEzICsxOTksMTEgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250ZXh0QXNTY3Jp
cHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIENhbnZhc1JlbmRlcmluZ0MKIAogdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9i
amVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9IGdl
dENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyIik7
CisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9y
U3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+
ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGluc3BlY3RvckNhbnZhcy0+
Y2FudmFzKCkuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbnZhcyBiZWxvbmdzIHRvIGEgZG9jdW1lbnQg
d2l0aG91dCBhIGZyYW1lIik7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNiw3ICsyMTMsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFzQ29udGV4dChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCA9IGNhbnZhc0VudHJ5LT5lbGVtZW50LT5yZW5kZXJpbmdDb250ZXh0KCk7Cisg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGluc3BlY3RvckNhbnZhcy0+Y2Fu
dmFzKCkucmVuZGVyaW5nQ29udGV4dCgpOwogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IGNvbnRl
eHRBc1NjcmlwdFZhbHVlKHN0YXRlLCBjb250ZXh0KTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjQ1LDgwICsyMzIsODEgQEAgdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPEhUTUxDYW52YXNFbGVtZW50Kj4gY2FudmFzZXNG
b3JGcmFtZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbnZhc0VsZW1lbnQgOiBtX2NhbnZhc0Vu
dHJpZXMua2V5cygpKSB7Ci0gICAgICAgIGlmIChjYW52YXNFbGVtZW50LT5kb2N1bWVudCgpLmZy
YW1lKCkgPT0gJmZyYW1lKQotICAgICAgICAgICAgY2FudmFzZXNGb3JGcmFtZS5hcHBlbmQoY2Fu
dmFzRWxlbWVudCk7CisgICAgVmVjdG9yPEluc3BlY3RvckNhbnZhcyo+IGluc3BlY3RvckNhbnZh
c2VzOworICAgIGZvciAoUmVmUHRyPEluc3BlY3RvckNhbnZhcz4mIGluc3BlY3RvckNhbnZhcyA6
IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChp
bnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRvY3VtZW50KCkuZnJhbWUoKSA9PSAmZnJhbWUpCisg
ICAgICAgICAgICBpbnNwZWN0b3JDYW52YXNlcy5hcHBlbmQoaW5zcGVjdG9yQ2FudmFzLmdldCgp
KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8qIGNhbnZhc0VsZW1lbnQgOiBjYW52YXNlc0ZvckZy
YW1lKSB7Ci0gICAgICAgIGF1dG8gY2FudmFzRW50cnkgPSBtX2NhbnZhc0VudHJpZXMudGFrZShj
YW52YXNFbGVtZW50KTsKKyAgICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IGluc3BlY3Rv
ckNhbnZhc2VzKSB7CisgICAgICAgIFN0cmluZyBpZGVudGlmaWVyID0gdW5iaW5kQ2FudmFzKCpp
bnNwZWN0b3JDYW52YXMpOwogICAgICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoY2FudmFzRW50cnkuaWRlbnRpZmllcik7
CisgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlm
aWVyKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNT
U0NhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIEFTU0VSVCghbV9jYW52YXNUb0NTU0NhbnZhc0lkLmNvbnRhaW5zKCZjYW52
YXNFbGVtZW50KSk7Ci0gICAgQVNTRVJUKCFtX2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZh
c0VsZW1lbnQpKTsKKyAgICBpZiAoZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVtZW50KSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIG1fY2FudmFzVG9DU1NDYW52YXNJZC5zZXQoJmNhbnZhc0VsZW1lbnQsIG5hbWUpOwor
ICAgIEFTU0VSVCghbV9jYW52YXNUb0NTU0NhbnZhc05hbWUuY29udGFpbnMoJmNhbnZhc0VsZW1l
bnQpKTsKKyAgICBtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZS5zZXQoJmNhbnZhc0VsZW1lbnQsIG5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXND
bGllbnROb2RlcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBjb25z
dCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNFbnRyeShjYW52YXNFbGVtZW50
KTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KQorICAgIGF1dG8qIGluc3BlY3RvckNhbnZhcyA9IGZp
bmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52
YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jc3NDYW52
YXNDbGllbnROb2Rlc0NoYW5nZWQoY2FudmFzRW50cnktPmlkZW50aWZpZXIpOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jc3NDYW52YXNDbGllbnROb2Rlc0NoYW5nZWQoaW5zcGVjdG9yQ2Fu
dmFzLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRD
cmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVt
ZW50KQogewotICAgIGlmIChtX2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZhc0VsZW1lbnQp
KSB7CisgICAgaWYgKGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBD
YW52YXNFbnRyeSBuZXdDYW52YXNFbnRyeSgiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6
OmNyZWF0ZUlkZW50aWZpZXIoKSwgJmNhbnZhc0VsZW1lbnQpOwotICAgIG5ld0NhbnZhc0VudHJ5
LmNzc0NhbnZhc05hbWUgPSBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQudGFrZSgmY2FudmFzRWxlbWVu
dCk7Ci0KLSAgICBtX2NhbnZhc0VudHJpZXMuc2V0KCZjYW52YXNFbGVtZW50LCBuZXdDYW52YXNF
bnRyeSk7CiAgICAgY2FudmFzRWxlbWVudC5hZGRPYnNlcnZlcigqdGhpcyk7CiAKLSAgICBpZiAo
IW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBjc3NDYW52YXNOYW1lID0g
bV9jYW52YXNUb0NTU0NhbnZhc05hbWUudGFrZSgmY2FudmFzRWxlbWVudCk7CisgICAgYXV0byBp
bnNwZWN0b3JDYW52YXMgPSBJbnNwZWN0b3JDYW52YXM6OmNyZWF0ZShjYW52YXNFbGVtZW50LCBj
c3NDYW52YXNOYW1lKTsKKworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jYW52YXNBZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0Rm9yQ2Fu
dmFzKG1faW5zdHJ1bWVudGluZ0FnZW50cykpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmNhbnZhc0FkZGVkKGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG5ld0NhbnZhc0VudHJ5LCBjYW52YXNF
bGVtZW50KSk7CisgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuc2V0KGluc3BlY3Rv
ckNhbnZhcy0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKGluc3BlY3RvckNhbnZhcykpOwogfQogCiB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRNTENhbnZh
c0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5
ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkK
KyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Vs
ZW1lbnQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzTWVtb3J5Q2hhbmdlZChjYW52YXNFbnRyeS0+
aWRlbnRpZmllciwgY2FudmFzRWxlbWVudC5tZW1vcnlDb3N0KCkpOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmll
cigpLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVu
dCkKIHsKLSAgICBhdXRvIGl0ID0gbV9jYW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQp
OwotICAgIGlmIChpdCA9PSBtX2NhbnZhc0VudHJpZXMuZW5kKCkpCisgICAgYXV0byogaW5zcGVj
dG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVtZW50KTsKKyAgICBBU1NF
UlQoaW5zcGVjdG9yQ2FudmFzKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGNhbnZhc0lkZW50aWZpZXIgPSBpdC0+dmFsdWUuaWRlbnRp
ZmllcjsKLSAgICBtX2NhbnZhc0VudHJpZXMucmVtb3ZlKGl0KTsKLQorICAgIFN0cmluZyBpZGVu
dGlmaWVyID0gdW5iaW5kQ2FudmFzKCppbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghbV9lbmFi
bGVkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZWJDb3JlOjpDYW52YXNPYnNlcnZlcjo6
Y2FudmFzRGVzdHJveWVkIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgR0MgZGVzdHJveWlu
ZyB0aGUgSFRNTENhbnZhc0VsZW1lbnQuCiAgICAgLy8gRHVlIHRvIHRoZSBzaW5nbGUtcHJvY2Vz
cyBtb2RlbCB1c2VkIGluIFdlYktpdDEsIHRoZSBldmVudCBtdXN0IGJlIGRpc3BhdGNoZWQgZnJv
bSBhIHRpbWVyIHRvIHByZXZlbnQKICAgICAvLyB0aGUgZnJvbnRlbmQgZnJvbSBtYWtpbmcgSlMg
YWxsb2NhdGlvbnMgd2hpbGUgdGhlIEdDIGlzIHN0aWxsIGFjdGl2ZS4KLSAgICBtX3JlbW92ZWRD
YW52YXNJZGVudGlmaWVycy5hcHBlbmQoY2FudmFzSWRlbnRpZmllcik7CisgICAgbV9yZW1vdmVk
Q2FudmFzSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50aWZpZXIpOwogCiAgICAgaWYgKCFtX3RpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CkBAIC0zMjks
MTExICszMTcsNTYgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVk
VGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmllciA6IG1f
cmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsKKyAgICBpZiAobV9lbmFibGVkKSB7CisgICAgICAg
IGZvciAoYXV0byYgaWRlbnRpZmllciA6IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzKQorICAg
ICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7
CisgICAgfQogCiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2xlYXJDYW52YXNEYXRhKCkKIHsKLSAgICBmb3Ig
KGF1dG8qIGNhbnZhc0VsZW1lbnQgOiBtX2NhbnZhc0VudHJpZXMua2V5cygpKQotICAgICAgICBj
YW52YXNFbGVtZW50LT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgZm9yIChhdXRvJiBpbnNw
ZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkKKyAg
ICAgICAgaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiAK
LSAgICBtX2NhbnZhc0VudHJpZXMuY2xlYXIoKTsKLSAgICBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQu
Y2xlYXIoKTsKKyAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy5jbGVhcigpOworICAg
IG1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNsZWFyKCk7CiAgICAgbV9yZW1vdmVkQ2FudmFzSWRl
bnRpZmllcnMuY2xlYXIoKTsKIAogICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAg
IG1fdGltZXIuc3RvcCgpOwogfQogCi1JbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkq
IEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYg
Y2FudmFzRWxlbWVudCkKK1N0cmluZyBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFz
KEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogewotICAgIGF1dG8gZmluZFJlc3Vs
dCA9IG1fY2FudmFzRW50cmllcy5maW5kKCZjYW52YXNFbGVtZW50KTsKLSAgICBpZiAoZmluZFJl
c3VsdCAhPSBtX2NhbnZhc0VudHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAmZmluZFJlc3Vs
dC0+dmFsdWU7CisgICAgQVNTRVJUKCFtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZS5jb250YWlucygm
aW5zcGVjdG9yQ2FudmFzLmNhbnZhcygpKSk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBT
dHJpbmcgaWRlbnRpZmllciA9IGluc3BlY3RvckNhbnZhcy5pZGVudGlmaWVyKCk7CisgICAgbV9p
ZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMucmVtb3ZlKGlkZW50aWZpZXIpOworCisgICAgcmV0
dXJuIGlkZW50aWZpZXI7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52YXNFbnRyeSog
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KGNvbnN0IFN0cmluZyYgY2FudmFz
SWRlbnRpZmllcikKK0luc3BlY3RvckNhbnZhcyogSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2Vy
dEluc3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllcikKIHsKLSAgICBmb3IgKGF1dG8mIGNhbnZhc0VudHJ5IDogbV9jYW52YXNFbnRy
aWVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChjYW52YXNFbnRyeS5pZGVudGlmaWVyID09IGNh
bnZhc0lkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4gJmNhbnZhc0VudHJ5OworICAgIFJl
ZlB0cjxJbnNwZWN0b3JDYW52YXM+IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5z
cGVjdG9yQ2FudmFzLmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykg
eworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm8gY2FudmFzIGZvciBnaXZl
biBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5zcGVjdG9yQ2FudmFzLmdldCgpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpidWlsZE9iamVjdEZvckNhbnZhcyhjb25zdCBDYW52YXNFbnRyeSYgY2FudmFzRW50cnks
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQorSW5zcGVjdG9yQ2FudmFzKiBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYg
Y2FudmFzRWxlbWVudCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjYW52YXNFbGVtZW50LmRvY3Vt
ZW50KCkuZnJhbWUoKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2Fu
dmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRUeXBlIGNvbnRleHRUeXBlOwotICAgIGlmIChpczxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwotI2lmIEVOQUJMRShX
RUJHTCkKLSAgICBlbHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQot
ICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OldlYkdMOwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMMikKLSAgICBlbHNlIGlmIChp
czxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgY29udGV4dFR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoV0VCR1BVKQotICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0Nv
bnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKLSNlbmRpZgotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICBmb3IgKGF1
dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVl
cygpKSB7CisgICAgICAgIGlmICgmaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKSA9PSAmY2FudmFz
RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0KCk7CiAgICAg
fQogCi0gICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZh
czo6Y3JlYXRlKCkKLSAgICAgICAgLnNldENhbnZhc0lkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIp
Ci0gICAgICAgIC5zZXRGcmFtZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkKLSAgICAg
ICAgLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlKQotICAgICAgICAucmVsZWFzZSgpOwotCi0g
ICAgaWYgKCFjYW52YXNFbnRyeS5jc3NDYW52YXNOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgY2Fu
dmFzLT5zZXRDc3NDYW52YXNOYW1lKGNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUpOwotICAgIGVs
c2UgewotICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IGRvbUFn
ZW50LT5ib3VuZE5vZGVJZCgmY2FudmFzRWxlbWVudCk7Ci0gICAgICAgIGlmICghbm9kZUlkKSB7
Ci0gICAgICAgICAgICBpZiAoaW50IGRvY3VtZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9k
ZUlkKCZjYW52YXNFbGVtZW50LmRvY3VtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmY2FudmFzRWxlbWVudCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZUlkKQotICAgICAgICAg
ICAgY2FudmFzLT5zZXROb2RlSWQobm9kZUlkKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV0VCR0wp
Ci0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKSB7Ci0gICAg
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMg
PSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0cmlidXRl
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUo
KQotICAgICAgICAgICAgICAgIC5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSkKLSAgICAgICAg
ICAgICAgICAuc2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpCi0gICAgICAgICAgICAgICAgLnNl
dFN0ZW5jaWwoYXR0cmlidXRlcy0+c3RlbmNpbCkKLSAgICAgICAgICAgICAgICAuc2V0QW50aWFs
aWFzKGF0dHJpYnV0ZXMtPmFudGlhbGlhcykKLSAgICAgICAgICAgICAgICAuc2V0UHJlbXVsdGlw
bGllZEFscGhhKGF0dHJpYnV0ZXMtPnByZW11bHRpcGxpZWRBbHBoYSkKLSAgICAgICAgICAgICAg
ICAuc2V0UHJlc2VydmVEcmF3aW5nQnVmZmVyKGF0dHJpYnV0ZXMtPnByZXNlcnZlRHJhd2luZ0J1
ZmZlcikKLSAgICAgICAgICAgICAgICAuc2V0RmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdChh
dHRyaWJ1dGVzLT5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KQotICAgICAgICAgICAgICAg
IC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoc2l6ZV90
IG1lbW9yeUNvc3QgPSBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSkKLSAgICAgICAgY2FudmFz
LT5zZXRNZW1vcnlDb3N0KG1lbW9yeUNvc3QpOwotCi0gICAgcmV0dXJuIGNhbnZhczsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCAwYTBlYTg4OGFl
NzJiOGZjNmRkNTgwNjg2NDljYzA2ZjU5NWZmNWRiLi4wN2QxNmUwYjg0MmEyMGI4MGYxYzIyMjk4
OGE5ZjVjZjE2NWY1YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhcy5oIgog
I2luY2x1ZGUgIkluc3BlY3RvcldlYkFnZW50QmFzZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgpAQCAtNDIs
NyArNDMsNiBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CkBAIC01MSw3ICs1MSw3
IEBAIGNsYXNzIEluc3BlY3RvckNhbnZhc0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibGljIENhbnZhc09ic2VyCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
cGVjdG9yQ2FudmFzQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIEluc3BlY3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYsIEluc3BlY3RvclBh
Z2VBZ2VudCopOworICAgIGV4cGxpY2l0IEluc3BlY3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29u
dGV4dCYpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckNhbnZhc0FnZW50KCkgeyB9CiAKICAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
KiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwpAQCAtNzksMzMgKzc5
LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVu
dCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHN0cnVjdCBDYW52YXNFbnRyeSB7Ci0gICAg
ICAgIFN0cmluZyBpZGVudGlmaWVyOwotICAgICAgICBTdHJpbmcgY3NzQ2FudmFzTmFtZTsKLSAg
ICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSB7IG51bGxwdHIgfTsKLQotICAgICAg
ICBDYW52YXNFbnRyeSgpIHsgfQotCi0gICAgICAgIENhbnZhc0VudHJ5KGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQpCi0gICAgICAgICAg
ICA6IGlkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgICAgICwgZWxlbWVudChjYW52YXNF
bGVtZW50KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCiAgICAgdm9pZCBjYW52YXNE
ZXN0cm95ZWRUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBjbGVhckNhbnZhc0RhdGEoKTsKLSAgICBD
YW52YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoSFRNTENhbnZhc0VsZW1lbnQmKTsKLSAgICBDYW52
YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoY29uc3QgU3RyaW5nJik7Ci0gICAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhjb25zdCBD
YW52YXNFbnRyeSYsIEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgU3RyaW5nIHVuYmluZENhbnZh
cyhJbnNwZWN0b3JDYW52YXMmKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGFzc2VydEluc3BlY3Rv
ckNhbnZhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvckNhbnZh
cyogZmluZEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYpOwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFu
YWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBt
X3BhZ2VBZ2VudDsKIAotICAgIEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQqLCBDYW52YXNFbnRy
eT4gbV9jYW52YXNFbnRyaWVzOwotICAgIEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQqLCBTdHJp
bmc+IG1fY2FudmFzVG9DU1NDYW52YXNJZDsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElu
c3BlY3RvckNhbnZhcz4+IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzOworICAgIEhhc2hN
YXA8SFRNTENhbnZhc0VsZW1lbnQqLCBTdHJpbmc+IG1fY2FudmFzVG9DU1NDYW52YXNOYW1lOwog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzOwogICAgIFRpbWVy
IG1fdGltZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDRmODExM2QwZmNj
Y2IwODI0NjliMjJhMmU1ZDRlNDlhZTRlZTdjNWEuLmRlN2M5MzFiMmVkMDU3MmI0MzcwMTM3NjM1
NTdkZjM3N2U4MTVjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UmIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVj
dG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckxheWVy
VHJlZUFnZW50PihwYWdlQ29udGV4dCkpOwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEluc3BlY3RvcldvcmtlckFnZW50PihwYWdlQ29udGV4dCkpOwogCi0gICAgYXV0byBj
YW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBh
Z2VDb250ZXh0LCBwYWdlQWdlbnQpOworICAgIGF1dG8gY2FudmFzQWdlbnRQdHIgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluc3BlY3RvckNhbnZhc0FnZW50PihwYWdlQ29udGV4dCk7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudChjYW52YXNBZ2VudFB0ci5n
ZXQoKSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURk1vdmUoY2FudmFzQWdlbnRQdHIpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315000</attachid>
            <date>2017-07-10 11:42:15 -0700</date>
            <delta_ts>2017-07-10 14:27:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710114214.patch</filename>
            <type>text/plain</type>
            <size>39465</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uYjQyYjQyZTQwODgyYWJjZTg0ZGYyYTY3MjdmYjBl
MjJkYjdlODg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVscGVyIGNsYXNzIGZvciB0cmFja2luZyBjYW52
YXNlcyBhbmQgdGhlaXIgZGF0YS4gVGhlCisgICAgICAgIGN1cnJlbnQgYXBwcm9hY2ggb2YgZGVm
aW5pbmcgYSBoZWxwZXIgc3RydWN0dXJlIGluIHRoZSBhZ2VudCdzIGhlYWRlciBpcworICAgICAg
ICBhd2t3YXJkIHRvIHVzZSBhbmQgbWFpbnRhaW4sIGFuZCB3b24ndCBzY2FsZSB3ZWxsIGFzIG1v
cmUgY2FudmFzIGluc3RydW1lbnRhdGlvbgorICAgICAgICBwb2ludHMgYW5kIGRhdGEgYXJlIGFk
ZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBOZXcgZmlsZS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZh
czo6SW5zcGVjdG9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6
YnVpbGRPYmplY3RGb3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuaDogQWRkZWQuCisKKyAgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JD
YW52YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5h
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Tm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDU1ND
YW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFu
Z2VDYW52YXNNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmNhbnZhc0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6Y2xlYXJDYW52YXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2Fu
dmFzKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aDoKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgor
ICAgICAgICBSZW1vdmUgdW51c2VkIGNvbnN0cnVjdG9yIGFyZ3VtZW50LgorCiAyMDE3LTA3LTEw
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4
dCBpcyBtaXNzaW5nIGluIGlCb29rcyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDczMzc1ZjVhNDIzYzViMTZkZWViYzMxZWM5ODgyMjIzMDc1ZjgwYmEuLjUxYzkwMWViYzcz
N2NmMTQxN2U5NTQ4ZWQ4MGM1ZTkxMTUzNjJjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
OTAwLDYgKzE5MDAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0RPTVBh
dGNoU3VwcG9ydC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKyAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE2ZDQ1OWZhZjBhNTY4MmJkZmY2ZTM5YjdkOTg5
NTUwZmYyMGU4NzIuLmY5MjkzNWJlNTI2MTMwZWFjMjIwOWM2MzY2ZTU5MzYzZTk4ZmY0NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTI4NzYsNiArMjg3Niw4IEBACiAJCTY1RkVBODY5MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkVB
ODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLzsgfTsKIAkJNjlBNkNCQUMxQzZCRTQy
QzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAv
KiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgKi87IH07CiAJCTY5QTZDQkFEMUM2QkU0MkMw
MEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDgxQzZCRTE1NTAwMThDN0YxIC8qIEFj
Y2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi87IH07CisJCTZBMjJFODcwMUYxMDQxODYwMEY1NDZD
MyAvKiBJbnNwZWN0b3JDYW52YXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMu
aCAqLzsgfTsKKwkJNkEyMkU4NzMxRjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTIyRTg3
MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLzsgfTsKIAkJNkEzMkQ3
Q0UxQTE2RDhDMDAwNDEyRjBCIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBNEI2RDY2MTlEMjI1RDgwMDZG
MTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi87IH07CiAJCTZBNEI2RDY1MTlEMjI1
MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjQxOUQyMjUxOTAwNkYxMUQzIC8qIElu
c3BlY3RvckNhbnZhc0FnZW50LmggKi87IH07CiAJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAv
KiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNzI3LDYgKzEwNzI5
LDggQEAKIAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2OTcxMDEwNzFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0Vs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJp
bGl0eVNWR0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2OTcxMDEw
ODFDNkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3Bl
Y3RvckNhbnZhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDYW52YXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkEyMkU4NzIxRjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3Rv
ckNhbnZhcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMgLyogSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkE0QjZE
NjYxOUQyMjVEODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhc0FnZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5h
dGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVJbWFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcyNDcsNiArMTcyNTEsOCBAQAog
CQkJCTdBNTQ4ODE1MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuaCAqLywKIAkJ
CQlCODg1RThEMjExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcCAqLywKIAkJCQlCODg1RThEMzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmggKi8sCisJCQkJNkEyMkU4NzIxRjEwNDJDNDAwRjU0NkMzIC8q
IEluc3BlY3RvckNhbnZhcy5jcHAgKi8sCisJCQkJNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8q
IEluc3BlY3RvckNhbnZhcy5oICovLAogCQkJCTZBNEI2RDY2MTlEMjI1RDgwMDZGMTFEMyAvKiBJ
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8sCiAJCQkJNkE0QjZENjQxOUQyMjUxOTAwNkYxMUQz
IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggKi8sCiAJCQkJN0ExRjJCNTExMjZDNjFCMjAwMDZB
N0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgKi8sCkBAIC0yNzc5OCw2ICsyNzgwNCw3IEBACiAJ
CQkJOTMzMDlERjAwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REYyMDk5RTY0OTIwMDU2RTU4MSAvKiBJ
bnNlcnRUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjg4NUU4RDUxMUUwNkREMjAw
OUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkEyMkU4NzAxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkE0QjZENjUxOUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZh
c0FnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjk1QzBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjk1QTBFOTczMzA4MDAy
NjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc4OCw2
ICszMTc5NSw3IEBACiAJCQkJOTMzMDlERUYwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERjEwOTlF
NjQ5MjAwNTZFNTgxIC8qIEluc2VydFRleHRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI4ODVFOEQ0MTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkEyMkU4NzMxRjEwNDJDNDAwRjU0NkMzIC8qIElu
c3BlY3RvckNhbnZhcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2QTMyRDdDRTFBMTZEOEMwMDA0
MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Ex
RjJCNTIxMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJjMTNkMTQxZWViZWU1NWU1OTYyYjE2ZGNlNTJlMTA3MDFm
NTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JDYW52YXMuaCIKKworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5o
IgorI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
KyNlbmRpZgorI2lmIEVOQUJMRShXRUJHTDIpCisjaW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdQVSkKKyNpbmNsdWRlICJXZWJHUFVSZW5k
ZXJpbmdDb250ZXh0LmgiCisjZW5kaWYKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSWRlbnRpZmllcnNG
YWN0b3J5Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVmPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUoSFRN
TENhbnZhc0VsZW1lbnQmIGNhbnZhcywgY29uc3QgU3RyaW5nJiBjc3NDYW52YXNOYW1lKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckNhbnZhcyhjYW52YXMsIGNzc0NhbnZh
c05hbWUpKTsKK30KKworSW5zcGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZh
c0VsZW1lbnQmIGNhbnZhcywgY29uc3QgU3RyaW5nJiBjc3NDYW52YXNOYW1lKQorICAgIDogbV9p
ZGVudGlmaWVyKCJjYW52YXM6IiArIElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmll
cigpKQorICAgICwgbV9jYW52YXMoY2FudmFzKQorICAgICwgbV9jc3NDYW52YXNOYW1lKGNzc0Nh
bnZhc05hbWUpCit7Cit9CisKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZh
cz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQoreworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1f
Y2FudmFzLmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsK
KyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gbV9jYW52YXMucmVuZGVyaW5n
Q29udGV4dCgpOworCisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlw
ZSBjb250ZXh0VHlwZTsKKyAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250
ZXh0KSkKKyAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgZWxzZSBpZiAo
aXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKKyAgICAgICAgY29udGV4dFR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyNlbmRp
ZgorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4oY29udGV4dCkpCisgICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKyAgICBlbHNlIGlmIChpczxXZWJHUFVSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKKyAg
ICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRU
eXBlOjpXZWJHUFU7CisjZW5kaWYKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFz
OjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisgICAgfQorCisgICAgYXV0byBjYW52YXMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhczo6Y3JlYXRlKCkKKyAgICAgICAgLnNldENh
bnZhc0lkKG1faWRlbnRpZmllcikKKyAgICAgICAgLnNldEZyYW1lSWQoaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKS0+ZnJhbWVJZChmcmFtZSkpCisgICAgICAgIC5zZXRD
b250ZXh0VHlwZShjb250ZXh0VHlwZSkKKyAgICAgICAgLnJlbGVhc2UoKTsKKworICAgIGlmICgh
bV9jc3NDYW52YXNOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgY2FudmFzLT5zZXRDc3NDYW52YXNO
YW1lKG1fY3NzQ2FudmFzTmFtZSk7CisgICAgZWxzZSB7CisgICAgICAgIEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKTsK
KyAgICAgICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmbV9jYW52YXMpOwor
ICAgICAgICBpZiAoIW5vZGVJZCkgeworICAgICAgICAgICAgaWYgKGludCBkb2N1bWVudE5vZGVJ
ZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmbV9jYW52YXMuZG9jdW1lbnQoKSkpIHsKKyAgICAg
ICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICAgICAgICAgIG5vZGVJZCA9
IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZt
X2NhbnZhcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZUlk
KQorICAgICAgICAgICAgY2FudmFzLT5zZXROb2RlSWQobm9kZUlkKTsKKyAgICB9CisKKyNpZiBF
TkFCTEUoV0VCR0wpCisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRl
eHQpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+
IGF0dHJpYnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0
KS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgY2FudmFzLT5zZXRDb250
ZXh0QXR0cmlidXRlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIC5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBo
YSkKKyAgICAgICAgICAgICAgICAuc2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpCisgICAgICAg
ICAgICAgICAgLnNldFN0ZW5jaWwoYXR0cmlidXRlcy0+c3RlbmNpbCkKKyAgICAgICAgICAgICAg
ICAuc2V0QW50aWFsaWFzKGF0dHJpYnV0ZXMtPmFudGlhbGlhcykKKyAgICAgICAgICAgICAgICAu
c2V0UHJlbXVsdGlwbGllZEFscGhhKGF0dHJpYnV0ZXMtPnByZW11bHRpcGxpZWRBbHBoYSkKKyAg
ICAgICAgICAgICAgICAuc2V0UHJlc2VydmVEcmF3aW5nQnVmZmVyKGF0dHJpYnV0ZXMtPnByZXNl
cnZlRHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAgICAgICAuc2V0RmFpbElmTWFqb3JQZXJmb3Jt
YW5jZUNhdmVhdChhdHRyaWJ1dGVzLT5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KQorICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAg
ICBpZiAoc2l6ZV90IG1lbW9yeUNvc3QgPSBtX2NhbnZhcy5tZW1vcnlDb3N0KCkpCisgICAgICAg
IGNhbnZhcy0+c2V0TWVtb3J5Q29zdChtZW1vcnlDb3N0KTsKKworICAgIHJldHVybiBjYW52YXM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZmMzMjYyOTNjOGEzMzY4NTgzM2Y1Nzdk
OGExMTk5YTU4YWRhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2NsYXNzIEluc3RydW1lbnRp
bmdBZ2VudHM7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0
b3JDYW52YXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDYW52YXM+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvckNhbnZhcz4gY3JlYXRlKEhUTUxDYW52YXNF
bGVtZW50JiwgY29uc3QgU3RyaW5nJiBjc3NDYW52YXNOYW1lKTsKKworICAgIGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIEhUTUxDYW52YXNF
bGVtZW50JiBjYW52YXMoKSB7IHJldHVybiBtX2NhbnZhczsgfQorICAgIGNvbnN0IFN0cmluZyYg
Y3NzQ2FudmFzTmFtZSgpIHsgcmV0dXJuIG1fY3NzQ2FudmFzTmFtZTsgfQorCisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhJ
bnN0cnVtZW50aW5nQWdlbnRzJik7CisKKyAgICB+SW5zcGVjdG9yQ2FudmFzKCkgeyB9CisKK3By
aXZhdGU6CisgICAgSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgU3Ry
aW5nJiBjc3NDYW52YXNOYW1lKTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgSFRN
TENhbnZhc0VsZW1lbnQmIG1fY2FudmFzOworICAgIFN0cmluZyBtX2Nzc0NhbnZhc05hbWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4IDIwZjBiYWFmZTBmYWEzOGZjY2Fh
ZTU1Mzk4ZTU5OWQ0YzVlNTEwZTUuLmFmMDliYjU4NTJmOWNmMDkxZWJmNTVjNzFkNjJkNmRjOGFh
ODMwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
c0FnZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgog
I2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgiCkBAIC02NSwxMiArNjQsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JDYW52YXNBZ2VudDo6
SW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0LCBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCkKK0luc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52
YXNBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JBZ2VudEJh
c2UoQVNDSUlMaXRlcmFsKCJDYW52YXMiKSwgY29udGV4dCkKICAgICAsIG1fZnJvbnRlbmREaXNw
YXRjaGVyKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNo
ZXI+KGNvbnRleHQuZnJvbnRlbmRSb3V0ZXIpKQogICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoY29udGV4dC5iYWNrZW5k
RGlzcGF0Y2hlciwgdGhpcykpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0
LmluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAg
ICAsIG1fdGltZXIoKnRoaXMsICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVk
VGltZXJGaXJlZCkKIHsKIH0KQEAgLTk3LDExICs5NSw4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogbV9jYW52YXNFbnRyaWVzKSB7Ci0gICAgICAgIGF1
dG8qIGNhbnZhc0VsZW1lbnQgPSBwYWlyLmtleTsKLSAgICAgICAgYXV0byYgY2FudmFzRW50cnkg
PSBwYWlyLnZhbHVlOwotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRkZWQo
YnVpbGRPYmplY3RGb3JDYW52YXMoY2FudmFzRW50cnksICpjYW52YXNFbGVtZW50KSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JDYW52YXMudmFsdWVzKCkpCisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNB
ZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG1faW5zdHJ1bWVudGlu
Z0FnZW50cykpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJikKQEAgLTExOSwzMiArMTE0LDI4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1
ZXN0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQs
IGludCogbm9kZUlkKQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9IGdl
dENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyIik7
CisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9y
U3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmNhbnZhc0VudHJ5LT5lbGVt
ZW50LT5kb2N1bWVudCgpKTsKKyAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJmluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkuZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRG9jdW1lbnQgaGFzIG5vdCBiZWVuIHJl
cXVlc3RlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQo
ZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBjYW52YXNFbnRyeS0+ZWxlbWVudCk7CisgICAg
Km5vZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5wdXNo
Tm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCAmaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXMoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RD
b250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwg
U3RyaW5nKiBjb250ZW50KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9
IGdldENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVy
Iik7CisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVy
cm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0g
Y2FudmFzRW50cnktPmVsZW1lbnQtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5yZW5kZXJp
bmdDb250ZXh0KCk7CiAgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4
dCkpIHsKLSAgICAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQgPSBjYW52YXNFbnRyeS0+
ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOworICAgICAgICBF
eGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzKCkudG9E
YXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkucmVsZWFzZU1lc3NhZ2UoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
Niw3ICsxNDcsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKiBnbCA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+
KGNvbnRleHQpOwogCiAgICAgICAgIGdsLT5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0
b3IodHJ1ZSk7Ci0gICAgICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gY2FudmFzRW50
cnktPmVsZW1lbnQtPnRvRGF0YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsKKyAgICAg
ICAgRXhjZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygp
LnRvRGF0YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsKICAgICAgICAgZ2wtPnNldFBy
ZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3RvcihmYWxzZSk7CiAKICAgICAgICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTczLDE0ICsxNjQsMTIgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6cmVxdWVzdENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENTU0NhbnZhc0Ns
aWVudE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+JiByZXN1bHQpCiB7Ci0g
ICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFz
SWQpOwotICAgIGlmICghY2FudmFzRW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJ
SUxpdGVyYWwoIkludmFsaWQgY2FudmFzIGlkZW50aWZpZXIiKTsKKyAgICBhdXRvKiBpbnNwZWN0
b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsK
KyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOwotICAg
IGZvciAoRWxlbWVudCogZWxlbWVudCA6IGNhbnZhc0VudHJ5LT5lbGVtZW50LT5jc3NDYW52YXND
bGllbnRzKCkpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgOiBpbnNwZWN0b3JDYW52YXMt
PmNhbnZhcygpLmNzc0NhbnZhc0NsaWVudHMoKSkgewogICAgICAgICBpZiAoaW50IGRvY3VtZW50
Tm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPmJvdW5k
Tm9kZUlkKCZlbGVtZW50LT5kb2N1bWVudCgpKSkKICAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRl
bShtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+cHVzaE5vZGVUb0Zy
b250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgZWxlbWVudCkpOwogICAgIH0KQEAg
LTIxMCwxMyArMTk5LDExIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udGV4dEFzU2NyaXB0VmFs
dWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBDYW52YXNSZW5kZXJpbmdDCiAKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDYW52YXNDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RH
cm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52
YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAg
IGF1dG8qIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmlu
ZywgY2FudmFzSWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzRW50cnktPmVsZW1lbnQtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZh
cygpLmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW52YXMgYmVsb25ncyB0byBhIGRvY3VtZW50IHdpdGhv
dXQgYSBmcmFtZSIpOwogICAgICAgICByZXR1cm47CkBAIC0yMjYsNyArMjEzLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdAogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygp
LnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBjb250ZXh0QXNT
Y3JpcHRWYWx1ZShzdGF0ZSwgY29udGV4dCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI0NSw4MCArMjMyLDgxIEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZlY3RvcjxIVE1MQ2FudmFzRWxlbWVudCo+IGNhbnZhc2VzRm9yRnJh
bWU7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVz
LmtleXMoKSkgewotICAgICAgICBpZiAoY2FudmFzRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgp
ID09ICZmcmFtZSkKLSAgICAgICAgICAgIGNhbnZhc2VzRm9yRnJhbWUuYXBwZW5kKGNhbnZhc0Vs
ZW1lbnQpOworICAgIFZlY3RvcjxJbnNwZWN0b3JDYW52YXMqPiBpbnNwZWN0b3JDYW52YXNlczsK
KyAgICBmb3IgKFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lk
ZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW5zcGVj
dG9yQ2FudmFzLT5jYW52YXMoKS5kb2N1bWVudCgpLmZyYW1lKCkgPT0gJmZyYW1lKQorICAgICAg
ICAgICAgaW5zcGVjdG9yQ2FudmFzZXMuYXBwZW5kKGluc3BlY3RvckNhbnZhcy5nZXQoKSk7CiAg
ICAgfQogCi0gICAgZm9yIChhdXRvKiBjYW52YXNFbGVtZW50IDogY2FudmFzZXNGb3JGcmFtZSkg
ewotICAgICAgICBhdXRvIGNhbnZhc0VudHJ5ID0gbV9jYW52YXNFbnRyaWVzLnRha2UoY2FudmFz
RWxlbWVudCk7CisgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52
YXNlcykgeworICAgICAgICBTdHJpbmcgaWRlbnRpZmllciA9IHVuYmluZENhbnZhcygqaW5zcGVj
dG9yQ2FudmFzKTsKICAgICAgICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5jYW52YXNSZW1vdmVkKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIpOworICAg
ICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRpZmllcik7
CiAgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDU1NDYW52
YXMoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKLSAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNJZC5jb250YWlucygmY2FudmFzRWxl
bWVudCkpOwotICAgIEFTU0VSVCghbV9jYW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVt
ZW50KSk7CisgICAgaWYgKGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsKKyAgICBB
U1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSk7
CisgICAgbV9jYW52YXNUb0NTU0NhbnZhc05hbWUuc2V0KCZjYW52YXNFbGVtZW50LCBuYW1lKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50
Tm9kZXMoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgY29uc3QgQ2Fu
dmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0g
ICAgaWYgKCFjYW52YXNFbnRyeSkKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5z
cGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y3NzQ2FudmFzQ2xp
ZW50Tm9kZXNDaGFuZ2VkKGNhbnZhc0VudHJ5LT5pZGVudGlmaWVyKTsKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+Y3NzQ2FudmFzQ2xpZW50Tm9kZXNDaGFuZ2VkKGluc3BlY3RvckNhbnZhcy0+
aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRl
Q2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkK
IHsKLSAgICBpZiAobV9jYW52YXNFbnRyaWVzLmNvbnRhaW5zKCZjYW52YXNFbGVtZW50KSkgewor
ICAgIGlmIChmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpKSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ2FudmFz
RW50cnkgbmV3Q2FudmFzRW50cnkoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVh
dGVJZGVudGlmaWVyKCksICZjYW52YXNFbGVtZW50KTsKLSAgICBuZXdDYW52YXNFbnRyeS5jc3ND
YW52YXNOYW1lID0gbV9jYW52YXNUb0NTU0NhbnZhc0lkLnRha2UoJmNhbnZhc0VsZW1lbnQpOwot
Ci0gICAgbV9jYW52YXNFbnRyaWVzLnNldCgmY2FudmFzRWxlbWVudCwgbmV3Q2FudmFzRW50cnkp
OwogICAgIGNhbnZhc0VsZW1lbnQuYWRkT2JzZXJ2ZXIoKnRoaXMpOwogCi0gICAgaWYgKCFtX2Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgY3NzQ2FudmFzTmFtZSA9IG1fY2Fu
dmFzVG9DU1NDYW52YXNOYW1lLnRha2UoJmNhbnZhc0VsZW1lbnQpOworICAgIGF1dG8gaW5zcGVj
dG9yQ2FudmFzID0gSW5zcGVjdG9yQ2FudmFzOjpjcmVhdGUoY2FudmFzRWxlbWVudCwgY3NzQ2Fu
dmFzTmFtZSk7CisKKyAgICBpZiAobV9lbmFibGVkKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2FudmFzQWRkZWQoaW5zcGVjdG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyht
X2luc3RydW1lbnRpbmdBZ2VudHMpKTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52
YXNBZGRlZChidWlsZE9iamVjdEZvckNhbnZhcyhuZXdDYW52YXNFbnRyeSwgY2FudmFzRWxlbWVu
dCkpOworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnNldChpbnNwZWN0b3JDYW52
YXMtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShpbnNwZWN0b3JDYW52YXMpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KEhUTUxDYW52YXNFbGVt
ZW50JiBjYW52YXNFbGVtZW50KQogewotICAgIENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9IGdl
dENhbnZhc0VudHJ5KGNhbnZhc0VsZW1lbnQpOwotICAgIGlmICghY2FudmFzRW50cnkpCisgICAg
YXV0byogaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVtZW50
KTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmNhbnZhc01lbW9yeUNoYW5nZWQoY2FudmFzRW50cnktPmlkZW50
aWZpZXIsIGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2FudmFzTWVtb3J5Q2hhbmdlZChpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIoKSwg
Y2FudmFzRWxlbWVudC5tZW1vcnlDb3N0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7
Ci0gICAgYXV0byBpdCA9IG1fY2FudmFzRW50cmllcy5maW5kKCZjYW52YXNFbGVtZW50KTsKLSAg
ICBpZiAoaXQgPT0gbV9jYW52YXNFbnRyaWVzLmVuZCgpKQorICAgIGF1dG8qIGluc3BlY3RvckNh
bnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCk7CisgICAgQVNTRVJUKGlu
c3BlY3RvckNhbnZhcyk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFN0cmluZyBjYW52YXNJZGVudGlmaWVyID0gaXQtPnZhbHVlLmlkZW50aWZpZXI7
Ci0gICAgbV9jYW52YXNFbnRyaWVzLnJlbW92ZShpdCk7Ci0KKyAgICBTdHJpbmcgaWRlbnRpZmll
ciA9IHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIW1fZW5hYmxlZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2ViQ29yZTo6Q2FudmFzT2JzZXJ2ZXI6OmNhbnZh
c0Rlc3Ryb3llZCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gdGhlIEdDIGRlc3Ryb3lpbmcgdGhl
IEhUTUxDYW52YXNFbGVtZW50LgogICAgIC8vIER1ZSB0byB0aGUgc2luZ2xlLXByb2Nlc3MgbW9k
ZWwgdXNlZCBpbiBXZWJLaXQxLCB0aGUgZXZlbnQgbXVzdCBiZSBkaXNwYXRjaGVkIGZyb20gYSB0
aW1lciB0byBwcmV2ZW50CiAgICAgLy8gdGhlIGZyb250ZW5kIGZyb20gbWFraW5nIEpTIGFsbG9j
YXRpb25zIHdoaWxlIHRoZSBHQyBpcyBzdGlsbCBhY3RpdmUuCi0gICAgbV9yZW1vdmVkQ2FudmFz
SWRlbnRpZmllcnMuYXBwZW5kKGNhbnZhc0lkZW50aWZpZXIpOworICAgIG1fcmVtb3ZlZENhbnZh
c0lkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKIAogICAgIGlmICghbV90aW1lci5pc0Fj
dGl2ZSgpKQogICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwpAQCAtMzI5LDExMSAr
MzE3LDU2IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVy
RmlyZWQoKQogICAgIGlmICghbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBtX3JlbW92
ZWRDYW52YXNJZGVudGlmaWVycykKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZh
c1JlbW92ZWQoaWRlbnRpZmllcik7CisgICAgaWYgKG1fZW5hYmxlZCkgeworICAgICAgICBmb3Ig
KGF1dG8mIGlkZW50aWZpZXIgOiBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycykKKyAgICAgICAg
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNSZW1vdmVkKGlkZW50aWZpZXIpOworICAg
IH0KIAogICAgIG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNsZWFyQ2FudmFzRGF0YSgpCiB7Ci0gICAgZm9yIChhdXRv
KiBjYW52YXNFbGVtZW50IDogbV9jYW52YXNFbnRyaWVzLmtleXMoKSkKLSAgICAgICAgY2FudmFz
RWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIGZvciAoYXV0byYgaW5zcGVjdG9y
Q2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFsdWVzKCkpCisgICAgICAg
IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzKCkucmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogCi0gICAg
bV9jYW52YXNFbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9jYW52YXNUb0NTU0NhbnZhc0lkLmNsZWFy
KCk7CisgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuY2xlYXIoKTsKKyAgICBtX2Nh
bnZhc1RvQ1NTQ2FudmFzTmFtZS5jbGVhcigpOwogICAgIG1fcmVtb3ZlZENhbnZhc0lkZW50aWZp
ZXJzLmNsZWFyKCk7CiAKICAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3Rp
bWVyLnN0b3AoKTsKIH0KIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNhbnZhc0VudHJ5KiBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZh
c0VsZW1lbnQpCitTdHJpbmcgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJbnNw
ZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKIHsKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBt
X2NhbnZhc0VudHJpZXMuZmluZCgmY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQg
IT0gbV9jYW52YXNFbnRyaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gJmZpbmRSZXN1bHQtPnZh
bHVlOworICAgIEFTU0VSVCghbV9jYW52YXNUb0NTU0NhbnZhc05hbWUuY29udGFpbnMoJmluc3Bl
Y3RvckNhbnZhcy5jYW52YXMoKSkpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgU3RyaW5n
IGlkZW50aWZpZXIgPSBpbnNwZWN0b3JDYW52YXMuaWRlbnRpZmllcigpOworICAgIG1faWRlbnRp
ZmllclRvSW5zcGVjdG9yQ2FudmFzLnJlbW92ZShpZGVudGlmaWVyKTsKKworICAgIHJldHVybiBp
ZGVudGlmaWVyOwogfQogCi1JbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkqIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpnZXRDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmIGNhbnZhc0lkZW50
aWZpZXIpCitJbnNwZWN0b3JDYW52YXMqIEluc3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNw
ZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIpCiB7Ci0gICAgZm9yIChhdXRvJiBjYW52YXNFbnRyeSA6IG1fY2FudmFzRW50cmllcy52
YWx1ZXMoKSkgewotICAgICAgICBpZiAoY2FudmFzRW50cnkuaWRlbnRpZmllciA9PSBjYW52YXNJ
ZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJuICZjYW52YXNFbnRyeTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQ2FudmFzPiBpbnNwZWN0b3JDYW52YXMgPSBtX2lkZW50aWZpZXJUb0luc3BlY3Rv
ckNhbnZhcy5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKKyAg
ICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRl
bnRpZmllci4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5nZXQoKTsKIH0KIAotUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
YnVpbGRPYmplY3RGb3JDYW52YXMoY29uc3QgQ2FudmFzRW50cnkmIGNhbnZhc0VudHJ5LCBIVE1M
Q2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKK0luc3BlY3RvckNhbnZhcyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZh
c0VsZW1lbnQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzRWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCk7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhc0Vs
ZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpOwotCi0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZSBjb250ZXh0VHlwZTsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihjb250ZXh0KSkKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKLSNpZiBFTkFCTEUoV0VCR0wp
Ci0gICAgZWxzZSBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAg
ICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBl
OjpXZWJHTDsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgZWxzZSBpZiAoaXM8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOwotI2VuZGlmCi0j
aWYgRU5BQkxFKFdFQkdQVSkKLSAgICBlbHNlIGlmIChpczxXZWJHUFVSZW5kZXJpbmdDb250ZXh0
Pihjb250ZXh0KSkKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRUeXBlOjpXZWJHUFU7Ci0jZW5kaWYKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisgICAgZm9yIChhdXRvJiBp
bnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoJmluc3BlY3RvckNhbnZhcy0+Y2FudmFzKCkgPT0gJmNhbnZhc0VsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gaW5zcGVjdG9yQ2FudmFzLmdldCgpOwogICAgIH0KIAot
ICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNy
ZWF0ZSgpCi0gICAgICAgIC5zZXRDYW52YXNJZChjYW52YXNFbnRyeS5pZGVudGlmaWVyKQotICAg
ICAgICAuc2V0RnJhbWVJZChtX3BhZ2VBZ2VudC0+ZnJhbWVJZChmcmFtZSkpCi0gICAgICAgIC5z
ZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZSkKLSAgICAgICAgLnJlbGVhc2UoKTsKLQotICAgIGlm
ICghY2FudmFzRW50cnkuY3NzQ2FudmFzTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGNhbnZhcy0+
c2V0Q3NzQ2FudmFzTmFtZShjYW52YXNFbnRyeS5jc3NDYW52YXNOYW1lKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvckRPTUFnZW50KCk7Ci0gICAgICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+
Ym91bmROb2RlSWQoJmNhbnZhc0VsZW1lbnQpOwotICAgICAgICBpZiAoIW5vZGVJZCkgewotICAg
ICAgICAgICAgaWYgKGludCBkb2N1bWVudE5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgm
Y2FudmFzRWxlbWVudC5kb2N1bWVudCgpKSkgewotICAgICAgICAgICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgICAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9G
cm9udGVuZChpZ25vcmVkLCBkb2N1bWVudE5vZGVJZCwgJmNhbnZhc0VsZW1lbnQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGVJZCkKLSAgICAgICAgICAgIGNh
bnZhcy0+c2V0Tm9kZUlkKG5vZGVJZCk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFdFQkdMKQotICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgewotICAgICAgICBp
ZiAoc3RkOjpvcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCktPmdldENvbnRleHRBdHRy
aWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKLSAg
ICAgICAgICAgICAgICAuc2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpCi0gICAgICAgICAgICAg
ICAgLnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKQotICAgICAgICAgICAgICAgIC5zZXRTdGVu
Y2lsKGF0dHJpYnV0ZXMtPnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgLnNldEFudGlhbGlhcyhh
dHRyaWJ1dGVzLT5hbnRpYWxpYXMpCi0gICAgICAgICAgICAgICAgLnNldFByZW11bHRpcGxpZWRB
bHBoYShhdHRyaWJ1dGVzLT5wcmVtdWx0aXBsaWVkQWxwaGEpCi0gICAgICAgICAgICAgICAgLnNl
dFByZXNlcnZlRHJhd2luZ0J1ZmZlcihhdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIp
Ci0gICAgICAgICAgICAgICAgLnNldEZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQoYXR0cmli
dXRlcy0+ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkKLSAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHNpemVfdCBtZW1v
cnlDb3N0ID0gY2FudmFzRWxlbWVudC5tZW1vcnlDb3N0KCkpCi0gICAgICAgIGNhbnZhcy0+c2V0
TWVtb3J5Q29zdChtZW1vcnlDb3N0KTsKLQotICAgIHJldHVybiBjYW52YXM7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggMGEwZWE4ODhhZTcyYjhm
YzZkZDU4MDY4NjQ5Y2MwNmY1OTVmZjVkYi4uMDdkMTZlMGI4NDJhMjBiODBmMWMyMjI5ODhhOWY1
Y2YxNjVmNWI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhc0FnZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXMuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KQEAgLTQyLDcgKzQz
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwpAQCAtNTEsNyArNTEsNyBAQCBj
bGFzcyBJbnNwZWN0b3JDYW52YXNBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBDYW52YXNPYnNlcgogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
ckNhbnZhc0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBJbnNwZWN0b3JDYW52YXNBZ2VudChXZWJBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JQYWdlQWdl
bnQqKTsKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JDYW52YXNBZ2VudChXZWJBZ2VudENvbnRleHQm
KTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIHsgfQogCiAgICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKQEAgLTc5LDMzICs3OSwxOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ2FudmFzRW50cnkgewotICAgICAgICBT
dHJpbmcgaWRlbnRpZmllcjsKLSAgICAgICAgU3RyaW5nIGNzc0NhbnZhc05hbWU7Ci0gICAgICAg
IEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50ID0geyBudWxscHRyIH07Ci0KLSAgICAgICAgQ2Fu
dmFzRW50cnkoKSB7IH0KLQotICAgICAgICBDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNFbGVtZW50KQotICAgICAgICAgICAgOiBp
ZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgICAgICAgICAsIGVsZW1lbnQoY2FudmFzRWxlbWVu
dCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQogICAgIHZvaWQgY2FudmFzRGVzdHJv
eWVkVGltZXJGaXJlZCgpOwogICAgIHZvaWQgY2xlYXJDYW52YXNEYXRhKCk7Ci0gICAgQ2FudmFz
RW50cnkqIGdldENhbnZhc0VudHJ5KEhUTUxDYW52YXNFbGVtZW50Jik7Ci0gICAgQ2FudmFzRW50
cnkqIGdldENhbnZhc0VudHJ5KGNvbnN0IFN0cmluZyYpOwotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNhbnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoY29uc3QgQ2FudmFz
RW50cnkmLCBIVE1MQ2FudmFzRWxlbWVudCYpOworICAgIFN0cmluZyB1bmJpbmRDYW52YXMoSW5z
cGVjdG9yQ2FudmFzJik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBhc3NlcnRJbnNwZWN0b3JDYW52
YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGZp
bmRJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnNwZWN0b3I6OkNhbnZhc0Zyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3Bh
dGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7CiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIm
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdl
QWdlbnQ7CiAKLSAgICBIYXNoTWFwPEhUTUxDYW52YXNFbGVtZW50KiwgQ2FudmFzRW50cnk+IG1f
Y2FudmFzRW50cmllczsKLSAgICBIYXNoTWFwPEhUTUxDYW52YXNFbGVtZW50KiwgU3RyaW5nPiBt
X2NhbnZhc1RvQ1NTQ2FudmFzSWQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+PiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhczsKKyAgICBIYXNoTWFwPEhU
TUxDYW52YXNFbGVtZW50KiwgU3RyaW5nPiBtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZTsKICAgICBW
ZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVyczsKICAgICBUaW1lciBtX3Rp
bWVyOwogICAgIGJvb2wgbV9lbmFibGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA0ZjgxMTNkMGZjY2NiMDgy
NDY5YjIyYTJlNWQ0ZTQ5YWU0ZWU3YzVhLi5kZTdjOTMxYjJlZDA1NzJiNDM3MDEzNzYzNTU3ZGYz
NzdlODE1YzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlJiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMK
ICAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JMYXllclRyZWVB
Z2VudD4ocGFnZUNvbnRleHQpKTsKICAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxJbnNwZWN0b3JXb3JrZXJBZ2VudD4ocGFnZUNvbnRleHQpKTsKIAotICAgIGF1dG8gY2FudmFz
QWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckNhbnZhc0FnZW50PihwYWdlQ29u
dGV4dCwgcGFnZUFnZW50KTsKKyAgICBhdXRvIGNhbnZhc0FnZW50UHRyID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnNwZWN0b3JDYW52YXNBZ2VudD4ocGFnZUNvbnRleHQpOwogICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ2FudmFzQWdlbnQoY2FudmFzQWdlbnRQdHIuZ2V0KCkp
OwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKGNhbnZhc0FnZW50UHRyKSk7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA3YWJmZjc0NzQyMTc3NTZiYmVmYTVlZTM1ZGJhYTBmOTI3MjdiMjUxLi4xNWRlNzcxMWNjZTM3
MThkZmI4ZmMwOThiMjA0NDFmZjhlYjE4NGY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTct
MDctMTAgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFJlZmFjdG9yaW5nOiByZXBsYWNlIEluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52
YXNFbnRyeSB3aXRoIGEgaGVscGVyIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzMTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb25zIGZvciBuZXcgZXJy
b3Igc3RyaW5ncy4KKworICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvY3NzLWNhbnZhcy1jbGll
bnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250
ZW50LTJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RO
b2RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52
YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dDoKKwogMjAxNy0wNy0xMCAgWmFsYW4gQnVqdGFzICA8
emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrIG9mIHRleHQgaXMgbWlzc2luZyBpbiBp
Qm9va3Mgc2FtcGxlIGJvb2tzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9jc3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NhbnZhcy9jc3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDBlOTFlZmIw
ZTc4YjFmOWQ5YjM5NjBhNTI3MWZhMzFlYTYzYWQzNzQuLjlhZWIzZmRjNjk0NzRlODE2NTgxMTIw
OWIyMzQxYjZiMWI4MjNmNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52
YXMvY3NzLWNhbnZhcy1jbGllbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY2FudmFzL2Nzcy1jYW52YXMtY2xpZW50cy1leHBlY3RlZC50eHQKQEAgLTE4LDUgKzE4
LDUgQEAgUEFTUzogVGhlcmUgc2hvdWxkIGJlIG5vIGNsaWVudCBub2Rlcy4KIAogLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IENhbnZhcy5DU1NDYW52YXNDbGllbnRzLkludmFsaWRDYW52YXNJZAogUEFT
UzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRp
ZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Q29udGVudC0yZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4
cGVjdGVkLnR4dAppbmRleCBlOGI5ZDViY2UwNWZmMDljN2JlZjU2NWNjZTY1NmEwMjU2NGVlZmU2
Li40ZTE5OWRmNjA2OGYxZDFmMmNlZTkzOTY0YjU0M2Q3MDE3MzRmNTg2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4
cGVjdGVkLnR4dApAQCAtNyw1ICs3LDUgQEAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFTd0FBQUNXQ0FZQUFBQmtXN1hTQUFBQUFYTlNSMElBcnMKIAogLS0g
UnVubmluZyB0ZXN0IGNhc2U6IENhbnZhcy5yZXF1ZXN0Q29udGVudC5pbnZhbGlkQ2FudmFzSWQK
IFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlk
ZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50aWZpZXIuCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50
eHQKaW5kZXggOWFjZDM3NmMyMzIxNjNmOTgzMmJkMGIzM2QxNjhmNGYyODM0ZmUyMC4uNzE1YzQz
MWIwZTkyYTViNmE0NmQ3MWZkYTQ2NWU2ZDIxZTcxYjQzYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQKQEAgLTE3LDUg
KzE3LDUgQEAgUEFTUzogQ2FudmFzICJDYW52YXMgMiIgaGFzIG5vZGUgd2l0aCB0eXBlICJDQU5W
QVMiLgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVlc3ROb2RlLmludmFsaWRD
YW52YXNJZAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBj
YW52YXMgaWRlbnRpZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvbHZlQ2FudmFz
Q29udGV4dC0yZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jl
c29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dAppbmRleCBkOTIxZjI0ODlkMjU2ZmI1
MThmNGM2ZTRkZjk2OWExNjY4MWI0MmYwLi42ZWQ2MzNkYTg0ODM2OGQ5NjViOTA0YjI0NjI2NGY5
NmY1MDA2ODk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29s
dmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dApAQCAtOCw1ICs4
LDUgQEAgUEFTUzogUGF5bG9hZCBzaG91bGQgaGF2ZSBjbGFzc05hbWUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCIuCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVzb2x2ZUNhbnZh
c0NvbnRleHQuaW52YWxpZElkZW50aWZpZXIKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9y
LgotRXJyb3I6IEludmFsaWQgY2FudmFzIGlkZW50aWZpZXIKK0Vycm9yOiBObyBjYW52YXMgZm9y
IGdpdmVuIGlkZW50aWZpZXIuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315030</attachid>
            <date>2017-07-10 14:27:53 -0700</date>
            <delta_ts>2017-07-18 14:53:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170710142753.patch</filename>
            <type>text/plain</type>
            <size>39461</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJlNDA4ZmY2OGIzYmFh
NGFhNGY0ZDhiYzk1ZTJmNDdiZGMwODZjOS4uNzg1OWIwNzZiZWQwMTJiNWJjZjI5YWJjYjhjMWQ2
YjBlYTIwNWU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA3LTEwICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgY2FudmFz
ZXMgYW5kIHRoZWlyIGRhdGEuIFRoZQorICAgICAgICBjdXJyZW50IGFwcHJvYWNoIG9mIGRlZmlu
aW5nIGEgaGVscGVyIHN0cnVjdHVyZSBpbiB0aGUgYWdlbnQncyBoZWFkZXIgaXMKKyAgICAgICAg
YXdrd2FyZCB0byB1c2UgYW5kIG1haW50YWluLCBhbmQgd29uJ3Qgc2NhbGUgd2VsbCBhcyBtb3Jl
IGNhbnZhcyBpbnN0cnVtZW50YXRpb24KKyAgICAgICAgcG9pbnRzIGFuZCBkYXRhIGFyZSBhZGRl
ZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgTmV3IGZpbGUuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6
Okluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Lmg6IEFkZGVkLgorCisgICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q1NTQ2Fu
dmFzQ2xpZW50Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDYW52YXNDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZh
c0FnZW50OjpmcmFtZU5hdmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlkQ3JlYXRlQ1NTQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdl
Q2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpj
YW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmNsZWFyQ2FudmFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpidWlsZE9iamVjdEZvckNhbnZh
cyk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAg
ICAgICAgUmVtb3ZlIHVudXNlZCBjb25zdHJ1Y3RvciBhcmd1bWVudC4KKwogMjAxNy0wNy0xMCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrIG9mIHRleHQg
aXMgbWlzc2luZyBpbiBpQm9va3Mgc2FtcGxlIGJvb2tzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCA3MzM3NWY1YTQyM2M1YjE2ZGVlYmMzMWVjOTg4MjIyMzA3NWY4MGJhLi41MWM5MDFlYmM3Mzdj
ZjE0MTdlOTU0OGVkODBjNWU5MTE1MzYyYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTkw
MCw2ICsxOTAwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisgICAgaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5jcHAKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNmQ0NTlmYWYwYTU2ODJiZGZmNmUzOWI3ZDk4OTU1
MGZmMjBlODcyLi5mOTI5MzViZTUyNjEzMGVhYzIyMDljNjM2NmU1OTM2M2U5OGZmNDY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yODc2LDYgKzI4NzYsOCBAQAogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZFQTg2
ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTY5QTZDQkFDMUM2QkU0MkMw
MEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwNzFDNkJFMTU1MDAxOEM3RjEgLyog
QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwICovOyB9OwogCQk2OUE2Q0JBRDFDNkJFNDJDMDBC
ODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5oICovOyB9OworCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMg
LyogSW5zcGVjdG9yQ2FudmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmgg
Ki87IH07CisJCTZBMjJFODczMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NzIx
RjEwNDJDNDAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5jcHAgKi87IH07CiAJCTZBMzJEN0NF
MUExNkQ4QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NjE5RDIyNUQ4MDA2RjEx
RDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovOyB9OwogCQk2QTRCNkQ2NTE5RDIyNTE5
MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNw
ZWN0b3JDYW52YXNBZ2VudC5oICovOyB9OwogCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyog
TmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDcyNyw2ICsxMDcyOSw4
IEBACiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjk3MTAxMDcxQzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxp
dHlTVkdFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjk3MTAxMDgx
QzZCRTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0
b3JDYW52YXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZBMjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JD
YW52YXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkE0QjZENjQxOUQyMjUxOTAwNkYxMUQzIC8qIEluc3Bl
Y3RvckNhbnZhc0FnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3RvckNhbnZhc0FnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY2
MTlEMjI1RDgwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRp
dmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MjQ3LDYgKzE3MjUxLDggQEAKIAkJ
CQk3QTU0ODgxNTE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmggKi8sCiAJCQkJ
Qjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAgKi8sCiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oICovLAorCQkJCTZBMjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJ
bnNwZWN0b3JDYW52YXMuY3BwICovLAorCQkJCTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJ
bnNwZWN0b3JDYW52YXMuaCAqLywKIAkJCQk2QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwICovLAogCQkJCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovLAogCQkJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdF
NiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwICovLApAQCAtMjc3OTgsNiArMjc4MDQsNyBAQAogCQkJ
CTkzMzA5REYwMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGMjA5OUU2NDkyMDA1NkU1ODEgLyogSW5z
ZXJ0VGV4dENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4ODVFOEQ1MTFFMDZERDIwMDlG
RkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTZBMjJFODcwMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTZBNEI2RDY1MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2
RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3ODgsNiAr
MzE3OTUsNyBAQAogCQkJCTkzMzA5REVGMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYxMDk5RTY0
OTIwMDU2RTU4MSAvKiBJbnNlcnRUZXh0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
ODg1RThENDExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZBMjJFODczMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNw
ZWN0b3JDYW52YXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkEzMkQ3Q0UxQTE2RDhDMDAwNDEy
RjBCIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMUYy
QjUyMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUM4MUI5NUIwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRiYzEzZDE0MWVlYmVlNTVlNTk2MmIxNmRjZTUyZTEwNzAxZjU0
NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yQ2FudmFzLmgiCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTENh
bnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclBhZ2VBZ2VudC5oIgorI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIK
KyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
ZW5kaWYKKyNpZiBFTkFCTEUoV0VCR0wyKQorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuaCIKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJHUFUpCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVy
aW5nQ29udGV4dC5oIgorI2VuZGlmCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lkZW50aWZpZXJzRmFj
dG9yeS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhczo6Y3JlYXRlKEhUTUxD
YW52YXNFbGVtZW50JiBjYW52YXMsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JDYW52YXMoY2FudmFzLCBjc3NDYW52YXNO
YW1lKSk7Cit9CisKK0luc3BlY3RvckNhbnZhczo6SW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNF
bGVtZW50JiBjYW52YXMsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSkKKyAgICA6IG1faWRl
bnRpZmllcigiY2FudmFzOiIgKyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIo
KSkKKyAgICAsIG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fY3NzQ2FudmFzTmFtZShjc3NDYW52
YXNOYW1lKQoreworfQorCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+
IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKK3sKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX2Nh
bnZhcy5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Cisg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IG1fY2FudmFzLnJlbmRlcmluZ0Nv
bnRleHQoKTsKKworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGUg
Y29udGV4dFR5cGU7CisgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4
dCkpCisgICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Q2FudmFzMkQ7CisjaWYgRU5BQkxFKFdFQkdMKQorICAgIGVsc2UgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAgICAgIGNvbnRleHRUeXBlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0w7CisjZW5kaWYK
KyNpZiBFTkFCTEUoV0VCR0wyKQorICAgIGVsc2UgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ+KGNvbnRleHQpKQorICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJHUFUp
CisgICAgZWxzZSBpZiAoaXM8V2ViR1BVUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCisgICAg
ICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlw
ZTo6V2ViR1BVOworI2VuZGlmCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgIH0KKworICAgIGF1dG8gY2FudmFzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRDYW52
YXNJZChtX2lkZW50aWZpZXIpCisgICAgICAgIC5zZXRGcmFtZUlkKGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yUGFnZUFnZW50KCktPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAuc2V0Q29u
dGV4dFR5cGUoY29udGV4dFR5cGUpCisgICAgICAgIC5yZWxlYXNlKCk7CisKKyAgICBpZiAoIW1f
Y3NzQ2FudmFzTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhbnZhcy0+c2V0Q3NzQ2FudmFzTmFt
ZShtX2Nzc0NhbnZhc05hbWUpOworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCk7Cisg
ICAgICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzKTsKKyAg
ICAgICAgaWYgKCFub2RlSWQpIHsKKyAgICAgICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm1fY2FudmFzLmRvY3VtZW50KCkpKSB7CisgICAgICAg
ICAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgICAgICAgICBub2RlSWQgPSBk
b21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmbV9j
YW52YXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGVJZCkK
KyAgICAgICAgICAgIGNhbnZhcy0+c2V0Tm9kZUlkKG5vZGVJZCk7CisgICAgfQorCisjaWYgRU5B
QkxFKFdFQkdMKQorICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0
KSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBh
dHRyaWJ1dGVzID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4
dEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
czo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEp
CisgICAgICAgICAgICAgICAgLnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKQorICAgICAgICAg
ICAgICAgIC5zZXRTdGVuY2lsKGF0dHJpYnV0ZXMtPnN0ZW5jaWwpCisgICAgICAgICAgICAgICAg
LnNldEFudGlhbGlhcyhhdHRyaWJ1dGVzLT5hbnRpYWxpYXMpCisgICAgICAgICAgICAgICAgLnNl
dFByZW11bHRpcGxpZWRBbHBoYShhdHRyaWJ1dGVzLT5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAg
ICAgICAgICAgICAgLnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihhdHRyaWJ1dGVzLT5wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgLnNldEZhaWxJZk1ham9yUGVyZm9ybWFu
Y2VDYXZlYXQoYXR0cmlidXRlcy0+ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkKKyAgICAg
ICAgICAgICAgICAucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAg
aWYgKHNpemVfdCBtZW1vcnlDb3N0ID0gbV9jYW52YXMubWVtb3J5Q29zdCgpKQorICAgICAgICBj
YW52YXMtPnNldE1lbW9yeUNvc3QobWVtb3J5Q29zdCk7CisKKyAgICByZXR1cm4gY2FudmFzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGZjMzI2MjkzYzhhMzM2ODU4MzNmNTc3ZDhh
MTE5OWE1OGFkYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5n
QWdlbnRzOworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9y
Q2FudmFzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JDYW52YXM+IGNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSk7CisKKyAgICBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBIVE1MQ2FudmFzRWxl
bWVudCYgY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNz
c0NhbnZhc05hbWUoKSB7IHJldHVybiBtX2Nzc0NhbnZhc05hbWU7IH0KKworICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoSW5z
dHJ1bWVudGluZ0FnZW50cyYpOworCisgICAgfkluc3BlY3RvckNhbnZhcygpIHsgfQorCitwcml2
YXRlOgorICAgIEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IFN0cmlu
ZyYgY3NzQ2FudmFzTmFtZSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEhUTUxD
YW52YXNFbGVtZW50JiBtX2NhbnZhczsKKyAgICBTdHJpbmcgbV9jc3NDYW52YXNOYW1lOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAyMGYwYmFhZmUwZmFhMzhmY2NhYWU1
NTM5OGU1OTlkNGM1ZTUxMGU1Li40MGRlMTIwMTVjYzU1ZTE1OWExOWJjNmI2YmM3ZDEzMDZkMWE1
ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgotI2luY2x1ZGUgIklu
c3BlY3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNp
bmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgpAQCAtNjUsMTIgKzY0LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Oklu
c3BlY3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQpCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNl
KEFTQ0lJTGl0ZXJhbCgiQ2FudmFzIiksIGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0
Y2hlcihzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVy
Pihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERp
c3BhdGNoZXIsIHRoaXMpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5p
bmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAg
LCBtX3RpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRp
bWVyRmlyZWQpCiB7CiB9CkBAIC05NywxMSArOTUsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAotICAg
IGZvciAoY29uc3QgYXV0byYgcGFpciA6IG1fY2FudmFzRW50cmllcykgewotICAgICAgICBhdXRv
KiBjYW52YXNFbGVtZW50ID0gcGFpci5rZXk7Ci0gICAgICAgIGF1dG8mIGNhbnZhc0VudHJ5ID0g
cGFpci52YWx1ZTsKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVkKGJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKGNhbnZhc0VudHJ5LCAqY2FudmFzRWxlbWVudCkpOwotICAgIH0K
KyAgICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9y
Q2FudmFzLnZhbHVlcygpKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzQWRk
ZWQoaW5zcGVjdG9yQ2FudmFzLT5idWlsZE9iamVjdEZvckNhbnZhcyhtX2luc3RydW1lbnRpbmdB
Z2VudHMpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0
cmluZyYpCkBAIC0xMTksMzIgKzExNCwyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVz
dE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBp
bnQqIG5vZGVJZCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRD
YW52YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBl
cnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOwor
ICAgIGF1dG8qIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0
cmluZywgY2FudmFzSWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgaW50IGRvY3VtZW50Tm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvckRPTUFnZW50KCktPmJvdW5kTm9kZUlkKCZjYW52YXNFbnRyeS0+ZWxlbWVu
dC0+ZG9jdW1lbnQoKSk7CisgICAgaW50IGRvY3VtZW50Tm9kZUlkID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPmJvdW5kTm9kZUlkKCZpbnNwZWN0b3JDYW52YXMt
PmNhbnZhcygpLmRvY3VtZW50KCkpOwogICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkRvY3VtZW50IGhhcyBub3QgYmVlbiByZXF1
ZXN0ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICpub2RlSWQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+cHVzaE5vZGVUb0Zyb250ZW5kKGVy
cm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2FudmFzRW50cnktPmVsZW1lbnQpOworICAgICpu
b2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgJmluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29u
dGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFN0
cmluZyogY29udGVudCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBn
ZXRDYW52YXNFbnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIp
OworICAgIGF1dG8qIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJv
clN0cmluZywgY2FudmFzSWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNh
bnZhc0VudHJ5LT5lbGVtZW50LT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzKCkucmVuZGVyaW5n
Q29udGV4dCgpOwogICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQp
KSB7Ci0gICAgICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gY2FudmFzRW50cnktPmVs
ZW1lbnQtPnRvRGF0YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsKKyAgICAgICAgRXhj
ZXB0aW9uT3I8U3RyaW5nPiByZXN1bHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnRvRGF0
YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLnJlbGVhc2VNZXNzYWdlKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTYs
NyArMTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRlbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSogZ2wgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihj
b250ZXh0KTsKIAogICAgICAgICBnbC0+c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9y
KHRydWUpOwotICAgICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHJlc3VsdCA9IGNhbnZhc0VudHJ5
LT5lbGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CisgICAgICAg
IEV4Y2VwdGlvbk9yPFN0cmluZz4gcmVzdWx0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS50
b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiAgICAgICAgIGdsLT5zZXRQcmV2
ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3IoZmFsc2UpOwogCiAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKQEAgLTE3MywxNCArMTY0LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDU1NDYW52YXNDbGll
bnROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgcmVzdWx0KQogewotICAg
IGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRyeSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0lk
KTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyIik7CisgICAgYXV0byogaW5zcGVjdG9y
Q2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7Cisg
ICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBy
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKLSAgICBm
b3IgKEVsZW1lbnQqIGVsZW1lbnQgOiBjYW52YXNFbnRyeS0+ZWxlbWVudC0+Y3NzQ2FudmFzQ2xp
ZW50cygpKSB7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50IDogaW5zcGVjdG9yQ2FudmFzLT5j
YW52YXMoKS5jc3NDYW52YXNDbGllbnRzKCkpIHsKICAgICAgICAgaWYgKGludCBkb2N1bWVudE5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5v
ZGVJZCgmZWxlbWVudC0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICByZXN1bHQtPmFkZEl0ZW0o
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIGVsZW1lbnQpKTsKICAgICB9CkBAIC0y
MTAsMTMgKzE5OSwxMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRleHRBc1NjcmlwdFZhbHVl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQ2FudmFzUmVuZGVyaW5nQwogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFzQ29udGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3Jv
dXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFz
RW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFzRW50cnkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2FudmFzIGlkZW50aWZpZXIiKTsKKyAgICBh
dXRvKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhc0VudHJ5LT5lbGVtZW50LT5kb2N1bWVu
dCgpLmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMo
KS5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICBlcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FudmFzIGJlbG9uZ3MgdG8gYSBkb2N1bWVudCB3aXRob3V0
IGEgZnJhbWUiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI2LDcgKzIxMyw3IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDYW52YXNDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoJnN0YXRlKTsKICAgICBBU1NFUlQoIWluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0ID0gY2FudmFzRW50cnktPmVsZW1lbnQtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5y
ZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gY29udGV4dEFzU2Ny
aXB0VmFsdWUoc3RhdGUsIGNvbnRleHQpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNDUsODAgKzIzMiw4MSBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQqPiBjYW52YXNlc0ZvckZyYW1l
OwotICAgIGZvciAoY29uc3QgYXV0byYgY2FudmFzRWxlbWVudCA6IG1fY2FudmFzRW50cmllcy5r
ZXlzKCkpIHsKLSAgICAgICAgaWYgKGNhbnZhc0VsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSA9
PSAmZnJhbWUpCi0gICAgICAgICAgICBjYW52YXNlc0ZvckZyYW1lLmFwcGVuZChjYW52YXNFbGVt
ZW50KTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yQ2FudmFzKj4gaW5zcGVjdG9yQ2FudmFzZXM7Cisg
ICAgZm9yIChSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVu
dGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGluc3BlY3Rv
ckNhbnZhcy0+Y2FudmFzKCkuZG9jdW1lbnQoKS5mcmFtZSgpID09ICZmcmFtZSkKKyAgICAgICAg
ICAgIGluc3BlY3RvckNhbnZhc2VzLmFwcGVuZChpbnNwZWN0b3JDYW52YXMuZ2V0KCkpOwogICAg
IH0KIAotICAgIGZvciAoYXV0byogY2FudmFzRWxlbWVudCA6IGNhbnZhc2VzRm9yRnJhbWUpIHsK
LSAgICAgICAgYXV0byBjYW52YXNFbnRyeSA9IG1fY2FudmFzRW50cmllcy50YWtlKGNhbnZhc0Vs
ZW1lbnQpOworICAgIGZvciAoYXV0byogaW5zcGVjdG9yQ2FudmFzIDogaW5zcGVjdG9yQ2FudmFz
ZXMpIHsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXIgPSB1bmJpbmRDYW52YXMoKmluc3BlY3Rv
ckNhbnZhcyk7CiAgICAgICAgIGlmIChtX2VuYWJsZWQpCi0gICAgICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChjYW52YXNFbnRyeS5pZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNSZW1vdmVkKGlkZW50aWZpZXIpOwog
ICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ1NTQ2FudmFz
KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
Ci0gICAgQVNTRVJUKCFtX2NhbnZhc1RvQ1NTQ2FudmFzSWQuY29udGFpbnMoJmNhbnZhc0VsZW1l
bnQpKTsKLSAgICBBU1NFUlQoIW1fY2FudmFzRW50cmllcy5jb250YWlucygmY2FudmFzRWxlbWVu
dCkpOworICAgIGlmIChmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
bV9jYW52YXNUb0NTU0NhbnZhc0lkLnNldCgmY2FudmFzRWxlbWVudCwgbmFtZSk7CisgICAgQVNT
RVJUKCFtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZS5jb250YWlucygmY2FudmFzRWxlbWVudCkpOwor
ICAgIG1fY2FudmFzVG9DU1NDYW52YXNOYW1lLnNldCgmY2FudmFzRWxlbWVudCwgbmFtZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5v
ZGVzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewotICAgIGNvbnN0IENhbnZh
c0VudHJ5KiBjYW52YXNFbnRyeSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0VsZW1lbnQpOwotICAg
IGlmICghY2FudmFzRW50cnkpCisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3Bl
Y3RvckNhbnZhcyhjYW52YXNFbGVtZW50KTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNzc0NhbnZhc0NsaWVu
dE5vZGVzQ2hhbmdlZChjYW52YXNFbnRyeS0+aWRlbnRpZmllcik7CisgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNzc0NhbnZhc0NsaWVudE5vZGVzQ2hhbmdlZChpbnNwZWN0b3JDYW52YXMtPmlk
ZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNh
bnZhc1JlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7
Ci0gICAgaWYgKG1fY2FudmFzRW50cmllcy5jb250YWlucygmY2FudmFzRWxlbWVudCkpIHsKKyAg
ICBpZiAoZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVtZW50KSkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENhbnZhc0Vu
dHJ5IG5ld0NhbnZhc0VudHJ5KCJjYW52YXM6IiArIElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRl
SWRlbnRpZmllcigpLCAmY2FudmFzRWxlbWVudCk7Ci0gICAgbmV3Q2FudmFzRW50cnkuY3NzQ2Fu
dmFzTmFtZSA9IG1fY2FudmFzVG9DU1NDYW52YXNJZC50YWtlKCZjYW52YXNFbGVtZW50KTsKLQot
ICAgIG1fY2FudmFzRW50cmllcy5zZXQoJmNhbnZhc0VsZW1lbnQsIG5ld0NhbnZhc0VudHJ5KTsK
ICAgICBjYW52YXNFbGVtZW50LmFkZE9ic2VydmVyKCp0aGlzKTsKIAotICAgIGlmICghbV9lbmFi
bGVkKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIGNzc0NhbnZhc05hbWUgPSBtX2NhbnZh
c1RvQ1NTQ2FudmFzTmFtZS50YWtlKCZjYW52YXNFbGVtZW50KTsKKyAgICBhdXRvIGluc3BlY3Rv
ckNhbnZhcyA9IEluc3BlY3RvckNhbnZhczo6Y3JlYXRlKGNhbnZhc0VsZW1lbnQsIGNzc0NhbnZh
c05hbWUpOworCisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPmNhbnZhc0FkZGVkKGluc3BlY3RvckNhbnZhcy0+YnVpbGRPYmplY3RGb3JDYW52YXMobV9p
bnN0cnVtZW50aW5nQWdlbnRzKSk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFz
QWRkZWQoYnVpbGRPYmplY3RGb3JDYW52YXMobmV3Q2FudmFzRW50cnksIGNhbnZhc0VsZW1lbnQp
KTsKKyAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy5zZXQoaW5zcGVjdG9yQ2FudmFz
LT5pZGVudGlmaWVyKCksIFdURk1vdmUoaW5zcGVjdG9yQ2FudmFzKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShIVE1MQ2FudmFzRWxlbWVu
dCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRD
YW52YXNFbnRyeShjYW52YXNFbGVtZW50KTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KQorICAgIGF1
dG8qIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCk7
CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGNhbnZhc0VudHJ5LT5pZGVudGlm
aWVyLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPmNhbnZhc01lbW9yeUNoYW5nZWQoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCksIGNh
bnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQogewot
ICAgIGF1dG8gaXQgPSBtX2NhbnZhc0VudHJpZXMuZmluZCgmY2FudmFzRWxlbWVudCk7Ci0gICAg
aWYgKGl0ID09IG1fY2FudmFzRW50cmllcy5lbmQoKSkKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52
YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0VsZW1lbnQpOworICAgIEFTU0VSVChpbnNw
ZWN0b3JDYW52YXMpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmcgY2FudmFzSWRlbnRpZmllciA9IGl0LT52YWx1ZS5pZGVudGlmaWVyOwot
ICAgIG1fY2FudmFzRW50cmllcy5yZW1vdmUoaXQpOwotCisgICAgU3RyaW5nIGlkZW50aWZpZXIg
PSB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFtX2VuYWJsZWQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlYkNvcmU6OkNhbnZhc09ic2VydmVyOjpjYW52YXNE
ZXN0cm95ZWQgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBHQyBkZXN0cm95aW5nIHRoZSBI
VE1MQ2FudmFzRWxlbWVudC4KICAgICAvLyBEdWUgdG8gdGhlIHNpbmdsZS1wcm9jZXNzIG1vZGVs
IHVzZWQgaW4gV2ViS2l0MSwgdGhlIGV2ZW50IG11c3QgYmUgZGlzcGF0Y2hlZCBmcm9tIGEgdGlt
ZXIgdG8gcHJldmVudAogICAgIC8vIHRoZSBmcm9udGVuZCBmcm9tIG1ha2luZyBKUyBhbGxvY2F0
aW9ucyB3aGlsZSB0aGUgR0MgaXMgc3RpbGwgYWN0aXZlLgotICAgIG1fcmVtb3ZlZENhbnZhc0lk
ZW50aWZpZXJzLmFwcGVuZChjYW52YXNJZGVudGlmaWVyKTsKKyAgICBtX3JlbW92ZWRDYW52YXNJ
ZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7CiAKICAgICBpZiAoIW1fdGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMF9zKTsKQEAgLTMyOSwxMTEgKzMx
Nyw1NiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZp
cmVkKCkKICAgICBpZiAoIW1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVk
Q2FudmFzSWRlbnRpZmllcnMpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYW52YXNS
ZW1vdmVkKGlkZW50aWZpZXIpOworICAgIGlmIChtX2VuYWJsZWQpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyIDogbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMpCisgICAgICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsKKyAgICB9
CiAKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQogCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpjbGVhckNhbnZhc0RhdGEoKQogewotICAgIGZvciAoYXV0byog
Y2FudmFzRWxlbWVudCA6IG1fY2FudmFzRW50cmllcy5rZXlzKCkpCi0gICAgICAgIGNhbnZhc0Vs
ZW1lbnQtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGluc3BlY3RvckNh
bnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKQorICAgICAgICBp
bnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIAotICAgIG1f
Y2FudmFzRW50cmllcy5jbGVhcigpOwotICAgIG1fY2FudmFzVG9DU1NDYW52YXNJZC5jbGVhcigp
OworICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmNsZWFyKCk7CisgICAgbV9jYW52
YXNUb0NTU0NhbnZhc05hbWUuY2xlYXIoKTsKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVy
cy5jbGVhcigpOwogCiAgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1l
ci5zdG9wKCk7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52YXNFbnRyeSogSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNF
bGVtZW50KQorU3RyaW5nIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVj
dG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7Ci0gICAgYXV0byBmaW5kUmVzdWx0ID0gbV9j
YW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0VsZW1lbnQpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9
IG1fY2FudmFzRW50cmllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZmaW5kUmVzdWx0LT52YWx1
ZTsKKyAgICBBU1NFUlQoIW1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNvbnRhaW5zKCZpbnNwZWN0
b3JDYW52YXMuY2FudmFzKCkpKTsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIFN0cmluZyBp
ZGVudGlmaWVyID0gaW5zcGVjdG9yQ2FudmFzLmlkZW50aWZpZXIoKTsKKyAgICBtX2lkZW50aWZp
ZXJUb0luc3BlY3RvckNhbnZhcy5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OkNhbnZhc0VudHJ5KiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBjYW52YXNJZGVudGlm
aWVyKQorSW5zcGVjdG9yQ2FudmFzKiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVj
dG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQogewotICAgIGZvciAoYXV0byYgY2FudmFzRW50cnkgOiBtX2NhbnZhc0VudHJpZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbnZhc0VudHJ5LmlkZW50aWZpZXIgPT0gY2FudmFzSWRl
bnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiAmY2FudmFzRW50cnk7CisgICAgUmVmUHRyPElu
c3BlY3RvckNhbnZhcz4gaW5zcGVjdG9yQ2FudmFzID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JD
YW52YXMuZ2V0KGlkZW50aWZpZXIpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKSB7CisgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJObyBjYW52YXMgZm9yIGdpdmVuIGlkZW50
aWZpZXIuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0KCk7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0VudHJ5JiBjYW52YXNFbnRyeSwgSFRNTENh
bnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCitJbnNwZWN0b3JDYW52YXMqIEluc3BlY3RvckNh
bnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNF
bGVtZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhc0VsZW1lbnQuZG9jdW1lbnQoKS5m
cmFtZSgpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVt
ZW50LnJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGUgY29udGV4dFR5cGU7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7Ci0jaWYgRU5BQkxFKFdFQkdMKQot
ICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAg
IGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIGVsc2UgaWYgKGlzPFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKLSNlbmRpZgotI2lm
IEVOQUJMRShXRUJHUFUpCi0gICAgZWxzZSBpZiAoaXM8V2ViR1BVUmVuZGVyaW5nQ29udGV4dD4o
Y29udGV4dCkpCi0gICAgICAgIGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwotI2VuZGlmCi0gICAgZWxzZSB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgIGZvciAoYXV0byYgaW5z
cGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFsdWVzKCkpIHsK
KyAgICAgICAgaWYgKCZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpID09ICZjYW52YXNFbGVtZW50
KQorICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhcy5nZXQoKTsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVh
dGUoKQotICAgICAgICAuc2V0Q2FudmFzSWQoY2FudmFzRW50cnkuaWRlbnRpZmllcikKLSAgICAg
ICAgLnNldEZyYW1lSWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQotICAgICAgICAuc2V0
Q29udGV4dFR5cGUoY29udGV4dFR5cGUpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBpZiAo
IWNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQotICAgICAgICBjYW52YXMtPnNl
dENzc0NhbnZhc05hbWUoY2FudmFzRW50cnkuY3NzQ2FudmFzTmFtZSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpOwotICAgICAgICBpbnQgbm9kZUlkID0gZG9tQWdlbnQtPmJv
dW5kTm9kZUlkKCZjYW52YXNFbGVtZW50KTsKLSAgICAgICAgaWYgKCFub2RlSWQpIHsKLSAgICAg
ICAgICAgIGlmIChpbnQgZG9jdW1lbnROb2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNh
bnZhc0VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAgICAgICBFcnJvclN0cmluZyBp
Z25vcmVkOwotICAgICAgICAgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJv
bnRlbmQoaWdub3JlZCwgZG9jdW1lbnROb2RlSWQsICZjYW52YXNFbGVtZW50KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlSWQpCi0gICAgICAgICAgICBjYW52
YXMtPnNldE5vZGVJZChub2RlSWQpOwotICAgIH0KLQotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBp
ZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKLSAgICAgICAgaWYg
KHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLT5nZXRDb250ZXh0QXR0cmli
dXRlcygpKSB7Ci0gICAgICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVzKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCi0gICAg
ICAgICAgICAgICAgLnNldEFscGhhKGF0dHJpYnV0ZXMtPmFscGhhKQotICAgICAgICAgICAgICAg
IC5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCkKLSAgICAgICAgICAgICAgICAuc2V0U3RlbmNp
bChhdHRyaWJ1dGVzLT5zdGVuY2lsKQotICAgICAgICAgICAgICAgIC5zZXRBbnRpYWxpYXMoYXR0
cmlidXRlcy0+YW50aWFsaWFzKQotICAgICAgICAgICAgICAgIC5zZXRQcmVtdWx0aXBsaWVkQWxw
aGEoYXR0cmlidXRlcy0+cHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICAgICAgICAgIC5zZXRQ
cmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0cmlidXRlcy0+cHJlc2VydmVEcmF3aW5nQnVmZmVyKQot
ICAgICAgICAgICAgICAgIC5zZXRGYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KGF0dHJpYnV0
ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpCi0gICAgICAgICAgICAgICAgLnJlbGVh
c2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChzaXplX3QgbWVtb3J5
Q29zdCA9IGNhbnZhc0VsZW1lbnQubWVtb3J5Q29zdCgpKQotICAgICAgICBjYW52YXMtPnNldE1l
bW9yeUNvc3QobWVtb3J5Q29zdCk7Ci0KLSAgICByZXR1cm4gY2FudmFzOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IDBhMGVhODg4YWU3MmI4ZmM2
ZGQ1ODA2ODY0OWNjMDZmNTk1ZmY1ZGIuLjA3ZDE2ZTBiODQyYTIwYjgwZjFjMjIyOTg4YTlmNWNm
MTY1ZjViNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CkBAIC00Miw3ICs0Myw2
IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKQEAgLTUxLDcgKzUxLDcgQEAgY2xh
c3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgQ2FudmFzT2JzZXIKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JD
YW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
SW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yUGFnZUFnZW50
Kik7CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ2FudmFzQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKSB7IH0KIAogICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CkBAIC03OSwzMyArNzksMTggQEAg
cHVibGljOgogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IENhbnZhc0VudHJ5IHsKLSAgICAgICAgU3Ry
aW5nIGlkZW50aWZpZXI7Ci0gICAgICAgIFN0cmluZyBjc3NDYW52YXNOYW1lOwotICAgICAgICBI
VE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCA9IHsgbnVsbHB0ciB9OwotCi0gICAgICAgIENhbnZh
c0VudHJ5KCkgeyB9Ci0KLSAgICAgICAgQ2FudmFzRW50cnkoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCkKLSAgICAgICAgICAgIDogaWRl
bnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAgICAgLCBlbGVtZW50KGNhbnZhc0VsZW1lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3ll
ZFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FudmFzRGF0YSgpOwotICAgIENhbnZhc0Vu
dHJ5KiBnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIENhbnZhc0VudHJ5
KiBnZXRDYW52YXNFbnRyeShjb25zdCBTdHJpbmcmKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGNvbnN0IENhbnZhc0Vu
dHJ5JiwgSFRNTENhbnZhc0VsZW1lbnQmKTsKKyAgICBTdHJpbmcgdW5iaW5kQ2FudmFzKEluc3Bl
Y3RvckNhbnZhcyYpOworICAgIEluc3BlY3RvckNhbnZhcyogYXNzZXJ0SW5zcGVjdG9yQ2FudmFz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yQ2FudmFzKiBmaW5k
SW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50Jik7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFn
ZW50OwogCi0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIENhbnZhc0VudHJ5PiBtX2Nh
bnZhc0VudHJpZXM7Ci0gICAgSGFzaE1hcDxIVE1MQ2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9j
YW52YXNUb0NTU0NhbnZhc0lkOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXM7CisgICAgSGFzaE1hcDxIVE1M
Q2FudmFzRWxlbWVudCosIFN0cmluZz4gbV9jYW52YXNUb0NTU0NhbnZhc05hbWU7CiAgICAgVmVj
dG9yPFN0cmluZz4gbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnM7CiAgICAgVGltZXIgbV90aW1l
cjsKICAgICBib29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNGY4MTEzZDBmY2NjYjA4MjQ2
OWIyMmEyZTVkNGU0OWFlNGVlN2M1YS4uZGU3YzkzMWIyZWQwNTcyYjQzNzAxMzc2MzU1N2RmMzc3
ZTgxNWMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSYgcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAg
ICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ+KHBhZ2VDb250ZXh0KSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8
SW5zcGVjdG9yV29ya2VyQWdlbnQ+KHBhZ2VDb250ZXh0KSk7CiAKLSAgICBhdXRvIGNhbnZhc0Fn
ZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDYW52YXNBZ2VudD4ocGFnZUNvbnRl
eHQsIHBhZ2VBZ2VudCk7CisgICAgYXV0byBjYW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KHBhZ2VDb250ZXh0KTsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvckNhbnZhc0FnZW50KGNhbnZhc0FnZW50UHRyLmdldCgpKTsK
ICAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZShjYW52YXNBZ2VudFB0cikpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
N2FiZmY3NDc0MjE3NzU2YmJlZmE1ZWUzNWRiYWEwZjkyNzI3YjI1MS4uMTFlYTM1ZTdjYjFkYzBi
YzZkNWQ1ZjQ0MDRiODYyZTE1YzVlYzc1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA3
LTEwICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBSZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFz
RW50cnkgd2l0aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91
c3NvLgorCisgICAgICAgIFVwZGF0ZWQgdGVzdCBleHBlY3RhdGlvbnMgZm9yIG5ldyBlcnJvciBz
dHJpbmdzLgorCisgICAgICAgICogaW5zcGVjdG9yL2NhbnZhcy9jc3MtY2FudmFzLWNsaWVudHMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvcmVxdWVzdENvbnRlbnQt
MmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvcmVxdWVzdE5vZGUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvcmVzb2x2ZUNhbnZhc0Nv
bnRleHQtMmQtZXhwZWN0ZWQudHh0OgorCiAyMDE3LTA3LTEwICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxvY2sgb2YgdGV4dCBpcyBtaXNzaW5nIGluIGlCb29r
cyBzYW1wbGUgYm9va3MuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L2Nzcy1jYW52YXMtY2xpZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y2FudmFzL2Nzcy1jYW52YXMtY2xpZW50cy1leHBlY3RlZC50eHQKaW5kZXggMGU5MWVmYjBlNzhi
MWY5ZDliMzk2MGE1MjcxZmEzMWVhNjNhZDM3NC4uOWFlYjNmZGM2OTQ3NGU4MTY1ODExMjA5YjIz
NDFiNmIxYjgyM2Y1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9j
c3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jYW52YXMvY3NzLWNhbnZhcy1jbGllbnRzLWV4cGVjdGVkLnR4dApAQCAtMTgsNSArMTgsNSBA
QCBQQVNTOiBUaGVyZSBzaG91bGQgYmUgbm8gY2xpZW50IG5vZGVzLgogCiAtLSBSdW5uaW5nIHRl
c3QgY2FzZTogQ2FudmFzLkNTU0NhbnZhc0NsaWVudHMuSW52YWxpZENhbnZhc0lkCiBQQVNTOiBT
aG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVy
CitFcnJvcjogTm8gY2FudmFzIGZvciBnaXZlbiBpZGVudGlmaWVyLgogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdENvbnRlbnQtMmQtZXhwZWN0
ZWQudHh0CmluZGV4IGU4YjlkNWJjZTA1ZmYwOWM3YmVmNTY1Y2NlNjU2YTAyNTY0ZWVmZTYuLjRl
MTk5ZGY2MDY4ZjFkMWYyY2VlOTM5NjRiNTQzZDcwMTczNGY1ODYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdENvbnRlbnQtMmQtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdENvbnRlbnQtMmQtZXhwZWN0
ZWQudHh0CkBAIC03LDUgKzcsNSBAQCBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQVN3QUFBQ1dDQVlBQUFCa1c3WFNBQUFBQVhOU1IwSUFycwogCiAtLSBSdW5u
aW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVlc3RDb250ZW50LmludmFsaWRDYW52YXNJZAogUEFT
UzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRp
ZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dApp
bmRleCA5YWNkMzc2YzIzMjE2M2Y5ODMyYmQwYjMzZDE2OGY0ZjI4MzRmZTIwLi43MTVjNDMxYjBl
OTJhNWI2YTQ2ZDcxZmRhNDY1ZTZkMjFlNzFiNDNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvY2FudmFzL3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dApAQCAtMTcsNSArMTcs
NSBAQCBQQVNTOiBDYW52YXMgIkNhbnZhcyAyIiBoYXMgbm9kZSB3aXRoIHR5cGUgIkNBTlZBUyIu
CiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVxdWVzdE5vZGUuaW52YWxpZENhbnZh
c0lkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBJbnZhbGlkIGNhbnZh
cyBpZGVudGlmaWVyCitFcnJvcjogTm8gY2FudmFzIGZvciBnaXZlbiBpZGVudGlmaWVyLgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250
ZXh0LTJkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb2x2
ZUNhbnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQudHh0CmluZGV4IGQ5MjFmMjQ4OWQyNTZmYjUxOGY0
YzZlNGRmOTY5YTE2NjgxYjQyZjAuLjZlZDYzM2RhODQ4MzY4ZDk2NWI5MDRiMjQ2MjY0Zjk2ZjUw
MDY4OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb2x2ZUNh
bnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
YW52YXMvcmVzb2x2ZUNhbnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQudHh0CkBAIC04LDUgKzgsNSBA
QCBQQVNTOiBQYXlsb2FkIHNob3VsZCBoYXZlIGNsYXNzTmFtZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEIi4KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IENhbnZhcy5yZXNvbHZlQ2FudmFzQ29u
dGV4dC5pbnZhbGlkSWRlbnRpZmllcgogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1F
cnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRpZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2
ZW4gaWRlbnRpZmllci4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315844</attachid>
            <date>2017-07-18 14:53:35 -0700</date>
            <delta_ts>2017-07-18 15:24:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174311-20170718145334.patch</filename>
            <type>text/plain</type>
            <size>39434</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NjI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiNjE4NWVkOTM1YTUy
OGU3ODM2ZDExMjA1ZTdlYmZiZThkZmI5My4uZWEyZWFlYjZlYjMzYmM3Njc2ZWZjNjRkNThkNGJj
OGQzYjRhOTkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA3LTE4ICBNYXR0
IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZWZhY3RvcmluZzogcmVwbGFjZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFzRW50cnkgd2l0
aCBhIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGhlbHBlciBjbGFzcyBmb3IgdHJhY2tpbmcgY2FudmFz
ZXMgYW5kIHRoZWlyIGRhdGEuIFRoZQorICAgICAgICBjdXJyZW50IGFwcHJvYWNoIG9mIGRlZmlu
aW5nIGEgaGVscGVyIHN0cnVjdHVyZSBpbiB0aGUgYWdlbnQncyBoZWFkZXIgaXMKKyAgICAgICAg
YXdrd2FyZCB0byB1c2UgYW5kIG1haW50YWluLCBhbmQgd29uJ3Qgc2NhbGUgd2VsbCBhcyBtb3Jl
IGNhbnZhcyBpbnN0cnVtZW50YXRpb24KKyAgICAgICAgcG9pbnRzIGFuZCBkYXRhIGFyZSBhZGRl
ZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgTmV3IGZpbGUuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6
Okluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Lmg6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDU1NDYW52
YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
cmVzb2x2ZUNhbnZhc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVDU1NDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VD
YW52YXNNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNh
bnZhc0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2xlYXJDYW52YXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0Q2FudmFzRW50cnkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoK
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICBSZW1vdmUgdW51c2VkIGNvbnN0cnVjdG9yIGFyZ3VtZW50LgorCiAyMDE3LTA3LTE4ICBB
bnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBNb3Vz
ZSBwb2ludGVyIGRvZXMgbm90IGhpZGUgZHVyaW5nIGZ1bGxzY3JlZW4gcGxheWJhY2sKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggN2E1MGU2MmI3NWRlMzZkMWM3N2VkNTQ4ZDQ3ODBhMjRlMGE0MGFj
Ni4uYTViOWRkYmQ4NWNmNWYyZWMyNGU0ZTlmNDA0NDhlYjE0NGE2YTI1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTE5MDEsNiArMTkwMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBp
bnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM3MTI3YzllMDEzMDM5
MmJhMDc1OTViYzY0ZTI2NTc3NjdkMzQ3Ni4uMmYxMzczYzE5ODU2YzdjOTU0OTVhNjE5NTdkMWY3
ODY5NmFmYWU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjg3OSw2ICsyODc5LDggQEAKIAkJNjVGRUE4NjkwOTgzM0FERTAw
QkVENEFCIC8qIFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OwogCQk2
OUE2Q0JBQzFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjk3MTAxMDcxQzZC
RTE1NTAwMThDN0YxIC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCAqLzsgfTsKIAkJNjlB
NkNCQUQxQzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2OTcxMDEwODFDNkJFMTU1
MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLzsgfTsKKwkJNkEyMkU4NzAx
RjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkEyMkU4NkYxRjEwNDE4NjAwRjU0NkMzIC8qIElu
c3BlY3RvckNhbnZhcy5oICovOyB9OworCQk2QTIyRTg3MzFGMTA0MkM0MDBGNTQ2QzMgLyogSW5z
cGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZBMjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICov
OyB9OwogCQk2QTMyRDdDRTFBMTZEOEMwMDA0MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZE
NjYxOUQyMjVEODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKIAkJ
NkE0QjZENjUxOUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5
MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLzsgfTsKIAkJNkIzNDgwOTQwRUVG
NTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTA3MDMsNiArMTA3MDUsOCBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg2RjFGMTA0MTg2MDBG
NTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZh
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2
QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNh
bnZhcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBNEI2RDY0MTlEMjI1MTkw
MDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QjM0ODA5MjBFRUY1MEQ0
MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzE5MSw2
ICsxNzE5NSw4IEBACiAJCQkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3Vw
cG9ydC5oICovLAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAv
KiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk2QTIyRTg3MjFGMTA0
MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLywKKwkJCQk2QTIyRTg2RjFGMTA0
MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8sCiAJCQkJNkE0QjZENjYxOUQyMjVE
ODAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLywKIAkJCQk2QTRCNkQ2NDE5
RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAqLywKIAkJCQk3QTFGMkI1
MTEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI3NzA4LDYg
KzI3NzE0LDcgQEAKIAkJCQk5MzMwOURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5
MjAwNTZFNTgxIC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1
RThENTExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk2QTIyRTg3MDFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9y
Q2FudmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFC
OTVBMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTMxNjg5LDYgKzMxNjk2LDcgQEAKIAkJCQk5MzMwOURFRjA5OUU2NDkyMDA1NkU1ODEg
LyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOURGMTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjg4NUU4RDQxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2QTIyRTg3MzFGMTA0MkM0
MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZBMzJE
N0NFMUExNkQ4QzAwMDQxMkYwQiAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmMxM2QxNDFlZWJlZTU1ZTU5NjJi
MTZkY2U1MmUxMDcwMWY1NDRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNhbnZhcy5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdl
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVt
ZW50aW5nQWdlbnRzLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyNpbmNsdWRlICJXZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCR1BVKQorI2luY2x1
ZGUgIldlYkdQVVJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JZGVudGlmaWVyc0ZhY3RvcnkuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52
YXM6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0Nh
bnZhc05hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQ2FudmFzKGNh
bnZhcywgY3NzQ2FudmFzTmFtZSkpOworfQorCitJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNh
bnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05h
bWUpCisgICAgOiBtX2lkZW50aWZpZXIoImNhbnZhczoiICsgSWRlbnRpZmllcnNGYWN0b3J5Ojpj
cmVhdGVJZGVudGlmaWVyKCkpCisgICAgLCBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2Nzc0Nh
bnZhc05hbWUoY3NzQ2FudmFzTmFtZSkKK3sKK30KKworUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gbV9jYW52YXMuZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudC5mcmFtZSgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBtX2Nh
bnZhcy5yZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52
YXM6OkNvbnRleHRUeXBlIGNvbnRleHRUeXBlOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KGNvbnRleHQpKQorICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworI2lmIEVOQUJMRShXRUJHTCkK
KyAgICBlbHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQorICAgICAg
ICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6
OldlYkdMOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBlbHNlIGlmIChpczxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKKyAgICAgICAgY29udGV4dFR5cGUgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRlcmluZ0NvbnRleHQ+
KGNvbnRleHQpKQorICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICB9CisKKyAgICBhdXRv
IGNhbnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQor
ICAgICAgICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQorICAgICAgICAuc2V0RnJhbWVJZChp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpLT5mcmFtZUlkKGZyYW1lKSkK
KyAgICAgICAgLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlKQorICAgICAgICAucmVsZWFzZSgp
OworCisgICAgaWYgKCFtX2Nzc0NhbnZhc05hbWUuaXNFbXB0eSgpKQorICAgICAgICBjYW52YXMt
PnNldENzc0NhbnZhc05hbWUobV9jc3NDYW52YXNOYW1lKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JET01BZ2VudCgpOworICAgICAgICBpbnQgbm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlk
KCZtX2NhbnZhcyk7CisgICAgICAgIGlmICghbm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoaW50
IGRvY3VtZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZtX2NhbnZhcy5kb2N1bWVu
dCgpKSkgeworICAgICAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgICAg
ICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChpZ25vcmVkLCBkb2N1
bWVudE5vZGVJZCwgJm1fY2FudmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChub2RlSWQpCisgICAgICAgICAgICBjYW52YXMtPnNldE5vZGVJZChub2RlSWQpOwor
ICAgIH0KKworI2lmIEVOQUJMRShXRUJHTCkKKyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4oY29udGV4dCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KGNvbnRleHQpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBj
YW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgLnNldEFscGhhKGF0
dHJpYnV0ZXMtPmFscGhhKQorICAgICAgICAgICAgICAgIC5zZXREZXB0aChhdHRyaWJ1dGVzLT5k
ZXB0aCkKKyAgICAgICAgICAgICAgICAuc2V0U3RlbmNpbChhdHRyaWJ1dGVzLT5zdGVuY2lsKQor
ICAgICAgICAgICAgICAgIC5zZXRBbnRpYWxpYXMoYXR0cmlidXRlcy0+YW50aWFsaWFzKQorICAg
ICAgICAgICAgICAgIC5zZXRQcmVtdWx0aXBsaWVkQWxwaGEoYXR0cmlidXRlcy0+cHJlbXVsdGlw
bGllZEFscGhhKQorICAgICAgICAgICAgICAgIC5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYXR0
cmlidXRlcy0+cHJlc2VydmVEcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIC5zZXRGYWls
SWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KGF0dHJpYnV0ZXMtPmZhaWxJZk1ham9yUGVyZm9ybWFu
Y2VDYXZlYXQpCisgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9
CisjZW5kaWYKKworICAgIGlmIChzaXplX3QgbWVtb3J5Q29zdCA9IG1fY2FudmFzLm1lbW9yeUNv
c3QoKSkKKyAgICAgICAgY2FudmFzLT5zZXRNZW1vcnlDb3N0KG1lbW9yeUNvc3QpOworCisgICAg
cmV0dXJuIGNhbnZhczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RmYzMyNjI5M2M4
YTMzNjg1ODMzZjU3N2Q4YTExOTlhNThhZGFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaApAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sT2JqZWN0cy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xh
c3MgSW5zdHJ1bWVudGluZ0FnZW50czsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
K2NsYXNzIEluc3BlY3RvckNhbnZhcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3Rv
ckNhbnZhcz4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVh
dGUoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpOworCisg
ICAgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Cisg
ICAgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFzOyB9CisgICAg
Y29uc3QgU3RyaW5nJiBjc3NDYW52YXNOYW1lKCkgeyByZXR1cm4gbV9jc3NDYW52YXNOYW1lOyB9
CisKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2Jq
ZWN0Rm9yQ2FudmFzKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKKworICAgIH5JbnNwZWN0b3JDYW52
YXMoKSB7IH0KKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1l
bnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpOworCisgICAgU3RyaW5nIG1faWRlbnRp
ZmllcjsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCYgbV9jYW52YXM7CisgICAgU3RyaW5nIG1fY3Nz
Q2FudmFzTmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggYzE2NDdl
YThmOWRlYTNhYjVmZDM0MzJhMmY5ODBlNzgxMmVhOGVkNC4uYzAwZTZkYmVkNzQzMWMyZTkyY2E5
ZjMyZjcyMzhmNjM3ODg0MmQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRWxl
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50
aW5nQWdlbnRzLmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKQEAgLTYwLDEyICs1OSwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3Rv
ckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRl
eHQsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQorSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
Okluc3BlY3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IElu
c3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkNhbnZhcyIpLCBjb250ZXh0KQogICAgICwg
bV9mcm9udGVuZERpc3BhdGNoZXIoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkNhbnZhc0Zy
b250ZW5kRGlzcGF0Y2hlcj4oY29udGV4dC5mcm9udGVuZFJvdXRlcikpCiAgICAgLCBtX2JhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShj
b250ZXh0LmJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKGNvbnRleHQuaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgICwgbV9wYWdlQWdlbnQo
cGFnZUFnZW50KQogICAgICwgbV90aW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50Ojpj
YW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKQogewogfQpAQCAtOTIsMTEgKzkwLDggQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIG1fZW5hYmxl
ZCA9IHRydWU7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtX2NhbnZhc0VudHJpZXMp
IHsKLSAgICAgICAgYXV0byogY2FudmFzRWxlbWVudCA9IHBhaXIua2V5OwotICAgICAgICBhdXRv
JiBjYW52YXNFbnRyeSA9IHBhaXIudmFsdWU7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5jYW52YXNBZGRlZChidWlsZE9iamVjdEZvckNhbnZhcyhjYW52YXNFbnRyeSwgKmNhbnZhc0Vs
ZW1lbnQpKTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50
aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkKKyAgICAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmNhbnZhc0FkZGVkKGluc3BlY3RvckNhbnZhcy0+YnVpbGRPYmplY3RGb3JDYW52YXMo
bV9pbnN0cnVtZW50aW5nQWdlbnRzKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQpAQCAtMTE0LDMyICsxMDksMjggQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAKIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkqIGNh
bnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFzRW50
cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2FudmFz
IGlkZW50aWZpZXIiKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0
b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZh
cykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmY2Fu
dmFzRW50cnktPmVsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGludCBkb2N1bWVudE5vZGVJZCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgm
aW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5kb2N1bWVudCgpKTsKICAgICBpZiAoIWRvY3VtZW50
Tm9kZUlkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJEb2N1bWVudCBo
YXMgbm90IGJlZW4gcmVxdWVzdGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAq
bm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPnB1c2hO
b2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIGNhbnZhc0VudHJ5LT5l
bGVtZW50KTsKKyAgICAqbm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRP
TUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQs
ICZpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVxdWVzdENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNvbnRlbnQpCiB7Ci0gICAgY29uc3QgQ2FudmFzRW50cnkq
IGNhbnZhc0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzSWQpOwotICAgIGlmICghY2FudmFz
RW50cnkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgY2Fu
dmFzIGlkZW50aWZpZXIiKTsKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNw
ZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKKyAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+cmVuZGVyaW5nQ29udGV4dCgpOwor
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNh
bnZhcygpLnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihjb250ZXh0KSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbnZhc0VudHJ5LT5l
bGVtZW50LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS50b0RhdGFVUkwoQVNDSUlMaXRl
cmFsKCJpbWFnZS9wbmciKSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
ICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5yZWxl
YXNlTWVzc2FnZSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUxLDcgKzE0Miw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGdsID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCk7CiAKICAg
ICAgICAgZ2wtPnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rvcih0cnVlKTsKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBjYW52YXNFbnRyeS0+ZWxlbWVudC0+dG9EYXRhVVJMKEFTQ0lJTGl0
ZXJhbCgiaW1hZ2UvcG5nIikpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkudG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogICAgICAg
ICBnbC0+c2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKIAogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC0xNjgsMTQgKzE1OSwxMiBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZwogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q1NTQ2FudmFzQ2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIHJl
c3VsdCkKIHsKLSAgICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNF
bnRyeShjYW52YXNJZCk7Ci0gICAgaWYgKCFjYW52YXNFbnRyeSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjYW52YXMgaWRlbnRpZmllciIpOworICAgIGF1
dG8qIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywg
Y2FudmFzSWQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47Ci0g
ICAgfQogCiAgICAgcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3Jl
YXRlKCk7Ci0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50IDogY2FudmFzRW50cnktPmVsZW1lbnQt
PmNzc0NhbnZhc0NsaWVudHMoKSkgeworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA6IGluc3Bl
Y3RvckNhbnZhcy0+Y2FudmFzKCkuY3NzQ2FudmFzQ2xpZW50cygpKSB7CiAgICAgICAgIGlmIChp
bnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdl
bnQoKS0+Ym91bmROb2RlSWQoJmVsZW1lbnQtPmRvY3VtZW50KCkpKQogICAgICAgICAgICAgcmVz
dWx0LT5hZGRJdGVtKG1faW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5w
dXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBlbGVtZW50KSk7
CiAgICAgfQpAQCAtMjA1LDEzICsxOTQsMTEgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250ZXh0
QXNTY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIENhbnZhc1JlbmRlcmluZ0MKIAog
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNhbnZhc0NvbnRleHQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIGNv
bnN0IG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0KQogewotICAgIGNvbnN0IENhbnZhc0VudHJ5KiBjYW52YXNFbnRy
eSA9IGdldENhbnZhc0VudHJ5KGNhbnZhc0lkKTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGNhbnZhcyBpZGVudGlm
aWVyIik7CisgICAgYXV0byogaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFz
KGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjYW52YXNFbnRyeS0+ZWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGluc3BlY3RvckNh
bnZhcy0+Y2FudmFzKCkuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpIHsKICAg
ICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbnZhcyBiZWxvbmdzIHRvIGEgZG9j
dW1lbnQgd2l0aG91dCBhIGZyYW1lIik7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMSw3ICsyMDgs
NyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ2FudmFzQ29udGV4dChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNT
RVJUKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCA9IGNhbnZhc0VudHJ5LT5lbGVtZW50LT5yZW5kZXJpbmdDb250ZXh0
KCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzKCkucmVuZGVyaW5nQ29udGV4dCgpOwogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9
IGNvbnRleHRBc1NjcmlwdFZhbHVlKHN0YXRlLCBjb250ZXh0KTsKICAgICBpZiAoIXZhbHVlKSB7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjQwLDgwICsyMjcsODEgQEAgdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1lKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPEhUTUxDYW52YXNFbGVtZW50Kj4gY2Fu
dmFzZXNGb3JGcmFtZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbnZhc0VsZW1lbnQgOiBtX2Nh
bnZhc0VudHJpZXMua2V5cygpKSB7Ci0gICAgICAgIGlmIChjYW52YXNFbGVtZW50LT5kb2N1bWVu
dCgpLmZyYW1lKCkgPT0gJmZyYW1lKQotICAgICAgICAgICAgY2FudmFzZXNGb3JGcmFtZS5hcHBl
bmQoY2FudmFzRWxlbWVudCk7CisgICAgVmVjdG9yPEluc3BlY3RvckNhbnZhcyo+IGluc3BlY3Rv
ckNhbnZhc2VzOworICAgIGZvciAoUmVmUHRyPEluc3BlY3RvckNhbnZhcz4mIGluc3BlY3RvckNh
bnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnZhbHVlcygpKSB7CisgICAgICAg
IGlmIChpbnNwZWN0b3JDYW52YXMtPmNhbnZhcygpLmRvY3VtZW50KCkuZnJhbWUoKSA9PSAmZnJh
bWUpCisgICAgICAgICAgICBpbnNwZWN0b3JDYW52YXNlcy5hcHBlbmQoaW5zcGVjdG9yQ2FudmFz
LmdldCgpKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8qIGNhbnZhc0VsZW1lbnQgOiBjYW52YXNl
c0ZvckZyYW1lKSB7Ci0gICAgICAgIGF1dG8gY2FudmFzRW50cnkgPSBtX2NhbnZhc0VudHJpZXMu
dGFrZShjYW52YXNFbGVtZW50KTsKKyAgICBmb3IgKGF1dG8qIGluc3BlY3RvckNhbnZhcyA6IGlu
c3BlY3RvckNhbnZhc2VzKSB7CisgICAgICAgIFN0cmluZyBpZGVudGlmaWVyID0gdW5iaW5kQ2Fu
dmFzKCppbnNwZWN0b3JDYW52YXMpOwogICAgICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoY2FudmFzRW50cnkuaWRlbnRp
Zmllcik7CisgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChp
ZGVudGlmaWVyKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENy
ZWF0ZUNTU0NhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewotICAgIEFTU0VSVCghbV9jYW52YXNUb0NTU0NhbnZhc0lkLmNvbnRhaW5z
KCZjYW52YXNFbGVtZW50KSk7Ci0gICAgQVNTRVJUKCFtX2NhbnZhc0VudHJpZXMuY29udGFpbnMo
JmNhbnZhc0VsZW1lbnQpKTsKKyAgICBpZiAoZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVt
ZW50KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIG1fY2FudmFzVG9DU1NDYW52YXNJZC5zZXQoJmNhbnZhc0VsZW1lbnQsIG5h
bWUpOworICAgIEFTU0VSVCghbV9jYW52YXNUb0NTU0NhbnZhc05hbWUuY29udGFpbnMoJmNhbnZh
c0VsZW1lbnQpKTsKKyAgICBtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZS5zZXQoJmNhbnZhc0VsZW1l
bnQsIG5hbWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2RlcyhIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAg
ICBjb25zdCBDYW52YXNFbnRyeSogY2FudmFzRW50cnkgPSBnZXRDYW52YXNFbnRyeShjYW52YXNF
bGVtZW50KTsKLSAgICBpZiAoIWNhbnZhc0VudHJ5KQorICAgIGF1dG8qIGluc3BlY3RvckNhbnZh
cyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCk7CisgICAgaWYgKCFpbnNwZWN0
b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
c3NDYW52YXNDbGllbnROb2Rlc0NoYW5nZWQoY2FudmFzRW50cnktPmlkZW50aWZpZXIpOworICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jc3NDYW52YXNDbGllbnROb2Rlc0NoYW5nZWQoaW5zcGVj
dG9yQ2FudmFzLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50JiBjYW52
YXNFbGVtZW50KQogewotICAgIGlmIChtX2NhbnZhc0VudHJpZXMuY29udGFpbnMoJmNhbnZhc0Vs
ZW1lbnQpKSB7CisgICAgaWYgKGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzRWxlbWVudCkpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBDYW52YXNFbnRyeSBuZXdDYW52YXNFbnRyeSgiY2FudmFzOiIgKyBJZGVudGlmaWVyc0Zh
Y3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSwgJmNhbnZhc0VsZW1lbnQpOwotICAgIG5ld0NhbnZh
c0VudHJ5LmNzc0NhbnZhc05hbWUgPSBtX2NhbnZhc1RvQ1NTQ2FudmFzSWQudGFrZSgmY2FudmFz
RWxlbWVudCk7Ci0KLSAgICBtX2NhbnZhc0VudHJpZXMuc2V0KCZjYW52YXNFbGVtZW50LCBuZXdD
YW52YXNFbnRyeSk7CiAgICAgY2FudmFzRWxlbWVudC5hZGRPYnNlcnZlcigqdGhpcyk7CiAKLSAg
ICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBjc3NDYW52YXNO
YW1lID0gbV9jYW52YXNUb0NTU0NhbnZhc05hbWUudGFrZSgmY2FudmFzRWxlbWVudCk7CisgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBJbnNwZWN0b3JDYW52YXM6OmNyZWF0ZShjYW52YXNFbGVt
ZW50LCBjc3NDYW52YXNOYW1lKTsKKworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jYW52YXNBZGRlZChpbnNwZWN0b3JDYW52YXMtPmJ1aWxkT2JqZWN0
Rm9yQ2FudmFzKG1faW5zdHJ1bWVudGluZ0FnZW50cykpOwogCi0gICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmNhbnZhc0FkZGVkKGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKG5ld0NhbnZhc0VudHJ5LCBj
YW52YXNFbGVtZW50KSk7CisgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuc2V0KGlu
c3BlY3RvckNhbnZhcy0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKGluc3BlY3RvckNhbnZhcykpOwog
fQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoSFRN
TENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQpCiB7Ci0gICAgQ2FudmFzRW50cnkqIGNhbnZh
c0VudHJ5ID0gZ2V0Q2FudmFzRW50cnkoY2FudmFzRWxlbWVudCk7Ci0gICAgaWYgKCFjYW52YXNF
bnRyeSkKKyAgICBhdXRvKiBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNh
bnZhc0VsZW1lbnQpOworICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzTWVtb3J5Q2hhbmdlZChjYW52YXNF
bnRyeS0+aWRlbnRpZmllciwgY2FudmFzRWxlbWVudC5tZW1vcnlDb3N0KCkpOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jYW52YXNNZW1vcnlDaGFuZ2VkKGluc3BlY3RvckNhbnZhcy0+aWRl
bnRpZmllcigpLCBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFz
RWxlbWVudCkKIHsKLSAgICBhdXRvIGl0ID0gbV9jYW52YXNFbnRyaWVzLmZpbmQoJmNhbnZhc0Vs
ZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2NhbnZhc0VudHJpZXMuZW5kKCkpCisgICAgYXV0byog
aW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNFbGVtZW50KTsKKyAg
ICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKKyAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGNhbnZhc0lkZW50aWZpZXIgPSBpdC0+dmFsdWUu
aWRlbnRpZmllcjsKLSAgICBtX2NhbnZhc0VudHJpZXMucmVtb3ZlKGl0KTsKLQorICAgIFN0cmlu
ZyBpZGVudGlmaWVyID0gdW5iaW5kQ2FudmFzKCppbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICgh
bV9lbmFibGVkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZWJDb3JlOjpDYW52YXNPYnNl
cnZlcjo6Y2FudmFzRGVzdHJveWVkIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgR0MgZGVz
dHJveWluZyB0aGUgSFRNTENhbnZhc0VsZW1lbnQuCiAgICAgLy8gRHVlIHRvIHRoZSBzaW5nbGUt
cHJvY2VzcyBtb2RlbCB1c2VkIGluIFdlYktpdDEsIHRoZSBldmVudCBtdXN0IGJlIGRpc3BhdGNo
ZWQgZnJvbSBhIHRpbWVyIHRvIHByZXZlbnQKICAgICAvLyB0aGUgZnJvbnRlbmQgZnJvbSBtYWtp
bmcgSlMgYWxsb2NhdGlvbnMgd2hpbGUgdGhlIEdDIGlzIHN0aWxsIGFjdGl2ZS4KLSAgICBtX3Jl
bW92ZWRDYW52YXNJZGVudGlmaWVycy5hcHBlbmQoY2FudmFzSWRlbnRpZmllcik7CisgICAgbV9y
ZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50aWZpZXIpOwogCiAgICAgaWYgKCFt
X3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CkBA
IC0zMjQsMTExICszMTIsNTYgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVz
dHJveWVkVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmll
ciA6IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2FudmFzUmVtb3ZlZChpZGVudGlmaWVyKTsKKyAgICBpZiAobV9lbmFibGVkKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJz
KQorICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc1JlbW92ZWQoaWRlbnRp
Zmllcik7CisgICAgfQogCiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2xlYXJDYW52YXNEYXRhKCkKIHsKLSAg
ICBmb3IgKGF1dG8qIGNhbnZhc0VsZW1lbnQgOiBtX2NhbnZhc0VudHJpZXMua2V5cygpKQotICAg
ICAgICBjYW52YXNFbGVtZW50LT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgZm9yIChhdXRv
JiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMo
KSkKKyAgICAgICAgaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKS5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CiAKLSAgICBtX2NhbnZhc0VudHJpZXMuY2xlYXIoKTsKLSAgICBtX2NhbnZhc1RvQ1NTQ2Fu
dmFzSWQuY2xlYXIoKTsKKyAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy5jbGVhcigp
OworICAgIG1fY2FudmFzVG9DU1NDYW52YXNOYW1lLmNsZWFyKCk7CiAgICAgbV9yZW1vdmVkQ2Fu
dmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIAogICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fdGltZXIuc3RvcCgpOwogfQogCi1JbnNwZWN0b3JDYW52YXNBZ2VudDo6Q2FudmFz
RW50cnkqIEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRDYW52YXNFbnRyeShIVE1MQ2FudmFzRWxl
bWVudCYgY2FudmFzRWxlbWVudCkKK1N0cmluZyBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5k
Q2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogewotICAgIGF1dG8gZmlu
ZFJlc3VsdCA9IG1fY2FudmFzRW50cmllcy5maW5kKCZjYW52YXNFbGVtZW50KTsKLSAgICBpZiAo
ZmluZFJlc3VsdCAhPSBtX2NhbnZhc0VudHJpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAmZmlu
ZFJlc3VsdC0+dmFsdWU7CisgICAgQVNTRVJUKCFtX2NhbnZhc1RvQ1NTQ2FudmFzTmFtZS5jb250
YWlucygmaW5zcGVjdG9yQ2FudmFzLmNhbnZhcygpKSk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBTdHJpbmcgaWRlbnRpZmllciA9IGluc3BlY3RvckNhbnZhcy5pZGVudGlmaWVyKCk7Cisg
ICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMucmVtb3ZlKGlkZW50aWZpZXIpOworCisg
ICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLUluc3BlY3RvckNhbnZhc0FnZW50OjpDYW52YXNF
bnRyeSogSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldENhbnZhc0VudHJ5KGNvbnN0IFN0cmluZyYg
Y2FudmFzSWRlbnRpZmllcikKK0luc3BlY3RvckNhbnZhcyogSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmFzc2VydEluc3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllcikKIHsKLSAgICBmb3IgKGF1dG8mIGNhbnZhc0VudHJ5IDogbV9jYW52
YXNFbnRyaWVzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChjYW52YXNFbnRyeS5pZGVudGlmaWVy
ID09IGNhbnZhc0lkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4gJmNhbnZhc0VudHJ5Owor
ICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmll
clRvSW5zcGVjdG9yQ2FudmFzLmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykgeworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm8gY2FudmFzIGZv
ciBnaXZlbiBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5zcGVjdG9yQ2FudmFzLmdldCgpOwog
fQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpidWlsZE9iamVjdEZvckNhbnZhcyhjb25zdCBDYW52YXNFbnRyeSYgY2FudmFz
RW50cnksIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50KQorSW5zcGVjdG9yQ2FudmFz
KiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxl
bWVudCYgY2FudmFzRWxlbWVudCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjYW52YXNFbGVtZW50
LmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0gY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlIGNvbnRleHRUeXBlOwotICAgIGlmIChpczxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwotI2lmIEVO
QUJMRShXRUJHTCkKLSAgICBlbHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q29udGV4dFR5cGU6OldlYkdMOwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQkdMMikKLSAgICBlbHNl
IGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgY29udGV4
dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCR1BVKQotICAgIGVsc2UgaWYgKGlzPFdlYkdQVVJlbmRl
cmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKLSNlbmRpZgotICAgIGVsc2Ug
ewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5cGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICBm
b3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFz
LnZhbHVlcygpKSB7CisgICAgICAgIGlmICgmaW5zcGVjdG9yQ2FudmFzLT5jYW52YXMoKSA9PSAm
Y2FudmFzRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXMuZ2V0KCk7
CiAgICAgfQogCi0gICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNhbnZhczo6Y3JlYXRlKCkKLSAgICAgICAgLnNldENhbnZhc0lkKGNhbnZhc0VudHJ5LmlkZW50
aWZpZXIpCi0gICAgICAgIC5zZXRGcmFtZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkK
LSAgICAgICAgLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlKQotICAgICAgICAucmVsZWFzZSgp
OwotCi0gICAgaWYgKCFjYW52YXNFbnRyeS5jc3NDYW52YXNOYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgY2FudmFzLT5zZXRDc3NDYW52YXNOYW1lKGNhbnZhc0VudHJ5LmNzc0NhbnZhc05hbWUpOwot
ICAgIGVsc2UgewotICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKTsKLSAgICAgICAgaW50IG5vZGVJZCA9
IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmY2FudmFzRWxlbWVudCk7Ci0gICAgICAgIGlmICghbm9k
ZUlkKSB7Ci0gICAgICAgICAgICBpZiAoaW50IGRvY3VtZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJv
dW5kTm9kZUlkKCZjYW52YXNFbGVtZW50LmRvY3VtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+
cHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGRvY3VtZW50Tm9kZUlkLCAmY2FudmFzRWxlbWVu
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZUlkKQotICAg
ICAgICAgICAgY2FudmFzLT5zZXROb2RlSWQobm9kZUlkKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUo
V0VCR0wpCi0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKSB7
Ci0gICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJp
YnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS0+Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0
cmlidXRlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKQotICAgICAgICAgICAgICAgIC5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSkKLSAg
ICAgICAgICAgICAgICAuc2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpCi0gICAgICAgICAgICAg
ICAgLnNldFN0ZW5jaWwoYXR0cmlidXRlcy0+c3RlbmNpbCkKLSAgICAgICAgICAgICAgICAuc2V0
QW50aWFsaWFzKGF0dHJpYnV0ZXMtPmFudGlhbGlhcykKLSAgICAgICAgICAgICAgICAuc2V0UHJl
bXVsdGlwbGllZEFscGhhKGF0dHJpYnV0ZXMtPnByZW11bHRpcGxpZWRBbHBoYSkKLSAgICAgICAg
ICAgICAgICAuc2V0UHJlc2VydmVEcmF3aW5nQnVmZmVyKGF0dHJpYnV0ZXMtPnByZXNlcnZlRHJh
d2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICAuc2V0RmFpbElmTWFqb3JQZXJmb3JtYW5jZUNh
dmVhdChhdHRyaWJ1dGVzLT5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KQotICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAo
c2l6ZV90IG1lbW9yeUNvc3QgPSBjYW52YXNFbGVtZW50Lm1lbW9yeUNvc3QoKSkKLSAgICAgICAg
Y2FudmFzLT5zZXRNZW1vcnlDb3N0KG1lbW9yeUNvc3QpOwotCi0gICAgcmV0dXJuIGNhbnZhczsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCAwYTBl
YTg4OGFlNzJiOGZjNmRkNTgwNjg2NDljYzA2ZjU5NWZmNWRiLi4wN2QxNmUwYjg0MmEyMGI4MGYx
YzIyMjk4OGE5ZjVjZjE2NWY1YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNhbnZh
cy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldlYkFnZW50QmFzZS5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgpA
QCAtNDIsNyArNDMsNiBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CkBAIC01MSw3
ICs1MSw3IEBAIGNsYXNzIEluc3BlY3RvckNhbnZhc0FnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIENhbnZhc09ic2VyCiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5zcGVjdG9yQ2FudmFzQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIEluc3BlY3RvckNhbnZhc0FnZW50KFdlYkFnZW50Q29udGV4dCYsIEluc3Bl
Y3RvclBhZ2VBZ2VudCopOworICAgIGV4cGxpY2l0IEluc3BlY3RvckNhbnZhc0FnZW50KFdlYkFn
ZW50Q29udGV4dCYpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckNhbnZhc0FnZW50KCkgeyB9CiAK
ICAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwpAQCAtNzks
MzMgKzc5LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFz
RWxlbWVudCYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHN0cnVjdCBDYW52YXNFbnRyeSB7
Ci0gICAgICAgIFN0cmluZyBpZGVudGlmaWVyOwotICAgICAgICBTdHJpbmcgY3NzQ2FudmFzTmFt
ZTsKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSB7IG51bGxwdHIgfTsKLQot
ICAgICAgICBDYW52YXNFbnRyeSgpIHsgfQotCi0gICAgICAgIENhbnZhc0VudHJ5KGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQpCi0gICAg
ICAgICAgICA6IGlkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgICAgICwgZWxlbWVudChj
YW52YXNFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCiAgICAgdm9pZCBj
YW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBjbGVhckNhbnZhc0RhdGEoKTsK
LSAgICBDYW52YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoSFRNTENhbnZhc0VsZW1lbnQmKTsKLSAg
ICBDYW52YXNFbnRyeSogZ2V0Q2FudmFzRW50cnkoY29uc3QgU3RyaW5nJik7Ci0gICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhj
b25zdCBDYW52YXNFbnRyeSYsIEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgU3RyaW5nIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKKyAgICBJbnNwZWN0b3JDYW52YXMqIGFzc2VydElu
c3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rv
ckNhbnZhcyogZmluZEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVudCYpOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zy
b250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci0gICAgSW5zcGVjdG9yUGFnZUFn
ZW50KiBtX3BhZ2VBZ2VudDsKIAotICAgIEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQqLCBDYW52
YXNFbnRyeT4gbV9jYW52YXNFbnRyaWVzOwotICAgIEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQq
LCBTdHJpbmc+IG1fY2FudmFzVG9DU1NDYW52YXNJZDsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4+IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzOworICAg
IEhhc2hNYXA8SFRNTENhbnZhc0VsZW1lbnQqLCBTdHJpbmc+IG1fY2FudmFzVG9DU1NDYW52YXNO
YW1lOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzOwogICAg
IFRpbWVyIG1fdGltZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDkzZDM4
OTVjNDJhYzhmOTVkZjgwMDJlYmIzZDBmYmE2YTU1ZTVlZjcuLmY3ZjMzMmNmYjZiNDlmNDAxZjc5
NWVlNzIxYzA1OWVlNWJhZjBhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBJbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UmIHBhZ2UsIEluc3BlY3RvckNsaWVudCog
aW5zcGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50PihwYWdlQ29udGV4dCkpOwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3RvcldvcmtlckFnZW50PihwYWdlQ29udGV4dCkpOwogCi0gICAg
YXV0byBjYW52YXNBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ2FudmFzQWdl
bnQ+KHBhZ2VDb250ZXh0LCBwYWdlQWdlbnQpOworICAgIGF1dG8gY2FudmFzQWdlbnRQdHIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckNhbnZhc0FnZW50PihwYWdlQ29udGV4dCk7CiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudChjYW52YXNBZ2Vu
dFB0ci5nZXQoKSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURk1vdmUoY2FudmFzQWdlbnRQdHIp
KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGI1NWIyODM0MWEzYTQ2OTc0NmRlZTM2ZGU4OGE3ZmI4NjU3YjkxNDQuLjAz
OWEyNmNkNjkxZGM1N2RlMzdiMWY2ZTlmMTcyNmQ4NmVkZGZjNzQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxNy0wNy0xOCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogUmVmYWN0b3Jpbmc6IHJlcGxhY2UgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OkNhbnZhc0VudHJ5IHdpdGggYSBoZWxwZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDMxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IERldmluIFJvdXNzby4KKworICAgICAgICBVcGRhdGVkIHRlc3QgZXhwZWN0YXRpb25zIGZv
ciBuZXcgZXJyb3Igc3RyaW5ncy4KKworICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvY3NzLWNh
bnZhcy1jbGllbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jl
cXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jl
c29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dDoKKwogMjAxNy0wNy0xOCAgQW50b2lu
ZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gTW91c2UgcG9p
bnRlciBkb2VzIG5vdCBoaWRlIGR1cmluZyBmdWxsc2NyZWVuIHBsYXliYWNrCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL2Nzcy1jYW52YXMtY2xpZW50cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL2Nzcy1jYW52YXMtY2xpZW50cy1l
eHBlY3RlZC50eHQKaW5kZXggMGU5MWVmYjBlNzhiMWY5ZDliMzk2MGE1MjcxZmEzMWVhNjNhZDM3
NC4uOWFlYjNmZGM2OTQ3NGU4MTY1ODExMjA5YjIzNDFiNmIxYjgyM2Y1YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9jc3MtY2FudmFzLWNsaWVudHMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvY3NzLWNhbnZhcy1jbGllbnRz
LWV4cGVjdGVkLnR4dApAQCAtMTgsNSArMTgsNSBAQCBQQVNTOiBUaGVyZSBzaG91bGQgYmUgbm8g
Y2xpZW50IG5vZGVzLgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLkNTU0NhbnZhc0Ns
aWVudHMuSW52YWxpZENhbnZhc0lkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVy
cm9yOiBJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyCitFcnJvcjogTm8gY2FudmFzIGZvciBnaXZl
biBpZGVudGlmaWVyLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3RDb250ZW50LTJkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
YW52YXMvcmVxdWVzdENvbnRlbnQtMmQtZXhwZWN0ZWQudHh0CmluZGV4IGU4YjlkNWJjZTA1ZmYw
OWM3YmVmNTY1Y2NlNjU2YTAyNTY0ZWVmZTYuLjRlMTk5ZGY2MDY4ZjFkMWYyY2VlOTM5NjRiNTQz
ZDcwMTczNGY1ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVx
dWVzdENvbnRlbnQtMmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
YW52YXMvcmVxdWVzdENvbnRlbnQtMmQtZXhwZWN0ZWQudHh0CkBAIC03LDUgKzcsNSBAQCBkYXRh
OmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVN3QUFBQ1dDQVlBQUFC
a1c3WFNBQUFBQVhOU1IwSUFycwogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVl
c3RDb250ZW50LmludmFsaWRDYW52YXNJZAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3Iu
Ci1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRpZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3Ig
Z2l2ZW4gaWRlbnRpZmllci4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9yZXF1ZXN0Tm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2Fu
dmFzL3JlcXVlc3ROb2RlLWV4cGVjdGVkLnR4dAppbmRleCA5YWNkMzc2YzIzMjE2M2Y5ODMyYmQw
YjMzZDE2OGY0ZjI4MzRmZTIwLi43MTVjNDMxYjBlOTJhNWI2YTQ2ZDcxZmRhNDY1ZTZkMjFlNzFi
NDNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3ROb2Rl
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RO
b2RlLWV4cGVjdGVkLnR4dApAQCAtMTcsNSArMTcsNSBAQCBQQVNTOiBDYW52YXMgIkNhbnZhcyAy
IiBoYXMgbm9kZSB3aXRoIHR5cGUgIkNBTlZBUyIuCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBD
YW52YXMucmVxdWVzdE5vZGUuaW52YWxpZENhbnZhc0lkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBh
biBlcnJvci4KLUVycm9yOiBJbnZhbGlkIGNhbnZhcyBpZGVudGlmaWVyCitFcnJvcjogTm8gY2Fu
dmFzIGZvciBnaXZlbiBpZGVudGlmaWVyLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY2FudmFzL3Jlc29sdmVDYW52YXNDb250ZXh0LTJkLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb2x2ZUNhbnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQu
dHh0CmluZGV4IGQ5MjFmMjQ4OWQyNTZmYjUxOGY0YzZlNGRmOTY5YTE2NjgxYjQyZjAuLjZlZDYz
M2RhODQ4MzY4ZDk2NWI5MDRiMjQ2MjY0Zjk2ZjUwMDY4OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb2x2ZUNhbnZhc0NvbnRleHQtMmQtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb2x2ZUNhbnZhc0NvbnRleHQt
MmQtZXhwZWN0ZWQudHh0CkBAIC04LDUgKzgsNSBAQCBQQVNTOiBQYXlsb2FkIHNob3VsZCBoYXZl
IGNsYXNzTmFtZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIi4KIAogLS0gUnVubmluZyB0ZXN0
IGNhc2U6IENhbnZhcy5yZXNvbHZlQ2FudmFzQ29udGV4dC5pbnZhbGlkSWRlbnRpZmllcgogUEFT
UzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogSW52YWxpZCBjYW52YXMgaWRlbnRp
ZmllcgorRXJyb3I6IE5vIGNhbnZhcyBmb3IgZ2l2ZW4gaWRlbnRpZmllci4KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>