<?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>67648</bug_id>
          
          <creation_ts>2011-09-06 08:55:26 -0700</creation_ts>
          <short_desc>Move SelectorChecker out from the CSSStyleSelector scope</short_desc>
          <delta_ts>2011-09-07 02:36:20 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462565</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 08:55:26 -0700</bug_when>
    <thetext>SelectorChecker is more than 1000 lines of code, it deserves a file of its own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462566</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-06 08:55:51 -0700</bug_when>
    <thetext>But has it earned it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462577</commentid>
    <comment_count>2</comment_count>
      <attachid>106425</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 09:07:43 -0700</bug_when>
    <thetext>Created attachment 106425
patch, with mac build files only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462578</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 09:08:26 -0700</bug_when>
    <thetext>Oh, we are going to make it earn it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462736</commentid>
    <comment_count>4</comment_count>
      <attachid>106464</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 12:21:47 -0700</bug_when>
    <thetext>Created attachment 106464
patch, with build files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462739</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 12:24:46 -0700</bug_when>
    <thetext>Attachment 106464 did not pass style-queue:

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

Last 3072 characters of output:
[5]
Source/WebCore/css/CSSStyleSelector.h:195:  The parameter name &quot;rule&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.h:225:  The parameter name &quot;decl&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.h:250:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/css/CSSStyleSelector.h:251:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/css/CSSStyleSelector.h:320:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/CSSStyleSelector.h:322:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/SelectorChecker.h:55:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/SelectorChecker.h:78:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/SelectorChecker.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/SelectorChecker.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/SelectorChecker.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/SelectorChecker.cpp:57:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/SelectorChecker.cpp:242:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/css/SelectorChecker.cpp:315:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/css/SelectorChecker.cpp:373:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/SelectorChecker.cpp:472:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/css/SelectorChecker.cpp:599:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/css/SelectorChecker.cpp:604:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/css/SelectorChecker.cpp:931:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/SelectorChecker.cpp:995:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/SelectorChecker.cpp:1101:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/SelectorChecker.cpp:1111:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 27 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>462776</commentid>
    <comment_count>6</comment_count>
      <attachid>106464</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-06 13:04:36 -0700</bug_when>
    <thetext>Comment on attachment 106464
patch, with build files

Attachment 106464 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9595699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462782</commentid>
    <comment_count>7</comment_count>
      <attachid>106464</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 13:08:24 -0700</bug_when>
    <thetext>Comment on attachment 106464
patch, with build files

Attachment 106464 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9595697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462784</commentid>
    <comment_count>8</comment_count>
      <attachid>106464</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-06 13:12:10 -0700</bug_when>
    <thetext>Comment on attachment 106464
patch, with build files

Attachment 106464 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9593835</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462785</commentid>
    <comment_count>9</comment_count>
      <attachid>106464</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-06 13:12:16 -0700</bug_when>
    <thetext>Comment on attachment 106464
patch, with build files

Attachment 106464 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9593834</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462835</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-06 13:55:24 -0700</bug_when>
    <thetext>If you make it build, I will r+ it.  rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462838</commentid>
    <comment_count>11</comment_count>
      <attachid>106464</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 13:59:05 -0700</bug_when>
    <thetext>Comment on attachment 106464
patch, with build files

Attachment 106464 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9602051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462840</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 14:01:38 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; If you make it build, I will r+ it.  rs=me.

Build? Standards are getting so tough these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462860</commentid>
    <comment_count>13</comment_count>
      <attachid>106488</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-06 14:35:43 -0700</bug_when>
    <thetext>Created attachment 106488
patch for bots to chew</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463222</commentid>
    <comment_count>14</comment_count>
      <attachid>106553</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-07 01:12:36 -0700</bug_when>
    <thetext>Created attachment 106553
for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463223</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 01:14:18 -0700</bug_when>
    <thetext>Attachment 106553 did not pass style-queue:

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

Source/WebCore/css/CSSStyleSelector.h:91:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/css/CSSStyleSelector.h:103:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.h:105:  The parameter name &quot;list&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.h:107:  The parameter name &quot;pseudo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.h:107:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/ChangeLog:13:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 6 in 14 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>463225</commentid>
    <comment_count>16</comment_count>
      <attachid>106553</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 01:17:16 -0700</bug_when>
    <thetext>Comment on attachment 106553
for bots

Attachment 106553 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9607240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463238</commentid>
    <comment_count>17</comment_count>
      <attachid>106557</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-07 01:49:05 -0700</bug_when>
    <thetext>Created attachment 106557
another one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463239</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 01:51:12 -0700</bug_when>
    <thetext>Attachment 106557 did not pass style-queue:

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

Source/WebCore/css/CSSStyleSelector.h:91:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 14 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>463244</commentid>
    <comment_count>19</comment_count>
      <attachid>106557</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 02:10:23 -0700</bug_when>
    <thetext>Comment on attachment 106557
another one

Attachment 106557 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9603485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463254</commentid>
    <comment_count>20</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-07 02:36:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/94656</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106425</attachid>
            <date>2011-09-06 09:07:43 -0700</date>
            <delta_ts>2011-09-06 12:21:47 -0700</delta_ts>
            <desc>patch, with mac build files only</desc>
            <filename>split-selectorchecker-3.patch</filename>
            <type>text/plain</type>
            <size>174103</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU2VsZWN0b3JDaGVja2Vy
IG91dCBmcm9tIENTU1N0eWxlU2VsZWN0b3Igc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlIFNlbGVjdG9yQ2hlY2tlciB0byBTZWxlY3Rv
ckNoZWNrZXIuaC9jcHAKKyAgICAgICAgLSBNYWtlIHByaXZhdGUgZnVuY3Rpb25zIHByaXZhdGUK
KyAgICAgICAgLSBNYWtlIG1lbWJlcnMgcHJpdmF0ZSwgYWRkIGFjY2Vzc29ycworICAgICAgICAt
IE1vdmUgbV9zYW1lT3JpZ2luT25seSB0byBDU1NTdHlsZVNlbGVjdG9yIGFzIGl0IGlzIG5vdCB1
c2VkIGJ5IFNlbGVjdG9yQ2hlY2tlcgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OnNldEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cGFyZW50U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpzZXRUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
Ojpmb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWxs
VmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
Ojp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnVzZXNTaWJsaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6dXNlc0ZpcnN0TGluZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnVzZXNCZWZvcmVBZnRlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnVzZXNMaW5rUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6UGFyZW50
U3RhY2tGcmFtZTo6UGFyZW50U3RhY2tGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpzdHlsZU5vdFlldEF2YWlsYWJsZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6YWRkTG9jYWxOYW1lVG9TZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6aHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjphbnlBdHRyaWJ1dGVN
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFy
UHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjphbGxWaXNp
dGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6dmlz
aXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpzdHJpY3RQYXJzaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNDb2xsZWN0aW5nUnVsZXNPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6c2V0Q29sbGVjdGluZ1J1bGVzT25seSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmlzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xh
c3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpzZXRNYXRjaGluZ1Zpc2l0
ZWRQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnBzZXVk
b1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6c2V0UHNldWRvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpoYXNVbmtub3duUHNldWRv
RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjbGVhckhhc1Vu
a25vd25Qc2V1ZG9FbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OmRldGVybWluZUxpbmtTdGF0ZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6d2Via2l0TWF0Y2hlc1NlbGVjdG9yKToKKyAgICAgICAgKiBk
b20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclF1ZXJ5OjpT
ZWxlY3RvclF1ZXJ5KToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5oOgorCiAyMDExLTA5
LTA1ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHJlLWltcGxlbWVudCBSYXdTb3VyY2VDb2RlLgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2NTYsNiArNTY1Niw4IEBACiAJCUU0NDYxNDNDMENE
Njg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM3MjBDQkZCNkUwMDBBRjJFQ0UgLyog
SlNIVE1MU291cmNlRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTQ1MTBDRDY4QTM1MDBGQURBNzUg
LyogUmVuZGVyVmlkZW8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRCNDFFMzMwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmNwcCAqLzsg
fTsKIAkJRTQ0NjE0NTIwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzNDBDQkZCNjA5MDBB
RjJFQ0UgLyogUmVuZGVyVmlkZW8uaCAqLzsgfTsKKwkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhC
IC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDRCNEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2Vy
LmNwcCAqLzsgfTsKKwkJRTQ0QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0QjRC
QjIxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oICovOyB9OwogCQlFNDUzMjJB
QjE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBOTE0MENFMjY3MDA1QTBGOTIgLyog
U2VsZWN0b3JRdWVyeS5jcHAgKi87IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBT
ZWxlY3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovOyB9Owog
CQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTEyNDE0LDYgKzEyNDE2LDggQEAKIAkJRTQ0NjE0MTEwQ0Q2ODI2OTAw
RkFEQTc1IC8qIEpTTWVkaWFFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU01lZGlhRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTIw
Q0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1RpbWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDQ2MTQxMzBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDRCNEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yQ2hl
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEI0QkIyMTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2VsZWN0b3JDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NTMyMkE5MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yUXVlcnkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJ
bnRQb2ludEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRI
YXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU1Miw2ICsxOTU1Niw4IEBA
CiAJCQkJQkM3NERBMzYxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlC
Qzc0REEzNTEwMTNGM0Y3MDA3OTg3QUQgLyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBB
QThGREQxMDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAorCQkJCUU0NEI0QkIxMTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwICovLAorCQkJCUU0NEI0QkIyMTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3
RkI4QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhD
NSAvKiBTaGFkb3dWYWx1ZS5oICovLAogCQkJCUE4MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBT
dHlsZUJhc2UuY3BwICovLApAQCAtMjM0NjksNiArMjM0NzUsNyBAQAogCQkJCTlCMEZCMTkyMTQw
REI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMy
Q0JGNEUxNDBGMUFCRDAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMjc0QjJGMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBT
ZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjYyODIsNiArMjYyODksNyBAQAog
CQkJCTlCMEZCMTkxMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyog
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NEI0QkIz
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5NDUy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgotI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvbnRGYW1pbHlWYWx1ZS5oIgogI2luY2x1ZGUgIkZv
bnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJGb250VmFsdWUuaCIKQEAgLTYzLDEyICs2Miwx
MCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2Uu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJl
YUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNs
dWRlICJLZXlmcmFtZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIkxv
Y2FsZVRvU2NyaXB0TWFwcGluZy5oIgpAQCAtMTEwLDE3ICsxMDcsMTEgQEAKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgVVNFKFBM
QVRGT1JNX1NUUkFURUdJRVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5j
bHVkZSAiVmlzaXRlZExpbmtTdHJhdGVneS5oIgotI2VuZGlmCi0KICNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCiAjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjZW5kaWYKIApAQCAtMzQwLDExICszMzEsMTIgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NT
U3R5bGVTZWxlY3RvcihEb2N1bQogICAgICwgbV9lbGVtZW50KDApCiAgICAgLCBtX3N0eWxlZEVs
ZW1lbnQoMCkKICAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICwg
bV9mb250RGlydHkoZmFsc2UpCisgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCisgICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQogICAg
ICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogICAg
ICwgbV9hcHBseVByb3BlcnR5KENTU1N0eWxlQXBwbHlQcm9wZXJ0eTo6c2hhcmVkQ1NTU3R5bGVB
cHBseVByb3BlcnR5KCkpCiB7Ci0gICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0gICAgCiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAgIGlmICghZGVmYXVsdFN0eWxlKSB7CkBAIC02NDEs
NyArNjMzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZQogICAg
IHNvcnRNYXRjaGVkUnVsZXMoKTsKICAgICAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBv
ZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2No
ZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5KSB7CisgICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0
aW5nUnVsZXNPbmx5KCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0
Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9u
KG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwogICAgIH0gZWxzZSB7
CkBAIC03MTIsMTkgKzcwNCwxOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNG
b3JMaXN0CiAgICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxlY3Rv
cihydWxlRGF0YSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoZWNrU2Vs
ZWN0b3IocnVsZURhdGEpKSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZSht
X2VsZW1lbnQtPnRyZWVTY29wZSgpLCBtX2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVu
dHMpKQorICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVl
U2NvcGUoKSwgbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9w
ZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAg
ICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAg
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICBpZiAoIWRlY2wgfHwgKCFkZWNsLT5sZW5ndGgoKSAmJiAhaW5jbHVk
ZUVtcHR5UnVsZXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ICYmICFtX2NoZWNrZXIubV9kb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChydWxlLT5iYXNlVVJMKCkpKQorICAgICAgICAgICAg
aWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIW1fY2hlY2tlci5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHJ1bGUtPmJhc2VVUkwoKSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7IAogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBz
ZXQgYSBwc2V1ZG8gYml0IGlmIAogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hl
ZCBhIHBzZXVkby1lbGVtZW50LgotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAg
ICAgICAgICAgIGlmIChtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5KQorICAgICAgICAgICAg
aWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUo
KSA9PSBOT1BTRVVETykgeworICAgICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0
aW5nUnVsZXNPbmx5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKICAg
ICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNl
dWRvKTsKQEAgLTc1MiwxMyArNzQ0LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0
Y2hlZFJ1bGVzKAogewogICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21h
dGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KLQotaW5saW5lIEVJbnNpZGVMaW5r
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5p
c0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7Ci0gICAgcmV0dXJuIGRldGVy
bWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVsZW1lbnQpOwotfQogICAgIAogaW5saW5lIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIHsKQEAgLTc3NSw3ICs3NjAs
NyBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVuCiAKIGlubGluZSB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKIHsKLSAgICBtX2NoZWNr
ZXIubV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lEOworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHls
ZShwc2V1ZG9JRCk7CiAKICAgICBtX3BhcmVudE5vZGUgPSBlID8gZS0+cGFyZW50Tm9kZUZvclJl
bmRlcmluZ0FuZFN0eWxlKCkgOiAwOwogCkBAIC03ODUsNyArNzcwLDcgQEAgaW5saW5lIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eQogICAgICAgICBtX3BhcmVudFN0eWxlID0gbV9w
YXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKIAogICAgIE5vZGUq
IGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwot
ICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5yZW5kZXJT
dHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5kb2N1bWVudCgp
LT5yZW5kZXJTdHlsZSgpOwogICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYg
ZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwog
CiAgICAgbV9zdHlsZSA9IDA7CkBAIC03OTksOTkgKzc4NCw2IEBAIGlubGluZSB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmluaXRGb3JTdHkKICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCi1z
dGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2Rl
KQotewotICAgIGlmICghbm9kZS0+aXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
QVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIp
OwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0g
ICAgICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVm
QXR0cik7Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1DU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wg
c3RyaWN0UGFyc2luZykKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3N0cmlj
dFBhcnNpbmcoc3RyaWN0UGFyc2luZykKLSAgICAsIG1fY29sbGVjdFJ1bGVzT25seShmYWxzZSkK
LSAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNF
VURPKQotICAgICwgbV9kb2N1bWVudElzSFRNTChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkK
LSAgICAsIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKGZhbHNlKQotICAgICwgbV9tYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcyhmYWxzZSkKLXsKLX0KLQotRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50
KiBlbGVtZW50KSBjb25zdAotewotICAgIEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7Ci0gICAg
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsK
LSAgICBpZiAoIWF0dHIgfHwgYXR0ci0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBOb3RJbnNp
ZGVMaW5rOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgVmVjdG9yPFVDaGFyLCA1MTI+IHVybDsK
LSAgICB2aXNpdGVkVVJMKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIsIHVybCk7Ci0gICAg
aWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwot
Ci0gICAgLy8gSWYgdGhlIFF0NC40IGludGVyZmFjZSBmb3IgdGhlIGhpc3RvcnkgaXMgdXNlZCwg
d2Ugd2lsbCBoYXZlIHRvIGZhbGxiYWNrCi0gICAgLy8gdG8gdGhlIG9sZCBnbG9iYWwgaGlzdG9y
eS4KLSAgICBRV2ViSGlzdG9yeUludGVyZmFjZSogaWZhY2UgPSBRV2ViSGlzdG9yeUludGVyZmFj
ZTo6ZGVmYXVsdEludGVyZmFjZSgpOwotICAgIGlmIChpZmFjZSkKLSAgICAgICAgcmV0dXJuIGlm
YWNlLT5oaXN0b3J5Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJs
LmRhdGEoKSksIHVybC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNp
dGVkTGluazsKLQotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEo
KSwgdXJsLnNpemUoKSk7Ci0gICAgaWYgKCFoYXNoKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52
aXNpdGVkTGluazsKLSNlbHNlCi0gICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaCht
X2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAgIHJl
dHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotI2VuZGlmCi0KLSAgICBGcmFtZSogZnJhbWUgPSBt
X2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLQotICAgIG1f
bGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKLQotI2lmIFVTRShQTEFURk9S
TV9TVFJBVEVHSUVTKQotICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+dmlzaXRlZExp
bmtTdHJhdGVneSgpLT5pc0xpbmtWaXNpdGVkKHBhZ2UsIGhhc2gpID8gSW5zaWRlVmlzaXRlZExp
bmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotI2Vsc2UKLSAgICByZXR1cm4gcGFnZS0+Z3JvdXAo
KS5pc0xpbmtWaXNpdGVkKGhhc2gpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0
ZWRMaW5rOwotI2VuZGlmCi19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGJv
b2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0Ci17Ci0gICAgUHNldWRvSWQgZHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwotICAgIGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAh
ZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgLy8gZmFzdENoZWNrU2VsZWN0b3Ig
YXNzdW1lcyBjbGFzcyBhbmQgaWQgbWF0Y2ggZm9yIHRoZSB0b3Agc2VsZWN0b3IuCi0gICAgICAg
IGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7Ci0gICAgICAgICAgICBp
ZiAoIShlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChzZWwtPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OklkKSB7Ci0gICAgICAgICAgICBpZiAoIShlbGVtZW50LT5oYXNJRCgpICYm
IGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhc3RD
aGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZWxlbWVudCwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rv
ck1hdGNoZXM7Ci19Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hv
bGQgPSAxMDsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9s
ZCA9IDEwOwogCkBAIC0xMTUxLDExICsxMDQzLDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hVQVJ1bGVzKGludCYKICAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwg
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYg
KCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nKQorICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBh
cnNpbmcoKSkKICAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFS
dWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8vIElmIGRvY3VtZW50IHVz
ZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3
ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUg
c2hlZXQuCi0gICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5pc1ZpZXdTb3VyY2UoKSkgewor
ICAgIGlmIChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpIHsKICAgICAgICAg
aWYgKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKQogICAgICAgICAgICAgbG9hZFZpZXdTb3VyY2VT
dHlsZSgpOwogICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRWaWV3U291cmNlU3R5bGUsIGZpcnN0
VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CkBAIC0xMjY2LDcgKzExNTgsNyBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgICAgIGluaXRGb3JTdHlsZVJl
c29sdmUoZSwgZGVmYXVsdFBhcmVudCk7CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hW
aXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNr
ZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mp
OwogCiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIApAQCAtMTQyMiw3ICsx
MzE0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIH0K
IAogICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBiYWNrIGJlZm9yZSBhcHBseWluZyBwcm9wZXJ0aWVz
LCBzbyB0aGF0IC13ZWJraXQtbGluayBrbm93cyB3aGF0IGNvbG9yIHRvIHVzZS4KLSAgICBtX2No
ZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNz
OworICAgIG1fY2hlY2tlci5zZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtYXRjaFZpc2l0
ZWRQc2V1ZG9DbGFzcyk7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRj
aGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gIFdhbGsgdGhlIHJ1bGVzIGFuZCBh
cHBseQogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2Ug
cHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgpAQCAtMTYxMiw3ICsx
NTA0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIGlm
IChwYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUp
OwogCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0
ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xh
c3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNl
IHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVs
ZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTYz
NCw3ICsxNTI2LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcgog
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICAKICAgICAvLyBSZXNldCB0aGUgdmFsdWUg
YmFjayBiZWZvcmUgYXBwbHlpbmcgcHJvcGVydGllcywgc28gdGhhdCAtd2Via2l0LWxpbmsga25v
d3Mgd2hhdCBjb2xvciB0byB1c2UuCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRv
Q2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hp
bmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgLy8g
SGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzLgogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZh
bHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKQEAgLTE2ODAsNyArMTU3Miw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKIAogUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgp
CiB7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShtX2NoZWNrZXIubV9kb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRv
Y3VtZW50IHN0eWxlLgorICAgIGluaXRGb3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0
IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAogICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CiAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKQEAg
LTE3NDIsNyArMTYzNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5
bGUKICAgICAgICAgLy8gcHJvcGVydHkuCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkg
dXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJr
cyBtb2RlIHdlIGZvcmNlCiAgICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRp
c3BsYXkgdHlwZXMuCi0gICAgICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZyAmJiBl
KSB7CisgICAgICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7CiAgICAg
ICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKICAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rmxv
YXRpbmcoTm9GbG9hdCk7CkBAIC0xNzk1LDcgKzE2ODcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFkanVzdFJlbmRlclN0eWxlCiAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZS0+ZGlzcGxh
eSgpID09IExJU1RfSVRFTSkgewogICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgV2luSUUgYnVn
IHRoYXQgZmxvYXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2UnbGwgZW11
bGF0ZSB0aGUgcXVpcmssCiAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkgaW4gcXVpcmtzIG1v
ZGUuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nICYmIHN0
eWxlLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0
UGFyc2luZygpICYmIHN0eWxlLT5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
QEAgLTE5NTMsNyArMTg0NSw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2Vs
ZWN0b3IKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRl
ZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09u
bHkgPSB0cnVlOworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOwog
CiAgICAgaW5pdEVsZW1lbnQoZSk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1
ZG9JZCk7CkBAIC0xOTcxLDE2ICsxODYzLDE2IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENT
U1N0eWxlU2VsZWN0b3IKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fY2hl
Y2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NT
UnVsZXMpOworICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENy
b3NzT3JpZ2luQ1NTUnVsZXMpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRo
b3Igc2hlZXRzLgogICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JS
dWxlID0gLTE7CiAgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVz
KTsKIAotICAgICAgICBtX2NoZWNrZXIubV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAg
ICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fY29s
bGVjdFJ1bGVzT25seSA9IGZhbHNlOworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNP
bmx5KGZhbHNlKTsKICAgIAogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KQEAg
LTE5ODgsMTIgKzE4ODAsMTIgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxl
Y3RvcgogaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYgcnVsZURhdGEpCiB7CiAgICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0g
ICAgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CisgICAgbV9j
aGVja2VyLmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7CiAKICAgICAvLyBMZXQgdGhl
IHNsb3cgcGF0aCBoYW5kbGUgU1ZHIGFzIGl0IGhhcyBzb21lIGFkZGl0aW9uYWwgcnVsZXMgcmVn
YXJkaW5nIHNoYWRvdyB0cmVlcy4KICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKCkgJiYgIW1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgLy8gV2Ug
a25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBzZWxlY3RvcnMu
Ci0gICAgICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAg
ICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBz
aW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZy
b20gdGhlIHJ1bGUgaGFzaC4KICAgICAgICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25s
eSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3BhY2UuCkBAIC0yMDAzLDEwMzAg
KzE4OTUsMTQgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlYwogICAg
IH0KIAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVj
a2VyLmNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnRO
b2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7Ci0gICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0Y2hl
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHls
ZSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1
ZG8pCisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2Vy
LmNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQ
c2V1ZG8sIGZhbHNlLCBmYWxzZSwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2Rl
LT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0gICAgCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgYm9vbCBzZWxlY3RvclRhZ01hdGNoZXMo
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewot
ICAgIGlmICghc2VsZWN0b3ItPmhhc1RhZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUo
KTsKLSAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBlbGVtZW50
LT5sb2NhbE5hbWUoKSkKKyAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VV
RE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBz
ZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9
PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci19
Ci0gICAgCi10ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNT
dHJpbmdJbXBsKik+Ci1pbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NT
U2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGls
ZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCi17Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogdmFs
dWUgPSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGNoZWNrVmFsdWUo
ZWxlbWVudCwgdmFsdWUpICYmIHNlbGVjdG9yVGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvcikp
IHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6
RGVzY2VuZGFudCkKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwot
ICAgICAgICAgICAgZWxzZSBpZiAoIXRvcENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQg
fHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLSAg
ICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAg
ICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSBlbGVtZW50OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlz
dG9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHRvcENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAgICAgICAgLy8gQ2hpbGQgb3Igc3Vic2Vs
ZWN0b3IgY2hlY2sgZmFpbGVkLgotICAgICAgICAgICAgLy8gSWYgdGhlIG1hdGNoIGVsZW1lbnQg
aXMgbnVsbCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yIHdhcyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qg
c2VsZWN0b3IgYW5kIGhhZCB0byBtYXRjaCAKLSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBl
bGVtZW50IHdlIHdlcmUgY2hlY2tpbmcuCi0gICAgICAgICAgICBpZiAoIXRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgbWF0Y2hlcyBkb3duIHRoZSBhbmNlc3RvciBj
aGFpbi4KLSAgICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgdG9wbW9zdCBjaGlsZCBvciBzdWJz
ZWxlY3RvciBhbmQgdGhlIGVsZW1lbnQgaXQgbWF0Y2hlZCwgY29udGludWUgY2hlY2tpbmcgYW5j
ZXN0b3JzLgotICAgICAgICAgICAgc2VsZWN0b3IgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3I7Ci0g
ICAgICAgICAgICBlbGVtZW50ID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIAotewotICAgIHJldHVybiBlbGVtZW50LT5o
YXNDbGFzcygpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+
Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHZhbHVlKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tJRFZh
bHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKLXsK
LSAgICByZXR1cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSA9PSB2YWx1ZTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShj
b25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCopCi17CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVj
a1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxl
bWVudCkKLXsKLSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsK
LQotICAgIC8vIFRoZSB0b3Agc2VsZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVs
ZSBoYXNoZXMgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCi0gICAg
aWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9y
ID0gMDsKLSAgICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1l
bnQgPSAwOwotICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hp
bGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQot
ICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgIGlmIChzZWxl
Y3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIGVs
ZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7Ci0KLSAgICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0
b3IgaGFzIGRlc2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5
IGFuZCBhbGwgY29tcG9uZW50cyBhcmUgc2ltcGxlLgotICAgIHdoaWxlIChzZWxlY3Rvcikgewot
ICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkNsYXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcjxj
aGVja0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3Is
IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OklkOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFs
dWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JT
dWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0gICAg
ICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVj
dG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVj
dG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoc2VsZWN0b3ItPnJl
bGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgc2VsZWN0b3ItPnJlbGF0aW9u
KCkgIT0gQ1NTU2VsZWN0b3I6OkNoaWxkICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpOb25lICYmIHNlbGVjdG9yLT5t
X21hdGNoICE9IENTU1NlbGVjdG9yOjpJZCAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxl
Y3Rvcjo6Q2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5h
dG9ycwotLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9y
TWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8g
KiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVs
ZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQ
c2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0
eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0
Ci17Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3Qg
YmUgYXBwbGllZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCi0gICAgLy8g
YmVjYXVzZSBpdHMgY29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQg
c3RydWN0dXJlLgotICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotI2VuZGlmCi0KLSAgICAvLyBmaXJzdCBzZWxlY3Rv
ciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWlj
UHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxl
bWVudFBhcmVudFN0eWxlKSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5Owot
Ci0gICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKLSAgICBDU1NT
ZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9uKCk7Ci0KLSAgICAvLyBQ
cmVwYXJlIG5leHQgc2VsCi0gICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7Ci0gICAgaWYgKCFz
ZWwpCi0gICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7Ci0KLSAgICBpZiAocmVsYXRpb24g
IT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlz
IHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQotICAgICAgICBpZiAo
bV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1
ZG8pCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0KLSAgICAv
LyBDaGVjayBmb3IgbmVzdGVkIGxpbmtzLgotICAgIGlmIChtX21hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzICYmICFpc1N1YlNlbGVjdG9yKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAg
ICAgICBpZiAoY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygpICYmIGUt
PmlzTGluaygpKSB7Ci0gICAgICAgICAgICBpZiAoZW5jb3VudGVyZWRMaW5rKQotICAgICAgICAg
ICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlz
IG5vdCByZWxldmFudCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0
Y2hpbmcuCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW5jb3VudGVyZWRMaW5r
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAocmVsYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAg
ICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgU2Vs
ZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBm
YWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2Vs
ZWN0b3JGYWlsc0xvY2FsbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpDaGlsZDoKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBh
cmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAg
ICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hl
Y2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmsp
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50Ogot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlLT5wYXJl
bnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50
UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAg
ICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1p
Y1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgICAgIGlmICghbV9jb2xs
ZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxl
bWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVu
ZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
ICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBt
X21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgU2VsZWN0
b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxz
ZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0
b3JGYWlsc0xvY2FsbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
U3ViU2VsZWN0b3I6Ci0gICAgICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29t
ZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAotICAgICAgICAgICAgLy8gV2UgbWFrZSBh
biBleGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0
IG9mIHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQotICAgICAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHls
ZSB8fCBtX2NvbGxlY3RSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYg
ZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKLSAgICAgICAgICAgICAgICAhKChSZW5kZXJT
Y3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNo
YWRvd0Rlc2NlbmRhbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3RO
b2RlID0gZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93SG9z
dE5vZGUgPT0gZSB8fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNoYWRvd0hvc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVy
biBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVk
TGluayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+KiBzZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQotewotICAgIHNl
dC0+YWRkKHFOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci19Ci0KLXN0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQo
KQotewotICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEg
d2l0aCB2YWx1ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCi0gICAgLy8g
TW96aWxsYSB0cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBz
byBkbyB3ZS4KLSAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjsKLQotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGFjY2VwdF9jaGFyc2V0QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
YWNjZXB0QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpZ25BdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlua0F0dHIpOwotICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGF4aXNBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBiZ2NvbG9yQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hhcnNl
dEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoZWNrZWRBdHRyKTsKLSAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjbGVhckF0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIGNvZGV0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgY29sb3JBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb21wYWN0
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGVjbGFyZUF0dHIpOwotICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRlZmVyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgZGlyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
ZGlzYWJsZWRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBlbmN0eXBlQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZmFjZUF0dHIpOwotICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZyYW1lQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgaHJlZmxhbmdBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBo
dHRwX2VxdWl2QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ0F0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmd1YWdlQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGlua0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIG1lZGlhQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbWV0
aG9kQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbXVsdGlwbGVBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub2hyZWZBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBub3Jlc2l6ZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIG5vc2hhZGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBu
b3dyYXBBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWFkb25seUF0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJlbEF0dHIpOwotICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIHJldkF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIHJ1bGVzQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2NvcGVBdHRy
KTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzY3JvbGxpbmdBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzZWxlY3RlZEF0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIHNoYXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgdGFyZ2V0QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGV4dEF0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHR5cGVBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCB2YWxpZ25BdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCB2YWx1ZXR5cGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2
bGlua0F0dHIpOwotCi0gICAgcmV0dXJuIGF0dHJTZXQ7Ci19Ci0KLXN0YXRpYyBib29sIGh0bWxB
dHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
KQotewotICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogaHRtbENhc2VJbnNl
bnNpdGl2ZUF0dHJpYnV0ZXNTZXQgPSBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRl
c1NldCgpOwotICAgIGJvb2wgaXNQb3NzaWJsZUhUTUxBdHRyID0gIWF0dHIuaGFzUHJlZml4KCkg
JiYgKGF0dHIubmFtZXNwYWNlVVJJKCkgPT0gbnVsbEF0b20pOwotICAgIHJldHVybiBpc1Bvc3Np
YmxlSFRNTEF0dHIgJiYgaHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQtPmNvbnRhaW5z
KGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0cmlidXRlUXVh
bGlmaWVkTmFtZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGUsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHNlbGVjdG9yQXR0cikKLXsKLSAgICBpZiAoc2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgpICE9
IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBzZWxlY3RvckF0dHIucHJlZml4KCkgPT0gc3RhckF0b20gfHwgc2VsZWN0b3JBdHRyLm5h
bWVzcGFjZVVSSSgpID09IGF0dHJpYnV0ZS0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0KLXN0YXRpYyBi
b29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1Nl
bGVjdG9yOjpNYXRjaCBtYXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBi
b29sIGNhc2VTZW5zaXRpdmUpCi17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0
dHJpYnV0ZUl0ZW0tPnZhbHVlKCk7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RXhhY3Q6Ci0gICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlID8gc2VsZWN0b3JWYWx1ZSAhPSB2
YWx1ZSA6ICFlcXVhbElnbm9yaW5nQ2FzZShzZWxlY3RvclZhbHVlLCB2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
Okxpc3Q6IHsKLSAgICAgICAgLy8gSWdub3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMg
Y29udGFpbmluZyBzcGFjZXMKLSAgICAgICAgaWYgKHNlbGVjdG9yVmFsdWUuY29udGFpbnMoJyAn
KSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKLSAgICAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgICAgIHNpemVfdCBmb3VuZFBvcyA9IHZhbHVlLmZpbmQoc2VsZWN0b3JW
YWx1ZSwgc3RhcnRTZWFyY2hBdCwgY2FzZVNlbnNpdGl2ZSk7Ci0gICAgICAgICAgICBpZiAoZm91
bmRQb3MgPT0gbm90Rm91bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKCFmb3VuZFBvcyB8fCB2YWx1ZVtmb3VuZFBvcyAtIDFdID09ICcgJykgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFN0ciA9IGZvdW5kUG9zICsgc2VsZWN0b3JWYWx1ZS5s
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5kU3RyID09IHZhbHVlLmxlbmd0aCgpIHx8
IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gV2Ug
Zm91bmQgYSBtYXRjaC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gTm8gbWF0Y2guIEtlZXAgbG9va2luZy4KLSAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBm
b3VuZFBvcyArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkNvbnRhaW46Ci0gICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsZWN0
b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkJlZ2luOgotICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwg
Y2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoK
LSAgICAgICAgaWYgKCF2YWx1ZS5lbmRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZl
KSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SHlwaGVuOgotICAgICAgICBp
ZiAodmFsdWUubGVuZ3RoKCkgPCBzZWxlY3RvclZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1
ZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8v
IEl0IHRoZXkgc3RhcnQgdGhlIHNhbWUsIGNoZWNrIGZvciBleGFjdCBtYXRjaCBvciBmb2xsb3dp
bmcgJy0nOgotICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gc2VsZWN0b3JWYWx1ZS5sZW5n
dGgoKSAmJiB2YWx1ZVtzZWxlY3RvclZhbHVlLmxlbmd0aCgpXSAhPSAnLScpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBD
U1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0
ciwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUp
Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0dHJp
YnV0ZUl0ZW0oaSk7Ci0KLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hl
cyhhdHRyaWJ1dGVJdGVtLCBzZWxlY3RvckF0dHIpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBtYXRjaCwg
c2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wg
ZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAotewotICAgIEFTU0VSVChlKTsKLSAgICBpZiAoIWUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGUs
IHNlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0
ZSgpKSB7Ci0gICAgICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQot
ICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KGUpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKTsKLQotICAgICAg
ICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAgICAgIHJldHVy
biBlLT5oYXNJRCgpICYmIGUtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgp
OwotCi0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgp
OwotCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2VyZSBlbGVtZW50U3R5bGUg
aXMgMC4KLSAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlzU3R5bGVkRWxlbWVudCgp
IHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01hcHBlZEF0dHJpYnV0ZShh
dHRyKSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9ubHlBdHRyKSkpCi0gICAg
ICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoKTsg
Ly8gU3BlY2lhbC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFkb25seSIgYXR0cmlidXRlcyBzbyBp
bnB1dCBmb3JtIGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4KLQotICAgICAgICBOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZXMgPSBlLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICBpZiAoIWF0dHJp
YnV0ZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjYXNlU2Vu
c2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5z
aXRpdmVWYWx1ZShhdHRyKTsKLQotICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0
cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gpLCBh
dHRyLCBzZWwtPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzcykgewotICAgICAgICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KLSAgICAgICAg
aWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChzZWwtPnNlbGVjdG9yTGlzdCgpKTsKLSAgICAgICAgICAgIGZvciAoQ1NT
U2VsZWN0b3IqIHN1YlNlbCA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsg
c3ViU2VsID0gc3ViU2VsLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyA6bm90
IGNhbm5vdCBuZXN0LiBJIGRvbid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKLSAgICAgICAg
ICAgICAgICAvLyByZXN0cmljdGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9y
IGl0LgotICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5l
dmVyIG9jY3VycwotICAgICAgICAgICAgICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAh
PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KTsKLQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tP
bmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGlu
aywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChkeW5hbWlj
UHNldWRvICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxl
UmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWlj
UHNldWRvID09IFJFU0laRVIpKSB7Ci0gICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRj
aCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVj
aWFsaXplZCBydWxlcyBmb3IgZWFjaAotICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBu
byBlbGVtZW50cyBpbnZvbHZlZCkuCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQ
c2V1ZG9DbGFzcyhzZWwsIGR5bmFtaWNQc2V1ZG8pOwotICAgICAgICB9IGVsc2UgaWYgKGR5bmFt
aWNQc2V1ZG8gPT0gU0VMRUNUSU9OKSB7Ci0gICAgICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQotICAgICAgICAgICAgICAg
IHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBj
aGVja2luZy4KLSAgICAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgewotICAgICAgICAg
ICAgLy8gUHNldWRvIGNsYXNzZXM6Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9Ob3Q6Ci0gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEFscmVhZHkgaGFuZGxlZCB1cCBhYm92
ZS4KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5OiB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
biA9IGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3Rh
dGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUo
KSAmJiAoZS0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxl
KCktPnVuaXF1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCkt
PnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKLSAgICAgICAgICAgICAgICAvLyBmaXJzdC1jaGls
ZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0
eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUt
PnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZTogewotICAgICAgICAgICAgICAgIC8v
IGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAg
ICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FO
YW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5o
YXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xs
ZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnRO
b2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDogewotICAgICAgICAgICAgICAgIC8vIGxh
c3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5y
ZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHls
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0
eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvTGFzdE9mVHlwZTogewotICAgICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBt
YXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBh
cmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUt
PnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGlu
ZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikt
Pmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDogewotICAg
ICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
IChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
biA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVt
ZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmly
c3RDaGlsZCAmJiBsYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvT25seU9mVHlwZTogewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9y
IGlzIHZlcnkgc2xvdy4KLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29s
bGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0Zpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGls
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlw
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aENoaWxkOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnRO
b2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IG4t
PnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSBzID8gcy0+Y2hpbGRJbmRleCgpIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0g
aW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVt
ZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkU3R5bGUtPnNldENoaWxkSW5kZXgoY291bnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9m
VHlwZTogewotICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxl
bWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY291
bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0g
ZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3Vz
U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1h
dGNoTnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDogewotICAgICAg
ICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25s
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUt
Pm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBl
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xs
ZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBh
cnNpbmdDaGlsZHJlbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVGFyZ2V0
OgotICAgICAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKLSAgICAgICAgICAgICAg
ICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0
KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3Rvcikp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5
bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50
UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAg
ICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQXV0b2ZpbGw6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxl
bWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9m
aWxsZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgICAgICAgICAgICAgaWYgKGUg
JiYgZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9tYXRjaFZpc2l0
ZWRQc2V1ZG9DbGFzczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+
aXNMaW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX21hdGNoVmlzaXRlZFBzZXVk
b0NsYXNzIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRB
ZmZlY3RlZEJ5RHJhZ1J1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJl
bmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFm
ZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPnJlbmRlcmVy
KCkgJiYgZS0+cmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgICAgIGlm
IChlICYmICgoZS0+Zm9jdXNlZCgpICYmIGUtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB8fCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6
OlBzZXVkb0ZvY3VzKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92
ZXI6IHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBo
b3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAgICAg
Ly8gaHJlZiBhbmQgKjpob3ZlciBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAgVGhpcyBpcyBp
bXBvcnRhbnQgZm9yIHNpdGVzIGxpa2Ugd3NqLmNvbS4KLSAgICAgICAgICAgICAgICBpZiAobV9z
dHJpY3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhh
c1RhZ05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNl
dEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5
bGUoKS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChlLT5ob3ZlcmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9B
Y3RpdmU6Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4g
OmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAg
ICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gCi0gICAg
ICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwt
Pmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbmFibGVkOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc0VuYWJsZWRGb3JtQ29u
dHJvbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRnVsbFBhZ2VNZWRpYToKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBl
LT5kb2N1bWVudCgpICYmIGUtPmRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc0RlZmF1bHRCdXR0b25Gb3JG
b3JtKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAg
ICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIWUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFk
T25seTogewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJv
bCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
UmVhZFdyaXRlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgIWUtPmlzUmVhZE9ubHlGb3Jt
Q29udHJvbCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvT3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25h
bEZvcm1Db250cm9sKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZXF1
aXJlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRy
b2woKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZhbGlkOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVs
ZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+d2lsbFZhbGlkYXRlKCkgJiYgZS0+aXNW
YWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwotICAgICAgICAgICAgfSBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9JbnZhbGlkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGUt
PndpbGxWYWxpZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGUt
Pmhhc1VuYWNjZXB0YWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NoZWNrZWQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRl
IHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0Ci0gICAgICAgICAg
ICAgICAgLy8geW91IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdl
IHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKLSAgICAg
ICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRj
aGluZyB0aGUgcHNldWRvLgotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0
RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRF
bGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbmRldGVybWluYXRlOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICAg
ICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNz
ICYmICFwcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSNlbmRpZgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6
Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzogewotICAgICAg
ICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IGUtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFn
ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwt
PmFyZ3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCAhdmFs
dWUuc3RhcnRzV2l0aChhcmd1bWVudCwgZmFsc2UpKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gYXJndW1lbnQubGVuZ3Ro
KCkgJiYgdmFsdWVbYXJndW1lbnQubGVuZ3RoKCldICE9ICctJykKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0j
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRnVsbFNjcmVlbjoKLSAgICAgICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlz
IGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCBhbmQgdGhlIGRvY3VtZW50J3MgY3VycmVudCBmdWxs
c2NyZWVuIAotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUg
ZG9jdW1lbnQsIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8gCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBlbGVtZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4g
b3IgPGVtYmVkPiBlbGVtZW50IHdob3NlIGNoaWxkIGJyb3dzaW5nIAotICAgICAgICAgICAgICAg
IC8vIGNvbnRleHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSBoYXMgdGhl
ICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4KLSAgICAgICAgICAgICAgICBpZiAo
ZS0+aXNGcmFtZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJh
c2UqPihlKS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtp
dElzRnVsbFNjcmVlbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGUgPT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxT
Y3JlZW5FbGVtZW50KCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbmlt
YXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgICAgICAgICBpZiAoZSAhPSBlLT5k
b2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5kb2N1bWVu
dCgpLT5pc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0Z1bGxTY3JlZW5BbmNlc3RvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+
Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvRnVsbFNjcmVlbkRvY3VtZW50OgotICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEg
RG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9j
dW1lbnQnIHBzZXVkb2NsYXNzIGFwcGxpZXMgCi0gICAgICAgICAgICAgICAgLy8gdG8gYWxsIGVs
ZW1lbnRzIG9mIHRoYXQgRG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVu
dCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JblJhbmdlOgotICAgICAgICAgICAgICAgIGlmICghZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGUtPmlzSW5SYW5nZSgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvT3V0T2ZSYW5nZToKLSAgICAgICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRD
b250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5p
c091dE9mUmFuZ2UoKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25v
d246Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dCkgewotICAgICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9jb2xsZWN0UnVsZXNPbmx5KQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBz
ZXVkb0VsZW1lbnQoKSkgewotICAgICAgICAgICAgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMg
PSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGUtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52
YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxl
Y3Rvcjo6cHNldWRvSWQoc2VsLT5wc2V1ZG9UeXBlKCkpOwotICAgICAgICBpZiAocHNldWRvSWQg
PT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0VXNlc0ZpcnN0TGV0
dGVyUnVsZXModHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNF
VURPKQotICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwotICAgIH0KLSAgICAv
LyAjIyMgYWRkIHRoZSByZXN0IG9mIHRoZSBjaGVja3MuLi4KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFy
UHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBjb25zdAotewotICAgIFJl
bmRlclNjcm9sbGJhciogc2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JT
dHlsZVJlc29sdmUoKTsKLSAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6
OnBhcnRGb3JTdHlsZVJlc29sdmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IGhhY2sgZm9yIHJlc2l6ZXJzIGFuZCBzY3JvbGxiYXIgY29ybmVycy4gIEV2ZW50dWFsbHkg
OndpbmRvdy1pbmFjdGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAotICAgIC8vIHBzZXVkbyBjbGFz
cyBhbmQganVzdCBhcHBseSB0byBldmVyeXRoaW5nLgotICAgIGlmIChzZWwtPnBzZXVkb1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCi0gICAgICAgIHJldHVybiAh
bV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICAK
LSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICBBU1NFUlQoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7Ci0gICAg
c3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbmFibGVkOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwot
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAgIHJl
dHVybiAhc2Nyb2xsYmFyLT5lbmFibGVkKCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0hvdmVyOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFy
QkdQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBob3ZlcmVkUGFydCAhPSBOb1BhcnQ7Ci0g
ICAgICAgICAgICBpZiAocGFydCA9PSBUcmFja0JHUGFydCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaG92ZXJlZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9PSBGb3J3YXJk
VHJhY2tQYXJ0IHx8IGhvdmVyZWRQYXJ0ID09IFRodW1iUGFydDsKLSAgICAgICAgICAgIHJldHVy
biBwYXJ0ID09IGhvdmVyZWRQYXJ0OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0FjdGl2ZTogewotICAgICAgICAgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFy
dCA9IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IFNj
cm9sbGJhckJHUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgIT0gTm9Q
YXJ0OwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gVHJhY2tCR1BhcnQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0g
Rm9yd2FyZFRyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQ7Ci0gICAgICAgICAg
ICByZXR1cm4gcGFydCA9PSBwcmVzc2VkUGFydDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ib3Jpem9udGFsOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9WZXJ0aWNhbDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0RlY3JlbWVudDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tC
dXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJh
Y2tUcmFja1BhcnQ7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luY3JlbWVudDoK
LSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0g
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1N0YXJ0OgotICAgICAgICAgICAgcmV0dXJu
IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9FbmQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFy
dCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNr
UGFydDsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRG91YmxlQnV0dG9uOiB7Ci0g
ICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBz
Y3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChw
YXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0
dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQgfHwgYnV0dG9uc1Bs
YWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKLSAgICAgICAgICAgIGlmIChw
YXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQg
fHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0
b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfSAKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU2luZ2xl
QnV0dG9uOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQ
bGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKLSAgICAg
ICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJk
QnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcGFydCA9PSBGb3J3YXJk
VHJhY2tQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNj
cm9sbGJhckJ1dHRvbnNTaW5nbGU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm9CdXR0b246IHsKLSAgICAgICAg
ICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJh
ci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0g
QmFja1RyYWNrUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9
PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1
dHRvbnNEb3VibGVFbmQ7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0
KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1
dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0
YXJ0OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKQEAgLTMwNDYsNyArMTkyMiw3
IEBAIFJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIEMKICAgICAsIG1fc2Vs
ZWN0b3Ioc2VsZWN0b3IpCiAgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yLT5zcGVjaWZpY2l0
eSgpKQogICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1faGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2th
YmxlU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
U2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpCiAgICAg
LCBtX2hhc011bHRpcGFydFNlbGVjdG9yKHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpCiAgICAgLCBt
X2hhc1RvcFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRj
aGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IpKQogewpAQCAtMzU4Myw3ICsyNDU5LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIAogICAgIGlk
ID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxl
LT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7CiAKLSAgICBpZiAobV9jaGVj
a2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3Bl
cnR5KGlkKSkgeworICAgIGlmIChtX2NoZWNrZXIuaXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFz
cygpICYmICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpIHsKICAgICAgICAgLy8gTGlt
aXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhv
bm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzE4LDcgKzI1
OTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAKICAgICAg
ICAgRVJlc2l6ZSByID0gUkVTSVpFX05PTkU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KSkKICAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgp
ID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByID0gKnByaW1pdGl2ZVZhbHVlOwpAQCAtMzc2Niw3ICsyNjQyLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgaWYgKG1fcGFyZW50Tm9k
ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUobV9wYXJl
bnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3Jk
KG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3
b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAg
Ly8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCkBAIC0zNzc5LDE0ICsyNjU1LDE0IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlWExhcmdlOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgog
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAg
ICAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3Jk
KG1fY2hlY2tlci5kb2N1bWVudCgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERl
c2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgotICAgICAgICAgICAgICAgICAgICBzaXpl
ID0gbGFyZ2VyRm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLm1fZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9sZFNp
emUsIG1fY2hlY2tlci5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbGVyOgotICAg
ICAgICAgICAgICAgICAgICBzaXplID0gc21hbGxlckZvbnRTaXplKG9sZFNpemUsIG1fY2hlY2tl
ci5tX2RvY3VtZW50LT5pblF1aXJrc01vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNpemUg
PSBzbWFsbGVyRm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLmRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzgzNyw3ICsyNzEzLDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBlbHNlIGlm
IChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkgewogICAgICAgICAg
ICAgZG91YmxlIG11bHRpcGxpZXIgPSB6b29tRmFjdG9yOwogICAgICAgICAgICAgaWYgKG1fc3R5
bGUtPnRleHRTaXplQWRqdXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAg
ICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBtdWx0aXBsaWVyKTsKQEAg
LTQwNTQsNyArMjkzMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQg
Zm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAg
IC8vIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAg
ICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5
d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRT
aXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVu
dCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEs
IGZhbHNlKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShp
bml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFsRGVz
Yy5maXJzdEZhbWlseSgpLmZhbWlseUlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOwpAQCAtNDA3OCw3
ICsyOTU0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNv
bnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAg
ICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAg
ICAgICBpZiAoY29udGVudFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc0Zv
bnRGYW1pbHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBmYWNlID0gc3RhdGljX2Nhc3Q8
Rm9udEZhbWlseVZhbHVlKj4oY29udGVudFZhbHVlKS0+ZmFtaWx5TmFtZSgpOwpAQCAtNDEzNCw3
ICszMDEwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAg
ICAgICAvLyBJZiBjdXJyRmFtaWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9u
ZSBmYW1pbHkgb24gdGhpcyBkZXNjcmlwdGlvbi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsK
ICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVz
Y3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1
bHRTaXplKQotICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBm
b250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
Zm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwg
KyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWRE
ZWZhdWx0U2l6ZSkpOwogCiAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgfQpAQCAtNDE5MCw3ICszMDY2LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShS
ZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgICAgICBzZXRab29tKFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBmbG9hdCBkb2Na
b29tID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnpvb20oKTsK
KyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+em9vbSgpOwogICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShkb2Na
b29tKTsKICAgICAgICAgICAgIHNldFpvb20oZG9jWm9vbSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UpIHsKQEAgLTQyMjYsMjEgKzMxMDIsMjEgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAw
OwogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAg
ICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlv
biwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2
ZSBzZXR0aW5ncwogICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpTdGFuZGFyZEZhbWlseSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVy
aW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnByaW50
aW5nKCkpOwotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1p
bHkgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5
KCk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVj
a2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KS0+c3RhbmRhcmRGb250RmFtaWx5KCk7CiAgICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9udEZh
bWlseS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RG
YW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKICAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVN
ZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgICAgIHNldEZvbnRTaXplKGZv
bnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBD
U1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNj
cmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1
ZU1lZGl1bSwgZmFsc2UpKTsKICAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogICAgICAgICAgICAgbV9saW5lSGVpZ2h0
VmFsdWUgPSAwOwogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CkBAIC00MjU0LDE1ICszMTMwLDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQKICAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0
aGVtZSBkaWQgYW55dGhpbmcuICBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9u
dC4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewog
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50
ZXIgZm9udCBzZXR0aW5ncyBhcmUgdXBkYXRlZC4KLSAgICAgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBz
dHlsZSByZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFt
ZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdzCiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAg
ICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2Vy
Lm1fZG9jdW1lbnQtPnByaW50aW5nKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CiAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIubV9kb2N1bWVudCwgbV9zdHlsZS5nZXQo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlz
QWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pv
b21SdWxlcygpKSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9u
dFZhbHVlKCkpIHsKQEAgLTQ4MDksNyArMzY4NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eShpbnQKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS82NTYxMDc3PiBXb3JrIGFyb3VuZCB0aGUgU3RvY2tzIHdpZGdl
dCdzIG1pc3VzZSBvZiB0aGUKICAgICAgICAgLy8gcG9pbnRlci1ldmVudHMgcHJvcGVydHkgYnkg
bm90IGFwcGx5aW5nIGl0IGluIERhc2hib2FyZC4KLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICBpZiAo
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTU4MzcsOSArNDcxMyw5IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3JHZW5lcmljRmEKICAgICAvLyBtdWx0aXBs
eWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgogICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKGNoaWxk
Rm9udC5rZXl3b3JkU2l6ZSgpKQotICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1f
Y2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNp
emUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBzaXpl
ID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21h
bGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1
bHRTaXplKCkpOwogICAgIGVsc2UgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2No
ZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVk
U2NhbGVGYWN0b3IgPSBzZXR0aW5ncwogICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4o
c2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250
U2l6ZSgpCiAgICAgICAgICAgICA6IDE7CkBAIC01ODU2LDcgKzQ3MzIsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2VuZXJpY0ZhCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNl
dEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQog
ewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUobV9jaGVja2VyLm1fZG9jdW1lbnQsIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUo
bV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBDU1NT
dHlsZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCog
ZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQg
c3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC02MDYyLDcgKzQ5MzgsNyBA
QCBDb2xvciBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb2xvckZyb21QcmltCiAgICAgICAgIGlmIChp
ZGVudCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NW
YWx1ZVdlYmtpdExpbmspCi0gICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYm
IG1fY2hlY2tlci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID8gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xv
cigpOworICAgICAgICAgICAgY29sID0gbV9lbGVtZW50LT5pc0xpbmsoKSAmJiBtX2NoZWNrZXIu
aXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcygpID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52
aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwog
ICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCiAgICAg
ICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwog
ICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKQpA
QCAtNjA5NiwyNyArNDk3Miw2IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6YWZmZWN0ZWRCeVZp
ZXdwb3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9saW5r
c0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICBu
b2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNp
dGVkSGFzaCkKLXsKLSAgICBpZiAoIW1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRh
aW5zKHZpc2l0ZWRIYXNoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAg
ICAgICAgaWYgKGF0dHIgJiYgdmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwg
KmF0dHIpID09IHZpc2l0ZWRIYXNoKQotICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwotICAgIH0KLX0KLQogc3RhdGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDk0NTIxKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVy
eUV4cC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVj
a2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Jsb29tRmlsdGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtODQsMzA2ICs4NSwyNzcgQEAgcHVi
bGljOgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9OwogCi0gICAgLy8gVGhpcyBjbGFzcyBzZWxlY3Rz
IGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24g
b2Ygc3R5bGVzaGVldHMuCi0gICAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvciB7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NTdHlsZUFwcGx5UHJvcGVydHk7Ci0gICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENTU1N0eWxlU2VsZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIENTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqLCBTdHlsZVNoZWV0TGlz
dCogYXV0aG9yU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzKTsKLSAgICAgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHls
ZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29r
dXBzLgotICAgICAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICAgICAg
dm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKLQotCi0gICAgICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJv
b3REZWZhdWx0ID0gZmFsc2UsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7
Ci0gICAgICAgIAotICAgICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1l
bnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7Ci0KLSAgICAgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBtYXRj
aFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7Ci0KLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLQotICAg
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
ZW50U3R5bGU7IH0KLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICAgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0K
LSAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHtyZXR1cm4g
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250
RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0
eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQotICAg
ICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRa
b29tKGYpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICAgICAgdm9pZCBz
ZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4
dFNpemVBZGp1c3QoYik7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdEZvclN0
eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRv
SWQgPSBOT1BTRVVETyk7Ci0gICAgICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAg
ICAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICAgICAgYm9vbCBtYXRj
aGVzU2libGluZ1J1bGVzKCk7Ci0gICAgICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVu
dCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7Ci0gICAgICAgIE5v
ZGUqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNv
bnN0OwotICAgICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKikgY29uc3Q7
Ci0gICAgICAgIAotICAgICAgICB2b2lkIHB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBh
cmVudCk7Ci0gICAgICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOwotCi0gICAgICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqLCBLZXlmcmFtZVZhbHVlJik7Ci0KLSAgICBw
dWJsaWM6Ci0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBv
ZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxl
bWVudCkuCi0gICAgICAgIGVudW0gQ1NTUnVsZUZpbHRlciB7Ci0gICAgICAgICAgICBVQUFuZFVz
ZXJDU1NSdWxlcyAgID0gMSA8PCAxLAotICAgICAgICAgICAgQXV0aG9yQ1NTUnVsZXMgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgICAgIEVtcHR5Q1NTUnVsZXMgICAgICAgPSAxIDw8IDMsCi0gICAg
ICAgICAgICBDcm9zc09yaWdpbkNTU1J1bGVzID0gMSA8PCA0LAotICAgICAgICAgICAgQWxsQnV0
RW1wdHlDU1NSdWxlcyA9IFVBQW5kVXNlckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9z
c09yaWdpbkNTU1J1bGVzLAotICAgICAgICAgICAgQWxsQ1NTUnVsZXMgICAgICAgICA9IEFsbEJ1
dEVtcHR5Q1NTUnVsZXMgfCBFbXB0eUNTU1J1bGVzLAotICAgICAgICB9OwotICAgICAgICBQYXNz
UmVmUHRyPENTU1J1bGVMaXN0PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIFBz
ZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwot
Ci0gICAgICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0
byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KLSAgICAgICAg
Ly8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRl
ZmF1bHQgKG1lZGl1bSkuCi0gICAgICAgIHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQo
RG9jdW1lbnQqLCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsK
LQotICAgICAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3
aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KLSAgICAgICAgc3Rh
dGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29s
IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgcHJpdmF0ZToKLQotICAgICAgICAv
LyBXaGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdp
bGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKLSAgICAgICAgLy8gdGFibGUs
IGFuZCBmYWlsaW5nIHRoYXQsIHdpbGwgc2ltcGx5IG11bHRpcGx5IGJ5IDEuMi4KLSAgICAgICAg
ZmxvYXQgbGFyZ2VyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBjb25zdDsK
LQotICAgICAgICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5
d29yZCAic21hbGxlciIuCi0gICAgICAgIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXpl
LCBib29sIHF1aXJrc01vZGUpIGNvbnN0OwotCi0gICAgcHVibGljOgotICAgICAgICB2b2lkIHNl
dFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNl
ZCBieSB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgotCi0gICAg
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0
eWxlKik7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1
dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBV
c2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lk
IHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwotCi0gICAgICAgIHN0
YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJl
bmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9v
bCB1c2VTVkdab29tUnVsZXMpOwotCi0gICAgcHVibGljOgotICAgICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpOwotCi0gICAgICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlKikgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0
dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAKLSAgICAgICAgQ1NTRm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQo
KTsgfQotCi0gICAgICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7Ci0KLSAgICAgICAgYm9vbCBhZmZl
Y3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKLQotICAgICAgICB2b2lkIGFsbFZpc2l0ZWRT
dGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7IH0KLSAg
ICAgICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1f
Y2hlY2tlci52aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQotCi0gICAgICAgIHZv
aWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1
bGUpOwotICAgICAgICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7
Ci0KLSAgICAgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcy5zaWJsaW5nUnVsZXM7IH0KLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlczsgfQotICAgICAgICBi
b29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2Vz
QmVmb3JlQWZ0ZXJSdWxlczsgfQotICAgICAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KLQotICAgICAgICBzdGF0aWMgYm9v
bCBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHls
ZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
b3V0T3BlcmF0aW9ucyk7Ci0KLSAgICAgICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgICAg
IEZlYXR1cmVzKCk7Ci0gICAgICAgICAgICB+RmVhdHVyZXMoKTsKLSAgICAgICAgICAgIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7Ci0gICAgICAgICAgICBPd25QdHI8UnVsZVNl
dD4gc2libGluZ1J1bGVzOwotICAgICAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0g
ICAgICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOwotICAgICAgICAgICAgYm9vbCB1
c2VzTGlua1J1bGVzOwotICAgICAgICB9OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBT
ZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKLQotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVz
IHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQg
Z2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgICAgICB2b2lkIGNoZWNr
Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7Ci0gICAgICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICAgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRq
dXN0KCk7Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7Ci0KLSAgICAg
ICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRS
dWxlcy5hcHBlbmQocnVsZSk7IH0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOwotCi0gICAgICAgIHZvaWQgbWF0Y2hS
dWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChj
b25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgYm9vbCBmYXN0UmVqZWN0
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hl
ZFJ1bGVzKCk7Ci0gICAgICAgIAotICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVs
ZURhdGEmKTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgICAgIHZv
aWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQg
ZW5kSW5kZXgpOwotCi0gICAgICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wg
aXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0g
ICAgICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5h
bWUpOwotICAgICAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVm
dFBhZ2UocGFnZUluZGV4KTsgfQotICAgICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5k
ZXgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7
Ci0gICAgICAgIAotICAgICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKLSAgICAg
ICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwotCi0gICAgICAgIEZlYXR1cmVzIG1fZmVh
dHVyZXM7Ci0KLSAgICAgICAgc3RydWN0IFBhcmVudFN0YWNrRnJhbWUgewotICAgICAgICAgICAg
UGFyZW50U3RhY2tGcmFtZSgpIHt9Ci0gICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1l
bnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSB7fQotICAgICAgICAgICAgRWxlbWVudCog
ZWxlbWVudDsKLSAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hl
czsKLSAgICAgICAgfTsKLSAgICAgICAgVmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50
U3RhY2s7Ci0gICAgICAgIAotICAgICAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0
aGUgZmlsdGVyLCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAu
MiUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAx
MjsKLSAgICAgICAgT3duUHRyPEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4gPiBtX2Fu
Y2VzdG9ySWRlbnRpZmllckZpbHRlcjsKLQotICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNl
OwotICAgICAgICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICAgICAgRmlsbExheWVyIG1f
YmFja2dyb3VuZERhdGE7Ci0gICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCi0gICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tl
eWZyYW1lc1J1bGU+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKLSAgICAgICAgS2V5ZnJhbWVzUnVsZU1h
cCBtX2tleWZyYW1lc1J1bGVNYXA7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZW5k
ZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOyB9Ci0KLSAgICAgICAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKLSAgICAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgICAgIHB1YmxpYzoK
LSAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2lu
Zyk7Ci0KLSAgICAgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1l
bnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgICAg
ICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCos
IFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3Vu
dGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0
eWxlID0gMCkgY29uc3Q7Ci0gICAgICAgICAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxl
Y3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7Ci0gICAgICAgICAgICBib29sIGNoZWNrU2Nyb2xsYmFy
UHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7
Ci0gICAgICAgICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciopOwotICAgICAgICAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7Ci0KLSAgICAgICAgICAgIEVJbnNp
ZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKLSAgICAg
ICAgICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0OwotICAgICAgICAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7
Ci0gICAgICAgICAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhh
c2gpOwotCi0gICAgICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICAgICAgICAgIGJv
b2wgbV9zdHJpY3RQYXJzaW5nOwotICAgICAgICAgICAgYm9vbCBtX2NvbGxlY3RSdWxlc09ubHk7
Ci0gICAgICAgICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0gICAgICAgICAgICBQc2V1ZG9J
ZCBtX3BzZXVkb1N0eWxlOwotICAgICAgICAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwotICAg
ICAgICAgICAgbXV0YWJsZSBib29sIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOwotICAgICAg
ICAgICAgbXV0YWJsZSBib29sIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7Ci0gICAgICAgICAg
ICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRG
b3JWaXNpdGVkU3RhdGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotICAgICAgICBTdHlsZUltYWdlKiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOwotCi0gICAgICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGlu
dCYgbGFzdFVBUnVsZSk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgICAgICB2b2lk
IGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotCi0gICAgICAgIHZvaWQgbWFwRmlsbEF0dGFj
aG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9p
ZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAg
ICAgICB2b2lkIG1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBG
aWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAg
ICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
Ci0gICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRl
bGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGly
ZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRp
b25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1h
dGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQg
bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1h
cEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lk
IG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZv
aWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLQot
ICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwg
TmluZVBpZWNlSW1hZ2UmKTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFn
ZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0KLSAgICAgICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZv
aWQgYXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgYXBwbHlQ
YWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVlKik7Ci0gICAgICAgIGJvb2wgcGFnZVNpemVGcm9tTmFt
ZShDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgTGVuZ3RoJiB3aWR0aCwg
TGVuZ3RoJiBoZWlnaHQpOwotICAgICAgICBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKSBjb25z
dDsKLSAgICAgICAgTGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gpIGNvbnN0OworLy8gVGhp
cyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBv
biBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCitjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIHsK
KyAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVBcHBseVByb3BlcnR5OworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENTU1N0eWxlU2VsZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1
dGhvclNoZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAorICAgICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKKyAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpOworICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7CisgICAgCisgICAgLy8gVXNpbmcgdGhlc2Ug
ZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNo
aWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1cHMuCisgICAgdm9pZCBwdXNoUGFyZW50
KEVsZW1lbnQqIHBhcmVudCk7CisgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KTsK
KworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
IGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1
ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSwgYm9vbCBtYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IGZhbHNlKTsKKyAgICAKKyAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5p
bWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7
CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNl
dWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBi
b29sIG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2UpOworCisgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOworCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxl
OyB9CisgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50OyB9CisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIHsg
cmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgRm9udERlc2NyaXB0aW9u
IHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHtyZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9m
b250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0aXZl
Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20o
Zik7IH0KKyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8
PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQg
aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CisgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7
CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgYm9vbCBtYXRjaGVz
U2libGluZ1J1bGVzKCk7CisgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJl
bnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKKyAgICBOb2RlKiBmaW5kU2li
bGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBi
b29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKikgY29uc3Q7CisgICAgCisgICAgdm9p
ZCBwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFy
ZW50U3RhY2tGcmFtZSgpOworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JL
ZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSos
IEtleWZyYW1lVmFsdWUmKTsKKworcHVibGljOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBn
aXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVu
dCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCisgICAgZW51bSBDU1NSdWxlRmlsdGVyIHsKKyAgICAg
ICAgVUFBbmRVc2VyQ1NTUnVsZXMgICA9IDEgPDwgMSwKKyAgICAgICAgQXV0aG9yQ1NTUnVsZXMg
ICAgICA9IDEgPDwgMiwKKyAgICAgICAgRW1wdHlDU1NSdWxlcyAgICAgICA9IDEgPDwgMywKKyAg
ICAgICAgQ3Jvc3NPcmlnaW5DU1NSdWxlcyA9IDEgPDwgNCwKKyAgICAgICAgQWxsQnV0RW1wdHlD
U1NSdWxlcyA9IFVBQW5kVXNlckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdp
bkNTU1J1bGVzLAorICAgICAgICBBbGxDU1NSdWxlcyAgICAgICAgID0gQWxsQnV0RW1wdHlDU1NS
dWxlcyB8IEVtcHR5Q1NTUnVsZXMsCisgICAgfTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUg
PSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVz
VG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7CisKKyAgICAvLyBHaXZlbiBhIENTUyBr
ZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlz
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxl
ZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCisgICAgc3RhdGljIGZs
b2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGludCBrZXl3b3JkLCBib29sIHNob3Vs
ZFVzZUZpeGVkRGVmYXVsdFNpemUpOworCisgICAgLy8gR2l2ZW4gYSBmb250IHNpemUgaW4gcGl4
ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3ZWVuIDEg
YW5kIDcuCisgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhl
bEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOworCitwcml2YXRlOgor
CisgICAgLy8gV2hlbiB0aGUgQ1NTIGtleXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5j
dGlvbiB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggd2l0aGluIHRoZSBrZXl3b3JkCisgICAgLy8gdGFi
bGUsIGFuZCBmYWlsaW5nIHRoYXQsIHdpbGwgc2ltcGx5IG11bHRpcGx5IGJ5IDEuMi4KKyAgICBm
bG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0Owor
CisgICAgLy8gTGlrZSB0aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBmb3IgdGhlIGtleXdvcmQg
InNtYWxsZXIiLgorICAgIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1
aXJrc01vZGUpIGNvbnN0OworCitwdWJsaWM6CisgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRvY3VtZW50
IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7CisgICAgCisgICAgc3Rh
dGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgZmxv
YXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwg
RVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUpOwor
Citwcml2YXRlOgorICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
c2l6ZSk7CisKKyAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNw
ZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKKworcHVibGljOgorICAgIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzKCk7CisKKyAgICBDb2xvciBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZSopIGNvbnN0OworCisgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0
dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIENTU0ZvbnRTZWxlY3Rv
ciogZm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0K
KworICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1l
ZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CisKKyAgICBib29sIGFmZmVjdGVkQnlWaWV3cG9y
dENoYW5nZSgpIGNvbnN0OworCisgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBt
X2NoZWNrZXIuYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB2aXNpdGVkU3Rh
dGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3RhdGVD
aGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQorCisgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKFBhc3NS
ZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gcnVsZSk7CisgICAgdm9pZCBhZGRQYWdlU3R5
bGUoUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4pOworCisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXM7IH0KKyAgICBib29sIHVz
ZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGlu
ZVJ1bGVzOyB9CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNMaW5rUnVs
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KKworICAgIHN0
YXRpYyBib29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKworICAgIHN0cnVjdCBGZWF0dXJlcyB7CisgICAgICAg
IEZlYXR1cmVzKCk7CisgICAgICAgIH5GZWF0dXJlcygpOworICAgICAgICBIYXNoU2V0PEF0b21p
Y1N0cmluZ0ltcGwqPiBpZHNJblJ1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiBhdHRyc0luUnVsZXM7CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7
CisgICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZv
cmVBZnRlclJ1bGVzOworICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJp
dmF0ZToKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6
ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMg
Y2hhbmdlZC4gLWR3aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9v
bUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9p
ZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVs
ZW1lbnQqKTsKKworICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUp
IHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVkRGVj
bGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOworCisgICAgdm9pZCBt
YXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgYm9vbCBmYXN0UmVqZWN0U2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMo
KTsKKyAgICAKKyAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKKworICAg
IHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KKyAgICB2b2lkIGFwcGx5RGVjbGFyYXRpb25zKGJv
b2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsKKworICAgIHZvaWQg
bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgYm9vbCBpc0xlZnRQYWdlKGludCBw
YWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNGaXJzdFBh
Z2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5k
ZXgpIGNvbnN0OworICAgIAorICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOworICAg
IE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKKworICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7
CisKKyAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7CisgICAgICAgIFBhcmVudFN0YWNrRnJh
bWUoKSB7fQorICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDogZWxl
bWVudChlbGVtZW50KSB7fQorICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWZWN0
b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGFy
ZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKKyAgICAKKyAgICAvLyBXaXRoIDEwMCB1bmlx
dWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVyLCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0
aXZlIHJhdGUgb2YgfjAuMiUuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVy
S2V5Qml0cyA9IDEyOworICAgIE93blB0cjxCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+
ID4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJh
bmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tn
cm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4g
PiBLZXlmcmFtZXNSdWxlTWFwOworICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxl
TWFwOworCitwdWJsaWM6CisgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWls
YWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KKworICAgIFN0eWxlSW1h
Z2UqIHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZUltYWdl
KiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSop
OworCitwcml2YXRlOgorICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWls
YWJsZTsKKworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFz
dFVBUnVsZSk7CisgICAgdm9pZCB1cGRhdGVGb250KCk7CisgICAgdm9pZCBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKKworICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRl
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxs
T3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2
b2lkIG1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NW
YWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKworICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVs
YXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlv
bihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24o
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFu
aW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3Vu
dChBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmlt
YXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRp
b24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKKworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIHZvaWQgbWFwTmluZVBp
ZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBO
aW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisKKyAgICBi
b29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisKKyAg
ICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQ
YWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVlKik7CisgICAgYm9vbCBwYWdlU2l6ZUZyb21OYW1lKENT
U1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBMZW5ndGgmIHdpZHRoLCBMZW5n
dGgmIGhlaWdodCk7CisgICAgTGVuZ3RoIG1tTGVuZ3RoKGRvdWJsZSBtbSkgY29uc3Q7CisgICAg
TGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gpIGNvbnN0OwogI2lmIEVOQUJMRShTVkcpCi0g
ICAgICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBhcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqKTsKICNlbmRpZgogCi0gICAgICAg
IHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7
CiAKLSAgICAgICAgLy8gV2UgY29sbGVjdCB0aGUgc2V0IG9mIGRlY2xzIHRoYXQgbWF0Y2ggaW4g
fG1fbWF0Y2hlZERlY2xzfC4gIFdlIHRoZW4gd2FsayB0aGUKLSAgICAgICAgLy8gc2V0IG9mIG1h
dGNoZWQgZGVjbHMgZm91ciB0aW1lcywgb25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90
aGVycyBkZXBlbmQgb24gKGxpa2UgZm9udC1zaXplKSwKLSAgICAgICAgLy8gYW5kIHRoZW4gYSBz
ZWNvbmQgdGltZSBmb3IgYWxsIHRoZSByZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8g
dGhlIHNhbWUgdHdvIHBhc3NlcwotICAgICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMu
Ci0gICAgICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIDY0PiBtX21hdGNo
ZWREZWNsczsKLQotICAgICAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBt
YXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQg
Zm9yCi0gICAgICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBSdWxl
RGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKLQotICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IG1fcnVsZUxpc3Q7Ci0gICAgICAgIAotICAgICAgICBIYXNoU2V0PGludD4gbV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzOyAvLyBIYXNoIG9mIENTU1Byb3BlcnR5SURzCi0KLSAgICAgICAgT3duUHRy
PE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsKLQotICAgICAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1
ZG87Ci0KLSAgICAgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKLQotICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0
eWxlOwotICAgICAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgICAgICBF
bGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVu
dDsKLSAgICAgICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBDb250
YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRW
YWx1ZTsKLSAgICAgICAgYm9vbCBtX2ZvbnREaXJ0eTsKLSAgICAgICAgYm9vbCBtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlczsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NGb250U2VsZWN0
b3I+IG1fZm9udFNlbGVjdG9yOwotICAgICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOwotICAgICAgICBWZWN0b3I8
TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsK
KyAgICAvLyBXZSBjb2xsZWN0IHRoZSBzZXQgb2YgZGVjbHMgdGhhdCBtYXRjaCBpbiB8bV9tYXRj
aGVkRGVjbHN8LiAgV2UgdGhlbiB3YWxrIHRoZQorICAgIC8vIHNldCBvZiBtYXRjaGVkIGRlY2xz
IGZvdXIgdGltZXMsIG9uY2UgZm9yIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlcnMgZGVwZW5k
IG9uIChsaWtlIGZvbnQtc2l6ZSksCisgICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3Ig
YWxsIHRoZSByZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBh
c3NlcworICAgIC8vIGZvciBhbnkgIWltcG9ydGFudCBydWxlcy4KKyAgICBWZWN0b3I8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qLCA2ND4gbV9tYXRjaGVkRGVjbHM7CisKKyAgICAvLyBBIGJ1
ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50
LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCisgICAgLy8gbWVyZ2Ugc29ydGluZy4K
KyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisKKyAgICBS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CisgICAgCisgICAgSGFzaFNldDxpbnQ+IG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllczsgLy8gSGFzaCBvZiBDU1NQcm9wZXJ0eUlEcworCisgICAg
T3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRv
OworCisgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKKworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBSZW5k
ZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAg
ICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAgRUluc2lkZUxpbmsgbV9lbGVt
ZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBDU1NW
YWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAgICBib29s
IG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOworICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsK
KyAgICAKKyAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKKyAgICBW
ZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVT
dHlsZURlY2xzOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCi0gICAgICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9w
ZXJ0eSYgbV9hcHBseVByb3BlcnR5OwotICAgIH07CisgICAgY29uc3QgQ1NTU3R5bGVBcHBseVBy
b3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQg
SmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5p
Y2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
ZWxlY3RvckNoZWNrZXIuaCIKKworI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAi
Q1NTU2VsZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVs
ZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlRl
eHQuaCIKKworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCIKKyNlbmRpZgor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJYTGlua05hbWVzLmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKKyAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCisgICAgLCBtX3N0cmljdFBhcnNpbmcoc3RyaWN0UGFyc2luZykKKyAgICAsIG1fZG9j
dW1lbnRJc0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgLCBtX2lzQ29sbGVj
dGluZ1J1bGVzT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5bGUoTk9QU0VVRE8pCisgICAg
LCBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyhmYWxzZSkKKyAgICAsIG1faXNNYXRjaGluZ1Zp
c2l0ZWRQc2V1ZG9DbGFzcyhmYWxzZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBBdG9t
aWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlz
TGluaygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpOworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVy
biAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgCisjaWYgRU5BQkxF
KFNWRykKKyAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAm
ZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisjZW5kaWYK
KyAgICAKKyAgICByZXR1cm4gMDsKK30KKworRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAg
IEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7CisgICAgCisgICAgY29uc3QgQXRvbWljU3RyaW5n
KiBhdHRyID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsKKyAgICBpZiAoIWF0dHIgfHwgYXR0ci0+
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOworICAgIAorI2lmIFBMQVRG
T1JNKFFUKQorICAgIFZlY3RvcjxVQ2hhciwgNTEyPiB1cmw7CisgICAgdmlzaXRlZFVSTChtX2Rv
Y3VtZW50LT5iYXNlVVJMKCksICphdHRyLCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAgICAvLyBJZiB0aGUg
UXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUgaGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhhdmUgdG8g
ZmFsbGJhY2sKKyAgICAvLyB0byB0aGUgb2xkIGdsb2JhbCBoaXN0b3J5LgorICAgIFFXZWJIaXN0
b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFXZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJm
YWNlKCk7CisgICAgaWYgKGlmYWNlKQorICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3RvcnlDb250
YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwgdXJsLnNp
emUoKSkpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAor
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUo
KSk7CisgICAgaWYgKCFoYXNoKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsK
KyNlbHNlCisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5i
YXNlVVJMKCksICphdHRyKTsKKyAgICBpZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBJbnNpZGVV
bnZpc2l0ZWRMaW5rOworI2VuZGlmCisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNp
dGVkTGluazsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAgIG1f
bGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKKyAgICAKKyNpZiBVU0UoUExB
VEZPUk1fU1RSQVRFR0lFUykKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnZpc2l0
ZWRMaW5rU3RyYXRlZ3koKS0+aXNMaW5rVmlzaXRlZChwYWdlLCBoYXNoKSA/IEluc2lkZVZpc2l0
ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbHNlCisgICAgcmV0dXJuIHBhZ2UtPmdy
b3VwKCkuaXNMaW5rVmlzaXRlZChoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52
aXNpdGVkTGluazsKKyNlbmRpZgorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNr
YWJsZVNlbGVjdG9yKSBjb25zdAoreworICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKKyAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpKSB7CisgICAgICAgIC8vIGZhc3RDaGVja1NlbGVjdG9yIGFzc3VtZXMgY2xhc3Mg
YW5kIGlkIG1hdGNoIGZvciB0aGUgdG9wIHNlbGVjdG9yLgorICAgICAgICBpZiAoc2VsLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+
aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNz
TmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZv
clN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3Rvcihz
ZWwsIGVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1l
bnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOworfQor
CituYW1lc3BhY2UgeworICAgIAoraW5saW5lIGJvb2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBp
ZiAoIXNlbGVjdG9yLT5oYXNUYWcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7Cisg
ICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gZWxlbWVudC0+bG9j
YWxOYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICByZXR1
cm4gbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50LT5u
YW1lc3BhY2VVUkkoKTsKK30KKwordGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVt
ZW50KiwgQXRvbWljU3RyaW5nSW1wbCopPgoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1l
bnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVt
ZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQoreworICAgIEF0b21pY1N0
cmluZ0ltcGwqIHZhbHVlID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworICAgIGZvciAoOyBl
bGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlm
IChjaGVja1ZhbHVlKGVsZW1lbnQsIHZhbHVlKSAmJiBzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVu
dCwgc2VsZWN0b3IpKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0g
Q1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQpCisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3Ip
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0
b3I7CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0g
ZWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRp
b24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxlbWVu
dCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmICh0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIENo
aWxkIG9yIHN1YnNlbGVjdG9yIGNoZWNrIGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBt
YXRjaCBlbGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0aGUg
dmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2ggCisgICAgICAgICAgICAvLyB0
aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5nLgorICAgICAgICAgICAgaWYgKCF0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0
aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3Qg
Y2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVl
IGNoZWNraW5nIGFuY2VzdG9ycy4KKyAgICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1
YnNlbGVjdG9yOworICAgICAgICAgICAgZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKK3sKKyAgICByZXR1
cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyh2YWx1ZSk7Cit9CisKK2lubGluZSBi
b29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBs
KiB2YWx1ZSkgCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRG
b3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIGNo
ZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqKQoreworICAgIHJl
dHVybiB0cnVlOworfQorICAgIAorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNr
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIEFTU0VSVChpc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpOwor
ICAgIAorICAgIC8vIFRoZSB0b3Agc2VsZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMg
cnVsZSBoYXNoZXMgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCisg
ICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJz
ZWxlY3RvciA9IDA7CisgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50ID0gMDsKKyAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0
b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcikKKyAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgCisg
ICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikK
KyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAKKyAgICBz
ZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgCisgICAgLy8gV2Uga25vdyB0
aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0
b3IgY29tYmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAgICB3
aGlsZSAoc2VsZWN0b3IpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgewor
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6CisgICAgICAgICAgICAgICAgaWYg
KCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVt
ZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxl
bWVudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAgICAgICAg
ICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3Rvciwg
ZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpOb25lOgorICAgICAg
ICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZT4oc2Vs
ZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVj
dG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBpZiAoc2VsZWN0b3ItPnJl
bGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgc2VsZWN0b3ItPnJlbGF0aW9u
KCkgIT0gQ1NTU2VsZWN0b3I6OkNoaWxkICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpOb25lICYmIHNlbGVjdG9yLT5t
X21hdGNoICE9IENTU1NlbGVjdG9yOjpJZCAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxl
Y3Rvcjo6Q2xhc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisvLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5h
dG9ycworLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6CisvLyAqIFNlbGVjdG9y
TWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQorLy8g
KiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVs
ZW1lbnQgZQorLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQorU2VsZWN0b3JDaGVja2Vy
OjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rv
ciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNl
bGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1ZH
KQorICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAo
Y29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKKyAgICAvLyBiZWNhdXNlIGl0cyBjb250ZW50
cyBhcmUgbm90IHBhcnQgb2YgdGhlIGZvcm1hbCBkb2N1bWVudCBzdHJ1Y3R1cmUuCisgICAgaWYg
KGUtPmlzU1ZHU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7CisjZW5kaWYKKyAgICAKKyAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gK
KyAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNl
bGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxl
KSkKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgIAorICAgIC8vIFRo
ZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1hdGNoCisgICAgQ1NTU2VsZWN0b3I6OlJl
bGF0aW9uIHJlbGF0aW9uID0gc2VsLT5yZWxhdGlvbigpOworICAgIAorICAgIC8vIFByZXBhcmUg
bmV4dCBzZWwKKyAgICBzZWwgPSBzZWwtPnRhZ0hpc3RvcnkoKTsKKyAgICBpZiAoIXNlbCkKKyAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICAKKyAgICBpZiAocmVsYXRpb24gIT0g
Q1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNl
bGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQorICAgICAgICBpZiAobV9w
c2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1ZG8p
CisgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgCisgICAg
Ly8gQ2hlY2sgZm9yIG5lc3RlZCBsaW5rcy4KKyAgICBpZiAobV9pc01hdGNoaW5nVmlzaXRlZFBz
ZXVkb0NsYXNzICYmICFpc1N1YlNlbGVjdG9yKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgp
OworICAgICAgICBpZiAoY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygp
ICYmIGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICBpZiAoZW5jb3VudGVyZWRMaW5rKQorICAg
ICAgICAgICAgICAgIG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOyAvLyBU
aGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRoZSBzdHlsZSBiZWluZyByZXNvbHZlZCwgc28g
ZGlzYWJsZSBtYXRjaGluZy4KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbmNv
dW50ZXJlZExpbmsgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN3aXRjaCAo
cmVsYXRpb24pIHsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9
IGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5OworICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAg
ICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKKyAgICAgICAgeworICAgICAgICAgICAgQ29udGFpbmVy
Tm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseTsKKyAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAg
ICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBl
bmNvdW50ZXJlZExpbmspOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRp
cmVjdEFkamFjZW50OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5n
UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVu
dE5vZGUoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVs
ZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1
bGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQor
ICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIGlm
ICghbikKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAg
ICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAgICAgICAgbV9pc01h
dGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmsp
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6
CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5v
ZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBl
LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuKTsKKyAgICAgICAgICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xh
c3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwor
ICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKKyAgICAgICAg
ICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVk
by1lbGVtZW50CisgICAgICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xs
YmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1
dCBub3RoaW5nIGVsc2UpCisgICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhlIHBzZXVkbyBlbGVt
ZW50cy4KKyAgICAgICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVs
ZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0g
U0VMRUNUSU9OICYmCisgICAgICAgICAgICAgICAgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxi
YXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIg
fHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFt
aWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFy
ZW50U3R5bGUpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50Ogor
ICAgICAgICB7CisgICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpOworICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09IGUgfHwgIXNo
YWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihzaGFkb3dIb3N0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKK30KKwor
c3RhdGljIHZvaWQgYWRkTG9jYWxOYW1lVG9TZXQoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4q
IHNldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCit7CisgICAgc2V0LT5hZGQocU5hbWUu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKK30KKworc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+KiBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCgpCit7CisgICAgLy8g
VGhpcyBpcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIGluIEhUTUwgNC4wMSB3aXRoIHZhbHVlcyBt
YXJrZWQgYXMgIltDSV0iIG9yIGNhc2UtaW5zZW5zaXRpdmUKKyAgICAvLyBNb3ppbGxhIHRyZWF0
cyBhbGwgb3RoZXIgdmFsdWVzIGFzIGNhc2Utc2Vuc2l0aXZlLCB0aHVzIHNvIGRvIHdlLgorICAg
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBhdHRyU2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+OworICAgIAorICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2Vw
dF9jaGFyc2V0QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0QXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpZ25BdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlua0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGF4aXNBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBiZ2Nv
bG9yQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hhcnNldEF0dHIpOwor
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoZWNrZWRBdHRyKTsKKyAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBjbGVhckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIGNvZGV0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29s
b3JBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb21wYWN0QXR0cik7Cisg
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGVjbGFyZUF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGRlZmVyQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgZGlyQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlzYWJsZWRB
dHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBlbmN0eXBlQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZmFjZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRv
U2V0KGF0dHJTZXQsIGZyYW1lQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
aHJlZmxhbmdBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBodHRwX2VxdWl2
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ0F0dHIpOworICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmd1YWdlQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgbGlua0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IG1lZGlhQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbWV0aG9kQXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbXVsdGlwbGVBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBub2hyZWZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBub3Jlc2l6ZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IG5vc2hhZGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3dyYXBBdHRy
KTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWFkb25seUF0dHIpOworICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJlbEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIHJldkF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJ1bGVz
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2NvcGVBdHRyKTsKKyAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzY3JvbGxpbmdBdHRyKTsKKyAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCBzZWxlY3RlZEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIHNoYXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGFyZ2V0
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGV4dEF0dHIpOworICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHR5cGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCB2YWxpZ25BdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2
YWx1ZXR5cGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2bGlua0F0dHIp
OworICAgIAorICAgIHJldHVybiBhdHRyU2V0OworfQorCitzdGF0aWMgYm9vbCBodG1sQXR0cmli
dXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cikKK3sK
KyAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGh0bWxDYXNlSW5zZW5zaXRp
dmVBdHRyaWJ1dGVzU2V0ID0gY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQo
KTsKKyAgICBib29sIGlzUG9zc2libGVIVE1MQXR0ciA9ICFhdHRyLmhhc1ByZWZpeCgpICYmIChh
dHRyLm5hbWVzcGFjZVVSSSgpID09IG51bGxBdG9tKTsKKyAgICByZXR1cm4gaXNQb3NzaWJsZUhU
TUxBdHRyICYmIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlucyhhdHRy
LmxvY2FsTmFtZSgpLmltcGwoKSk7Cit9CisKK3N0YXRpYyBib29sIGF0dHJpYnV0ZVF1YWxpZmll
ZE5hbWVNYXRjaGVzKEF0dHJpYnV0ZSogYXR0cmlidXRlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBz
ZWxlY3RvckF0dHIpCit7CisgICAgaWYgKHNlbGVjdG9yQXR0ci5sb2NhbE5hbWUoKSAhPSBhdHRy
aWJ1dGUtPmxvY2FsTmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHNlbGVjdG9yQXR0ci5wcmVmaXgoKSA9PSBzdGFyQXRvbSB8fCBzZWxlY3RvckF0dHIubmFt
ZXNwYWNlVVJJKCkgPT0gYXR0cmlidXRlLT5uYW1lc3BhY2VVUkkoKTsKK30KKworc3RhdGljIGJv
b2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
cmlidXRlSXRlbS0+dmFsdWUoKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1hdGNoKSB7CisgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkV4YWN0OgorICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWxlY3Rv
clZhbHVlICE9IHZhbHVlIDogIWVxdWFsSWdub3JpbmdDYXNlKHNlbGVjdG9yVmFsdWUsIHZhbHVl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDogeworICAgICAgICAgICAgLy8gSWdub3JlIGVt
cHR5IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMgY29udGFpbmluZyBzcGFjZXMKKyAgICAgICAgICAg
IGlmIChzZWxlY3RvclZhbHVlLmNvbnRhaW5zKCcgJykgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3Rv
clZhbHVlLCBzdGFydFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZm91bmRQb3MgPT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kUG9zIHx8IHZhbHVlW2ZvdW5kUG9zIC0gMV0g
PT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFN0ciA9IGZvdW5kUG9z
ICsgc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFN0
ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJdID09ICcgJykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3VuZCBhIG1hdGNoLgorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBObyBtYXRjaC4gS2VlcCBs
b29raW5nLgorICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpDb250YWluOgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5jb250YWlucyhz
ZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVnaW46CisgICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0
c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKKyAgICAgICAgICAgIGlmICghdmFsdWUu
ZW5kc1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Okh5cGhlbjoKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5sZW5ndGgoKSA8IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKHNlbGVjdG9y
VmFsdWUsIGNhc2VTZW5zaXRpdmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIC8vIEl0IHRoZXkgc3RhcnQgdGhlIHNhbWUsIGNoZWNrIGZvciBleGFjdCBtYXRj
aCBvciBmb2xsb3dpbmcgJy0nOgorICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IHNl
bGVjdG9yVmFsdWUubGVuZ3RoKCkgJiYgdmFsdWVbc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKV0gIT0g
Jy0nKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgYW55
QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpN
YXRjaCBtYXRjaCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
QXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghYXR0cmlidXRlUXVhbGlmaWVkTmFtZU1hdGNoZXMoYXR0
cmlidXRlSXRlbSwgc2VsZWN0b3JBdHRyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBtYXRj
aCwgc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1
ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVk
TGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJl
bnRTdHlsZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoZSk7CisgICAgaWYgKCFlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZSwgc2VsKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0ZSgp
KSB7CisgICAgICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQorICAg
ICAgICAgICAgcmV0dXJuIGUtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KGUpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQorICAgICAgICAgICAg
cmV0dXJuIGUtPmhhc0lEKCkgJiYgZS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZh
bHVlKCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2Vs
LT5hdHRyaWJ1dGUoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNh
c2Ugd2VyZSBlbGVtZW50U3R5bGUgaXMgMC4KKyAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAo
IWUtPmlzU3R5bGVkRWxlbWVudCgpIHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUp
LT5pc01hcHBlZEF0dHJpYnV0ZShhdHRyKSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0g
cmVhZG9ubHlBdHRyKSkpCisgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlB
dHRyaWJ1dGVTZWxlY3RvcnMoKTsgLy8gU3BlY2lhbC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFk
b25seSIgYXR0cmlidXRlcyBzbyBpbnB1dCBmb3JtIGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4K
KyAgICAgICAgCisgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0
ZXModHJ1ZSk7CisgICAgICAgIGlmICghYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50
SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3Rh
dGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gpLCBhdHRyLCBzZWwtPnZh
bHVlKCksIGNhc2VTZW5zaXRpdmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykg
eworICAgICAgICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KKyAgICAgICAgaWYgKHNlbC0+cHNl
dWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKKyAgICAgICAgICAgIEFTU0VS
VChzZWwtPnNlbGVjdG9yTGlzdCgpKTsKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1
YlNlbCA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0gc3Vi
U2VsLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0
LiBJIGRvbid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKKyAgICAgICAgICAgICAgICAvLyBy
ZXN0cmljdGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgorICAgICAg
ICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3Vycwor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rv
cjo6UHNldWRvTm90KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWNo
ZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJl
ZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZHlu
YW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JT
dHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHlu
YW1pY1BzZXVkbyA9PSBSRVNJWkVSKSkgeworICAgICAgICAgICAgLy8gQ1NTIHNjcm9sbGJhcnMg
bWF0Y2ggYSBzcGVjaWZpYyBzdWJzZXQgb2YgcHNldWRvIGNsYXNzZXMsIGFuZCB0aGV5IGhhdmUg
c3BlY2lhbGl6ZWQgcnVsZXMgZm9yIGVhY2gKKyAgICAgICAgICAgIC8vIChzaW5jZSB0aGVyZSBh
cmUgbm8gZWxlbWVudHMgaW52b2x2ZWQpLgorICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xs
YmFyUHNldWRvQ2xhc3Moc2VsLCBkeW5hbWljUHNldWRvKTsKKyAgICAgICAgfSBlbHNlIGlmIChk
eW5hbWljUHNldWRvID09IFNFTEVDVElPTikgeworICAgICAgICAgICAgaWYgKHNlbC0+cHNldWRv
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0
aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBz
ZXVkbyBjbGFzcyBjaGVja2luZy4KKyAgICAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkg
eworICAgICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgorICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTm90OgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5
IGhhbmRsZWQgdXAgYWJvdmUuCisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bXB0eTogeworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG4gPSBlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9k
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19j
YXN0PFRleHQqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPmRh
dGEoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxl
cygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKKyAgICAgICAg
ICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFu
IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVu
dE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1Np
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVz
T25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxk
UnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHls
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxk
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZU
eXBlOiB7CisgICAgICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJz
dCBlbGVtZW50IG9mIGl0cyB0eXBlCisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUo
KSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0
Q2hpbGQ6IHsKKyAgICAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3Qg
Y2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1l
bnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFu
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVz
T25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVs
ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0
ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZTog
eworICAgICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1l
bnQgb2YgaXRzIHR5cGUKKyAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXND
b2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJl
bnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5p
c2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOiB7CisgICAgICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgbGFzdENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXN0Q2hpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRT
dHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxh
c3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYg
bGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5
cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWxlY3RvciBpcyB2ZXJ5IHNs
b3cuCisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJl
bnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1
bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFy
c2luZ0NoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aENoaWxkOiB7CisgICAgICAgICAgICAgICAgaWYg
KCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IG4tPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBz
ID8gcy0+Y2hpbGRJbmRleCgpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnBy
ZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVt
ZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRTdHlsZS0+c2V0Q2hpbGRJbmRleChjb3VudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZU
eXBlOiB7CisgICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3Vu
dCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBl
LT50YWdRTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50
UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVz
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b050aExhc3RDaGlsZDogeworICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50
U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNl
bC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaW50
IGNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRo
KGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1RhcmdldDoKKyAgICAgICAgICAgICAgICBpZiAo
ZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Bbnk6CisgICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3Ig
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNv
dW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rv
ck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgorICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGlu
aygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9MaW5rOgorICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIW1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b1Zpc2l0ZWQ6CisgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgfHwgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQ
c2V1ZG9WaXNpdGVkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6IHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0
eWxlKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFn
UnVsZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdS
dWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5k
ZXJlcigpLT5pc0RyYWdnaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAgICAgICAgICAgaWYgKGUgJiYgKChlLT5m
b2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkpIHx8IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXMp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogeworICAgICAg
ICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3VsZCBu
ZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAq
OmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuICBUaGlzIGlzIGltcG9ydGFudCBmb3Ig
c2l0ZXMgbGlrZSB3c2ouY29tLgorICAgICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcg
fHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFn
KSkgfHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHls
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhv
dmVyUnVsZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0
eWxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZl
Y3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhvdmVy
ZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NT
U2VsZWN0b3I6OlBzZXVkb0hvdmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKKyAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3Vs
ZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFu
ZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYg
IWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5
bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJl
bmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGUtPmFjdGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9y
Y2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6
CisgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
dWxsUGFnZU1lZGlhOgorICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50KCkg
JiYgZS0+ZG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKTsKKyAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgorICAgICAgICAgICAgICAg
IGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5OiB7CisgICAg
ICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlz
VGV4dEZvcm1Db250cm9sKCkgJiYgZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6IHsK
KyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNvbnRyb2wo
KTsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgorICAgICAg
ICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOworICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmFsaWQ6IHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAg
ICAgICAgICAgIHJldHVybiBlLT53aWxsVmFsaWRhdGUoKSAmJiBlLT5pc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCk7CisgICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ludmFs
aWQ6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlk
aXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgICAgIHJldHVybiAoZS0+d2lsbFZhbGlkYXRl
KCkgJiYgIWUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFzVW5hY2NlcHRh
YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIH0gY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hlY2tl
ZDogeworICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gRXZlbiB0
aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3Qs
IHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB5b3Ug
Y2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlLiAgV2Ugd2lsbCBiZWhhdmUg
bGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdAorICAgICAgICAgICAgICAgIC8v
IG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1
ZG8uCisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlu
cHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlzSW5k
ZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgICAgICAgICAg
aWYgKGUtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIEhU
TUxQcm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxl
bWVudCo+KGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXByb2dyZXNz
LT5pc0RldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRF
bGVtZW50ICYmIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUm9vdDoKKyAgICAgICAgICAg
ICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYW5nOiB7CisgICAgICAgICAgICAgICAgQXRv
bWljU3RyaW5nIHZhbHVlID0gZS0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9IHNlbC0+YXJndW1lbnQoKTsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRo
KGFyZ3VtZW50LCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1ZVth
cmd1bWVudC5sZW5ndGgoKV0gIT0gJy0nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2Ny
ZWVuOgorICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxz
Y3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9jdW1lbnQncyBjdXJyZW50IGZ1bGxzY3JlZW4gCisgICAg
ICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwgdGhl
ICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllcyB0byAKKyAgICAgICAgICAgICAgICAv
LyB0aGF0IGVsZW1lbnQuIEFsc28sIGFuIDxpZnJhbWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVs
ZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3NpbmcgCisgICAgICAgICAgICAgICAgLy8gY29udGV4dCdz
IERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1bGwtc2NyZWVu
JyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgorICAgICAgICAgICAgICAgIGlmIChlLT5pc0ZyYW1lRWxl
bWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGUpLT5jb250
YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVu
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZSA9PSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KTsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxTY3Jl
ZW5UcmFuc2l0aW9uOgorICAgICAgICAgICAgICAgIGlmIChlICE9IGUtPmRvY3VtZW50KCktPndl
YmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5pbWF0
aW5nRnVsbFNjcmVlbigpOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVs
bFNjcmVlbkFuY2VzdG9yOgorICAgICAgICAgICAgICAgIHJldHVybiBlLT5jb250YWluc0Z1bGxT
Y3JlZW5FbGVtZW50KCk7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxs
U2NyZWVuRG9jdW1lbnQ6CisgICAgICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBp
biB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgdGhlICdmdWxsLXNjcmVlbi1kb2N1bWVudCcgcHNldWRv
Y2xhc3MgYXBwbGllcyAKKyAgICAgICAgICAgICAgICAvLyB0byBhbGwgZWxlbWVudHMgb2YgdGhh
dCBEb2N1bWVudC4KKyAgICAgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElz
RnVsbFNjcmVlbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0luUmFuZ2U6CisgICAgICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZS0+
aXNJblJhbmdlKCk7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PdXRPZlJh
bmdlOgorICAgICAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRp
dHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzT3V0T2ZSYW5nZSgp
OworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVW5rbm93bjoKKyAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdFBhcnNlZDoKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBp
ZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CisgICAgICAg
IGlmICghZWxlbWVudFN0eWxlICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBz
ZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGUtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52
YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9
IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChzZWwtPnBzZXVkb1R5cGUoKSk7CisgICAgICAgIGlmIChw
c2V1ZG9JZCA9PSBGSVJTVF9MRVRURVIpIHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9j
dW1lbnQgPSBlLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRVc2Vz
Rmlyc3RMZXR0ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHNldWRvSWQg
IT0gTk9QU0VVRE8pCisgICAgICAgICAgICBkeW5hbWljUHNldWRvID0gcHNldWRvSWQ7CisgICAg
fQorICAgIC8vICMjIyBhZGQgdGhlIHJlc3Qgb2YgdGhlIGNoZWNrcy4uLgorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbnN0Cit7CisgICAgUmVuZGVyU2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSBSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2
ZSgpOworICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0
eWxlUmVzb2x2ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhh
Y2sgZm9yIHJlc2l6ZXJzIGFuZCBzY3JvbGxiYXIgY29ybmVycy4gIEV2ZW50dWFsbHkgOndpbmRv
dy1pbmFjdGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAorICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQg
anVzdCBhcHBseSB0byBldmVyeXRoaW5nLgorICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAgICAgIHJldHVybiAhbV9kb2N1
bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICAKKyAgICBp
ZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChz
ZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKKyAgICBzd2l0Y2ggKHNl
bC0+cHNldWRvVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJs
ZWQ6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCk7CisgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgorICAgICAgICAgICAgcmV0dXJuICFzY3Jv
bGxiYXItPmVuYWJsZWQoKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6
IHsKKyAgICAgICAgICAgIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCk7CisgICAgICAgICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ICE9IE5vUGFydDsKKyAgICAgICAgICAg
IGlmIChwYXJ0ID09IFRyYWNrQkdQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBob3ZlcmVk
UGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IGhvdmVyZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQg
fHwgaG92ZXJlZFBhcnQgPT0gVGh1bWJQYXJ0OworICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0g
aG92ZXJlZFBhcnQ7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
QWN0aXZlOiB7CisgICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xs
YmFyLT5wcmVzc2VkUGFydCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQ
YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCAhPSBOb1BhcnQ7CisgICAg
ICAgICAgICBpZiAocGFydCA9PSBUcmFja0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHJlc3NlZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJh
Y2tQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBw
YXJ0ID09IHByZXNzZWRQYXJ0OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0hvcml6b250YWw6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb1ZlcnRpY2FsOgorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRGVjcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFy
dDsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5jcmVtZW50OgorICAgICAgICAg
ICAgcmV0dXJuIHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3RhcnQ6CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBC
YWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBw
YXJ0ID09IEJhY2tUcmFja1BhcnQ7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Vu
ZDoKKyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQg
PT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Eb3VibGVCdXR0b246IHsKKyAgICAgICAgICAg
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+
dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBCYWNrVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2Vt
ZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50ID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09
IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1l
bnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50ID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9IAorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TaW5nbGVCdXR0b246IHsK
KyAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9
IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYg
KHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQ
YXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0
dG9uc1NpbmdsZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob0J1dHRvbjogeworICAgICAgICAgICAgU2Nyb2xs
YmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgp
LT5idXR0b25zUGxhY2VtZW50KCk7CisgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrVHJhY2tQ
YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJh
ckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZDsKKyAgICAgICAgICAgIGlmIChwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ29ybmVyUHJlc2VudDoKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCktPmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBTZWxlY3RvckNo
ZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2xpbmtzQ2hlY2tl
ZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgIG5vZGUtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjp2
aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQoreworICAgIGlmICghbV9s
aW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRlZEhhc2gpKQorICAgICAg
ICByZXR1cm47CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcq
IGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOworICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVk
TGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0gdmlzaXRlZEhhc2gpCisg
ICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtk
ZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hh
bmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29w
eXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBTZWxlY3RvckNoZWNrZXJfaAorI2RlZmluZSBTZWxlY3Rv
ckNoZWNrZXJfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDU1NTZWxlY3RvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisK
K2NsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0
b3JDaGVja2VyKTsKK3B1YmxpYzoKKyAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29s
IHN0cmljdFBhcnNpbmcpOworCisgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRj
aGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKwor
ICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFz
dENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OworICAgIFNlbGVjdG9yTWF0Y2ggY2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVk
bywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUq
ID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIHN0
YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7Cisg
ICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25z
dCBFbGVtZW50Kik7CisKKyAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVu
dCogZWxlbWVudCkgY29uc3Q7CisgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKTsKKyAgICAK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9Cisg
ICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9
CisgICAgCisgICAgYm9vbCBpc0NvbGxlY3RpbmdSdWxlc09ubHkoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29sbGVjdGluZ1J1bGVzT25seTsgfQorICAgIHZvaWQgc2V0Q29sbGVjdGluZ1J1bGVzT25s
eShib29sIGIpIHsgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgPSBiOyB9CisgICAgCisgICAgYm9v
bCBpc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9pc01hdGNo
aW5nVmlzaXRlZFBzZXVkb0NsYXNzOyB9CisgICAgdm9pZCBzZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1
ZG9DbGFzcyhib29sIGIpIHsgbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gYjsgfQor
ICAgIAorICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9T
dHlsZTsgfQorICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvSWQpIHsgbV9w
c2V1ZG9TdHlsZSA9IHBzZXVkb0lkOyB9CisKKyAgICBib29sIGhhc1Vua25vd25Qc2V1ZG9FbGVt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOyB9CisgICAg
dm9pZCBjbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpIHsgbV9oYXNVbmtub3duUHNldWRv
RWxlbWVudHMgPSBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rv
cihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBp
c1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKKyAgICBib29sIGNoZWNrU2Nyb2xsYmFy
UHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7
CisKKyAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBl
bGVtZW50KSBjb25zdDsKKworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIGJvb2wgbV9z
dHJpY3RQYXJzaW5nOworICAgIGJvb2wgbV9kb2N1bWVudElzSFRNTDsKKyAgICBib29sIG1faXND
b2xsZWN0aW5nUnVsZXNPbmx5OworICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7CisgICAgbXV0
YWJsZSBib29sIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOworICAgIG11dGFibGUgYm9vbCBt
X2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtI
YXNoLCBMaW5rSGFzaEhhc2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOworfTsKKwor
aW5saW5lIEVJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5p
c0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CisgICAgcmV0dXJuIGRldGVy
bWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVsZW1lbnQpOworfQorCit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjMsNyArMTgyMyw3IEBAIGJvb2wg
RWxlbWVudDo6d2Via2l0TWF0Y2hlc1NlbGVjdG9yKGNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3Rv
ckNoZWNrZXIoZG9jdW1lbnQoKSwgc3RyaWN0UGFyc2luZyk7CisgICAgU2VsZWN0b3JDaGVja2Vy
IHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgpLCBzdHJpY3RQYXJzaW5nKTsKICAgICBmb3IgKENT
U1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2Vs
ZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7CiAgICAgICAgIGlmIChz
ZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgdGhpcykpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJl
dmlzaW9uIDk0NTIxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVl
cnkoTm9kZSogcm9vdE4KICAgICAsIG1fc2VsZWN0b3JDaGVja2VyKHJvb3ROb2RlLT5kb2N1bWVu
dCgpLCAhcm9vdE5vZGUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQogewogICAgIGZvciAo
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBz
ZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCi0gICAgICAgIG1fc2Vs
ZWN0b3JzLmFwcGVuZChTZWxlY3RvckRhdGEoc2VsZWN0b3IsIENTU1N0eWxlU2VsZWN0b3I6OlNl
bGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAg
ICAgIG1fc2VsZWN0b3JzLmFwcGVuZChTZWxlY3RvckRhdGEoc2VsZWN0b3IsIFNlbGVjdG9yQ2hl
Y2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CiB9CiAgICAgCiBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBTZWxlY3RvclF1ZXJ5OjpxdWVyeUFsbCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgJKHJldmlzaW9uIDk0NTIxKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2lmbmRlZiBTZWxlY3RvclF1ZXJ5X2gKICNkZWZpbmUgU2VsZWN0b3JRdWVyeV9oCiAKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3
ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBOb2RlKiBtX3Jvb3ROb2RlOwogICAgIFZl
Y3RvcjxTZWxlY3RvckRhdGE+IG1fc2VsZWN0b3JzOwotICAgIENTU1N0eWxlU2VsZWN0b3I6OlNl
bGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9z
ZWxlY3RvckNoZWNrZXI7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106464</attachid>
            <date>2011-09-06 12:21:47 -0700</date>
            <delta_ts>2011-09-06 14:35:43 -0700</delta_ts>
            <desc>patch, with build files</desc>
            <filename>split-selectorchecker-4.patch</filename>
            <type>text/plain</type>
            <size>176701</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU2VsZWN0b3JDaGVja2Vy
IG91dCBmcm9tIENTU1N0eWxlU2VsZWN0b3Igc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlIFNlbGVjdG9yQ2hlY2tlciB0byBTZWxlY3Rv
ckNoZWNrZXIuaC9jcHAKKyAgICAgICAgLSBNYWtlIHByaXZhdGUgZnVuY3Rpb25zIHByaXZhdGUK
KyAgICAgICAgLSBNYWtlIG1lbWJlcnMgcHJpdmF0ZSwgYWRkIGFjY2Vzc29ycworICAgICAgICAt
IE1vdmUgbV9zYW1lT3JpZ2luT25seSB0byBDU1NTdHlsZVNlbGVjdG9yIGFzIGl0IGlzIG5vdCB1
c2VkIGJ5IFNlbGVjdG9yQ2hlY2tlcgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cGFyZW50U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cm9vdEVsZW1lbnRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjplbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0Rm9udERlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpmb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnVzZXNTaWJsaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6dXNlc0ZpcnN0TGluZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnVzZXNCZWZvcmVBZnRlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnVzZXNMaW5rUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6UGFyZW50U3RhY2tGcmFtZTo6UGFyZW50U3RhY2tGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZU5vdFlldEF2YWlsYWJsZSk6CisgICAgICAgICogY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6YWRkTG9jYWxOYW1lVG9TZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6aHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjphbnlB
dHRyaWJ1dGVNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2Nyb2xsYmFyUHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2Vy
OjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpzdHJpY3RQYXJzaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNDb2xsZWN0aW5nUnVsZXNPbmx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6c2V0Q29sbGVjdGluZ1J1bGVzT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmlzTWF0Y2hpbmdWaXNpdGVk
UHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpzZXRNYXRj
aGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNr
ZXI6OnBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6c2V0
UHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpoYXNVbmtu
b3duUHNldWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpj
bGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6d2Via2l0TWF0Y2hlc1NlbGVjdG9yKToKKyAg
ICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
clF1ZXJ5OjpTZWxlY3RvclF1ZXJ5KToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5oOgor
CiAyMDExLTA5LTA2ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIFJFR1JFU1NJT04oOTQzNTMpOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbm90IHRo
cm90dGxlZCBpbiBjb21wb3NpdGluZyBwYXRoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTA0OCw2ICsxMDQ4LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
UkdCQ29sb3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuaCBcCisJU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJhc2UuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0NTg3KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE3LDYg
KzI0MTcsOCBAQAogICAgICAgICAgICAgJ2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwJywKICAgICAgICAgICAgICdjc3MvU1ZHQ1NTUGFyc2VyLmNwcCcsCiAgICAgICAgICAg
ICAnY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwJywKKyAgICAgICAgICAgICdjc3MvU2VsZWN0
b3JDaGVja2VyLmNwcCcsCisgICAgICAgICAgICAnY3NzL1NlbGVjdG9yQ2hlY2tlci5oJywKICAg
ICAgICAgICAgICdjc3MvU2hhZG93VmFsdWUuY3BwJywKICAgICAgICAgICAgICdjc3MvU2hhZG93
VmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlQmFzZS5jcHAnLApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTQ0Myw2ICs0NDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvTWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgXAogICAgIGNzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAg
XAogICAgIGNzcy9SR0JDb2xvci5jcHAgXAorICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwIFwK
ICAgICBjc3MvU2hhZG93VmFsdWUuY3BwIFwKICAgICBjc3MvU3R5bGVCYXNlLmNwcCBcCiAgICAg
Y3NzL1N0eWxlTGlzdC5jcHAgXApAQCAtMTQ1MCw2ICsxNDUxLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBcCiAgICAgY3NzL01lZGlhUXVlcnlNYXRj
aGVyLmggXAogICAgIGNzcy9SR0JDb2xvci5oIFwKKyAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmgg
XAogICAgIGNzcy9TaGFkb3dWYWx1ZS5oIFwKICAgICBjc3MvU3R5bGVCYXNlLmggXAogICAgIGNz
cy9TdHlsZUxpc3QuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTQ1ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMyNzQsNiArMzMyNzQs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Y3NzXFNlbGVjdG9yQ2hlY2tlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTZWxlY3RvckNoZWNrZXIuaCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNoYWRvd1ZhbHVlLmNwcCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTY2MCw2ICs1NjYwLDggQEAKIAkJRTQ0NjE0M0MwQ0Q2ODlDQzAwRkFEQTc1IC8qIEpTSFRNTFNv
dXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QjQyMzcyMENCRkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggKi87
IH07CiAJCUU0NDYxNDUxMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzMzBDQkZCNjA5
MDBBRjJFQ0UgLyogUmVuZGVyVmlkZW8uY3BwICovOyB9OwogCQlFNDQ2MTQ1MjBDRDY4QTM1MDBG
QURBNzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5oICov
OyB9OworCQlFNDRCNEJCMzE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIxMTQx
NjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwICovOyB9OworCQlFNDRCNEJCNDE0
MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIgLyogU2Vs
ZWN0b3JDaGVja2VyLmggKi87IH07CiAJCUU0NTMyMkFCMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxl
Y3RvclF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NTMyMkE5MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLzsgfTsK
IAkJRTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcwMDVB
MEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CiAJCUU0NjJBNEExMTEzRTcxQkUwMDRBNDIy
MCAvKiBJbnRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTI0MjMsNiAr
MTI0MjUsOCBAQAogCQlFNDQ2MTQxMTBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFFcnJvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQxMjBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1l
UmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGltZVJh
bmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEzMENENjgyNjkw
MEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEI0QkIx
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvckNoZWNrZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ1MzIyQTkxNDBDRTI2NzAwNUEwRjkyIC8q
IFNlbGVjdG9yUXVlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2VsZWN0b3JRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTMyMkFB
MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlbGVjdG9yUXVlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE5NTY2LDYgKzE5NTcwLDggQEAKIAkJCQlCQzc0REEzNjEwMTNGM0Y3MDA3
OTg3QUQgLyogUkdCQ29sb3IuY3BwICovLAogCQkJCUJDNzREQTM1MTAxM0YzRjcwMDc5ODdBRCAv
KiBSR0JDb2xvci5oICovLAogCQkJCTg1OEMzOEVGMEFBOEZERDEwMEIxODdBNCAvKiBSR0JDb2xv
ci5pZGwgKi8sCisJCQkJRTQ0QjRCQjExNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5jcHAgKi8sCisJCQkJRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5oICovLAogCQkJCUE4MEU2Q0NBMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5jcHAg
Ki8sCiAJCQkJQTgwRTZDQkUwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmggKi8sCiAJ
CQkJQTgwRTczNEMwQTE5OUM3NzAwN0ZCOEM1IC8qIFN0eWxlQmFzZS5jcHAgKi8sCkBAIC0yMzQ4
Myw2ICsyMzQ4OSw3IEBACiAJCQkJOUIwRkIxOTIxNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxp
ZGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJDQkY0RTE0MEYxQUJEMDAzODc5QkUgLyog
SlNXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNzRCMkYxNDBFQkVC
MjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTQ0QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc4QUQ2NzUxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1MkQzOEUxNDEzMTA0QjAwMzMwNUJEIC8qIEpTSFRNTFNw
YW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CkBAIC0yNjI5OCw2ICsyNjMwNSw3IEBA
CiAJCQkJOUIwRkIxOTExNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjc0QjMxMTQwRUJFRDgwMEVBREZBNiAv
KiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ0QjRC
QjMxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzhBRDY3NDE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3NTJEMzhEMTQxMzEwNEIwMDMzMDVCRCAvKiBKU0hUTUxTcGFuRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQAog
I2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5j
bHVkZSAiQ291bnRlci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkZvbnRGYW1pbHlWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNs
dWRlICJGb250VmFsdWUuaCIKQEAgLTYzLDEyICs2MiwxMCBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFByb2dyZXNz
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKICNp
bmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgpA
QCAtMTEwLDE3ICsxMDcsMTEgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtTdHJhdGVn
eS5oIgotI2VuZGlmCi0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAjaW5jbHVkZSAi
RGFzaGJvYXJkUmVnaW9uLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjZW5kaWYKIApAQCAtMzQwLDEx
ICszMzEsMTIgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAg
ICwgbV9lbGVtZW50KDApCiAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKICAgICAsIG1fZWxlbWVu
dExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICwgbV9mb250RGlydHkoZmFsc2UpCisgICAg
LCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCisg
ICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9u
dFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogICAgICwgbV9hcHBseVByb3BlcnR5KENTU1N0
eWxlQXBwbHlQcm9wZXJ0eTo6c2hhcmVkQ1NTU3R5bGVBcHBseVByb3BlcnR5KCkpCiB7Ci0gICAg
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0g
ICAgCiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIAog
ICAgIGlmICghZGVmYXVsdFN0eWxlKSB7CkBAIC02NDEsNyArNjMzLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZQogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKICAg
ICAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8g
b3VyIGxpc3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5
KSB7CisgICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQog
ICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxl
KCktPmRlY2xhcmF0aW9uKCkpOwogICAgIH0gZWxzZSB7CkBAIC03MTIsMTkgKzcwNCwxOSBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0CiAgICAgICAgIGlmIChjYW5V
c2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxlY3RvcihydWxlRGF0YSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBt
X2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpKQorICAgICAgICAgICAgaWYgKCFt
YXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwgbV9jaGVja2VyLmhhc1Vu
a25vd25Qc2V1ZG9FbGVtZW50cygpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGln
bm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUq
IHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWRl
Y2wgfHwgKCFkZWNsLT5sZW5ndGgoKSAmJiAhaW5jbHVkZUVtcHR5UnVsZXMpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5tX3NhbWVPcmlnaW5P
bmx5ICYmICFtX2NoZWNrZXIubV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dChydWxlLT5iYXNlVVJMKCkpKQorICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYg
IW1fY2hlY2tlci5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJ1bGUt
PmJhc2VVUkwoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7IAogICAgICAgICAgICAgLy8g
SWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmIAogICAg
ICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgotICAg
ICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIubV9w
c2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIu
bV9jb2xsZWN0UnVsZXNPbmx5KQorICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSA9PSBOT1BTRVVETykgeworICAgICAg
ICAgICAgICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1
ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKICAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKQEAgLTc1MiwxMyArNzQ0LDYg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKAogewogICAgIHN0ZDo6
c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFy
ZVJ1bGVzKTsKIH0KLQotaW5saW5lIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVj
dG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17
Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJu
IE5vdEluc2lkZUxpbms7Ci0gICAgcmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVs
ZW1lbnQpOwotfQogICAgIAogaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1l
bnQoRWxlbWVudCogZSkKIHsKQEAgLTc3NSw3ICs3NjAsNyBAQCBpbmxpbmUgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjppbml0RWxlbWVuCiAKIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQ
c2V1ZG9JZCBwc2V1ZG9JRCkKIHsKLSAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9IHBzZXVk
b0lEOworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JRCk7CiAKICAgICBtX3Bh
cmVudE5vZGUgPSBlID8gZS0+cGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkgOiAwOwog
CkBAIC03ODUsNyArNzcwLDcgQEAgaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZv
clN0eQogICAgICAgICBtX3BhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2Rl
LT5yZW5kZXJTdHlsZSgpIDogMDsKIAogICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRlclN0eWxlKiBkb2NTdHls
ZSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBkb2NTdHlsZSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5yZW5kZXJTdHlsZSgpOwogICAgIG1f
cm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxl
bWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwogCiAgICAgbV9zdHlsZSA9IDA7CkBAIC03
OTksOTkgKzc4NCw2IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHkK
ICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IEF0b21p
Y1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZS0+aXNM
aW5rKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KTsKLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gJmVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAg
ICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAmZWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiAwOwotfQotCi1DU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKLSAgICA6IG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3N0cmljdFBhcnNpbmcoc3RyaWN0UGFyc2luZykK
LSAgICAsIG1fY29sbGVjdFJ1bGVzT25seShmYWxzZSkKLSAgICAsIG1fc2FtZU9yaWdpbk9ubHko
ZmFsc2UpCi0gICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQotICAgICwgbV9kb2N1bWVudElz
SFRNTChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAsIG1faGFzVW5rbm93blBzZXVk
b0VsZW1lbnRzKGZhbHNlKQotICAgICwgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyhmYWxzZSkK
LXsKLX0KLQotRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAg
IEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7Ci0gICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5n
KiBhdHRyID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsKLSAgICBpZiAoIWF0dHIgfHwgYXR0ci0+
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOwotCi0jaWYgUExBVEZPUk0o
UVQpCi0gICAgVmVjdG9yPFVDaGFyLCA1MTI+IHVybDsKLSAgICB2aXNpdGVkVVJMKG1fZG9jdW1l
bnQtPmJhc2VVUkwoKSwgKmF0dHIsIHVybCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAgLy8gSWYgdGhlIFF0NC40IGlu
dGVyZmFjZSBmb3IgdGhlIGhpc3RvcnkgaXMgdXNlZCwgd2Ugd2lsbCBoYXZlIHRvIGZhbGxiYWNr
Ci0gICAgLy8gdG8gdGhlIG9sZCBnbG9iYWwgaGlzdG9yeS4KLSAgICBRV2ViSGlzdG9yeUludGVy
ZmFjZSogaWZhY2UgPSBRV2ViSGlzdG9yeUludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFjZSgpOwot
ICAgIGlmIChpZmFjZSkKLSAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5Q29udGFpbnMoUVN0
cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVybC5zaXplKCkpKSA/
IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKLQotICAgIExpbmtIYXNo
IGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Ci0gICAgaWYg
KCFoYXNoKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLSNlbHNlCi0gICAg
TGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJMKCksICph
dHRyKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5r
OwotI2VuZGlmCi0KLSAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAg
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLQotICAgIG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0
YXRlLmFkZChoYXNoKTsKLQotI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQotICAgIHJldHVy
biBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+dmlzaXRlZExpbmtTdHJhdGVneSgpLT5pc0xpbmtWaXNp
dGVkKHBhZ2UsIGhhc2gpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5r
OwotI2Vsc2UKLSAgICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5pc0xpbmtWaXNpdGVkKGhhc2gpID8g
SW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotI2VuZGlmCi19Ci0KLWJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3IpIGNvbnN0Ci17Ci0gICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAg
IGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
IHsKLSAgICAgICAgLy8gZmFzdENoZWNrU2VsZWN0b3IgYXNzdW1lcyBjbGFzcyBhbmQgaWQgbWF0
Y2ggZm9yIHRoZSB0b3Agc2VsZWN0b3IuCi0gICAgICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKSB7Ci0gICAgICAgICAgICBpZiAoIShlbGVtZW50LT5oYXNDbGFzcygp
ICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNv
bnRhaW5zKHNlbC0+dmFsdWUoKSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfSBlbHNlIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7Ci0gICAg
ICAgICAgICBpZiAoIShlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNv
bHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVu
dCk7Ci0gICAgfQotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgZHluYW1p
Y1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7Ci19Ci0KIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwogCkBAIC0xMTUxLDExICsx
MDQzLDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKGludCYKICAgICBt
YXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBm
YWxzZSk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUg
cXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYgKCFtX2NoZWNrZXIubV9zdHJpY3RQYXJz
aW5nKQorICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKICAgICAgICAgbWF0Y2hS
dWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7
CiAgICAgICAgIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChp
biB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2gg
cnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCi0gICAgaWYgKG1fY2hlY2tl
ci5tX2RvY3VtZW50LT5pc1ZpZXdTb3VyY2UoKSkgeworICAgIGlmIChtX2NoZWNrZXIuZG9jdW1l
bnQoKS0+aXNWaWV3U291cmNlKCkpIHsKICAgICAgICAgaWYgKCFkZWZhdWx0Vmlld1NvdXJjZVN0
eWxlKQogICAgICAgICAgICAgbG9hZFZpZXdTb3VyY2VTdHlsZSgpOwogICAgICAgICBtYXRjaFJ1
bGVzKGRlZmF1bHRWaWV3U291cmNlU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxz
ZSk7CkBAIC0xMjY2LDcgKzExNTgsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yCiAgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7
CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRj
aFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNl
dWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgbV9zdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKIApAQCAtMTQyMiw3ICsxMzE0LDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIH0KIAogICAgIC8vIFJlc2V0IHRoZSB2YWx1
ZSBiYWNrIGJlZm9yZSBhcHBseWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0IC13ZWJraXQtbGluayBr
bm93cyB3aGF0IGNvbG9yIHRvIHVzZS4KLSAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOworICAgIG1fY2hlY2tlci5zZXRNYXRj
aGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyk7CiAgICAgCiAg
ICAgLy8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3By
aWF0ZSBvcmRlci4gIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQogICAgIC8vIGhpZ2gtcHJpb3Jp
dHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHBy
b3BlcnRpZXMgZGVwZW5kIG9uLgpAQCAtMTYxMiw3ICsxNTA0LDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAg
bV9zdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogCi0gICAgbV9jaGVja2VyLm1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2No
ZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xh
c3MpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkg
b2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fs
a2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTYzNCw3ICsxNTI2LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIG1fbGluZUhlaWdodFZhbHVlID0g
MDsKICAgICAKICAgICAvLyBSZXNldCB0aGUgdmFsdWUgYmFjayBiZWZvcmUgYXBwbHlpbmcgcHJv
cGVydGllcywgc28gdGhhdCAtd2Via2l0LWxpbmsga25vd3Mgd2hhdCBjb2xvciB0byB1c2UuCi0g
ICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgLy8gSGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVz
LgogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5z
aXplKCkgLSAxKTsKQEAgLTE2ODAsNyArMTU3Miw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IENTU1N0eWxlU2VsZWN0b3IKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgaW5pdEZvclN0eWxlUmVz
b2x2ZShtX2NoZWNrZXIubV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RF
bGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIGluaXRG
b3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsg
Ly8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4K
IAogICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbV9zdHlsZS0+aW5o
ZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKQEAgLTE3NDIsNyArMTYzNCw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAgICAgICAgLy8gcHJvcGVydHku
CiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2Nr
IG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAg
IC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAgICAgIGlm
ICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZyAmJiBlKSB7CisgICAgICAgIGlmICghbV9jaGVj
a2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7CiAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFt
ZSh0ZFRhZykpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJMRV9DRUxM
KTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7CkBAIC0xNzk1
LDcgKzE2ODcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlCiAg
ICAgICAgICAgICBlbHNlIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IExJU1RfSVRFTSkgewogICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgV2luSUUgYnVnIHRoYXQgZmxvYXRlZCBsaXN0IGl0ZW1z
IGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2UnbGwgZW11bGF0ZSB0aGUgcXVpcmssCiAgICAgICAg
ICAgICAgICAgLy8gYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nICYmIHN0eWxlLT5pc0Zsb2F0aW5nKCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpICYmIHN0eWxlLT5pc0Zs
b2F0aW5nKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE5NTMsNyArMTg0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKICAgICBpZiAoIWUgfHwgIWUt
PmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSB0cnVlOworICAgIG1fY2hlY2tl
ci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOwogCiAgICAgaW5pdEVsZW1lbnQoZSk7CiAg
ICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CkBAIC0xOTcxLDE2ICsxODYz
LDE2IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKICAgICB9CiAK
ICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYg
QXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0g
IShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOworICAgICAgICBtX3NhbWVP
cmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOwogCiAg
ICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBpbnQg
Zmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7CiAgICAgICAgIG1hdGNo
UnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVs
ZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAotICAgICAgICBtX2NoZWNrZXIu
bV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFs
c2U7CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSA9IGZhbHNlOwor
ICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNlKTsKICAgIAogICAgIHJl
dHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KQEAgLTE5ODgsMTIgKzE4ODAsMTIgQEAgUGFz
c1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3RvcgogaW5saW5lIGJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiB7CiAg
ICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgbV9jaGVja2VyLm1faGFzVW5rbm93
blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CisgICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKCk7CiAKICAgICAvLyBMZXQgdGhlIHNsb3cgcGF0aCBoYW5kbGUgU1ZHIGFz
IGl0IGhhcyBzb21lIGFkZGl0aW9uYWwgcnVsZXMgcmVnYXJkaW5nIHNoYWRvdyB0cmVlcy4KICAg
ICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkgJiYgIW1fZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMg
bm90IGluY2x1ZGUgYW55IHBzZXVkbyBzZWxlY3RvcnMuCi0gICAgICAgIGlmIChtX2NoZWNrZXIu
bV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKG1fY2hlY2tlci5wc2V1ZG9T
dHlsZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAv
LyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRj
aGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAg
ICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNo
ZWNrIHRoZSBuYW1lc3BhY2UuCkBAIC0yMDAzLDEwMzAgKzE4OTUsMTQgQEAgaW5saW5lIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlYwogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4K
LSAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocnVsZURh
dGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwg
c3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7
Ci0gICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX2NoZWNr
ZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAgU2VsZWN0b3JDaGVja2Vy
OjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocnVsZURhdGEu
c2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwgc3R5
bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7Cisg
ICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1uYW1lc3BhY2Ugewot
Ci1pbmxpbmUgYm9vbCBzZWxlY3RvclRhZ01hdGNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmICghc2VsZWN0b3ItPmhhc1Rh
ZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBpZiAobG9jYWxOYW1lICE9
IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBlbGVtZW50LT5sb2NhbE5hbWUoKSkKKyAgICBpZiAo
bV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0
eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNl
VVJJKCk7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VV
UkkgPT0gZWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0gICAgCi10ZW1wbGF0ZSA8Ym9vbCBj
aGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBsKik+Ci1pbmxpbmUgYm9v
bCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBj
b25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1l
bnQpCi17Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUgPSBzZWxlY3Rvci0+dmFsdWUoKS5p
bXBsKCk7Ci0gICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwgdmFsdWUpICYmIHNlbGVj
dG9yVGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHsKLSAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCkKLSAgICAgICAgICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRv
cENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci0+
cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkg
PT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9y
U3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAg
ICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgICAg
ICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvcENoaWxkT3JTdWJzZWxlY3Rvcikg
ewotICAgICAgICAgICAgLy8gQ2hpbGQgb3Igc3Vic2VsZWN0b3IgY2hlY2sgZmFpbGVkLgotICAg
ICAgICAgICAgLy8gSWYgdGhlIG1hdGNoIGVsZW1lbnQgaXMgbnVsbCwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yIHdhcyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qgc2VsZWN0b3IgYW5kIGhhZCB0byBtYXRj
aCAKLSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBlbGVtZW50IHdlIHdlcmUgY2hlY2tpbmcu
Ci0gICAgICAgICAgICBpZiAoIXRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBUaGVyZSBtYXkgYmUg
b3RoZXIgbWF0Y2hlcyBkb3duIHRoZSBhbmNlc3RvciBjaGFpbi4KLSAgICAgICAgICAgIC8vIFJl
d2luZCB0byB0aGUgdG9wbW9zdCBjaGlsZCBvciBzdWJzZWxlY3RvciBhbmQgdGhlIGVsZW1lbnQg
aXQgbWF0Y2hlZCwgY29udGludWUgY2hlY2tpbmcgYW5jZXN0b3JzLgotICAgICAgICAgICAgc2Vs
ZWN0b3IgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICBlbGVtZW50ID0gdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxpbmUgYm9vbCBj
aGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCog
dmFsdWUpIAotewotICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHZh
bHVlKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFz
SUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSA9PSB2YWx1ZTsK
LX0KLQotaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3Ry
aW5nSW1wbCopCi17CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLX0KLQotYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoaXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLQotICAgIC8vIFRoZSB0b3Agc2VsZWN0
b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVsZSBoYXNoZXMgaGF2ZSBhbHJlYWR5IGhh
bmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCi0gICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMo
ZWxlbWVudCwgc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBD
U1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICBjb25zdCBFbGVtZW50
KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSAwOwotICAgIGlmIChzZWxlY3Rv
ci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9u
KCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NT
ZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0KLSAg
ICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0b3IgaGFzIGRlc2NlbmRhbnQsIGNoaWxk
IGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5IGFuZCBhbGwgY29tcG9uZW50cyBhcmUg
c2ltcGxlLgotICAgIHdoaWxlIChzZWxlY3RvcikgewotICAgICAgICBzd2l0Y2ggKHNlbGVjdG9y
LT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9y
LCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICAgICAgaWYgKCFm
YXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Np
bmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9y
U3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKSkgewotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6
OkRlc2NlbmRhbnQgJiYgc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OkNoaWxk
ICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoICE9
IENTU1NlbGVjdG9yOjpOb25lICYmIHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpJ
ZCAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBSZWN1cnNp
dmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycwotLy8gSXQgY2FuIHJldHVybiAz
IGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhlIHNl
bGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAg
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcg
b3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rv
ciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWRykKLSAg
ICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNvbmNl
cHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCi0gICAgLy8gYmVjYXVzZSBpdHMgY29udGVudHMgYXJl
IG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgotICAgIGlmIChlLT5p
c1NWR1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OwotI2VuZGlmCi0KLSAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAo
IWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBl
bmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKLSAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotCi0gICAgLy8gVGhlIHJlc3Qgb2YgdGhl
IHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKLSAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRp
b24gPSBzZWwtPnJlbGF0aW9uKCk7Ci0KLSAgICAvLyBQcmVwYXJlIG5leHQgc2VsCi0gICAgc2Vs
ID0gc2VsLT50YWdIaXN0b3J5KCk7Ci0gICAgaWYgKCFzZWwpCi0gICAgICAgIHJldHVybiBTZWxl
Y3Rvck1hdGNoZXM7Ci0KLSAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yKQotICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQg
Zm9yIHRoZSBwc2V1ZG9TdHlsZQotICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVE
TyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1ZG8pCi0gICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbmVzdGVkIGxpbmtz
LgotICAgIGlmIChtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzICYmICFpc1N1YlNlbGVjdG9yKSB7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVt
ZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICBpZiAoY3VycmVudFN0eWxlICYm
IGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygpICYmIGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAg
ICBpZiAoZW5jb3VudGVyZWRMaW5rKQotICAgICAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNl
dWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlzIG5vdCByZWxldmFudCB0byB0aGUgc3R5
bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0Y2hpbmcuCi0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW5jb3VudGVyZWRMaW5rID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN3aXRjaCAocmVsYXRpb24pIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAg
Q29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNr
U2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAgICAgICAgewotICAg
ICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAg
IGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnRO
b2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQot
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGly
ZWN0QWRqYWNlbnRSdWxlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSogbiA9
IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNM
b2NhbGx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAg
ICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIHJl
dHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRl
cmVkTGluayk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RB
ZGphY2VudDoKLSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVu
dE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG4g
PSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNz
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAg
ICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0gICAgICAgICAg
ICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8t
ZWxlbWVudAotICAgICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNjcm9sbGJh
ciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2VzIChidXQg
bm90aGluZyBlbHNlKQotICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVu
dHMuCi0gICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2NvbGxlY3RSdWxlc09ubHkp
ICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJ
T04gJiYKLSAgICAgICAgICAgICAgICAhKChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0
eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5h
bWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVk
bywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHls
ZSk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+c2hhZG93QW5jZXN0b3JO
b2RlKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gZSB8fCAhc2hhZG93SG9z
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNo
YWRvd0hvc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwg
ZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZXQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHFOYW1lKQotewotICAgIHNldC0+YWRkKHFOYW1lLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci19Ci0KLXN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogY3JlYXRl
SHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKQotewotICAgIC8vIFRoaXMgaXMgdGhl
IGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEgd2l0aCB2YWx1ZXMgbWFya2VkIGFzICJb
Q0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCi0gICAgLy8gTW96aWxsYSB0cmVhdHMgYWxsIG90aGVy
IHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBzbyBkbyB3ZS4KLSAgICBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PjsKLQotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdF9jaGFyc2V0QXR0cik7
Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0QXR0cik7Ci0gICAgYWRkTG9j
YWxOYW1lVG9TZXQoYXR0clNldCwgYWxpZ25BdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBhbGlua0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGF4aXNB
dHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBiZ2NvbG9yQXR0cik7Ci0gICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hhcnNldEF0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIGNoZWNrZWRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBjbGVhckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvZGV0eXBl
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29sb3JBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb21wYWN0QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgZGVjbGFyZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGRlZmVyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlyQXR0cik7
Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlzYWJsZWRBdHRyKTsKLSAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBlbmN0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgZmFjZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZy
YW1lQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHJlZmxhbmdBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBodHRwX2VxdWl2QXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGxhbmd1YWdlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
bGlua0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1lZGlhQXR0cik7Ci0g
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbWV0aG9kQXR0cik7Ci0gICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgbXVsdGlwbGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBub2hyZWZBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3Jl
c2l6ZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5vc2hhZGVBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3dyYXBBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCByZWFkb25seUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIHJlbEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJldkF0
dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJ1bGVzQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2NvcGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBzY3JvbGxpbmdBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBzZWxlY3RlZEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNoYXBlQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGFyZ2V0QXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGV4dEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIHR5cGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2YWxp
Z25BdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2YWx1ZXR5cGVBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2bGlua0F0dHIpOwotCi0gICAgcmV0dXJu
IGF0dHJTZXQ7Ci19Ci0KLXN0YXRpYyBib29sIGh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRp
dmVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyKQotewotICAgIHN0YXRpYyBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiogaHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQgPSBj
cmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCgpOwotICAgIGJvb2wgaXNQb3Nz
aWJsZUhUTUxBdHRyID0gIWF0dHIuaGFzUHJlZml4KCkgJiYgKGF0dHIubmFtZXNwYWNlVVJJKCkg
PT0gbnVsbEF0b20pOwotICAgIHJldHVybiBpc1Bvc3NpYmxlSFRNTEF0dHIgJiYgaHRtbENhc2VJ
bnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQtPmNvbnRhaW5zKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgp
KTsKLX0KLQotc3RhdGljIGJvb2wgYXR0cmlidXRlUXVhbGlmaWVkTmFtZU1hdGNoZXMoQXR0cmli
dXRlKiBhdHRyaWJ1dGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0cikKLXsKLSAg
ICBpZiAoc2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgpICE9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzZWxlY3RvckF0dHIucHJlZml4
KCkgPT0gc3RhckF0b20gfHwgc2VsZWN0b3JBdHRyLm5hbWVzcGFjZVVSSSgpID09IGF0dHJpYnV0
ZS0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0KLXN0YXRpYyBib29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hl
cyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUpCi17Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZUl0ZW0tPnZhbHVlKCk7Ci0g
ICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKG1hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6Ci0gICAgICAgIGlmIChj
YXNlU2Vuc2l0aXZlID8gc2VsZWN0b3JWYWx1ZSAhPSB2YWx1ZSA6ICFlcXVhbElnbm9yaW5nQ2Fz
ZShzZWxlY3RvclZhbHVlLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6Okxpc3Q6IHsKLSAgICAgICAgLy8gSWdu
b3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMgY29udGFpbmluZyBzcGFjZXMKLSAgICAg
ICAgaWYgKHNlbGVjdG9yVmFsdWUuY29udGFpbnMoJyAnKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB1bnNpZ25lZCBzdGFy
dFNlYXJjaEF0ID0gMDsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHNpemVf
dCBmb3VuZFBvcyA9IHZhbHVlLmZpbmQoc2VsZWN0b3JWYWx1ZSwgc3RhcnRTZWFyY2hBdCwgY2Fz
ZVNlbnNpdGl2ZSk7Ci0gICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gbm90Rm91bmQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFmb3VuZFBvcyB8fCB2
YWx1ZVtmb3VuZFBvcyAtIDFdID09ICcgJykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVu
ZFN0ciA9IGZvdW5kUG9zICsgc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZW5kU3RyID09IHZhbHVlLmxlbmd0aCgpIHx8IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gV2UgZm91bmQgYSBtYXRjaC4KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm8gbWF0Y2guIEtlZXAgbG9va2lu
Zy4KLSAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNvbnRhaW46Ci0g
ICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkg
fHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkJlZ2luOgotICAgICAgICBpZiAo
IXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0
b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKLSAgICAgICAgaWYgKCF2YWx1ZS5lbmRz
V2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SHlwaGVuOgotICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPCBzZWxl
Y3RvclZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEl0IHRoZXkgc3RhcnQgdGhlIHNhbWUs
IGNoZWNrIGZvciBleGFjdCBtYXRjaCBvciBmb2xsb3dpbmcgJy0nOgotICAgICAgICBpZiAodmFs
dWUubGVuZ3RoKCkgIT0gc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKSAmJiB2YWx1ZVtzZWxlY3RvclZh
bHVlLmxlbmd0aCgpXSAhPSAnLScpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOgotICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1h
dGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgY29uc3QgQXRvbWljU3RyaW5nJiBz
ZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0KLSAgICAgICAg
aWYgKCFhdHRyaWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBzZWxlY3Rv
ckF0dHIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZh
bHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBtYXRjaCwgc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNp
dGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWlj
UHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJT
dHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25z
dAotewotICAgIEFTU0VSVChlKTsKLSAgICBpZiAoIWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGUsIHNlbCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0ZSgpKSB7Ci0gICAgICAgIGlmIChzZWwt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQotICAgICAgICAgICAgcmV0dXJuIGUtPmhh
c0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFzc05hbWVzKCku
Y29udGFpbnMoc2VsLT52YWx1ZSgpKTsKLQotICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCkKLSAgICAgICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpOwotCi0gICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgdGhlIGNhc2Ugd2VyZSBlbGVtZW50U3R5bGUgaXMgMC4KLSAgICAgICAgaWYgKGVsZW1l
bnRTdHlsZSAmJiAoIWUtPmlzU3R5bGVkRWxlbWVudCgpIHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KGUpLT5pc01hcHBlZEF0dHJpYnV0ZShhdHRyKSAmJiBhdHRyICE9IHR5cGVBdHRy
ICYmIGF0dHIgIT0gcmVhZG9ubHlBdHRyKSkpCi0gICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNl
dEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoKTsgLy8gU3BlY2lhbC1jYXNlIHRoZSAidHlw
ZSIgYW5kICJyZWFkb25seSIgYXR0cmlidXRlcyBzbyBpbnB1dCBmb3JtIGNvbnRyb2xzIGNhbiBz
aGFyZSBzdHlsZS4KLQotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlLT5hdHRy
aWJ1dGVzKHRydWUpOwotICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hU
TUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShhdHRyKTsKLQotICAg
ICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NT
U2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gpLCBhdHRyLCBzZWwtPnZhbHVlKCksIGNhc2VT
ZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgewotICAgICAgICAv
LyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KLSAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChzZWwtPnNlbGVj
dG9yTGlzdCgpKTsKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9IHNlbC0+
c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50YWdIaXN0
b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0LiBJIGRvbid0IHJl
YWxseSBrbm93IHdoeSB0aGlzIGlzIGEKLSAgICAgICAgICAgICAgICAvLyByZXN0cmljdGlvbiBp
biBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgotICAgICAgICAgICAgICAgIC8v
IHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycwotICAgICAgICAgICAg
ICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90
KTsKLQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5
bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50
UGFyZW50U3R5bGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIChS
ZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1
ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpKSB7Ci0g
ICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBw
c2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAot
ICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBubyBlbGVtZW50cyBpbnZvbHZlZCkuCi0g
ICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhzZWwsIGR5bmFtaWNQ
c2V1ZG8pOwotICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OKSB7
Ci0gICAgICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b1dpbmRvd0luYWN0aXZlKQotICAgICAgICAgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBjaGVja2luZy4KLSAgICAgICAgc3dpdGNo
IChzZWwtPnBzZXVkb1R5cGUoKSkgewotICAgICAgICAgICAgLy8gUHNldWRvIGNsYXNzZXM6Ci0g
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3Q6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7IC8vIEFscmVhZHkgaGFuZGxlZCB1cCBhYm92ZS4KLSAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0VtcHR5OiB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGUtPmZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChuLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRleHQqIHRl
eHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9jdW1lbnQoKS0+dXNl
c1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6
IHsKLSAgICAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGls
ZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgp
ICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBl
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxl
Y3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGls
ZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5
bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmly
c3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNo
aWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Rmly
c3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdE9mVHlwZTogewotICAgICAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAgICAgICAgICAgICAgIGlmIChlLT5wYXJl
bnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3Np
dGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xh
c3RDaGlsZDogewotICAgICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFz
dCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25s
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZTogewot
ICAgICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQg
b2YgaXRzIHR5cGUKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9
IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVj
dFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHls
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJz
aW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBu
ID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDogewotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBib29sIGxh
c3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
biA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdD
aGlsZHJlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdENoaWxkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUg
OiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50
RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJl
bnRTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChmaXJzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGFzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBsYXN0Q2hpbGQ7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZTogewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KLSAgICAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBib29sIGxhc3RD
aGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0
eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnBy
ZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChmaXJzdENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gZS0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5u
ZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb050aENoaWxkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2
aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IG4tPnJlbmRlclN0eWxlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJbmRleCgp
IDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUg
OiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50
RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldENoaWxk
SW5kZXgoY291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRo
KGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZTogewotICAgICAgICAgICAgICAg
IGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RS
dWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb050aExhc3RDaGlsZDogewotICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJz
ZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBh
cmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBlOiB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpbnQg
Y291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBl
ID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgo
Y291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVGFyZ2V0OgotICAgICAgICAgICAgICAgIGlmIChl
ID09IGUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0FueToKLSAgICAgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9
IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291
bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9y
TWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5r
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQXV0b2ZpbGw6IHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xpbms6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0
ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzIHx8IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9EcmFnOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKHRydWUp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGUtPnJlbmRlcmVyKCkgJiYgZS0+cmVuZGVyZXIoKS0+aXNE
cmFnZ2luZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgICAgIGlmIChlICYmICgoZS0+Zm9jdXNlZCgpICYm
IGUtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzKSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKLSAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjpob3ZlciBzaG91
bGQgbm90IG1hdGNoIGFueXRoaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHNpdGVzIGxpa2Ug
d3NqLmNvbS4KLSAgICAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3ViU2Vs
ZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUtPmlz
TGluaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRy
dWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5ob3ZlcmVkKCkgfHwgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQ
c2V1ZG9Ib3ZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6Ci0gICAgICAgICAgICAgICAg
Ly8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0
Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjphY3RpdmUg
c2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gCi0gICAgICAgICAgICAgICAgaWYgKG1fc3RyaWN0
UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdO
YW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZl
Y3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUt
PnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgp
LT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChlLT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3Rh
dGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFibGVkOgotICAgICAgICAg
ICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFBhZ2VNZWRp
YToKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpICYmIGUtPmRvY3Vt
ZW50KCktPmlzTWVkaWFEb2N1bWVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZSAmJiBlLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCk7Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAgICAgICBpZiAoZSAmJiBl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWUt
PmlzRW5hYmxlZEZvcm1Db250cm9sKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkT25seTogewotICAgICAgICAgICAgICAg
IGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29u
dHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZFdyaXRlOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZv
cm1Db250cm9sKCkgJiYgIWUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25hbEZvcm1Db250cm9sKCk7Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZXF1aXJlZDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb1ZhbGlkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZS0+ZG9jdW1l
bnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZS0+d2lsbFZhbGlkYXRlKCkgJiYgZS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
OwotICAgICAgICAgICAgfSBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbnZhbGlkOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVs
ZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGUtPndpbGxWYWxpZGF0ZSgpICYmICFlLT5p
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGUtPmhhc1VuYWNjZXB0YWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6IHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklF
IGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNl
bGVjdG9yIHNwZWMgc2F5cyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJlIGJv
dGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUg
YmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAvLyBvYmV5IHRoZSBD
U1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAgICAg
ICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVt
ZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
bmRldGVybWluYXRlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNU
YWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBIVE1MUHJvZ3Jlc3NF
bGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzICYmICFwcm9ncmVzcy0+aXNEZXRlcm1p
bmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUt
PnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBp
bnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6Ci0gICAgICAgICAgICAgICAgaWYgKGUg
PT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGFuZzogewotICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2
YWx1ZSA9IGUtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3VtZW50KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCAhdmFsdWUuc3RhcnRzV2l0aChhcmd1bWVudCwg
ZmFsc2UpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAo
dmFsdWUubGVuZ3RoKCkgIT0gYXJndW1lbnQubGVuZ3RoKCkgJiYgdmFsdWVbYXJndW1lbnQubGVu
Z3RoKCldICE9ICctJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbjoKLSAgICAg
ICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRl
LCBhbmQgdGhlIGRvY3VtZW50J3MgY3VycmVudCBmdWxsc2NyZWVuIAotICAgICAgICAgICAgICAg
IC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQsIHRoZSAnZnVsbC1zY3Jl
ZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8gCi0gICAgICAgICAgICAgICAgLy8gdGhhdCBlbGVt
ZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50IHdob3Nl
IGNoaWxkIGJyb3dzaW5nIAotICAgICAgICAgICAgICAgIC8vIGNvbnRleHQncyBEb2N1bWVudCBp
cyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSBoYXMgdGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xh
c3MgYXBwbGllZC4KLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNGcmFtZUVsZW1lbnRCYXNlKCkg
JiYgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlKS0+Y29udGFpbnNGdWxsU2Ny
ZWVuRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlv
bjoKLSAgICAgICAgICAgICAgICBpZiAoZSAhPSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50
RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlLT5kb2N1bWVudCgpLT5pc0FuaW1hdGluZ0Z1bGxTY3Jl
ZW4oKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW5BbmNl
c3RvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVu
dCgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkRvY3Vt
ZW50OgotICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxz
Y3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBzZXVkb2NsYXNzIGFwcGxp
ZXMgCi0gICAgICAgICAgICAgICAgLy8gdG8gYWxsIGVsZW1lbnRzIG9mIHRoYXQgRG9jdW1lbnQu
Ci0gICAgICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4o
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
blJhbmdlOgotICAgICAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFs
aWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzSW5SYW5nZSgp
OwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0T2ZSYW5nZToKLSAgICAg
ICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxl
cygpOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc091dE9mUmFuZ2UoKTsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd246Ci0gICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNlbC0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgewotICAgICAgICBpZiAoIWVsZW1l
bnRTdHlsZSAmJiAhbV9jb2xsZWN0UnVsZXNPbmx5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewotICAgICAg
ICAgICAgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuIGUtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoc2VsLT5wc2V1
ZG9UeXBlKCkpOwotICAgICAgICBpZiAocHNldWRvSWQgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAg
ICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudC0+c2V0VXNlc0ZpcnN0TGV0dGVyUnVsZXModHJ1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQotICAgICAgICAgICAgZHluYW1p
Y1BzZXVkbyA9IHBzZXVkb0lkOwotICAgIH0KLSAgICAvLyAjIyMgYWRkIHRoZSByZXN0IG9mIHRo
ZSBjaGVja3MuLi4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3Iq
IHNlbCwgUHNldWRvSWQmKSBjb25zdAotewotICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKTsKLSAgICBTY3Jv
bGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRGb3JTdHlsZVJlc29sdmUoKTsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgZm9yIHJlc2l6ZXJzIGFu
ZCBzY3JvbGxiYXIgY29ybmVycy4gIEV2ZW50dWFsbHkgOndpbmRvdy1pbmFjdGl2ZSBzaG91bGQg
YmVjb21lIGEgcmVhbAotICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQganVzdCBhcHBseSB0byBldmVy
eXRoaW5nLgotICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
V2luZG93SW5hY3RpdmUpCi0gICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICAKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBBU1NFUlQoc2VsLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7Ci0gICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUo
KSkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFibGVkOgotICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsYmFyLT5lbmFibGVk
KCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7Ci0gICAgICAgICAg
ICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpOwot
ICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQotICAgICAgICAgICAgICAg
IHJldHVybiBob3ZlcmVkUGFydCAhPSBOb1BhcnQ7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBU
cmFja0JHUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJlZFBhcnQgPT0gQmFja1Ry
YWNrUGFydCB8fCBob3ZlcmVkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IGhvdmVyZWRQYXJ0
ID09IFRodW1iUGFydDsKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IGhvdmVyZWRQYXJ0Owot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZTogewotICAg
ICAgICAgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgIT0gTm9QYXJ0OwotICAgICAgICAgICAgaWYgKHBh
cnQgPT0gVHJhY2tCR1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHByZXNzZWRQYXJ0ID09
IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBwcmVz
c2VkUGFydCA9PSBUaHVtYlBhcnQ7Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBwcmVzc2Vk
UGFydDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3Jpem9u
dGFsOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WZXJ0aWNh
bDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWxTY3JvbGxiYXI7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlY3JlbWVudDoK
LSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9
PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQ7Ci0gICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luY3JlbWVudDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0
ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFy
dCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb1N0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrVHJh
Y2tQYXJ0OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmQ6Ci0gICAgICAgICAg
ICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKLSAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRG91YmxlQnV0dG9uOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJCdXR0
b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRv
bnNQbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlU3RhcnQgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0
b25zRG91YmxlQm90aDsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQ
YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJh
ckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25z
RG91YmxlQm90aDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSAKLSAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU2luZ2xlQnV0dG9uOiB7Ci0gICAgICAgICAgICBT
Y3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRo
ZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tC
dXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09
IEJhY2tUcmFja1BhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNTaW5nbGU7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTm9CdXR0b246IHsKLSAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFj
ZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNl
bWVudCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFja1RyYWNrUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8
fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ7Ci0gICAgICAg
ICAgICBpZiAocGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVy
biBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFj
ZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0OwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Nvcm5l
clByZXNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgp
LT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKQEAgLTMwNDYsNyArMTkyMiw3IEBAIFJ1bGVEYXRhOjpSdWxlRGF0YShD
U1NTdHlsZVJ1bGUqIHJ1bGUsIEMKICAgICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgLCBt
X3NwZWNpZmljaXR5KHNlbGVjdG9yLT5zcGVjaWZpY2l0eSgpKQogICAgICwgbV9wb3NpdGlvbihw
b3NpdGlvbikKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKQor
ICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RD
aGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpCiAgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9y
KHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpCiAgICAgLCBtX2hhc1RvcFNlbGVjdG9yTWF0Y2hpbmdI
VE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
c2VsZWN0b3IpKQogewpAQCAtMzU4Myw3ICsyNDU5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgIAogICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+
d3JpdGluZ01vZGUoKSk7CiAKLSAgICBpZiAobV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRv
Q2xhc3MgJiYgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkgeworICAgIGlmIChtX2No
ZWNrZXIuaXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcygpICYmICFpc1ZhbGlkVmlzaXRlZExp
bmtQcm9wZXJ0eShpZCkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBj
YW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNzE4LDcgKzI1OTQsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAKICAgICAgICAgRVJlc2l6ZSByID0gUkVTSVpFX05P
TkU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1
dG8pIHsKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9k
b2N1bWVudC0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKICAgICAgICAgICAgICAgICByID0g
c2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVf
Tk9ORTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOwpA
QCAtMzc2Niw3ICsyNjQyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludAogICAgICAgICAgICAgaWYgKG1fcGFyZW50Tm9kZSkKICAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUobV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkua2V5d29yZFNpemUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAg
ICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBD
U1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7Cisg
ICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgp
LCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRp
dW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5nIHVz
ZWQuCkBAIC0zNzc5LDE0ICsyNjU1LDE0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgogICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZvbnRTaXpl
Rm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCksIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAg
ICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2VyOgotICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFyZ2VyRm9udFNpemUob2xkU2l6
ZSwgbV9jaGVja2VyLm1fZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9sZFNpemUsIG1fY2hlY2tlci5kb2N1bWVudCgp
LT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbGVyOgotICAgICAgICAgICAgICAgICAgICBzaXplID0g
c21hbGxlckZvbnRTaXplKG9sZFNpemUsIG1fY2hlY2tlci5tX2RvY3VtZW50LT5pblF1aXJrc01v
ZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzbWFsbGVyRm9udFNpemUob2xkU2l6
ZSwgbV9jaGVja2VyLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzgzNyw3ICsyNzEzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseVByb3BlcnR5KGludAogICAgICAgICBlbHNlIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNV
bml0VHlwZUxlbmd0aCh0eXBlKSkgewogICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSB6
b29tRmFjdG9yOwogICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9jaGVja2VyLm1fZG9jdW1lbnQt
PmZyYW1lKCkpCisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fY2hlY2tlci5k
b2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZy
YW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZUhl
aWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCBtdWx0aXBsaWVyKTsKQEAgLTQwNTQsNyArMjkzMCw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBj
aGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCiAg
ICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVu
dCwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBm
YWxzZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBm
b250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5
KCkpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmZhbWlseUlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGluaXRp
YWxEZXNjLmZpcnN0RmFtaWx5KCkpOwpAQCAtNDA3OCw3ICsyOTU0LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFj
ZTsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5tX2RvY3VtZW50
LT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2Vy
LmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5w
cmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc0ZvbnRGYW1pbHlWYWx1ZSgpKQogICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gc3RhdGljX2Nhc3Q8Rm9udEZhbWlseVZhbHVlKj4oY29udGVu
dFZhbHVlKS0+ZmFtaWx5TmFtZSgpOwpAQCAtNDEzNCw3ICszMDEwLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAvLyBJZiBjdXJyRmFtaWx5IGlz
IG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkgb24gdGhpcyBkZXNjcmlw
dGlvbi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAgICAgIGlmIChmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAgICAgICAg
IHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNp
emUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOworICAgICAgICAgICAg
ICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hl
Y2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29y
ZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwogCiAgICAgICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfQpAQCAt
NDE5MCw3ICszMDY2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dAogICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7CiAgICAgICAgICAgICBzZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURv
Y3VtZW50KSB7Ci0gICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gbV9jaGVja2VyLm1fZG9jdW1l
bnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnpvb20oKTsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pv
b20gPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+em9vbSgpOwog
ICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKICAgICAgICAgICAgIHNldFpv
b20oZG9jWm9vbSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIHsKQEAgLTQyMjYs
MjEgKzMxMDIsMjEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAog
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgICAgICAgICAgc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFs
KSB7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVu
dC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tl
ci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsg
Ly8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQg
YWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwogICAgICAgICAgICAg
aWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJl
bmRlcmluZ01vZGUoKSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRl
ckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnByaW50aW5nKCkpOwotICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIubV9kb2N1bWVu
dC0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5n
KCkpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkg
PSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7
CiAgICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRh
cmRGb250RmFtaWx5KTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1p
bHkoKS5hcHBlbmRGYW1pbHkoMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwg
KyAxKTsKLSAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVG
b3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsK
KyAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3
b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwogICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgICAgICAgICAg
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC00MjU0LDE1ICszMTMwLDE1
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAg
IC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0aGVtZSBkaWQgYW55dGhpbmcuICBJZiBu
b3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KICAgICAgICAgICAgIGlmIChmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewogICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIgZm9udCBzZXR0aW5ncyBhcmUgdXBk
YXRlZC4KLSAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9k
b2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRv
Y3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdz
CiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNl
dHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnByaW50aW5nKCkp
OworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2No
ZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZSht
X2NoZWNrZXIubV9kb2N1bWVudCwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21S
dWxlcygpKSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwg
bV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNj
cmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CiAgICAgICAgICAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKQEAgLTQ4MDksNyAr
MzY4NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICNpZiBF
TkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82NTYx
MDc3PiBXb3JrIGFyb3VuZCB0aGUgU3RvY2tzIHdpZGdldCdzIG1pc3VzZSBvZiB0aGUKICAgICAg
ICAgLy8gcG9pbnRlci1ldmVudHMgcHJvcGVydHkgYnkgbm90IGFwcGx5aW5nIGl0IGluIERhc2hi
b2FyZC4KLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLm1fZG9jdW1lbnQt
PnNldHRpbmdzKCk7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1
bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVz
ZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAjZW5kaWYKQEAgLTU4MzcsOSArNDcxMyw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tGb3JHZW5lcmljRmEKICAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9y
LgogICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQotICAg
ICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NW
YWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VG
aXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1f
Y2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNp
emUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogICAgIGVsc2Ugewot
ICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGlu
Z3MoKTsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCkt
PnNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0b3IgPSBzZXR0aW5ncwog
ICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZv
bnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpCiAgICAgICAgICAgICA6IDE7
CkBAIC01ODU2LDcgKzQ3MzIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2Vu
ZXJpY0ZhCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLm1fZG9jdW1lbnQs
IG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1
c2VTVkdab29tUnVsZXMoKSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1f
c3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VT
Vkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBz
dHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VT
Vkdab29tUnVsZXMpCkBAIC02MDYyLDcgKzQ5MzgsNyBAQCBDb2xvciBDU1NTdHlsZVNlbGVjdG9y
OjpnZXRDb2xvckZyb21QcmltCiAgICAgICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdFRl
eHQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigp
OwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdExpbmspCi0gICAgICAg
ICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fY2hlY2tlci5tX21hdGNoVmlzaXRl
ZFBzZXVkb0NsYXNzID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkg
OiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICAgICAgY29sID0g
bV9lbGVtZW50LT5pc0xpbmsoKSAmJiBtX2NoZWNrZXIuaXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9D
bGFzcygpID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9
PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9
PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKQpAQCAtNjA5NiwyNyArNDk3Miw2IEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6YWZmZWN0ZWRCeVZpZXdwb3IKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjphbGxWaXNpdGVk
U3RhdGVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1
bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBp
ZiAobm9kZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6
dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkKLXsKLSAgICBpZiAoIW1f
bGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKHZpc2l0ZWRIYXNoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
KiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAgICAgICAgaWYgKGF0dHIgJiYgdmlzaXRl
ZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09IHZpc2l0ZWRIYXNoKQot
ICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0KLX0KLQogc3Rh
dGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSA8d3RmL0Js
b29tRmlsdGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgpAQCAtODQsMzA2ICs4NSwyNzcgQEAgcHVibGljOgogICAgIGJvb2wgbV9yZXN1bHQ7
CiB9OwogCi0gICAgLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2
ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCi0gICAgY2xh
c3MgQ1NTU3R5bGVTZWxlY3RvciB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUFwcGx5
UHJvcGVydHk7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1N0eWxlU2VsZWN0b3Ip
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENTU1N0eWxl
U2VsZWN0b3IoRG9jdW1lbnQqLCBTdHlsZVNoZWV0TGlzdCogYXV0aG9yU2hlZXRzLCBDU1NTdHls
ZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
U3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICAg
ICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFVzaW5nIHRoZXNl
IGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBj
aGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgotICAgICAgICB2b2lkIHB1c2hQ
YXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICAgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCog
cGFyZW50KTsKLQotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93
U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UsIGJvb2wg
bWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICB2b2lk
IGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IEtleWZyYW1lTGlzdCYgbGlzdCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZh
bHNlKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50
IHBhZ2VJbmRleCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLQotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KLSAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudDsgfQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgRm9udERlc2NyaXB0aW9u
IHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHtyZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQotICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9Ci0gICAgICAgIHZvaWQg
c2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVm
ZmVjdGl2ZVpvb20oZik7IH0KLSAgICAgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIp
IHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAgICAg
IHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgICAgICBSZW5kZXJTdHlsZSogbG9jYXRl
U2hhcmVkU3R5bGUoKTsKLSAgICAgICAgYm9vbCBtYXRjaGVzU2libGluZ1J1bGVzKCk7Ci0gICAg
ICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlz
aXRlZE5vZGVDb3VudCkgY29uc3Q7Ci0gICAgICAgIE5vZGUqIGZpbmRTaWJsaW5nRm9yU3R5bGVT
aGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgICAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgICAgIHZvaWQgcG9w
UGFyZW50U3RhY2tGcmFtZSgpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUqLCBLZXlmcmFtZVZhbHVlJik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFRoZXNl
IG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9y
IGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCi0gICAgICAgIGVudW0gQ1NT
UnVsZUZpbHRlciB7Ci0gICAgICAgICAgICBVQUFuZFVzZXJDU1NSdWxlcyAgID0gMSA8PCAxLAot
ICAgICAgICAgICAgQXV0aG9yQ1NTUnVsZXMgICAgICA9IDEgPDwgMiwKLSAgICAgICAgICAgIEVt
cHR5Q1NTUnVsZXMgICAgICAgPSAxIDw8IDMsCi0gICAgICAgICAgICBDcm9zc09yaWdpbkNTU1J1
bGVzID0gMSA8PCA0LAotICAgICAgICAgICAgQWxsQnV0RW1wdHlDU1NSdWxlcyA9IFVBQW5kVXNl
ckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdpbkNTU1J1bGVzLAotICAgICAg
ICAgICAgQWxsQ1NTUnVsZXMgICAgICAgICA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMgfCBFbXB0eUNT
U1J1bGVzLAotICAgICAgICB9OwotICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBzdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxC
dXRFbXB0eUNTU1J1bGVzKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1Rv
SW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIC8vIEdpdmVuIGEgQ1NT
IGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRo
aXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KLSAgICAgICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXpl
IHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCi0gICAgICAg
IHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqLCBpbnQga2V5d29yZCwg
Ym9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQotICAgICAgICAvLyBHaXZlbiBhIGZv
bnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBz
aXplIGJldHdlZW4gMSBhbmQgNy4KLSAgICAgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShE
b2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNp
emUpOwotCi0gICAgcHJpdmF0ZToKLQotICAgICAgICAvLyBXaGVuIHRoZSBDU1Mga2V5d29yZCAi
bGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRo
aW4gdGhlIGtleXdvcmQKLSAgICAgICAgLy8gdGFibGUsIGFuZCBmYWlsaW5nIHRoYXQsIHdpbGwg
c2ltcGx5IG11bHRpcGx5IGJ5IDEuMi4KLSAgICAgICAgZmxvYXQgbGFyZ2VyRm9udFNpemUoZmxv
YXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBjb25zdDsKLQotICAgICAgICAvLyBMaWtlIHRoZSBw
cmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCi0gICAgICAg
IGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0
OwotCi0gICAgcHVibGljOgotICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUgZG9jdW1lbnQgd2hlbiBz
ZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgotCi0gICAgICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRv
U3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7Ci0gICAgICAgIAotICAgICAg
ICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
LCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRT
aXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6
ZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNpemUpOwotCi0gICAgICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29s
dXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOwotCi0g
ICAgcHVibGljOgotICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwotCi0gICAgICAgIENv
bG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKikgY29uc3Q7
Ci0KLSAgICAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJp
bmcmKSBjb25zdDsKLSAKLSAgICAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgYWRk
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBi
b29sIHJlc3VsdCk7Ci0KLSAgICAgICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBj
b25zdDsKLQotICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tl
ci5hbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7IH0KLSAgICAgICAgdm9pZCB2aXNpdGVkU3RhdGVD
aGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3RhdGVDaGFu
Z2VkKHZpc2l0ZWRIYXNoKTsgfQotCi0gICAgICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNz
UmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpOwotICAgICAgICB2b2lkIGFkZFBh
Z2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7Ci0KLSAgICAgICAgYm9vbCB1c2VzU2li
bGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXM7IH0KLSAg
ICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
LnVzZXNGaXJzdExpbmVSdWxlczsgfQotICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0ZXJSdWxlczsgfQotICAg
ICAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNM
aW5rUnVsZXM7IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0KLSAgICAg
ICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgICAgIEZlYXR1cmVzKCk7Ci0gICAgICAgICAg
ICB+RmVhdHVyZXMoKTsKLSAgICAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlk
c0luUnVsZXM7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0lu
UnVsZXM7Ci0gICAgICAgICAgICBPd25QdHI8UnVsZVNldD4gc2libGluZ1J1bGVzOwotICAgICAg
ICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAgICAgICBib29sIHVzZXNCZWZv
cmVBZnRlclJ1bGVzOwotICAgICAgICAgICAgYm9vbCB1c2VzTGlua1J1bGVzOwotICAgICAgICB9
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JN
YXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsK
LQotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6
ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMg
Y2hhbmdlZC4gLWR3aAotICAgICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgICAgIHZvaWQgY2hl
Y2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsK
LSAgICAgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0KLSAgICAgICAgdm9pZCBh
ZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBFbGVtZW50Kik7Ci0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShj
b25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLSAg
ICAgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIGRlY2wpOwotCi0gICAgICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
LSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+Kiwg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKLSAgICAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEm
KSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgICAgIAotICAg
ICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKLQotICAgICAgICB0ZW1w
bGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9v
bCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwotCi0gICAgICAgIHZv
aWQgbWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAgICAgIHZvaWQgbWF0Y2hQYWdlUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgICAgICBib29sIGlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQotICAg
ICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgICAgICBTdHJp
bmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBPd25Q
dHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKLSAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNl
clN0eWxlOwotCi0gICAgICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0KLSAgICAgICAgc3RydWN0
IFBhcmVudFN0YWNrRnJhbWUgewotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZSgpIHt9Ci0g
ICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChl
bGVtZW50KSB7fQotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKLSAgICAgICAgfTsKLSAgICAgICAg
VmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50U3RhY2s7Ci0gICAgICAgIAotICAgICAg
ICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVyLCAyXjEyIHNsb3QgdGFi
bGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAuMiUuCi0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICAgICAgT3duUHRyPEJsb29t
RmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4gPiBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcjsK
LQotICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwotICAgICAgICBCb3JkZXJEYXRhIG1f
Ym9yZGVyRGF0YTsKLSAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgICAg
IENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+ID4gS2V5ZnJhbWVz
UnVsZU1hcDsKLSAgICAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7Ci0K
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFp
bGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9Ci0KLSAgICAgICAgY2xh
c3MgU2VsZWN0b3JDaGVja2VyIHsKLSAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNl
bGVjdG9yQ2hlY2tlcik7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7Ci0KLSAgICAgICAgICAgIGJvb2wg
Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVj
a1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRv
LCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSog
PSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7Ci0gICAgICAg
ICAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExp
bmssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7
Ci0gICAgICAgICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3Iq
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7Ci0gICAgICAgICAgICBzdGF0aWMgYm9v
bCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwotICAgICAgICAg
ICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25z
dCBFbGVtZW50Kik7Ci0KLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0
ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGRldGVy
bWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0OwotICAgICAgICAg
ICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB2b2lkIHZpc2l0
ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpOwotCi0gICAgICAgICAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKLSAgICAgICAgICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOwotICAg
ICAgICAgICAgYm9vbCBtX2NvbGxlY3RSdWxlc09ubHk7Ci0gICAgICAgICAgICBib29sIG1fc2Ft
ZU9yaWdpbk9ubHk7Ci0gICAgICAgICAgICBQc2V1ZG9JZCBtX3BzZXVkb1N0eWxlOwotICAgICAg
ICAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwotICAgICAgICAgICAgbXV0YWJsZSBib29sIG1f
aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOwotICAgICAgICAgICAgbXV0YWJsZSBib29sIG1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3M7Ci0gICAgICAgICAgICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hh
c2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSopOwotICAgICAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3Rh
dGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotCi0gICAgICAgIHZvaWQg
bWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSk7Ci0gICAgICAg
IHZvaWQgdXBkYXRlRm9udCgpOwotICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpOwotCi0gICAgICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxDb21wb3Np
dGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBt
YXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAg
ICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlE
LCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxTaXplKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFhQ
b3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2
b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKLQotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1Zh
bHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NT
VmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBD
U1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRp
b24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmlt
YXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFu
aW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2b2lkIG1hcE5pbmVQaWVj
ZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICAg
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2Um
KTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQ
aWVjZUltYWdlJik7Ci0KLSAgICAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgYXBwbHlQYWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVl
Kik7Ci0gICAgICAgIGJvb2wgcGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVWYWx1ZSosIENT
U1ByaW1pdGl2ZVZhbHVlKiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpOwotICAgICAg
ICBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKSBjb25zdDsKLSAgICAgICAgTGVuZ3RoIGluY2hM
ZW5ndGgoZG91YmxlIGluY2gpIGNvbnN0OworLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVy
U3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVz
aGVldHMuCitjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIHsKKyAgICBmcmllbmQgY2xhc3MgQ1NTU3R5
bGVBcHBseVByb3BlcnR5OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1N0eWxlU2VsZWN0
b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDU1NTdHlsZVNlbGVj
dG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0cywgQ1NTU3R5bGVTaGVl
dCogbWFwcGVkRWxlbWVudFNoZWV0LAorICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVl
dCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBw
YWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4q
IGRvY3VtZW50VXNlclNoZWV0cywKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFy
c2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOworICAgIH5DU1NTdHlsZVNlbGVj
dG9yKCk7CisgICAgCisgICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFs
bG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVj
dG9yIGxvb2t1cHMuCisgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7CisgICAg
dm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKKworCisgICAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERl
ZmF1bHQgPSBmYWxzZSwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlKTsKKyAg
ICAKKyAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBS
ZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIG1hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzID0gZmFsc2UpOworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgUmVuZGVyU3R5bGUqIHJv
b3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKyAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOyB9CisgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbigp
IHtyZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNl
dEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFk
anVzdChiKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVt
ZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7
CisgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0
ZVNoYXJlZFN0eWxlKCk7CisgICAgYm9vbCBtYXRjaGVzU2libGluZ1J1bGVzKCk7CisgICAgTm9k
ZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9k
ZUNvdW50KSBjb25zdDsKKyAgICBOb2RlKiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2Rl
KiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChOb2RlKikgY29uc3Q7CisgICAgCisgICAgdm9pZCBwdXNoUGFyZW50U3RhY2tGcmFtZShF
bGVtZW50KiBwYXJlbnQpOworICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOworCisgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSosIEtleWZyYW1lVmFsdWUmKTsKKworcHVi
bGljOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxl
cyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCku
CisgICAgZW51bSBDU1NSdWxlRmlsdGVyIHsKKyAgICAgICAgVUFBbmRVc2VyQ1NTUnVsZXMgICA9
IDEgPDwgMSwKKyAgICAgICAgQXV0aG9yQ1NTUnVsZXMgICAgICA9IDEgPDwgMiwKKyAgICAgICAg
RW1wdHlDU1NSdWxlcyAgICAgICA9IDEgPDwgMywKKyAgICAgICAgQ3Jvc3NPcmlnaW5DU1NSdWxl
cyA9IDEgPDwgNCwKKyAgICAgICAgQWxsQnV0RW1wdHlDU1NSdWxlcyA9IFVBQW5kVXNlckNTU1J1
bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdpbkNTU1J1bGVzLAorICAgICAgICBBbGxD
U1NSdWxlcyAgICAgICAgID0gQWxsQnV0RW1wdHlDU1NSdWxlcyB8IEVtcHR5Q1NTUnVsZXMsCisg
ICAgfTsKKyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChF
bGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsK
KyAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChF
bGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlD
U1NSdWxlcyk7CisKKyAgICAvLyBHaXZlbiBhIENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAoeHgt
c21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisg
ICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidz
IGRlZmF1bHQgKG1lZGl1bSkuCisgICAgc3RhdGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChE
b2N1bWVudCosIGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwor
CisgICAgLy8gR2l2ZW4gYSBmb250IHNpemUgaW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCBy
ZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3ZWVuIDEgYW5kIDcuCisgICAgc3RhdGljIGludCBs
ZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVz
ZUZpeGVkRGVmYXVsdFNpemUpOworCitwcml2YXRlOgorCisgICAgLy8gV2hlbiB0aGUgQ1NTIGtl
eXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gbWF0
Y2ggd2l0aGluIHRoZSBrZXl3b3JkCisgICAgLy8gdGFibGUsIGFuZCBmYWlsaW5nIHRoYXQsIHdp
bGwgc2ltcGx5IG11bHRpcGx5IGJ5IDEuMi4KKyAgICBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9h
dCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0OworCisgICAgLy8gTGlrZSB0aGUgcHJldmlv
dXMgZnVuY3Rpb24sIGJ1dCBmb3IgdGhlIGtleXdvcmQgInNtYWxsZXIiLgorICAgIGZsb2F0IHNt
YWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0OworCitwdWJs
aWM6CisgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5
bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9v
dCBzdHlsZS4KKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1
ZSosIFJlbmRlclN0eWxlKik7CisgICAgCisgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fi
c29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXpl
ID0gVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0
Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisKKyAgICBzdGF0aWMgZmxv
YXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHls
ZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKTsKKworcHVibGljOgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7CisKKyAg
ICBDb2xvciBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSopIGNv
bnN0OworCisgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJp
bmcmKSBjb25zdDsKKworICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KKworICAgIHZvaWQgYWRkVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3Vs
dCk7CisKKyAgICBib29sIGFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0OworCisgICAg
dm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBtX2NoZWNrZXIuYWxsVmlzaXRlZFN0YXRl
Q2hhbmdlZCgpOyB9CisgICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0
ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQor
CisgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZT4gcnVsZSk7CisgICAgdm9pZCBhZGRQYWdlU3R5bGUoUGFzc1JlZlB0cjxDU1NQYWdlUnVs
ZT4pOworCisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcy5zaWJsaW5nUnVsZXM7IH0KKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAgYm9vbCB1c2Vz
QmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0JlZm9yZUFm
dGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2Zl
YXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KKworICAgIHN0YXRpYyBib29sIGNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5k
ZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsK
KworICAgIHN0cnVjdCBGZWF0dXJlcyB7CisgICAgICAgIEZlYXR1cmVzKCk7CisgICAgICAgIH5G
ZWF0dXJlcygpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHNJblJ1bGVz
OworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7CisgICAg
ICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7CisgICAgICAgIGJvb2wgdXNlc0ZpcnN0
TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOworICAgICAgICBi
b29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhl
IGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAorICAgIHZvaWQg
Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0
KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRq
dXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKworICAgIHZvaWQgYWRk
TWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5k
KHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGRlY2wpOworCisgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBj
b25zdDsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICAKKyAgICBib29sIGNoZWNr
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKKworICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFz
cz4KKyAgICB2b2lkIGFwcGx5RGVjbGFyYXRpb25zKGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJ
bmRleCwgaW50IGVuZEluZGV4KTsKKworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoUnVsZVNldCos
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSk7CisgICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdl
TmFtZSk7CisgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJv
b2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2Uo
cGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7
CisgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIAorICAgIE93
blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOworICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJT
dHlsZTsKKworICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUGFyZW50U3Rh
Y2tGcmFtZSB7CisgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoKSB7fQorICAgICAgICBQYXJlbnRT
dGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSB7fQorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZp
ZXJIYXNoZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRT
dGFjazsKKyAgICAKKyAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVy
LCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAuMiUuCisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVyS2V5Qml0cyA9IDEyOworICAgIE93blB0
cjxCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNlc3RvcklkZW50aWZpZXJG
aWx0ZXI7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9i
b3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1f
YmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gPiBLZXlmcmFtZXNSdWxlTWFwOworICAg
IEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVO
b3RZZXRBdmFpbGFibGU7IH0KKworICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworCitwcml2YXRlOgorICAgIHN0YXRp
YyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKworICAgIHZvaWQgbWF0Y2hV
QVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSk7CisgICAgdm9pZCB1cGRh
dGVGb250KCk7CisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKworICAgIHZv
aWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7CisgICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxSZXBlYXRYKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0
WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmls
bFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1h
cEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKKworICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
IHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAg
dm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKwor
ICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5l
UGllY2VJbWFnZSYpOworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSos
IE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NW
YWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50
IGlkLCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQYWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVl
Kik7CisgICAgYm9vbCBwYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJp
bWl0aXZlVmFsdWUqLCBMZW5ndGgmIHdpZHRoLCBMZW5ndGgmIGhlaWdodCk7CisgICAgTGVuZ3Ro
IG1tTGVuZ3RoKGRvdWJsZSBtbSkgY29uc3Q7CisgICAgTGVuZ3RoIGluY2hMZW5ndGgoZG91Ymxl
IGluY2gpIGNvbnN0OwogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIHZvaWQgYXBwbHlTVkdQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KGludCBp
ZCwgQ1NTVmFsdWUqKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMo
KTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CiAKLSAgICAgICAgLy8gV2UgY29sbGVj
dCB0aGUgc2V0IG9mIGRlY2xzIHRoYXQgbWF0Y2ggaW4gfG1fbWF0Y2hlZERlY2xzfC4gIFdlIHRo
ZW4gd2FsayB0aGUKLSAgICAgICAgLy8gc2V0IG9mIG1hdGNoZWQgZGVjbHMgZm91ciB0aW1lcywg
b25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVycyBkZXBlbmQgb24gKGxpa2UgZm9u
dC1zaXplKSwKLSAgICAgICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3IgYWxsIHRoZSBy
ZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3NlcwotICAg
ICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMuCi0gICAgICAgIFZlY3RvcjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiosIDY0PiBtX21hdGNoZWREZWNsczsKLQotICAgICAgICAvLyBB
IGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVt
ZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCi0gICAgICAgIC8vIG1lcmdlIHNv
cnRpbmcuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxl
czsKLQotICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7Ci0gICAgICAgIAot
ICAgICAgICBIYXNoU2V0PGludD4gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOyAvLyBIYXNoIG9m
IENTU1Byb3BlcnR5SURzCi0KLSAgICAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1f
bWVkaXVtOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsK
LQotICAgICAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0KLSAgICAgICAgU2VsZWN0b3JD
aGVja2VyIG1fY2hlY2tlcjsKLQotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgICAgICBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAg
ICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICAgICAgRUluc2lkZUxpbmsg
bV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7
Ci0gICAgICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICAgICAgYm9vbCBtX2Zv
bnREaXJ0eTsKLSAgICAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICAg
ICAgCi0gICAgICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAg
ICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZURlY2xzOwotICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKKyAgICAvLyBXZSBjb2xsZWN0IHRoZSBz
ZXQgb2YgZGVjbHMgdGhhdCBtYXRjaCBpbiB8bV9tYXRjaGVkRGVjbHN8LiAgV2UgdGhlbiB3YWxr
IHRoZQorICAgIC8vIHNldCBvZiBtYXRjaGVkIGRlY2xzIGZvdXIgdGltZXMsIG9uY2UgZm9yIHRo
b3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlcnMgZGVwZW5kIG9uIChsaWtlIGZvbnQtc2l6ZSksCisg
ICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3IgYWxsIHRoZSByZW1haW5pbmcgcHJvcGVy
dGllcy4gIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3NlcworICAgIC8vIGZvciBhbnkgIWlt
cG9ydGFudCBydWxlcy4KKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCA2
ND4gbV9tYXRjaGVkRGVjbHM7CisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNl
dCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVy
IHVzZWQgZm9yCisgICAgLy8gbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8Y29uc3QgUnVsZURh
dGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVs
ZUxpc3Q7CisgICAgCisgICAgSGFzaFNldDxpbnQ+IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsg
Ly8gSGFzaCBvZiBDU1NQcm9wZXJ0eUlEcworCisgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0
b3I+IG1fbWVkaXVtOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxl
OworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JDaGVja2Vy
IG1fY2hlY2tlcjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICBSZW5k
ZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0
eWxlOworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxl
ZEVsZW1lbnQ7CisgICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworICAgIENvbnRh
aW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7
CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzOworICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTRm9u
dFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOworICAgIFZlY3RvcjxN
ZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwog
Ci0gICAgICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5Owot
ICAgIH07CisgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAg
ICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29t
KQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5p
Y2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAx
MSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKworI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworI2lmIFVTRShQTEFURk9S
TV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUg
IlZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJYTGlua05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc3Ry
aWN0UGFyc2luZykKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3N0cmljdFBh
cnNpbmcoc3RyaWN0UGFyc2luZykKKyAgICAsIG1fZG9jdW1lbnRJc0hUTUwoZG9jdW1lbnQtPmlz
SFRNTERvY3VtZW50KCkpCisgICAgLCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seShmYWxzZSkKKyAg
ICAsIG1fcHNldWRvU3R5bGUoTk9QU0VVRE8pCisgICAgLCBtX2hhc1Vua25vd25Qc2V1ZG9FbGVt
ZW50cyhmYWxzZSkKKyAgICAsIG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhmYWxzZSkK
K3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUo
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzTGluaygpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgIGlmIChlbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShocmVmQXR0cik7CisgICAgCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gMDsKK30K
KworRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2Fz
ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIEFTU0VSVChlbGVtZW50LT5pc0xpbmso
KSk7CisgICAgCisgICAgY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShl
bGVtZW50KTsKKyAgICBpZiAoIWF0dHIgfHwgYXR0ci0+aXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBOb3RJbnNpZGVMaW5rOworICAgIAorI2lmIFBMQVRGT1JNKFFUKQorICAgIFZlY3RvcjxVQ2hh
ciwgNTEyPiB1cmw7CisgICAgdmlzaXRlZFVSTChtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRy
LCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52
aXNpdGVkTGluazsKKyAgICAKKyAgICAvLyBJZiB0aGUgUXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUg
aGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhhdmUgdG8gZmFsbGJhY2sKKyAgICAvLyB0byB0aGUg
b2xkIGdsb2JhbCBoaXN0b3J5LgorICAgIFFXZWJIaXN0b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFX
ZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCk7CisgICAgaWYgKGlmYWNlKQor
ICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwgdXJsLnNpemUoKSkpID8gSW5zaWRlVmlzaXRlZExp
bmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAgIExpbmtIYXNoIGhhc2ggPSB2aXNp
dGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CisgICAgaWYgKCFoYXNoKQorICAg
ICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbHNlCisgICAgTGlua0hhc2ggaGFz
aCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKTsKKyAgICBp
ZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworI2VuZGlmCisg
ICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAgICBQYWdl
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBJ
bnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAgIG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0
YXRlLmFkZChoYXNoKTsKKyAgICAKKyNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKyAgICBy
ZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnZpc2l0ZWRMaW5rU3RyYXRlZ3koKS0+aXNMaW5r
VmlzaXRlZChwYWdlLCBoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVk
TGluazsKKyNlbHNlCisgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChoYXNo
KSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbmRpZgorfQor
Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBF
bGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAorewor
ICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICBpZiAoaXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgIC8v
IGZhc3RDaGVja1NlbGVjdG9yIGFzc3VtZXMgY2xhc3MgYW5kIGlkIG1hdGNoIGZvciB0aGUgdG9w
IHNlbGVjdG9yLgorICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFz
cykgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZh
bHVlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBp
ZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICAgICAgaWYgKCEo
ZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNl
bC0+dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQpOworICAgIH0KKyAg
ICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNl
LCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOworfQorCituYW1lc3BhY2UgeworICAgIAoraW5s
aW5lIGJvb2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIXNlbGVjdG9yLT5oYXNUYWcoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUg
PSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFy
QXRvbSAmJiBsb2NhbE5hbWUgIT0gZWxlbWVudC0+bG9jYWxOYW1lKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IHNlbGVjdG9y
LT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICByZXR1cm4gbmFtZXNwYWNlVVJJID09IHN0YXJB
dG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKK30KKwordGVt
cGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCop
PgoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
JiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yTWF0Y2hFbGVtZW50KQoreworICAgIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlID0gc2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpOworICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHZh
bHVlKSAmJiBzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKSB7CisgICAgICAg
ICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQp
CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9y
LT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7CisgICAgICAgICAgICAg
ICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgICAgICAgICAgICAgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3Vi
U2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0b3BDaGlsZE9y
U3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIENoaWxkIG9yIHN1YnNlbGVjdG9yIGNoZWNr
IGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCBlbGVtZW50IGlzIG51bGwsIHRv
cENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0aGUgdmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFu
ZCBoYWQgdG8gbWF0Y2ggCisgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3
ZXJlIGNoZWNraW5nLgorICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8g
VGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAg
ICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5k
IHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KKyAg
ICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOworICAgICAgICAgICAg
ZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpOworICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21p
Y1N0cmluZ0ltcGwqIHZhbHVlKSAKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAm
JiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KS5jb250YWlucyh2YWx1ZSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgCit7CisgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVu
dCosIEF0b21pY1N0cmluZ0ltcGwqKQoreworICAgIHJldHVybiB0cnVlOworfQorICAgIAorfQor
Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChpc0Zh
c3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpOworICAgIAorICAgIC8vIFRoZSB0b3Agc2Vs
ZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVsZSBoYXNoZXMgaGF2ZSBhbHJlYWR5
IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCisgICAgaWYgKCFzZWxlY3RvclRhZ01hdGNo
ZXMoZWxlbWVudCwgc2VsZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7CisgICAgY29uc3Qg
RWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gMDsKKyAgICBpZiAo
c2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5y
ZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgCisgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlv
bigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAKKyAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7CisgICAgCisgICAgLy8gV2Uga25vdyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhh
cyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmluYXRvcnMgb25seSBhbmQg
YWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAgICB3aGlsZSAoc2VsZWN0b3IpIHsKKyAgICAg
ICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6Q2xhc3M6CisgICAgICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rv
cjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0
b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xl
U2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNl
bGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpOb25lOgorICAgICAgICAgICAgICAgIGlmICghZmFzdENoZWNr
U2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxk
T3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKK3sKKyAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKSkgeworICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6
OkRlc2NlbmRhbnQgJiYgc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OkNoaWxk
ICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoICE9
IENTU1NlbGVjdG9yOjpOb25lICYmIHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpJ
ZCAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBSZWN1cnNp
dmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycworLy8gSXQgY2FuIHJldHVybiAz
IGRpZmZlcmVudCB2YWx1ZXM6CisvLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhlIHNl
bGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQorLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAg
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQorLy8gKiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcg
b3IgYW5jZXN0b3Igb2YgZQorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1
ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVk
TGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJl
bnRTdHlsZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIFNwZWM6IENTUzIgc2Vs
ZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9N
IHRyZWUKKyAgICAvLyBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIGZv
cm1hbCBkb2N1bWVudCBzdHJ1Y3R1cmUuCisgICAgaWYgKGUtPmlzU1ZHU2hhZG93Um9vdCgpKQor
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisjZW5kaWYKKyAgICAKKyAg
ICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKKyAgICBpZiAoIWNoZWNrT25lU2VsZWN0
b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmss
IGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNMb2NhbGx5OworICAgIAorICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMg
aGFzIHRvIG1hdGNoCisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsLT5y
ZWxhdGlvbigpOworICAgIAorICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKKyAgICBzZWwgPSBzZWwt
PnRhZ0hpc3RvcnkoKTsKKyAgICBpZiAoIXNlbCkKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0
Y2hlczsKKyAgICAKKyAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9y
KQorICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9y
IHRoZSBwc2V1ZG9TdHlsZQorICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAm
JiBtX3BzZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1ZG8pCisgICAgICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgCisgICAgLy8gQ2hlY2sgZm9yIG5lc3RlZCBsaW5r
cy4KKyAgICBpZiAobV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzICYmICFpc1N1YlNlbGVj
dG9yKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICBpZiAoY3VycmVudFN0
eWxlICYmIGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygpICYmIGUtPmlzTGluaygpKSB7CisgICAg
ICAgICAgICBpZiAoZW5jb3VudGVyZWRMaW5rKQorICAgICAgICAgICAgICAgIG1faXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50
IHRvIHRoZSBzdHlsZSBiZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHN3aXRjaCAocmVsYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIGUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5j
b3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWls
c0xvY2FsbHkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoK
KyAgICAgICAgeworICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rv
cihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5v
ZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pOworICAgICAgICAgICAgbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNz
ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6CisgICAgICAgICAgICBpZiAoIW1faXND
b2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCkt
PmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUo
KS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYg
KCFuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Cisg
ICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAg
ICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQ
c2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICAgICAgICAgIGlmIChtYXRj
aCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKKyAgICAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52
YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CisgICAgICAgICAgICAv
LyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQg
YWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCisgICAgICAg
ICAgICAvLyB0byBmb2xsb3cgdGhlIHBzZXVkbyBlbGVtZW50cy4KKyAgICAgICAgICAgIGlmICgo
ZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRv
ICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNUSU9OICYmCisgICAgICAgICAg
ICAgICAgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJ
WkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgICAgICBy
ZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRl
cmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgorICAgICAgICB7CisgICAgICAgICAgICBO
b2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAg
ICAgaWYgKHNoYWRvd0hvc3ROb2RlID09IGUgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnRO
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owor
ICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzaGFkb3dIb3N0Tm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKK30KKworc3RhdGljIHZvaWQgYWRkTG9jYWxOYW1l
VG9TZXQoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNldCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgcU5hbWUpCit7CisgICAgc2V0LT5hZGQocU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKK30K
Kworc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBjcmVhdGVIdG1sQ2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlc1NldCgpCit7CisgICAgLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBhdHRy
aWJ1dGVzIGluIEhUTUwgNC4wMSB3aXRoIHZhbHVlcyBtYXJrZWQgYXMgIltDSV0iIG9yIGNhc2Ut
aW5zZW5zaXRpdmUKKyAgICAvLyBNb3ppbGxhIHRyZWF0cyBhbGwgb3RoZXIgdmFsdWVzIGFzIGNh
c2Utc2Vuc2l0aXZlLCB0aHVzIHNvIGRvIHdlLgorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+KiBhdHRyU2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OworICAgIAorICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdF9jaGFyc2V0QXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgYWxpZ25BdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBh
bGlua0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGF4aXNBdHRyKTsKKyAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBiZ2NvbG9yQXR0cik7CisgICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgY2hhcnNldEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIGNoZWNrZWRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjbGVh
ckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvZGV0eXBlQXR0cik7Cisg
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29sb3JBdHRyKTsKKyAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCBjb21wYWN0QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgZGVjbGFyZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRlZmVy
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlyQXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlzYWJsZWRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBlbmN0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgZmFjZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZyYW1lQXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHJlZmxhbmdBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBodHRwX2VxdWl2QXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgbGFuZ0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IGxhbmd1YWdlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGlua0F0dHIp
OworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1lZGlhQXR0cik7CisgICAgYWRkTG9j
YWxOYW1lVG9TZXQoYXR0clNldCwgbWV0aG9kQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgbXVsdGlwbGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBu
b2hyZWZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3Jlc2l6ZUF0dHIp
OworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5vc2hhZGVBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3dyYXBBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCByZWFkb25seUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IHJlbEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJldkF0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJ1bGVzQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgc2NvcGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBzY3JvbGxpbmdBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzZWxlY3Rl
ZEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNoYXBlQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGFyZ2V0QXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgdGV4dEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IHR5cGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2YWxpZ25BdHRyKTsK
KyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2YWx1ZXR5cGVBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCB2bGlua0F0dHIpOworICAgIAorICAgIHJldHVybiBhdHRy
U2V0OworfQorCitzdGF0aWMgYm9vbCBodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFs
dWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cikKK3sKKyAgICBzdGF0aWMgSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4qIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0ID0gY3JlYXRl
SHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKTsKKyAgICBib29sIGlzUG9zc2libGVI
VE1MQXR0ciA9ICFhdHRyLmhhc1ByZWZpeCgpICYmIChhdHRyLm5hbWVzcGFjZVVSSSgpID09IG51
bGxBdG9tKTsKKyAgICByZXR1cm4gaXNQb3NzaWJsZUhUTUxBdHRyICYmIGh0bWxDYXNlSW5zZW5z
aXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlucyhhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Cit9
CisKK3N0YXRpYyBib29sIGF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKEF0dHJpYnV0ZSog
YXR0cmlidXRlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIpCit7CisgICAgaWYg
KHNlbGVjdG9yQXR0ci5sb2NhbE5hbWUoKSAhPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHNlbGVjdG9yQXR0ci5wcmVmaXgo
KSA9PSBzdGFyQXRvbSB8fCBzZWxlY3RvckF0dHIubmFtZXNwYWNlVVJJKCkgPT0gYXR0cmlidXRl
LT5uYW1lc3BhY2VVUkkoKTsKK30KKworc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVz
KEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25z
dCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3sKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlSXRlbS0+dmFsdWUoKTsKKyAg
ICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBz
d2l0Y2ggKG1hdGNoKSB7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgorICAgICAg
ICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWxlY3RvclZhbHVlICE9IHZhbHVlIDogIWVxdWFs
SWdub3JpbmdDYXNlKHNlbGVjdG9yVmFsdWUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
TGlzdDogeworICAgICAgICAgICAgLy8gSWdub3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxlY3Rv
cnMgY29udGFpbmluZyBzcGFjZXMKKyAgICAgICAgICAgIGlmIChzZWxlY3RvclZhbHVlLmNvbnRh
aW5zKCcgJykgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFNlYXJj
aEF0ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgc2l6
ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3RvclZhbHVlLCBzdGFydFNlYXJjaEF0LCBj
YXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gbm90Rm91bmQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
IWZvdW5kUG9zIHx8IHZhbHVlW2ZvdW5kUG9zIC0gMV0gPT0gJyAnKSB7CisgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGVuZFN0ciA9IGZvdW5kUG9zICsgc2VsZWN0b3JWYWx1ZS5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2
YWx1ZVtlbmRTdHJdID09ICcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBX
ZSBmb3VuZCBhIG1hdGNoLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBObyBtYXRjaC4gS2VlcCBsb29raW5nLgorICAgICAgICAgICAgICAg
IHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250YWluOgor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5jb250YWlucyhzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0
aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVn
aW46CisgICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2Fz
ZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkVuZDoKKyAgICAgICAgICAgIGlmICghdmFsdWUuZW5kc1dpdGgoc2VsZWN0b3JWYWx1ZSwg
Y2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6Okh5cGhlbjoKKyAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA8IHNlbGVjdG9y
VmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIEl0IHRoZXkgc3Rh
cnQgdGhlIHNhbWUsIGNoZWNrIGZvciBleGFjdCBtYXRjaCBvciBmb2xsb3dpbmcgJy0nOgorICAg
ICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkgJiYg
dmFsdWVbc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKV0gIT0gJy0nKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzczoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5v
ZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgc2VsZWN0b3JBdHRyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUs
IGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJp
YnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVt
ID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
YXR0cmlidXRlUXVhbGlmaWVkTmFtZU1hdGNoZXMoYXR0cmlidXRlSXRlbSwgc2VsZWN0b3JBdHRy
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBtYXRjaCwgc2VsZWN0b3JWYWx1ZSwgY2FzZVNl
bnNpdGl2ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1l
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK3sKKyAgICBB
U1NFUlQoZSk7CisgICAgaWYgKCFlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZSwgc2VsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0ZSgpKSB7CisgICAgICAgIGlmIChzZWwtPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQorICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0Ns
YXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFzc05hbWVzKCkuY29u
dGFpbnMoc2VsLT52YWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZWwtPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkKQorICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0lEKCkgJiYgZS0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2VsLT5hdHRyaWJ1dGUoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2VyZSBlbGVtZW50U3R5bGUgaXMg
MC4KKyAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlzU3R5bGVkRWxlbWVudCgpIHx8
ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01hcHBlZEF0dHJpYnV0ZShhdHRy
KSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9ubHlBdHRyKSkpCisgICAgICAg
ICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoKTsgLy8g
U3BlY2lhbC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFkb25seSIgYXR0cmlidXRlcyBzbyBpbnB1
dCBmb3JtIGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4KKyAgICAgICAgCisgICAgICAgIE5hbWVk
Tm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgIGlmICgh
YXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRl
SGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7CisgICAgICAgIAorICAgICAgICBpZiAoIWFu
eUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1h
dGNoPihzZWwtPm1fbWF0Y2gpLCBhdHRyLCBzZWwtPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoc2VsLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgeworICAgICAgICAvLyBIYW5kbGUgOm5v
dCB1cCBmcm9udC4KKyAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9Ob3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChzZWwtPnNlbGVjdG9yTGlzdCgpKTsK
KyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9IHNlbC0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50YWdIaXN0b3J5KCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0LiBJIGRvbid0IHJlYWxseSBrbm93IHdo
eSB0aGlzIGlzIGEKKyAgICAgICAgICAgICAgICAvLyByZXN0cmljdGlvbiBpbiBDU1MzLCBidXQg
aXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgorICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIg
ZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycworICAgICAgICAgICAgICAgIEFTU0VSVChz
dWJTZWwtPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBl
LCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxl
bWVudFBhcmVudFN0eWxlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAm
JiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWlj
UHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSkg
eworICAgICAgICAgICAgLy8gQ1NTIHNjcm9sbGJhcnMgbWF0Y2ggYSBzcGVjaWZpYyBzdWJzZXQg
b2YgcHNldWRvIGNsYXNzZXMsIGFuZCB0aGV5IGhhdmUgc3BlY2lhbGl6ZWQgcnVsZXMgZm9yIGVh
Y2gKKyAgICAgICAgICAgIC8vIChzaW5jZSB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW52b2x2ZWQp
LgorICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Moc2VsLCBkeW5h
bWljUHNldWRvKTsKKyAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvID09IFNFTEVDVElP
TikgeworICAgICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9XaW5kb3dJbmFjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBjaGVja2luZy4KKyAg
ICAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFBz
ZXVkbyBjbGFzc2VzOgorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQgdXAgYWJvdmUuCisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eTogeworICAgICAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBlLT5m
aXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1faXND
b2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAm
JiAoZS0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCkt
PnVuaXF1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNl
dEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKKyAgICAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBt
YXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKKyAgICAgICAgICAgICAg
ICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50
U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
ZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxl
LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlOiB7CisgICAgICAgICAgICAgICAg
Ly8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCisg
ICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFn
UU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGlu
ZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikt
Pmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lz
Q29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKKyAgICAgICAgICAgICAg
ICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50
CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50
U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZTogeworICAgICAgICAgICAgICAgIC8vIGxh
c3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKKyAgICAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50
U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
biA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGlu
ZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghbikK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
T25seUNoaWxkOiB7CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENo
aWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgbGFzdENoaWxkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0Q2hpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RD
aGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9p
c0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGls
ZCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUt
PnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RD
aGlsZCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5
bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBzZWxlY3RvciBpcyB2ZXJ5IHNsb3cuCisgICAgICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Zmlyc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBib29sIGxhc3RDaGlsZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0g
ZS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChmaXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gZS0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQgJiYgbGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b050aENoaWxkOiB7CisgICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlu
dCBjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1Np
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcyA9IG4tPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJbmRleCgpIDogMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6
IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRF
bGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Q2hpbGRJ
bmRleChjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgo
Y291bnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZUeXBlOiB7CisgICAgICAgICAgICAgICAg
aWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAg
ICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0
aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1h
dGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDogeworICAgICAg
ICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVs
ZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdD
aGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
ID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBu
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RP
ZlR5cGU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlz
RmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb1RhcmdldDoKKyAgICAgICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NU
YXJnZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6CisgICAg
ICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlz
dCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
c2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVj
dG9yLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHls
ZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgor
ICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7CisgICAgICAgICAgICAgICAgaWYgKCFlIHx8
ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+
dG9JbnB1dEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVu
dC0+aXNBdXRvZmlsbGVkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICAgICAg
ICAgIGlmIChlICYmIGUtPmlzTGluaygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1f
aXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgICAgICAg
ICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2lz
TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
b3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6
IHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgZS0+
cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6
CisgICAgICAgICAgICAgICAgaWYgKGUgJiYgKChlLT5mb2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKSAmJiBlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1
c2VkQW5kQWN0aXZlKCkpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXMpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogeworICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGlu
IHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGgg
bm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmhvdmVyIHNob3VsZCBub3QgbWF0Y2gg
YW55dGhpbmcuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgorICAg
ICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2Vs
LT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBp
biBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdp
dGggbm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1h
dGNoIGFueXRoaW5nLiAKKyAgICAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlz
U3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8
IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVS
dWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVk
QnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmFjdGl2ZSgp
IHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxl
Y3Rvcjo6UHNldWRvQWN0aXZlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6CisgICAgICAgICAgICAgICAgaWYgKGUg
JiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsUGFnZU1lZGlhOgorICAgICAgICAg
ICAgICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50KCkgJiYgZS0+ZG9jdW1lbnQoKS0+aXNNZWRp
YURvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUt
PmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0Rpc2FibGVkOgorICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZS0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5OiB7CisgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgZS0+
aXNSZWFkT25seUZvcm1Db250cm9sKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUg
fHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAm
JiAhZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNvbnRyb2woKTsKKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgorICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUt
PmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvVmFsaWQ6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250
YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgICAgIHJldHVybiBlLT53aWxs
VmFsaWRhdGUoKSAmJiBlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgICAg
ICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ludmFsaWQ6IHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAg
ICAgICAgICAgIHJldHVybiAoZS0+d2lsbFZhbGlkYXRlKCkgJiYgIWUtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IH0gY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hlY2tlZDogeworICAgICAgICAgICAgICAgIGlm
ICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNr
ZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBz
YXlzIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFu
ZCBpbmRldGVybWluYXRlLiAgV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNj
ZW5lcyBhbmQganVzdAorICAgICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUg
aW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCisgICAgICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFy
Q2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIHByb2dy
ZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KGUpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1l
bnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+
aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvUm9vdDoKKyAgICAgICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9MYW5nOiB7CisgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gZS0+Y29t
cHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhcmd1bWVudCA9IHNlbC0+YXJndW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgo
KSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0n
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuOgorICAgICAgICAgICAgICAgIC8v
IFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9j
dW1lbnQncyBjdXJyZW50IGZ1bGxzY3JlZW4gCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBp
cyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwgdGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xh
c3MgYXBwbGllcyB0byAKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGVsZW1lbnQuIEFsc28sIGFu
IDxpZnJhbWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3Np
bmcgCisgICAgICAgICAgICAgICAgLy8gY29udGV4dCdzIERvY3VtZW50IGlzIGluIHRoZSBmdWxs
c2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgor
ICAgICAgICAgICAgICAgIGlmIChlLT5pc0ZyYW1lRWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGUpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
ZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZSA9PSBlLT5kb2N1bWVudCgp
LT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uOgorICAgICAgICAg
ICAgICAgIGlmIChlICE9IGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxl
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5pbWF0aW5nRnVsbFNjcmVlbigpOworICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkFuY2VzdG9yOgorICAgICAg
ICAgICAgICAgIHJldHVybiBlLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuRG9jdW1lbnQ6CisgICAgICAg
ICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwg
dGhlICdmdWxsLXNjcmVlbi1kb2N1bWVudCcgcHNldWRvY2xhc3MgYXBwbGllcyAKKyAgICAgICAg
ICAgICAgICAvLyB0byBhbGwgZWxlbWVudHMgb2YgdGhhdCBEb2N1bWVudC4KKyAgICAgICAgICAg
ICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luUmFuZ2U6CisgICAg
ICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVs
ZXMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNJblJhbmdlKCk7CisgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PdXRPZlJhbmdlOgorICAgICAgICAgICAgICAgIGlm
ICghZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGUtPmlzT3V0T2ZSYW5nZSgpOworICAgICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvVW5rbm93bjoKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb05vdFBhcnNlZDoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgIGlmICghZWxlbWVudFN0eWxlICYmICFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgeworICAgICAg
ICAgICAgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGUtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52YWx1ZSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChz
ZWwtPnBzZXVkb1R5cGUoKSk7CisgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9MRVRURVIp
IHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyh0cnVlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCisgICAgICAgICAg
ICBkeW5hbWljUHNldWRvID0gcHNldWRvSWQ7CisgICAgfQorICAgIC8vICMjIyBhZGQgdGhlIHJl
c3Qgb2YgdGhlIGNoZWNrcy4uLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1
ZG9JZCYpIGNvbnN0Cit7CisgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBSZW5kZXJT
Y3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpOworICAgIFNjcm9sbGJhclBhcnQg
cGFydCA9IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0eWxlUmVzb2x2ZSgpOworICAgIAorICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgZm9yIHJlc2l6ZXJzIGFuZCBzY3Jv
bGxiYXIgY29ybmVycy4gIEV2ZW50dWFsbHkgOndpbmRvdy1pbmFjdGl2ZSBzaG91bGQgYmVjb21l
IGEgcmVhbAorICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQganVzdCBhcHBseSB0byBldmVyeXRoaW5n
LgorICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93
SW5hY3RpdmUpCisgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICAKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKTsKKyAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6CisgICAgICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCk7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rp
c2FibGVkOgorICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxiYXItPmVuYWJsZWQoKTsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKKyAgICAgICAgICAgIFNjcm9sbGJh
clBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7CisgICAgICAgICAg
ICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhv
dmVyZWRQYXJ0ICE9IE5vUGFydDsKKyAgICAgICAgICAgIGlmIChwYXJ0ID09IFRyYWNrQkdQYXJ0
KQorICAgICAgICAgICAgICAgIHJldHVybiBob3ZlcmVkUGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8
IGhvdmVyZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQgfHwgaG92ZXJlZFBhcnQgPT0gVGh1bWJQ
YXJ0OworICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gaG92ZXJlZFBhcnQ7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOiB7CisgICAgICAgICAgICBT
Y3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOworICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBwcmVzc2VkUGFydCAhPSBOb1BhcnQ7CisgICAgICAgICAgICBpZiAocGFydCA9PSBUcmFj
a0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IHByZXNzZWRQYXJ0ID09
IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IHByZXNzZWRQYXJ0OworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvcml6b250YWw6CisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXI7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZlcnRpY2FsOgorICAgICAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGVjcmVtZW50OgorICAgICAgICAg
ICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0
b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvSW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQg
PT0gRm9yd2FyZFRyYWNrUGFydDsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3Rh
cnQ6CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBh
cnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQ7Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuZDoKKyAgICAgICAgICAgIHJldHVybiBw
YXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQg
fHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9Eb3VibGVCdXR0b246IHsKKyAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1l
bnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVu
dCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0
ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVC
b3RoOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9
PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3Ro
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IAorICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9TaW5nbGVCdXR0b246IHsKKyAgICAgICAgICAgIFNjcm9sbGJhckJ1
dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0
dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9Ob0J1dHRvbjogeworICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0
b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7Cisg
ICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQ
bGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKKyAgICAgICAgICAgIGlmIChw
YXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQ
bGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBT
Y3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ29ybmVyUHJlc2VudDoK
KyAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwordm9pZCBTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNo
YW5nZWQoKQoreworICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2Rl
LT5pc0xpbmsoKSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtI
YXNoIHZpc2l0ZWRIYXNoKQoreworICAgIGlmICghbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3Rh
dGUuY29udGFpbnModmlzaXRlZEhhc2gpKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChOb2Rl
KiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5v
ZGUpOworICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFz
ZVVSTCgpLCAqYXR0cikgPT0gdmlzaXRlZEhhc2gpCisgICAgICAgICAgICBub2RlLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5j
b20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1
cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBT
ZWxlY3RvckNoZWNrZXJfaAorI2RlZmluZSBTZWxlY3RvckNoZWNrZXJfaAorCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVD
b25zdGFudHMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTZWxlY3RvcjsKK2NsYXNz
IERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIFNlbGVjdG9yQ2hlY2tlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsKK3B1YmxpYzoKKyAg
ICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcpOworCisgICAg
ZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxs
eSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKworICAgIGJvb2wgY2hlY2tTZWxlY3RvcihD
U1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFs
c2UpIGNvbnN0OworICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvcios
IEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBi
b29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1l
bnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CisgICAgc3RhdGljIGJvb2wgZmFzdENoZWNr
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CisKKyAgICBFSW5z
aWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3Q7CisgICAg
dm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFu
Z2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKTsKKyAgICAKKyAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CisgICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9CisgICAgCisgICAgYm9vbCBpc0NvbGxl
Y3RpbmdSdWxlc09ubHkoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGVjdGluZ1J1bGVzT25seTsg
fQorICAgIHZvaWQgc2V0Q29sbGVjdGluZ1J1bGVzT25seShib29sIGIpIHsgbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHkgPSBiOyB9CisgICAgCisgICAgYm9vbCBpc01hdGNoaW5nVmlzaXRlZFBzZXVk
b0NsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzOyB9
CisgICAgdm9pZCBzZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhib29sIGIpIHsgbV9pc01h
dGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gYjsgfQorICAgIAorICAgIFBzZXVkb0lkIHBzZXVk
b1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9TdHlsZTsgfQorICAgIHZvaWQgc2V0UHNl
dWRvU3R5bGUoUHNldWRvSWQgcHNldWRvSWQpIHsgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOyB9
CisKKyAgICBib29sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOyB9CisgICAgdm9pZCBjbGVhckhhc1Vua25vd25Qc2V1
ZG9FbGVtZW50cygpIHsgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsgfQorCitw
cml2YXRlOgorICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQq
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291
bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdDsKKyAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3Iq
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CisKKyAgICBFSW5zaWRlTGluayBkZXRl
cm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKKworICAgIERv
Y3VtZW50KiBtX2RvY3VtZW50OworICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOworICAgIGJvb2wg
bV9kb2N1bWVudElzSFRNTDsKKyAgICBib29sIG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5OworICAg
IFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7CisgICAgbXV0YWJsZSBib29sIG1faGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzOworICAgIG11dGFibGUgYm9vbCBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRv
Q2xhc3M7CisgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtIYXNoLCBMaW5rSGFzaEhhc2g+IG1fbGlu
a3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOworfTsKKworaW5saW5lIEVJbnNpZGVMaW5rIFNlbGVj
dG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7
CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgcmV0dXJu
IE5vdEluc2lkZUxpbms7CisgICAgcmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVs
ZW1lbnQpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2
aXNpb24gOTQ1ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MjMsNyArMTgyMyw3IEBAIGJvb2wgRWxlbWVudDo6d2Via2l0TWF0Y2hlc1Nl
bGVjdG9yKGNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIENTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwgc3Ry
aWN0UGFyc2luZyk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVu
dCgpLCBzdHJpY3RQYXJzaW5nKTsKICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNl
bGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc2VsZWN0b3IpKSB7CiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxl
Y3RvcihzZWxlY3RvciwgdGhpcykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIFNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkoTm9kZSogcm9vdE4KICAgICAsIG1f
c2VsZWN0b3JDaGVja2VyKHJvb3ROb2RlLT5kb2N1bWVudCgpLCAhcm9vdE5vZGUtPmRvY3VtZW50
KCktPmluUXVpcmtzTW9kZSgpKQogewogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0g
c2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzZWxlY3RvcikpCi0gICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChTZWxlY3RvckRh
dGEoc2VsZWN0b3IsIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChT
ZWxlY3RvckRhdGEoc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2Vs
ZWN0b3Ioc2VsZWN0b3IpKSk7CiB9CiAgICAgCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBTZWxlY3Rv
clF1ZXJ5OjpxdWVyeUFsbCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5
LmgJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnku
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTZWxlY3RvclF1ZXJ5
X2gKICNkZWZpbmUgU2VsZWN0b3JRdWVyeV9oCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICBOb2RlKiBtX3Jvb3ROb2RlOwogICAgIFZlY3RvcjxTZWxlY3RvckRhdGE+IG1fc2Vs
ZWN0b3JzOwotICAgIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9y
Q2hlY2tlcjsKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CiB9OwogCiB9
Cg==
</data>
<flag name="commit-queue"
          id="102912"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106488</attachid>
            <date>2011-09-06 14:35:43 -0700</date>
            <delta_ts>2011-09-07 01:12:36 -0700</delta_ts>
            <desc>patch for bots to chew</desc>
            <filename>split-selectorchecker-5.patch</filename>
            <type>text/plain</type>
            <size>174939</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU2VsZWN0b3JDaGVja2Vy
IG91dCBmcm9tIENTU1N0eWxlU2VsZWN0b3Igc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlIFNlbGVjdG9yQ2hlY2tlciB0byBTZWxlY3Rv
ckNoZWNrZXIuaC9jcHAKKyAgICAgICAgLSBNYWtlIHByaXZhdGUgZnVuY3Rpb25zIHByaXZhdGUK
KyAgICAgICAgLSBNYWtlIG1lbWJlcnMgcHJpdmF0ZSwgYWRkIGFjY2Vzc29ycworICAgICAgICAt
IE1vdmUgbV9zYW1lT3JpZ2luT25seSB0byBDU1NTdHlsZVNlbGVjdG9yIGFzIGl0IGlzIG5vdCB1
c2VkIGJ5IFNlbGVjdG9yQ2hlY2tlcgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnNvcnRNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
OjptYXRjaFVBUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5
bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVk
b1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0
UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0Rm9udFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpwYXJlbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Zm9u
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBhcmVu
dEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
ZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c2V0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRFZmZlY3Rp
dmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFRleHRTaXpl
QWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZvbnRTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc1NpYmxpbmdSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2VzRmlyc3RMaW5lUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc0JlZm9yZUFmdGVyUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc0xpbmtSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppc1JpZ2h0UGFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJlbnRTdGFj
a0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlTm90WWV0
QXZhaWxhYmxlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpsaW5rQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjph
ZGRMb2NhbE5hbWVUb1NldCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdG1sQ2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlc1NldCk6CisgICAgICAgIChXZWJDb3JlOjpodG1sQXR0cmlidXRlSGFz
Q2FzZUluc2Vuc2l0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlUXVhbGlm
aWVkTmFtZU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlVmFsdWVNYXRjaGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFueUF0dHJpYnV0ZU1hdGNoZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OnN0cmljdFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2Vy
Ojppc0NvbGxlY3RpbmdSdWxlc09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjpzZXRDb2xsZWN0aW5nUnVsZXNPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q2hlY2tlcjo6aXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OnNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpzZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6Omhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3
ZWJraXRNYXRjaGVzU2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkpOgorICAgICAg
ICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisKIDIwMTEtMDktMDYgIE5hdCBEdWNhICA8bmR1Y2FA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUkVHUkVTU0lPTig5NDM1Myk6IHJl
cXVlc3RBbmltYXRpb25GcmFtZSBub3QgdGhyb3R0bGVkIGluIGNvbXBvc2l0aW5nIHBhdGgKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNiArNDcxLDcgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAogICAgIGNz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKICAgICBjc3MvUkdCQ29sb3IuY3BwCisgICAgY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAgY3NzL1N0eWxl
QmFzZS5jcHAKICAgICBjc3MvU3R5bGVMaXN0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1JlY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1JHQkNvbG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1JHQkNvbG9yLmggXAorCVNv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCYXNlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NDU4
NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjQx
Nyw2ICsyNDE3LDggQEAKICAgICAgICAgICAgICdjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NWR0NTU1BhcnNlci5jcHAnLAogICAgICAg
ICAgICAgJ2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCcsCisgICAgICAgICAgICAnY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9TZWxlY3RvckNoZWNrZXIuaCcs
CiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1No
YWRvd1ZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZUJhc2UuY3BwJywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3Nz
L01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIFwKICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIu
Y3BwIFwKICAgICBjc3MvUkdCQ29sb3IuY3BwIFwKKyAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNw
cCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAgICAgY3NzL1N0eWxlQmFzZS5jcHAgXAog
ICAgIGNzcy9TdHlsZUxpc3QuY3BwIFwKQEAgLTE0NTAsNiArMTQ1MSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggXAogICAgIGNzcy9NZWRpYVF1ZXJ5
TWF0Y2hlci5oIFwKICAgICBjc3MvUkdCQ29sb3IuaCBcCisgICAgY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oIFwKICAgICBjc3MvU2hhZG93VmFsdWUuaCBcCiAgICAgY3NzL1N0eWxlQmFzZS5oIFwKICAg
ICBjc3MvU3R5bGVMaXN0LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDk0NTg3KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMjc0LDYgKzMz
Mjc0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGNzc1xTZWxlY3RvckNoZWNrZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU2VsZWN0b3JDaGVja2VyLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTaGFkb3dWYWx1ZS5j
cHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQ1ODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTU2NjAsNiArNTY2MCw4IEBACiAJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hU
TUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEI0MjM3MjBDQkZCNkUwMDBBRjJFQ0UgLyogSlNIVE1MU291cmNlRWxlbWVudC5o
ICovOyB9OwogCQlFNDQ2MTQ1MTBDRDY4QTM1MDBGQURBNzUgLyogUmVuZGVyVmlkZW8uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzMwQ0JG
QjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmNwcCAqLzsgfTsKIAkJRTQ0NjE0NTIwQ0Q2OEEz
NTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzNDBDQkZCNjA5MDBBRjJFQ0UgLyogUmVuZGVyVmlkZW8u
aCAqLzsgfTsKKwkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRCNEJC
MTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCAqLzsgfTsKKwkJRTQ0QjRC
QjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8q
IFNlbGVjdG9yQ2hlY2tlci5oICovOyB9OwogCQlFNDUzMjJBQjE0MENFMjY3MDA1QTBGOTIgLyog
U2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDUzMjJBOTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgKi87
IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBQTE0MENFMjY3
MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0
QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyNDIz
LDYgKzEyNDI1LDggQEAKIAkJRTQ0NjE0MTEwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhRXJyb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTIwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpT
VGltZVJhbmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Rp
bWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQxMzBDRDY4
MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDRC
NEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTMyMkE5MTQwQ0UyNjcwMDVBMEY5
MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNlbGVjdG9yUXVlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUz
MjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xOTU2Niw2ICsxOTU3MCw4IEBACiAJCQkJQkM3NERBMzYxMDEzRjNG
NzAwNzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzc0REEzNTEwMTNGM0Y3MDA3OTg3
QUQgLyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBBQThGREQxMDBCMTg3QTQgLyogUkdC
Q29sb3IuaWRsICovLAorCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuY3BwICovLAorCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUu
Y3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oICov
LAogCQkJCUE4MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJhc2UuY3BwICovLApAQCAt
MjM0ODMsNiArMjM0ODksNyBAQAogCQkJCTlCMEZCMTkyMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQ
VmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjc0QjJGMTQw
RUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3OEFENjc1MTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTJEMzhFMTQxMzEwNEIwMDMzMDVCRCAvKiBKU0hU
TUxTcGFuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpAQCAtMjYyOTgsNiArMjYzMDUs
NyBAQAogCQkJCTlCMEZCMTkxMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENv
bnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURG
QTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
NEI0QkIzMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTc4QUQ2NzQxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NzUyRDM4RDE0MTMxMDRCMDAzMzA1QkQgLyogSlNIVE1MU3Bh
bkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gOTQ1ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYg
QEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgog
I2luY2x1ZGUgIkNvdW50ZXIuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJGb250RmFtaWx5VmFsdWUuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAj
aW5jbHVkZSAiRm9udFZhbHVlLmgiCkBAIC02MywxMiArNjIsMTAgQEAKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9n
cmVzc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0Lmgi
CiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcu
aCIKQEAgLTExMCwxNyArMTA3LDExIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3Ry
YXRlZ3kuaCIKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogI2luY2x1
ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2VuZGlmCiAKQEAgLTM0
MCwxMSArMzMxLDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0K
ICAgICAsIG1fZWxlbWVudCgwKQogICAgICwgbV9zdHlsZWRFbGVtZW50KDApCiAgICAgLCBtX2Vs
ZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAgICAsIG1fZm9udERpcnR5KGZhbHNlKQor
ICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KQorICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKICAgICAsIG1fZm9udFNlbGVjdG9yKENT
U0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3VtZW50KSkKICAgICAsIG1fYXBwbHlQcm9wZXJ0eShD
U1NTdHlsZUFwcGx5UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpKQogewot
ICAgIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
OwotICAgIAogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7
CiAKICAgICBpZiAoIWRlZmF1bHRTdHlsZSkgewpAQCAtNjQxLDcgKzYzMyw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2UKICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7
CiAgICAgCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVy
IHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlmICghbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVz
T25seSkgeworICAgIGlmICghbV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkr
KykKICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+
cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKICAgICB9IGVsc2UgewpAQCAtNzEyLDE5ICs3MDQsMTkg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgICAgICBpZiAo
Y2FuVXNlRmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkgewot
ICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUo
KSwgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKKyAgICAgICAgICAgIGlm
ICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIG1fY2hlY2tlci5o
YXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhl
biBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYg
KCFkZWNsIHx8ICghZGVjbC0+bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChtX2NoZWNrZXIubV9zYW1lT3Jp
Z2luT25seSAmJiAhbV9jaGVja2VyLm1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocnVsZS0+YmFzZVVSTCgpKSkKKyAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5Pbmx5
ICYmICFtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
dWxlLT5iYXNlVVJMKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZiAK
ICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4K
LSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9jaGVja2Vy
Lm1fcHNldWRvU3R5bGUgPT0gTk9QU0VVRE8pIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jaGVj
a2VyLm1fY29sbGVjdFJ1bGVzT25seSkKKyAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8g
IT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAobV9keW5hbWlj
UHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCiAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKG1fZHluYW1pY1BzZXVkbyk7CkBAIC03NTIsMTMgKzc0
NCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygKIHsKICAgICBz
dGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNv
bXBhcmVSdWxlcyk7CiB9Ci0KLWlubGluZSBFSW5zaWRlTGluayBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25z
dAotewotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIHJl
dHVybiBOb3RJbnNpZGVMaW5rOwotICAgIHJldHVybiBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2Fz
ZShlbGVtZW50KTsKLX0KICAgICAKIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRF
bGVtZW50KEVsZW1lbnQqIGUpCiB7CkBAIC03NzUsNyArNzYwLDcgQEAgaW5saW5lIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbgogCiBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSwgUHNldWRvSWQgcHNldWRvSUQpCiB7Ci0gICAgbV9jaGVja2VyLm1fcHNldWRvU3R5bGUgPSBw
c2V1ZG9JRDsKKyAgICBtX2NoZWNrZXIuc2V0UHNldWRvU3R5bGUocHNldWRvSUQpOwogCiAgICAg
bV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpIDog
MDsKIApAQCAtNzg1LDcgKzc3MCw3IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXRGb3JTdHkKICAgICAgICAgbV9wYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50
Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CiAKICAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKLSAgICBSZW5kZXJTdHlsZSogZG9j
U3R5bGUgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBSZW5kZXJT
dHlsZSogZG9jU3R5bGUgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAg
ICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRv
Y0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAogICAgIG1fc3R5bGUgPSAwOwpA
QCAtNzk5LDk5ICs3ODQsNiBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9y
U3R5CiAgICAgbV9mb250RGlydHkgPSBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBB
dG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUt
PmlzTGluaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChub2RlLT5pc0VsZW1l
bnROb2RlKCkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSk7Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
ICZlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKLQotI2lmIEVOQUJMRShTVkcp
Ci0gICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gJmVsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwotI2VuZGlmCi0KLSAg
ICByZXR1cm4gMDsKLX0KLQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCi0gICAg
OiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9zdHJpY3RQYXJzaW5nKHN0cmljdFBhcnNp
bmcpCi0gICAgLCBtX2NvbGxlY3RSdWxlc09ubHkoZmFsc2UpCi0gICAgLCBtX3NhbWVPcmlnaW5P
bmx5KGZhbHNlKQotICAgICwgbV9wc2V1ZG9TdHlsZShOT1BTRVVETykKLSAgICAsIG1fZG9jdW1l
bnRJc0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBtX2hhc1Vua25vd25Q
c2V1ZG9FbGVtZW50cyhmYWxzZSkKLSAgICAsIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MoZmFs
c2UpCi17Ci19Ci0KLUVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tl
cjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoZWxlbWVudC0+aXNMaW5rKCkpOwotICAgIAotICAgIGNvbnN0IEF0b21pY1N0
cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUoZWxlbWVudCk7Ci0gICAgaWYgKCFhdHRyIHx8IGF0
dHItPmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKLQotI2lmIFBMQVRG
T1JNKFFUKQotICAgIFZlY3RvcjxVQ2hhciwgNTEyPiB1cmw7Ci0gICAgdmlzaXRlZFVSTChtX2Rv
Y3VtZW50LT5iYXNlVVJMKCksICphdHRyLCB1cmwpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLQotICAgIC8vIElmIHRoZSBRdDQu
NCBpbnRlcmZhY2UgZm9yIHRoZSBoaXN0b3J5IGlzIHVzZWQsIHdlIHdpbGwgaGF2ZSB0byBmYWxs
YmFjawotICAgIC8vIHRvIHRoZSBvbGQgZ2xvYmFsIGhpc3RvcnkuCi0gICAgUVdlYkhpc3RvcnlJ
bnRlcmZhY2UqIGlmYWNlID0gUVdlYkhpc3RvcnlJbnRlcmZhY2U6OmRlZmF1bHRJbnRlcmZhY2Uo
KTsKLSAgICBpZiAoaWZhY2UpCi0gICAgICAgIHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRhaW5z
KFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KHVybC5kYXRhKCkpLCB1cmwuc2l6ZSgp
KSkgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7Ci0KLSAgICBMaW5r
SGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkpOwotICAg
IGlmICghaGFzaCkKLSAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0jZWxzZQot
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgp
LCAqYXR0cik7Ci0gICAgaWYgKCFoYXNoKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVk
TGluazsKLSNlbmRpZgotCi0gICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLQot
ICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0KLSAgICBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0
ZWRTdGF0ZS5hZGQoaGFzaCk7Ci0KLSNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKLSAgICBy
ZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnZpc2l0ZWRMaW5rU3RyYXRlZ3koKS0+aXNMaW5r
VmlzaXRlZChwYWdlLCBoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVk
TGluazsKLSNlbHNlCi0gICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuaXNMaW5rVmlzaXRlZChoYXNo
KSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKLSNlbmRpZgotfQot
Ci1ib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKSBjb25zdAotewotICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpKSB7Ci0gICAgICAgIC8vIGZhc3RDaGVja1NlbGVjdG9yIGFzc3VtZXMgY2xhc3MgYW5kIGlk
IG1hdGNoIGZvciB0aGUgdG9wIHNlbGVjdG9yLgotICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpDbGFzcykgewotICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzQ2xh
c3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KS5jb250YWlucyhzZWwtPnZhbHVlKCkpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewot
ICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVs
ZW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5
bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOwotfQotCiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKIApAQCAtMTE1MSwx
MSArMTA0MywxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQmCiAg
ICAgbWF0Y2hSdWxlcyh1c2VyQWdlbnRTdHlsZVNoZWV0LCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVs
ZSwgZmFsc2UpOwogCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgotICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0
UGFyc2luZykKKyAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCiAgICAgICAgIG1h
dGNoUnVsZXMoZGVmYXVsdFF1aXJrc1N0eWxlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFs
c2UpOwogICAgICAgICAKICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcgc291cmNlIHN0eWxl
cyAoaW4gdmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUpLCB0aGVuIHdlIG1h
dGNoIHJ1bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0LgotICAgIGlmIChtX2No
ZWNrZXIubV9kb2N1bWVudC0+aXNWaWV3U291cmNlKCkpIHsKKyAgICBpZiAobV9jaGVja2VyLmRv
Y3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7CiAgICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3Vy
Y2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRWaWV3U291cmNlU3R5bGUoKTsKICAgICAgICAgbWF0
Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwg
ZmFsc2UpOwpAQCAtMTI2Niw3ICsxMTU4LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NT
U3R5bGVTZWxlY3RvcgogICAgICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIGRlZmF1bHRQYXJl
bnQpOwogICAgIH0KIAotICAgIG1fY2hlY2tlci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0g
bWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAgbV9jaGVja2VyLnNldE1hdGNoaW5nVmlzaXRl
ZFBzZXVkb0NsYXNzKG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzKTsKIAogICAgIG1fc3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKQEAgLTE0MjIsNyArMTMxNCw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICB9CiAKICAgICAvLyBSZXNldCB0aGUg
dmFsdWUgYmFjayBiZWZvcmUgYXBwbHlpbmcgcHJvcGVydGllcywgc28gdGhhdCAtd2Via2l0LWxp
bmsga25vd3Mgd2hhdCBjb2xvciB0byB1c2UuCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVk
UHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0
TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogICAg
IAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBw
cm9wcmlhdGUgb3JkZXIuICBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKICAgICAvLyBoaWdoLXBy
aW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhl
ciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KQEAgLTE2MTIsNyArMTUwNCw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAg
ICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKIAotICAgIG1fY2hlY2tlci5t
X21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAg
bV9jaGVja2VyLnNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKG1hdGNoVmlzaXRlZFBzZXVk
b0NsYXNzKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4g
YW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1l
IHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KQEAgLTE2MzQsNyArMTUyNiw3IEBAIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IDA7CiAgICAgCiAgICAgLy8gUmVzZXQgdGhlIHZhbHVlIGJhY2sgYmVmb3JlIGFwcGx5aW5n
IHByb3BlcnRpZXMsIHNvIHRoYXQgLXdlYmtpdC1saW5rIGtub3dzIHdoYXQgY29sb3IgdG8gdXNl
LgotICAgIG1fY2hlY2tlci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gbWF0Y2hWaXNpdGVk
UHNldWRvQ2xhc3M7CisgICAgbV9jaGVja2VyLnNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNz
KG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzKTsKIAogICAgIC8vIEhpZ2gtcHJpb3JpdHkgcHJvcGVy
dGllcy4KICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPihmYWxzZSwgMCwgbV9tYXRjaGVkRGVj
bHMuc2l6ZSgpIC0gMSk7CkBAIC0xNjgwLDcgKzE1NzIsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3I6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUobV9jaGVja2VyLm1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9y
b290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAgICBp
bml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hlY2tlci5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5
bGUuCiAKICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIG1fc3R5bGUt
PmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRTdHlsZSk7CkBAIC0xNzQyLDcgKzE2MzQsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlCiAgICAgICAgIC8vIHByb3Bl
cnR5LgogICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9i
bG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQogICAg
ICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgotICAgICAg
ICBpZiAoIW1fY2hlY2tlci5tX3N0cmljdFBhcnNpbmcgJiYgZSkgeworICAgICAgICBpZiAoIW1f
Y2hlY2tlci5zdHJpY3RQYXJzaW5nKCkgJiYgZSkgewogICAgICAgICAgICAgaWYgKGUtPmhhc1Rh
Z05hbWUodGRUYWcpKSB7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVf
Q0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwpAQCAt
MTc5NSw3ICsxNjg3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHls
ZQogICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBMSVNUX0lURU0pIHsK
ICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQgbGlzdCBp
dGVtcyBsb3NlIHRoZWlyIGJ1bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJrLAogICAg
ICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGluIHF1aXJrcyBtb2RlLgotICAgICAgICAgICAgICAg
IGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZyAmJiBzdHlsZS0+aXNGbG9hdGluZygpKQor
ICAgICAgICAgICAgICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBzdHlsZS0+
aXNGbG9hdGluZygpKQogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9D
Syk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC0xOTUzLDcgKzE4NDUsNyBA
QCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgaWYgKCFlIHx8
ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5ID0gdHJ1ZTsKKyAgICBtX2No
ZWNrZXIuc2V0Q29sbGVjdGluZ1J1bGVzT25seSh0cnVlKTsKIAogICAgIGluaXRFbGVtZW50KGUp
OwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOwpAQCAtMTk3MSwxNiAr
MTg2MywxNiBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yCiAgICAg
fQogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5jbHVk
ZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBtX2NoZWNrZXIubV9zYW1lT3JpZ2luT25s
eSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKKyAgICAgICAgbV9z
YW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsK
IAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAgICAgICAg
aW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwogICAgICAgICBt
YXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhv
clJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9jaGVj
a2VyLm1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9
IGZhbHNlOwogICAgIH0KIAotICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSBmYWxz
ZTsKKyAgICBtX2NoZWNrZXIuc2V0Q29sbGVjdGluZ1J1bGVzT25seShmYWxzZSk7CiAgICAKICAg
ICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CkBAIC0xOTg4LDEyICsxODgwLDEyIEBA
IFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKIGlubGluZSBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQog
ewogICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIG1fY2hlY2tlci5tX2hhc1Vu
a25vd25Qc2V1ZG9FbGVtZW50cyA9IGZhbHNlOworICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cygpOwogCiAgICAgLy8gTGV0IHRoZSBzbG93IHBhdGggaGFuZGxlIFNW
RyBhcyBpdCBoYXMgc29tZSBhZGRpdGlvbmFsIHJ1bGVzIHJlZ2FyZGluZyBzaGFkb3cgdHJlZXMu
CiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpICYmICFtX2VsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBk
b2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gc2VsZWN0b3JzLgotICAgICAgICBpZiAobV9jaGVj
a2VyLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChtX2NoZWNrZXIucHNl
dWRvU3R5bGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBhcnQgc2VsZWN0b3Ig
bWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxlIGhhc2guCiAg
ICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0
byBjaGVjayB0aGUgbmFtZXNwYWNlLgpAQCAtMjAwMywxMDMwICsxODk1LDE0IEBAIGlubGluZSBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWMKICAgICB9CiAKICAgICAvLyBTbG93IHBh
dGguCi0gICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1
bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFs
c2UsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6
IDApOwotICAgIGlmIChtYXRjaCAhPSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobV9jaGVja2VyLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9j
aGVja2VyLm1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQorICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVE
YXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2Us
IHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDAp
OworICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotbmFtZXNwYWNl
IHsKLQotaW5saW5lIGJvb2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIXNlbGVjdG9yLT5o
YXNUYWcoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7Ci0gICAgaWYgKGxvY2FsTmFt
ZSAhPSBzdGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gZWxlbWVudC0+bG9jYWxOYW1lKCkpCisgICAg
aWYgKG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1
ZG9TdHlsZSgpICE9IG1fZHluYW1pY1BzZXVkbykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gc2VsZWN0b3ItPnRhZygpLm5hbWVz
cGFjZVVSSSgpOwotICAgIHJldHVybiBuYW1lc3BhY2VVUkkgPT0gc3RhckF0b20gfHwgbmFtZXNw
YWNlVVJJID09IGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOwotfQotICAgIAotdGVtcGxhdGUgPGJv
b2wgY2hlY2tWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCopPgotaW5saW5l
IGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3Rv
ciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hF
bGVtZW50KQotewotICAgIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlID0gc2VsZWN0b3ItPnZhbHVl
KCkuaW1wbCgpOwotICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHZhbHVlKSAmJiBz
ZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBpZiAo
c2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQpCi0gICAgICAg
ICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICAgICAgICAgIGVsc2UgaWYg
KCF0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0
b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlv
bigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7Ci0gICAgICAgICAgICAgICAgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3Ip
Ci0gICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAg
ICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b3BDaGlsZE9yU3Vic2VsZWN0
b3IpIHsKLSAgICAgICAgICAgIC8vIENoaWxkIG9yIHN1YnNlbGVjdG9yIGNoZWNrIGZhaWxlZC4K
LSAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCBlbGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JT
dWJzZWxlY3RvciB3YXMgYWxzbyB0aGUgdmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8g
bWF0Y2ggCi0gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNr
aW5nLgotICAgICAgICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgLy8gVGhlcmUgbWF5
IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5jZXN0b3IgY2hhaW4uCi0gICAgICAgICAgICAv
LyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVt
ZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KLSAgICAgICAgICAg
IHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yOwotICAgICAgICAgICAgZWxlbWVudCA9
IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAg
ICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5saW5lIGJv
b2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0lt
cGwqIHZhbHVlKSAKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNf
Y2FzdDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlu
cyh2YWx1ZSk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBl
bGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQt
Pmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gdmFs
dWU7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21p
Y1N0cmluZ0ltcGwqKQotewogICAgIHJldHVybiB0cnVlOwogfQogCi19Ci0KLWJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJU
KGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSk7Ci0KLSAgICAvLyBUaGUgdG9wIHNl
bGVjdG9yIHJlcXVpcmVzIHRhZyBjaGVjayBvbmx5IGFzIHJ1bGUgaGFzaGVzIGhhdmUgYWxyZWFk
eSBoYW5kbGVkIGlkIGFuZCBjbGFzcyBtYXRjaGVzLgotICAgIGlmICghc2VsZWN0b3JUYWdNYXRj
aGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgY29uc3QgRWxl
bWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gMDsKLSAgICBpZiAoc2Vs
ZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxh
dGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0KLSAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0g
Q1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpOwotCi0gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwot
Ci0gICAgLy8gV2Uga25vdyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBj
aGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMg
YXJlIHNpbXBsZS4KLSAgICB3aGlsZSAoc2VsZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChzZWxl
Y3Rvci0+bV9tYXRjaCkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAg
ICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxl
Y3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0
b3JNYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKLSAgICAgICAgICAgIGlm
ICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVu
dCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1l
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpOb25lOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hl
Y2tTaW5nbGVTZWxlY3RvcjxjaGVja1RhZ1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IpCi17Ci0gICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVj
dG9yOjpEZXNjZW5kYW50ICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpD
aGlsZCAmJiBzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3Ip
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRj
aCAhPSBDU1NTZWxlY3Rvcjo6Tm9uZSAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rv
cjo6SWQgJiYgc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUmVj
dXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMKLS8vIEl0IGNhbiByZXR1
cm4gMyBkaWZmZXJlbnQgdmFsdWVzOgotLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAtIHRo
ZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKLS8vICogU2VsZWN0b3JGYWlsc0xvY2Fs
bHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKLS8vICogU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJs
aW5nIG9yIGFuY2VzdG9yIG9mIGUKLUNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NT
U3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9y
KiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2Vs
ZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAotewotI2lmIEVOQUJMRShTVkcp
Ci0gICAgLy8gU3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIChj
b25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJlZQotICAgIC8vIGJlY2F1c2UgaXRzIGNvbnRlbnRz
IGFyZSBub3QgcGFydCBvZiB0aGUgZm9ybWFsIGRvY3VtZW50IHN0cnVjdHVyZS4KLSAgICBpZiAo
ZS0+aXNTVkdTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseTsKLSNlbmRpZgotCi0gICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAg
aWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3Rv
ciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCi0g
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKLQotICAgIC8vIFRoZSByZXN0IG9m
IHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1hdGNoCi0gICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJl
bGF0aW9uID0gc2VsLT5yZWxhdGlvbigpOwotCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAg
IHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghc2VsKQotICAgICAgICByZXR1cm4g
U2VsZWN0b3JNYXRjaGVzOwotCi0gICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcikKLSAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2
YW50IGZvciB0aGUgcHNldWRvU3R5bGUKLSAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9Q
U0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNldWRvKQotICAgICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotCi0gICAgLy8gQ2hlY2sgZm9yIG5lc3RlZCBs
aW5rcy4KLSAgICBpZiAobV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3Rv
cikgewotICAgICAgICBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRTdHls
ZSAmJiBjdXJyZW50U3R5bGUtPmluc2lkZUxpbmsoKSAmJiBlLT5pc0xpbmsoKSkgewotICAgICAg
ICAgICAgaWYgKGVuY291bnRlcmVkTGluaykKLSAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRl
ZFBzZXVkb0NsYXNzID0gZmFsc2U7IC8vIFRoaXMgbGluayBpcyBub3QgcmVsZXZhbnQgdG8gdGhl
IHN0eWxlIGJlaW5nIHJlc29sdmVkLCBzbyBkaXNhYmxlIG1hdGNoaW5nLgotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVuY291bnRlcmVkTGluayA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
ICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgICAgICBlID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBj
aGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGlu
ayk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
ICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVu
dE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFy
ZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHls
ZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eURpcmVjdEFkamFjZW50UnVsZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5p
c0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygp
OwotICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzTG9jYWxseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0g
ICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNv
dW50ZXJlZExpbmspOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGly
ZWN0QWRqYWNlbnQ6Ci0gICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlLT5w
YXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVt
ZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHls
ZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBOb2Rl
KiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYg
IW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpOwotICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9D
bGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVj
a1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAgICAgICB9OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgotICAgICAg
ICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNvbWV0aGluZyBmb2xsb3dzIGEgcHNl
dWRvLWVsZW1lbnQKLSAgICAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBzY3Jv
bGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAo
YnV0IG5vdGhpbmcgZWxzZSkKLSAgICAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVs
ZW1lbnRzLgotICAgICAgICAgICAgaWYgKChlbGVtZW50U3R5bGUgfHwgbV9jb2xsZWN0UnVsZXNP
bmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VM
RUNUSU9OICYmCi0gICAgICAgICAgICAgICAgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJG
b3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwg
ZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQ
c2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50
U3R5bGUpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgotICAg
ICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUtPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpOwotICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09IGUgfHwgIXNoYWRv
d0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
PihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotfQotCi1zdGF0aWMg
dm9pZCBhZGRMb2NhbE5hbWVUb1NldChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLXsKLSAgICBzZXQtPmFkZChxTmFtZS5sb2NhbE5h
bWUoKS5pbXBsKCkpOwotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGNy
ZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKLXsKLSAgICAvLyBUaGlzIGlz
IHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gSFRNTCA0LjAxIHdpdGggdmFsdWVzIG1hcmtlZCBh
cyAiW0NJXSIgb3IgY2FzZS1pbnNlbnNpdGl2ZQotICAgIC8vIE1vemlsbGEgdHJlYXRzIGFsbCBv
dGhlciB2YWx1ZXMgYXMgY2FzZS1zZW5zaXRpdmUsIHRodXMgc28gZG8gd2UuCi0gICAgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4qIGF0dHJTZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj47Ci0KLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2NlcHRfY2hhcnNldEF0
dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdEF0dHIpOwotICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaWduQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgYWxpbmtBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBh
eGlzQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYmdjb2xvckF0dHIpOwot
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoYXJzZXRBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBjaGVja2VkQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgY2xlYXJBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb2Rl
dHlwZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvbG9yQXR0cik7Ci0g
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29tcGFjdEF0dHIpOwotICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGRlY2xhcmVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBkZWZlckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpckF0
dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpc2FibGVkQXR0cik7Ci0gICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZW5jdHlwZUF0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIGZhY2VBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBmcmFtZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGhyZWZsYW5nQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHR0cF9lcXVpdkF0dHIpOwotICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmdBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBsYW5ndWFnZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGxpbmtBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtZWRpYUF0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1ldGhvZEF0dHIpOwotICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIG11bHRpcGxlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgbm9ocmVmQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
bm9yZXNpemVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3NoYWRlQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm93cmFwQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVhZG9ubHlBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCByZWxBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBy
ZXZBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBydWxlc0F0dHIpOwotICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjb3BlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgc2Nyb2xsaW5nQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgc2VsZWN0ZWRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzaGFw
ZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRhcmdldEF0dHIpOwotICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRleHRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCB0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
dmFsaWduQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmFsdWV0eXBlQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmxpbmtBdHRyKTsKLQotICAgIHJl
dHVybiBhdHRyU2V0OwotfQotCi1zdGF0aWMgYm9vbCBodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vu
c2l0aXZlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cikKLXsKLSAgICBzdGF0aWMgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0
ID0gY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKTsKLSAgICBib29sIGlz
UG9zc2libGVIVE1MQXR0ciA9ICFhdHRyLmhhc1ByZWZpeCgpICYmIChhdHRyLm5hbWVzcGFjZVVS
SSgpID09IG51bGxBdG9tKTsKLSAgICByZXR1cm4gaXNQb3NzaWJsZUhUTUxBdHRyICYmIGh0bWxD
YXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlucyhhdHRyLmxvY2FsTmFtZSgpLmlt
cGwoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKEF0
dHJpYnV0ZSogYXR0cmlidXRlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIpCi17
Ci0gICAgaWYgKHNlbGVjdG9yQXR0ci5sb2NhbE5hbWUoKSAhPSBhdHRyaWJ1dGUtPmxvY2FsTmFt
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc2VsZWN0b3JBdHRyLnBy
ZWZpeCgpID09IHN0YXJBdG9tIHx8IHNlbGVjdG9yQXR0ci5uYW1lc3BhY2VVUkkoKSA9PSBhdHRy
aWJ1dGUtPm5hbWVzcGFjZVVSSSgpOwotfQotCi1zdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1h
dGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQot
ewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyaWJ1dGVJdGVtLT52YWx1ZSgp
OwotICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c3dpdGNoIChtYXRjaCkgewotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgICAgICBp
ZiAoY2FzZVNlbnNpdGl2ZSA/IHNlbGVjdG9yVmFsdWUgIT0gdmFsdWUgOiAhZXF1YWxJZ25vcmlu
Z0Nhc2Uoc2VsZWN0b3JWYWx1ZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpMaXN0OiB7Ci0gICAgICAgIC8v
IElnbm9yZSBlbXB0eSBzZWxlY3RvcnMgb3Igc2VsZWN0b3JzIGNvbnRhaW5pbmcgc3BhY2VzCi0g
ICAgICAgIGlmIChzZWxlY3RvclZhbHVlLmNvbnRhaW5zKCcgJykgfHwgc2VsZWN0b3JWYWx1ZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdW5zaWduZWQg
c3RhcnRTZWFyY2hBdCA9IDA7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBz
aXplX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbGVjdG9yVmFsdWUsIHN0YXJ0U2VhcmNoQXQs
IGNhc2VTZW5zaXRpdmUpOwotICAgICAgICAgICAgaWYgKGZvdW5kUG9zID09IG5vdEZvdW5kKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZm91bmRQb3Mg
fHwgdmFsdWVbZm91bmRQb3MgLSAxXSA9PSAnICcpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBlbmRTdHIgPSBmb3VuZFBvcyArIHNlbGVjdG9yVmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJdID09ICcg
JykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE5vIG1hdGNoLiBLZWVwIGxv
b2tpbmcuCi0gICAgICAgICAgICBzdGFydFNlYXJjaEF0ID0gZm91bmRQb3MgKyAxOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250YWlu
OgotICAgICAgICBpZiAoIXZhbHVlLmNvbnRhaW5zKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRp
dmUpIHx8IHNlbGVjdG9yVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpCZWdpbjoKLSAgICAgICAg
aWYgKCF2YWx1ZS5zdGFydHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpIHx8IHNl
bGVjdG9yVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpFbmQ6Ci0gICAgICAgIGlmICghdmFsdWUu
ZW5kc1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6Okh5cGhlbjoKLSAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpIDwg
c2VsZWN0b3JWYWx1ZS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBJdCB0aGV5IHN0YXJ0IHRoZSBz
YW1lLCBjaGVjayBmb3IgZXhhY3QgbWF0Y2ggb3IgZm9sbG93aW5nICctJzoKLSAgICAgICAgaWYg
KHZhbHVlLmxlbmd0aCgpICE9IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkgJiYgdmFsdWVbc2VsZWN0
b3JWYWx1ZS5sZW5ndGgoKV0gIT0gJy0nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKLSAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhbnlBdHRyaWJ1
dGVNYXRjaGVzKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcywgQ1NTU2VsZWN0b3I6Ok1hdGNoIG1h
dGNoLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZUl0ZW0gPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwotCi0gICAg
ICAgIGlmICghYXR0cmlidXRlUXVhbGlmaWVkTmFtZU1hdGNoZXMoYXR0cmlidXRlSXRlbSwgc2Vs
ZWN0b3JBdHRyKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChhdHRyaWJ1
dGVWYWx1ZU1hdGNoZXMoYXR0cmlidXRlSXRlbSwgbWF0Y2gsIHNlbGVjdG9yVmFsdWUsIGNhc2VT
ZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVu
ZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZSk7Ci0gICAgaWYgKCFlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXNlbGVjdG9yVGFnTWF0Y2hlcyhlLCBzZWwpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2VsLT5oYXNBdHRyaWJ1dGUoKSkgewotICAgICAgICBpZiAo
c2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKLSAgICAgICAgICAgIHJldHVybiBl
LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlKS0+Y2xhc3NOYW1l
cygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSk7Ci0KLSAgICAgICAgaWYgKHNlbC0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgICAgICByZXR1cm4gZS0+aGFzSUQoKSAmJiBlLT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKTsKLQotICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyID0gc2VsLT5hdHRyaWJ1dGUoKTsKLQotICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIHRoZSBjYXNlIHdlcmUgZWxlbWVudFN0eWxlIGlzIDAuCi0gICAgICAgIGlmIChl
bGVtZW50U3R5bGUgJiYgKCFlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCAoIXN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnQqPihlKS0+aXNNYXBwZWRBdHRyaWJ1dGUoYXR0cikgJiYgYXR0ciAhPSB0eXBl
QXR0ciAmJiBhdHRyICE9IHJlYWRvbmx5QXR0cikpKQotICAgICAgICAgICAgZWxlbWVudFN0eWxl
LT5zZXRBZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKCk7IC8vIFNwZWNpYWwtY2FzZSB0aGUg
InR5cGUiIGFuZCAicmVhZG9ubHkiIGF0dHJpYnV0ZXMgc28gaW5wdXQgZm9ybSBjb250cm9scyBj
YW4gc2hhcmUgc3R5bGUuCi0KLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+
YXR0cmlidXRlcyh0cnVlKTsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50
SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7Ci0K
LSAgICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVNYXRjaGVzKGF0dHJpYnV0ZXMsIHN0YXRpY19jYXN0
PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsLT5tX21hdGNoKSwgYXR0ciwgc2VsLT52YWx1ZSgpLCBj
YXNlU2Vuc2l0aXZlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKLSAgICAg
ICAgLy8gSGFuZGxlIDpub3QgdXAgZnJvbnQuCi0gICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2VsLT5z
ZWxlY3Rvckxpc3QoKSk7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWwgPSBz
ZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFn
SGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24n
dCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCi0gICAgICAgICAgICAgICAgLy8gcmVzdHJpY3Rp
b24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4KLSAgICAgICAgICAgICAg
ICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b05vdCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBl
LCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxl
bWVudFBhcmVudFN0eWxlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAm
JiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWlj
UHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSkg
ewotICAgICAgICAgICAgLy8gQ1NTIHNjcm9sbGJhcnMgbWF0Y2ggYSBzcGVjaWZpYyBzdWJzZXQg
b2YgcHNldWRvIGNsYXNzZXMsIGFuZCB0aGV5IGhhdmUgc3BlY2lhbGl6ZWQgcnVsZXMgZm9yIGVh
Y2gKLSAgICAgICAgICAgIC8vIChzaW5jZSB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW52b2x2ZWQp
LgotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Moc2VsLCBkeW5h
bWljUHNldWRvKTsKLSAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvID09IFNFTEVDVElP
TikgewotICAgICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9XaW5kb3dJbmFjdGl2ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCi0gICAgICAgIHN3
aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2Vz
OgotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90OgotICAgICAgICAgICAg
ICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQgdXAgYWJvdmUuCi0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eTogewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBlLT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0
KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25s
eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkgJiYgKGUtPmRvY3VtZW50KCkt
PnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlLT5yZW5kZXJTdHlsZSgpLT51bmlxdWUoKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENo
aWxkOiB7Ci0gICAgICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3Qg
Y2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5v
ZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
ID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYm
ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9j
b2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
Y2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRl
clN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eUZpcnN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAm
JiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNl
dEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRmlyc3RPZlR5cGU6IHsKLSAgICAgICAgICAgICAgICAvLyBmaXJzdC1vZi10eXBlIG1hdGNo
ZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgICAgICBpZiAoZS0+
cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9MYXN0Q2hpbGQ6IHsKLSAgICAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhl
IGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAgICAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxl
c09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3Rh
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6
IHsKLSAgICAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVt
ZW50IG9mIGl0cyB0eXBlCi0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2Nv
bGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVs
ZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCBsYXN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFu
KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJz
aW5nQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGUtPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhc3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0
eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZmlyc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxhc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkU3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxk
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5cGU6IHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWxlY3RvciBpcyB2ZXJ5IHNsb3cuCi0gICAg
ICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2Fy
ZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBs
YXN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBl
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2li
bGluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bikKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0g
bi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hp
bGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmaXJzdENoaWxkICYmIGxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9OdGhDaGlsZDogewotICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50
aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHMgPSBuLT5yZW5kZXJTdHlsZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcyA/IHMtPmNoaWxkSW5k
ZXgoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGluZGV4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0
eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRD
aGlsZEluZGV4KGNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHls
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRj
aE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhPZlR5cGU6IHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5
cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xs
ZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoIXNlbC0+
cGFyc2VOdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFw
YXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291
bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdE9mVHlwZTogewotICAgICAgICAgICAgICAg
IGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5u
ZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNo
TnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1RhcmdldDoKLSAgICAgICAgICAgICAgICBp
ZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Bbnk6Ci0gICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciog
c2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0
b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBl
bmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxl
Y3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlz
TGluaygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9MaW5rOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9W
aXNpdGVkOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyB8fCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zp
c2l0ZWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRHJhZzogewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0
cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAg
ICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKHRy
dWUpOwotICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpICYmIGUtPnJlbmRlcmVyKCkt
PmlzRHJhZ2dpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAgICAgICAgICBpZiAoZSAmJiAoKGUtPmZvY3VzZWQo
KSAmJiBlLT5kb2N1bWVudCgpLT5mcmFtZSgpICYmIGUtPmRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1cykpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIgc2hvdWxkIG5ldmVyIG1h
dGNoIGFuY2hvcnMgd2l0aCBubwotICAgICAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6aG92ZXIg
c2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzaXRlcyBs
aWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1
YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBl
LT5pc0xpbmsoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxl
cyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlI
b3ZlclJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+aG92ZXJlZCgpIHx8
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rv
cjo6UHNldWRvSG92ZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgotICAgICAgICAgICAg
ICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVy
IG1hdGNoIGFuY2hvcnMgd2l0aCBubwotICAgICAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6YWN0
aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIAotICAgICAgICAgICAgICAgIGlmIChtX3N0
cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFz
VGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0
QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5
bGUoKS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZS0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKLSAgICAg
ICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxQYWdl
TWVkaWE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKSAmJiBlLT5k
b2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGUgJiYgZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpOwotICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGlzYWJsZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUg
JiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICFlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZE9ubHk6IHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9y
bUNvbnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRXcml0ZTogewotICAgICAg
ICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc1Rl
eHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzT3B0aW9uYWxGb3JtQ29udHJvbCgpOwotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVxdWlyZWQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGUgJiYgZS0+aXNSZXF1aXJlZEZvcm1Db250cm9sKCk7Ci0gICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WYWxpZDogewotICAgICAgICAgICAgICAgIGlmICghZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGUtPndpbGxWYWxpZGF0ZSgpICYmIGUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKTsKLSAgICAgICAgICAgIH0gY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW52YWxpZDogewot
ICAgICAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHls
ZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChlLT53aWxsVmFsaWRhdGUoKSAmJiAh
ZS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSB8fCBlLT5oYXNVbmFjY2VwdGFibGVWYWx1
ZSgpOwotICAgICAgICAgICAgfSBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DaGVja2VkOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBX
aW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBjby1leGlzdCwgdGhlIENT
UyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAotICAgICAgICAgICAgICAgIC8vIHlvdSBjYW4ndCBi
ZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUuICBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdp
bklFIGJlaGluZCB0aGUgc2NlbmVzIGFuZCBqdXN0Ci0gICAgICAgICAgICAgICAgLy8gb2JleSB0
aGUgQ1NTIHNwZWMgaGVyZSBpbiB0aGUgdGVzdCBmb3IgbWF0Y2hpbmcgdGhlIHBzZXVkby4KLSAg
ICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0
RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVt
ZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNJbmRldGVybWlu
YXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSW5kZXRlcm1pbmF0ZTogewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTFByb2dy
ZXNzRWxlbWVudCogcHJvZ3Jlc3MgPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4o
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyAmJiAhcHJvZ3Jlc3MtPmlzRGV0
ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlLT50b0lucHV0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQg
JiYgaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Sb290OgotICAgICAgICAgICAgICAgIGlm
IChlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhbmc6IHsKLSAgICAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgdmFsdWUgPSBlLT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50ID0gc2VsLT5hcmd1bWVudCgpOwotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoYXJndW1l
bnQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbHVlLmxlbmd0aCgpICE9IGFyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50
Lmxlbmd0aCgpXSAhPSAnLScpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW46Ci0g
ICAgICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBz
dGF0ZSwgYW5kIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgZnVsbHNjcmVlbiAKLSAgICAgICAgICAg
ICAgICAvLyBlbGVtZW50IGlzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwt
c2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVzIHRvIAotICAgICAgICAgICAgICAgIC8vIHRoYXQg
ZWxlbWVudC4gQWxzbywgYW4gPGlmcmFtZT4sIDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudCB3
aG9zZSBjaGlsZCBicm93c2luZyAKLSAgICAgICAgICAgICAgICAvLyBjb250ZXh0J3MgRG9jdW1l
bnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUgaGFzIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVk
b2NsYXNzIGFwcGxpZWQuCi0gICAgICAgICAgICAgICAgaWYgKGUtPmlzRnJhbWVFbGVtZW50QmFz
ZSgpICYmIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZSktPmNvbnRhaW5zRnVs
bFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBl
ID09IGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOwotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5z
aXRpb246Ci0gICAgICAgICAgICAgICAgaWYgKGUgIT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3Vy
cmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+ZG9jdW1lbnQoKS0+aXNBbmltYXRpbmdGdWxs
U2NyZWVuKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVu
QW5jZXN0b3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPmNvbnRhaW5zRnVsbFNjcmVlbkVs
ZW1lbnQoKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW5E
b2N1bWVudDoKLSAgICAgICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBm
dWxsc2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwtc2NyZWVuLWRvY3VtZW50JyBwc2V1ZG9jbGFzcyBh
cHBsaWVzIAotICAgICAgICAgICAgICAgIC8vIHRvIGFsbCBlbGVtZW50cyBvZiB0aGF0IERvY3Vt
ZW50LgotICAgICAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2Ny
ZWVuKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSW5SYW5nZToKLSAgICAgICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWlu
c1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc0luUmFu
Z2UoKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb091dE9mUmFuZ2U6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxl
UnVsZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNPdXRPZlJhbmdlKCk7Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3duOgotICAgICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90UGFyc2VkOgotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChzZWwt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgaWYgKCFl
bGVtZW50U3R5bGUgJiYgIW1fY29sbGVjdFJ1bGVzT25seSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IHJldHVybiBlLT5zaGFkb3dQc2V1ZG9JZCgpID09IHNlbC0+dmFsdWUoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKHNlbC0+
cHNldWRvVHlwZSgpKTsKLSAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJUlNUX0xFVFRFUikgewot
ICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCkpCi0gICAg
ICAgICAgICAgICAgZG9jdW1lbnQtPnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHRydWUpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChwc2V1ZG9JZCAhPSBOT1BTRVVETykKLSAgICAgICAgICAgIGR5
bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKLSAgICB9Ci0gICAgLy8gIyMjIGFkZCB0aGUgcmVzdCBv
ZiB0aGUgY2hlY2tzLi4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVj
dG9yKiBzZWwsIFBzZXVkb0lkJikgY29uc3QKLXsKLSAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9s
bGJhciA9IFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCk7Ci0gICAg
U2Nyb2xsYmFyUGFydCBwYXJ0ID0gUmVuZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZl
KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIGZvciByZXNpemVy
cyBhbmQgc2Nyb2xsYmFyIGNvcm5lcnMuICBFdmVudHVhbGx5IDp3aW5kb3ctaW5hY3RpdmUgc2hv
dWxkIGJlY29tZSBhIHJlYWwKLSAgICAvLyBwc2V1ZG8gY2xhc3MgYW5kIGp1c3QgYXBwbHkgdG8g
ZXZlcnl0aGluZy4KLSAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb1dpbmRvd0luYWN0aXZlKQotICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgCi0gICAgaWYgKCFzY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgQVNTRVJUKHNlbC0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwotICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9U
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKLSAgICAg
ICAgICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKLSAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRGlzYWJsZWQ6Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5h
YmxlZCgpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewotICAgICAg
ICAgICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaG92ZXJlZFBhcnQgIT0gTm9QYXJ0OwotICAgICAgICAgICAgaWYgKHBhcnQg
PT0gVHJhY2tCR1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ID09IEJh
Y2tUcmFja1BhcnQgfHwgaG92ZXJlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBob3ZlcmVk
UGFydCA9PSBUaHVtYlBhcnQ7Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBob3ZlcmVkUGFy
dDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6IHsK
LSAgICAgICAgICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHByZXNzZWRQYXJ0ICE9IE5vUGFydDsKLSAgICAgICAgICAgIGlm
IChwYXJ0ID09IFRyYWNrQkdQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFy
dCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQgfHwg
cHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0OwotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gcHJl
c3NlZFBhcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9y
aXpvbnRhbDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmVy
dGljYWw6Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWNyZW1l
bnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBh
cnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0OwotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbmNyZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
cGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OwotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9TdGFydDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25T
dGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFj
a1RyYWNrUGFydDsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5kOgotICAgICAg
ICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJk
QnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogewotICAgICAgICAgICAgU2Nyb2xsYmFy
QnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5i
dXR0b25zUGxhY2VtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tU
cmFja1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Ny
b2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZUJvdGg7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5k
UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRy
YWNrUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3Jv
bGxiYXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUJvdGg7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gCi0g
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1NpbmdsZUJ1dHRvbjogewotICAgICAgICAg
ICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFy
LT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBC
YWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFy
dCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xl
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb05vQnV0dG9uOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25z
UGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQ
bGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tUcmFja1BhcnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05v
bmUgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwotICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25z
UGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydDsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
b3JuZXJQcmVzZW50OgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IpCkBAIC0zMDQ2LDcgKzE5MjIsNyBAQCBSdWxlRGF0YTo6UnVsZURh
dGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDCiAgICAgLCBtX3NlbGVjdG9yKHNlbGVjdG9yKQogICAg
ICwgbV9zcGVjaWZpY2l0eShzZWxlY3Rvci0+c3BlY2lmaWNpdHkoKSkKICAgICAsIG1fcG9zaXRp
b24ocG9zaXRpb24pCi0gICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9y
KSkKKyAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKFNlbGVjdG9yQ2hlY2tlcjo6aXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKQogICAgICwgbV9oYXNNdWx0aXBhcnRTZWxl
Y3RvcihzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKQogICAgICwgbV9oYXNUb3BTZWxlY3Rvck1hdGNo
aW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKHNlbGVjdG9yKSkKIHsKQEAgLTM1ODMsNyArMjQ1OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAKICAgICBpZCA9IENTU1Byb3BlcnR5OjpyZXNv
bHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5
bGUtPndyaXRpbmdNb2RlKCkpOwogCi0gICAgaWYgKG1fY2hlY2tlci5tX21hdGNoVmlzaXRlZFBz
ZXVkb0NsYXNzICYmICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpIHsKKyAgICBpZiAo
bV9jaGVja2VyLmlzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MoKSAmJiAhaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaWQpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRo
YXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcxOCw3ICsyNTk0LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogCiAgICAgICAgIEVSZXNpemUgciA9IFJFU0la
RV9OT05FOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKSB7Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2Vy
Lm1fZG9jdW1lbnQtPnNldHRpbmdzKCkpCisgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgICAgICAgICAg
ciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVT
SVpFX05PTkU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1
ZTsKQEAgLTM3NjYsNyArMjY0Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgICAgIGlmIChtX3BhcmVudE5vZGUpCiAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLmtleXdvcmRTaXplKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewot
ICAgICAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVu
dCwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkp
OworICAgICAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1l
bnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXpl
KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVl
TWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIC8vIEtleXdvcmRzIGFyZSBiZWlu
ZyB1c2VkLgpAQCAtMzc3OSwxNCArMjY1NSwxNCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBmb250
U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQo
KSwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5
d29yZFNpemUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgLSBDU1NWYWx1ZVh4U21hbGwgKyAx
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlcjoKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9s
ZFNpemUsIG1fY2hlY2tlci5tX2RvY3VtZW50LT5pblF1aXJrc01vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNpemUgPSBsYXJnZXJGb250U2l6ZShvbGRTaXplLCBtX2NoZWNrZXIuZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKLSAgICAgICAgICAgICAgICAgICAgc2l6
ZSA9IHNtYWxsZXJGb250U2l6ZShvbGRTaXplLCBtX2NoZWNrZXIubV9kb2N1bWVudC0+aW5RdWly
a3NNb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBzaXplID0gc21hbGxlckZvbnRTaXplKG9s
ZFNpemUsIG1fY2hlY2tlci5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM4MzcsNyArMjcxMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgZWxzZSBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6
OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpIHsKICAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVy
ID0gem9vbUZhY3RvcjsKICAgICAgICAgICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fY2hlY2tlci5tX2RvY3Vt
ZW50LT5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2NoZWNr
ZXIuZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllciAq
PSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxp
bmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgbXVsdGlwbGllcik7CkBAIC00MDU0LDcgKzI5MzAsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1p
bHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNl
LgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICAgICAgc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9j
dW1lbnQsIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxs
ICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0Zh
bWlseSgpKTsKICAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1p
bHlJc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShp
bml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKQEAgLTQwNzgsNyArMjk1NCw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgQXRvbWljU3RyaW5n
IGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1
bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hl
Y2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNGb250RmFtaWx5VmFsdWUoKSkKICAg
ICAgICAgICAgICAgICAgICAgZmFjZSA9IHN0YXRpY19jYXN0PEZvbnRGYW1pbHlWYWx1ZSo+KGNv
bnRlbnRWYWx1ZSktPmZhbWlseU5hbWUoKTsKQEAgLTQxMzQsNyArMzAxMCw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgLy8gSWYgY3VyckZhbWls
eSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9uIHRoaXMgZGVz
Y3JpcHRpb24uCiAgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CiAgICAgICAgICAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKLSAgICAgICAgICAg
ICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2No
ZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAg
ICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZCht
X2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKIAogICAg
ICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0K
QEAgLTQxOTAsNyArMzA2Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0
eShpbnQKICAgICAgICAgICAgIHNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOwogICAgICAgICAgICAgc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVEb2N1bWVudCkgewotICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IG1fY2hlY2tlci5tX2Rv
Y3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT56b29tKCk7CisgICAgICAgICAgICBmbG9hdCBk
b2Nab29tID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnpvb20o
KTsKICAgICAgICAgICAgIHNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7CiAgICAgICAgICAgICBz
ZXRab29tKGRvY1pvb20pOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSB7CkBAIC00
MjI2LDIxICszMTAyLDIxIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5p
dGlhbCkgewotICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLm1fZG9j
dW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2No
ZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgIEFTU0VSVChzZXR0aW5n
cyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hv
dWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKICAgICAgICAg
ICAgIGlmICghc2V0dGluZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwog
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZv
bnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KG1fY2hlY2tlci5tX2RvY3VtZW50LT5wcmludGluZygpKTsKLSAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5ID0gbV9jaGVja2VyLm1fZG9j
dW1lbnQtPnNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOworICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmlu
dGluZygpKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFt
aWx5ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWls
eSgpOwogICAgICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0
YW5kYXJkRm9udEZhbWlseSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNt
YWxsICsgMSk7Ci0gICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRT
aXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNl
KSk7CisgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7CiAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwpAQCAtNDI1NCwxNSArMzEz
MCwxNSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAg
ICAgICAvLyBEb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUgdGhlbWUgZGlkIGFueXRoaW5nLiAg
SWYgbm90LCBkb24ndCBib3RoZXIgdXBkYXRpbmcgdGhlIGZvbnQuCiAgICAgICAgICAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCkpIHsKICAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlIHJlbmRlcmluZyBtb2RlIGFuZCBwcmludGVyIGZvbnQgc2V0dGluZ3MgYXJl
IHVwZGF0ZWQuCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2Vy
Lm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhp
cyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0
aW5ncwogICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9k
ZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5tX2RvY3VtZW50LT5wcmludGlu
ZygpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQo
bV9jaGVja2VyLmRvY3VtZW50KCktPnByaW50aW5nKCkpOwogICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUobV9jaGVja2VyLm1fZG9jdW1lbnQsIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkda
b29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50
KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAgICAg
ICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CkBAIC00ODA5
LDcgKzM2ODUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NjU2MTA3Nz4gV29yayBhcm91bmQgdGhlIFN0b2NrcyB3aWRnZXQncyBtaXN1c2Ugb2YgdGhlCiAg
ICAgICAgIC8vIHBvaW50ZXItZXZlbnRzIHByb3BlcnR5IGJ5IG5vdCBhcHBseWluZyBpdCBpbiBE
YXNoYm9hcmQuCi0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5tX2RvY3Vt
ZW50LT5zZXR0aW5ncygpOworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIu
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCkBAIC01ODM3LDkgKzQ3MTMsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrRm9yR2VuZXJpY0ZhCiAgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZh
Y3Rvci4KICAgICBmbG9hdCBzaXplOwogICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkK
LSAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwg
Q1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkgLSAxLCBjaGlsZEZvbnQu
dXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29y
ZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdv
cmRTaXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKICAgICBlbHNl
IHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnNl
dHRpbmdzKCk7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVu
dCgpLT5zZXR0aW5ncygpOwogICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gc2V0dGlu
Z3MKICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4
ZWRGb250U2l6ZSgpKSAvIHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKQogICAgICAgICAgICAg
OiAxOwpAQCAtNTg1Niw3ICs0NzMyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0Zv
ckdlbmVyaWNGYQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzZXRGb250U2l6ZShGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5tX2RvY3Vt
ZW50LCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6
ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRT
aXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVudCgp
LCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwg
dXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHls
ZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzKQpAQCAtNjA2Miw3ICs0OTM4LDcgQEAgQ29sb3IgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbQogICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVXZWJr
aXRUZXh0KQogICAgICAgICAgICAgY29sID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29s
b3IoKTsKICAgICAgICAgZWxzZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVXZWJraXRMaW5rKQotICAg
ICAgICAgICAgY29sID0gbV9lbGVtZW50LT5pc0xpbmsoKSAmJiBtX2NoZWNrZXIubV9tYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcyA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xv
cigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgICAgIGNv
bCA9IG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9jaGVja2VyLmlzTWF0Y2hpbmdWaXNpdGVkUHNl
dWRvQ2xhc3MoKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDog
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICAgICAgZWxzZSBpZiAoaWRl
bnQgPT0gQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rKQogICAgICAgICAgICAgY29sID0gbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKICAgICAgICAgZWxzZSBpZiAoaWRl
bnQgPT0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcikKQEAgLTYwOTYsMjcgKzQ5NzIsNiBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9yCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0
YXRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1f
ZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzTGluaygpKQotICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwotICAgIH0KLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpCi17Ci0gICAgaWYg
KCFtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVkSGFzaCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUobm9kZSk7Ci0gICAgICAgIGlmIChhdHRyICYmIHZp
c2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKSA9PSB2aXNpdGVkSGFz
aCkKLSAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci19Ci0K
IHN0YXRpYyBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0VHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgPHd0
Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KQEAgLTg0LDMwNiArODUsMjc3IEBAIHB1YmxpYzoKICAgICBib29sIG1fcmVz
dWx0OwogfTsKIAotICAgIC8vIFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBh
IGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgotICAg
IGNsYXNzIENTU1N0eWxlU2VsZWN0b3IgewotICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVB
cHBseVByb3BlcnR5OwotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NTdHlsZVNlbGVj
dG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBDU1NT
dHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0cywgQ1NT
U3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAotICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7Ci0g
ICAgICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBVc2luZyB0
aGVzZSBkdXJpbmcgdHJlZSB3YWxrIHdpbGwgYWxsb3cgc3R5bGUgc2VsZWN0b3IgdG8gb3B0aW1p
emUgY2hpbGQgYW5kIGRlc2NlbmRhbnQgc2VsZWN0b3IgbG9va3Vwcy4KLSAgICAgICAgdm9pZCBw
dXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7Ci0gICAgICAgIHZvaWQgcG9wUGFyZW50KEVsZW1l
bnQqIHBhcmVudCk7Ci0KLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBh
bGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlLCBi
b29sIG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2UpOwotICAgICAgICAKLSAgICAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5
bGUqLCBLZXlmcmFtZUxpc3QmIGxpc3QpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZSk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0KLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgICAg
IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxl
bWVudFN0eWxlOyB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnQ7IH0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIHsg
cmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIEZvbnREZXNjcmlw
dGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7cmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICAgICAgdm9pZCBzZXRab29tKGZs
b2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAgICAgICB2
b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9v
bCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAg
ICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7Ci0gICAgICAgIGJvb2wgbWF0Y2hlc1NpYmxpbmdSdWxlcygpOwot
ICAgICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQm
IHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgICAgICBOb2RlKiBmaW5kU2libGluZ0ZvclN0
eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKLSAgICAgICAgYm9vbCBj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSopIGNvbnN0OwotICAgICAgICAKLSAgICAgICAg
dm9pZCBwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpOwotICAgICAgICB2b2lk
IHBvcFBhcmVudFN0YWNrRnJhbWUoKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKiwgS2V5ZnJhbWVWYWx1ZSYpOwotCi0gICAgcHVibGljOgotICAgICAgICAvLyBU
aGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVk
IGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgotICAgICAgICBlbnVt
IENTU1J1bGVGaWx0ZXIgewotICAgICAgICAgICAgVUFBbmRVc2VyQ1NTUnVsZXMgICA9IDEgPDwg
MSwKLSAgICAgICAgICAgIEF1dGhvckNTU1J1bGVzICAgICAgPSAxIDw8IDIsCi0gICAgICAgICAg
ICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAotICAgICAgICAgICAgQ3Jvc3NPcmlnaW5D
U1NSdWxlcyA9IDEgPDwgNCwKLSAgICAgICAgICAgIEFsbEJ1dEVtcHR5Q1NTUnVsZXMgPSBVQUFu
ZFVzZXJDU1NSdWxlcyB8IEF1dGhvckNTU1J1bGVzIHwgQ3Jvc3NPcmlnaW5DU1NSdWxlcywKLSAg
ICAgICAgICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1bGVzIHwgRW1w
dHlDU1NSdWxlcywKLSAgICAgICAgfTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0g
QWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBz
ZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVs
ZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKLQotICAgICAgICAvLyBHaXZlbiBh
IENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2Up
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0gICAgICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQg
c2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgotICAg
ICAgICBzdGF0aWMgZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdv
cmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7Ci0KLSAgICAgICAgLy8gR2l2ZW4g
YSBmb250IHNpemUgaW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZv
bnQgc2l6ZSBiZXR3ZWVuIDEgYW5kIDcuCi0gICAgICAgIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNp
emUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplKTsKLQotICAgIHByaXZhdGU6Ci0KLSAgICAgICAgLy8gV2hlbiB0aGUgQ1NTIGtleXdv
cmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gbWF0Y2gg
d2l0aGluIHRoZSBrZXl3b3JkCi0gICAgICAgIC8vIHRhYmxlLCBhbmQgZmFpbGluZyB0aGF0LCB3
aWxsIHNpbXBseSBtdWx0aXBseSBieSAxLjIuCi0gICAgICAgIGZsb2F0IGxhcmdlckZvbnRTaXpl
KGZsb2F0IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7Ci0KLSAgICAgICAgLy8gTGlrZSB0
aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBmb3IgdGhlIGtleXdvcmQgInNtYWxsZXIiLgotICAg
ICAgICBmbG9hdCBzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBj
b25zdDsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRvY3VtZW50IHdo
ZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KLQotICAgICAgICB2b2lkIGFwcGx5UHJvcGVy
dHlUb1N0eWxlKGludCBpZCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOwotICAgICAgICAKLSAg
ICAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9yRm9u
dEZpemUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVz
Y3JpcHRpb24mLCBmbG9hdCBzaXplKTsKLQotICAgICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNB
YnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKTsKLQotICAgICAg
ICBDb2xvciBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSopIGNv
bnN0OwotCi0gICAgICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7Ci0gCi0gICAgICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KLQotICAgICAgICB2b2lk
IGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhw
KiwgYm9vbCByZXN1bHQpOwotCi0gICAgICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdl
KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBtX2No
ZWNrZXIuYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOyB9Ci0gICAgICAgIHZvaWQgdmlzaXRlZFN0
YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlzaXRlZFN0YXRl
Q2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KLQotICAgICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUo
UGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBydWxlKTsKLSAgICAgICAgdm9pZCBh
ZGRQYWdlU3R5bGUoUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4pOwotCi0gICAgICAgIGJvb2wgdXNl
c1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuc2libGluZ1J1bGVzOyB9
Ci0gICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KLSAgICAgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJS
dWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0K
LSAgICAgICAgYm9vbCB1c2VzTGlua1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51
c2VzTGlua1J1bGVzOyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotCi0g
ICAgICAgIHN0cnVjdCBGZWF0dXJlcyB7Ci0gICAgICAgICAgICBGZWF0dXJlcygpOwotICAgICAg
ICAgICAgfkZlYXR1cmVzKCk7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiBpZHNJblJ1bGVzOwotICAgICAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0
cnNJblJ1bGVzOwotICAgICAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHNpYmxpbmdSdWxlczsKLSAg
ICAgICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOwotICAgICAgICAgICAgYm9vbCB1c2Vz
QmVmb3JlQWZ0ZXJSdWxlczsKLSAgICAgICAgICAgIGJvb2wgdXNlc0xpbmtSdWxlczsKLSAgICAg
ICAgfTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGVudW0gU2VsZWN0b3JNYXRjaCB7IFNlbGVj
dG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
IH07Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250
IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkg
aGFzIGNoYW5nZWQuIC1kd2gKLSAgICAgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgICAgICB2b2lk
IGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSk7Ci0gICAgICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotCi0gICAgICAgIHZv
aWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwotCi0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZFJ1
bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9
Ci0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsKTsKLQotICAgICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7Ci0gICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7Ci0gICAgICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVE
YXRhJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwotICAgICAgICAK
LSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7Ci0KLSAgICAgICAg
dGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgotICAgICAgICB2b2lkIGFwcGx5RGVjbGFyYXRpb25z
KGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsKLQotICAgICAg
ICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNG
aXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgICAgICB2b2lkIG1hdGNoUGFn
ZVJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgYm9vbCBpc0xlZnRQYWdlLCBi
b29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLSAgICAgICAgYm9vbCBp
c0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgICAgICBib29sIGlzUmlnaHRQYWdl
KGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0K
LSAgICAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICAgICAg
U3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAg
T3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBt
X3VzZXJTdHlsZTsKLQotICAgICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwotCi0gICAgICAgIHN0
cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKLSAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoKSB7
fQotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1l
bnQoZWxlbWVudCkge30KLSAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgICAg
ICBWZWN0b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwotICAgICAgICAKLSAg
ICAgICAgLy8gV2l0aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90
IHRhYmxlIGhhcyBmYWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgotICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgYmxvb21GaWx0ZXJLZXlCaXRzID0gMTI7Ci0gICAgICAgIE93blB0cjxC
bG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0
ZXI7Ci0KLSAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKLSAgICAgICAgQm9yZGVyRGF0
YSBtX2JvcmRlckRhdGE7Ci0gICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOwotICAg
ICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiA+IEtleWZy
YW1lc1J1bGVNYXA7Ci0gICAgICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFw
OwotCi0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0
QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQotCi0gICAgICAg
IGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7Ci0gICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZWxlY3RvckNoZWNrZXIpOwotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBTZWxlY3Rv
ckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcpOwotCi0gICAgICAgICAgICBi
b29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVj
a2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2gg
Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1Bz
ZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5
bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OwotICAg
ICAgICAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVy
ZWRMaW5rLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNv
bnN0OwotICAgICAgICAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVj
dG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwotICAgICAgICAgICAgc3RhdGlj
IGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICAg
ICAgICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwg
Y29uc3QgRWxlbWVudCopOwotCi0gICAgICAgICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5r
U3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3Q7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBk
ZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKLSAgICAg
ICAgICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwotICAgICAgICAgICAgdm9pZCB2
aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKTsKLQotICAgICAgICAgICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsK
LSAgICAgICAgICAgIGJvb2wgbV9jb2xsZWN0UnVsZXNPbmx5OwotICAgICAgICAgICAgYm9vbCBt
X3NhbWVPcmlnaW5Pbmx5OwotICAgICAgICAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLSAg
ICAgICAgICAgIGJvb2wgbV9kb2N1bWVudElzSFRNTDsKLSAgICAgICAgICAgIG11dGFibGUgYm9v
bCBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50czsKLSAgICAgICAgICAgIG11dGFibGUgYm9vbCBt
X21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwotICAgICAgICAgICAgbXV0YWJsZSBIYXNoU2V0PExp
bmtIYXNoLCBMaW5rSGFzaEhhc2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOwotICAg
ICAgICB9OwotCi0gICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqKTsKLSAgICAgICAgU3R5bGVJbWFnZSogY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLQotICAgICAgICB2
b2lkIG1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUpOwotICAg
ICAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKLSAgICAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoKTsKLQotICAgICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsQ29t
cG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZv
aWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwot
ICAgICAgICB2b2lkIG1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NW
YWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsU2l6ZShD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZp
bGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAg
ICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7Ci0KLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NW
YWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qLCBD
U1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbios
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25QbGF5U3RhdGUo
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0
eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0KLSAgICAgICAgdm9pZCBtYXBOaW5l
UGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0g
ICAgICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUlt
YWdlJik7Ci0gICAgICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqLCBO
aW5lUGllY2VJbWFnZSYpOwotCi0gICAgICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50
IGlkLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIGFwcGx5UGFnZVNpemVQcm9wZXJ0eShDU1NW
YWx1ZSopOwotICAgICAgICBib29sIHBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUq
LCBDU1NQcmltaXRpdmVWYWx1ZSosIExlbmd0aCYgd2lkdGgsIExlbmd0aCYgaGVpZ2h0KTsKLSAg
ICAgICAgTGVuZ3RoIG1tTGVuZ3RoKGRvdWJsZSBtbSkgY29uc3Q7Ci0gICAgICAgIExlbmd0aCBp
bmNoTGVuZ3RoKGRvdWJsZSBpbmNoKSBjb25zdDsKKy8vIFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJl
bmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0
eWxlc2hlZXRzLgorY2xhc3MgQ1NTU3R5bGVTZWxlY3RvciB7CisgICAgZnJpZW5kIGNsYXNzIENT
U1N0eWxlQXBwbHlQcm9wZXJ0eTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NTdHlsZVNl
bGVjdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ1NTU3R5bGVT
ZWxlY3RvcihEb2N1bWVudCosIFN0eWxlU2hlZXRMaXN0KiBhdXRob3JTaGVldHMsIENTU1N0eWxl
U2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKKyAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxl
U2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCisgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmlj
dFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKKyAgICB+Q1NTU3R5bGVT
ZWxlY3RvcigpOworICAgIAorICAgIC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2ls
bCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBz
ZWxlY3RvciBsb29rdXBzLgorICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwor
ICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCk7CisKKworICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJv
b3REZWZhdWx0ID0gZmFsc2UsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7
CisgICAgCisgICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29u
c3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmIGxpc3QpOworCisgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVu
dCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IGZhbHNlKTsKKworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50Kik7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgIFJlbmRlclN0eWxl
KiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9
CisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsgfQorICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRp
b24oKSB7cmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdm9p
ZCBzZXRGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbikgeyBt
X2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsgfQorICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCkt
PnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2Zv
bnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRU
ZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNp
emVBZGp1c3QoYik7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUo
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VV
RE8pOworICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIFJlbmRlclN0eWxlKiBs
b2NhdGVTaGFyZWRTdHlsZSgpOworICAgIGJvb2wgbWF0Y2hlc1NpYmxpbmdSdWxlcygpOworICAg
IE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRl
ZE5vZGVDb3VudCkgY29uc3Q7CisgICAgTm9kZSogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmco
Tm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoTm9kZSopIGNvbnN0OworICAgIAorICAgIHZvaWQgcHVzaFBhcmVudFN0YWNrRnJh
bWUoRWxlbWVudCogcGFyZW50KTsKKyAgICB2b2lkIHBvcFBhcmVudFN0YWNrRnJhbWUoKTsKKwor
ICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqLCBLZXlmcmFtZVZhbHVlJik7CisK
K3B1YmxpYzoKKyAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2Yg
cnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1l
bnQpLgorICAgIGVudW0gQ1NTUnVsZUZpbHRlciB7CisgICAgICAgIFVBQW5kVXNlckNTU1J1bGVz
ICAgPSAxIDw8IDEsCisgICAgICAgIEF1dGhvckNTU1J1bGVzICAgICAgPSAxIDw8IDIsCisgICAg
ICAgIEVtcHR5Q1NTUnVsZXMgICAgICAgPSAxIDw8IDMsCisgICAgICAgIENyb3NzT3JpZ2luQ1NT
UnVsZXMgPSAxIDw8IDQsCisgICAgICAgIEFsbEJ1dEVtcHR5Q1NTUnVsZXMgPSBVQUFuZFVzZXJD
U1NSdWxlcyB8IEF1dGhvckNTU1J1bGVzIHwgQ3Jvc3NPcmlnaW5DU1NSdWxlcywKKyAgICAgICAg
QWxsQ1NTUnVsZXMgICAgICAgICA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMgfCBFbXB0eUNTU1J1bGVz
LAorICAgIH07CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gc3R5bGVSdWxlc0ZvckVsZW1l
bnQoRWxlbWVudCosIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxl
cyk7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1l
bnQoRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVt
cHR5Q1NTUnVsZXMpOworCisgICAgLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUgcmFuZ2Ug
KHh4LXNtYWxsIHRvIC13ZWJraXQteHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVy
bgorICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhlIHVz
ZXIncyBkZWZhdWx0IChtZWRpdW0pLgorICAgIHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdv
cmQoRG9jdW1lbnQqLCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXpl
KTsKKworICAgIC8vIEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIGxlZ2FjeSBmb250IHNpemUgYmV0d2VlbiAxIGFuZCA3LgorICAgIHN0YXRpYyBp
bnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91
bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKKworcHJpdmF0ZToKKworICAgIC8vIFdoZW4gdGhlIENT
UyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdHRlbXB0IHRv
IG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZAorICAgIC8vIHRhYmxlLCBhbmQgZmFpbGluZyB0aGF0
LCB3aWxsIHNpbXBseSBtdWx0aXBseSBieSAxLjIuCisgICAgZmxvYXQgbGFyZ2VyRm9udFNpemUo
ZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBjb25zdDsKKworICAgIC8vIExpa2UgdGhlIHBy
ZXZpb3VzIGZ1bmN0aW9uLCBidXQgZm9yIHRoZSBrZXl3b3JkICJzbWFsbGVyIi4KKyAgICBmbG9h
dCBzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBjb25zdDsKKwor
cHVibGljOgorICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcykgeyBt
X3N0eWxlID0gczsgfSAvLyBVc2VkIGJ5IHRoZSBkb2N1bWVudCB3aGVuIHNldHRpbmcgdXAgaXRz
IHJvb3Qgc3R5bGUuCisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKGludCBpZCwgQ1NT
VmFsdWUqLCBSZW5kZXJTdHlsZSopOworICAgIAorICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wg
aXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250
U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworCisgICAgc3RhdGlj
IGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVy
U3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVz
ZVNWR1pvb21SdWxlcyk7CisKK3B1YmxpYzoKKyAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwor
CisgICAgQ29sb3IgZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUq
KSBjb25zdDsKKworICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7CisKKyAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CisKKyAgICB2b2lkIGFkZFZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCBy
ZXN1bHQpOworCisgICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKKwor
ICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRT
dGF0ZUNoYW5nZWQoKTsgfQorICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2
aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7
IH0KKworICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZy
YW1lc1J1bGU+KTsKKyAgICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxl
Pik7CisKKyAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1
cmVzLnNpYmxpbmdSdWxlczsgfQorICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICBib29sIHVzZXNC
ZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0
ZXJSdWxlczsgfQorICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXMudXNlc0xpbmtSdWxlczsgfQorCisgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3Jt
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRl
clN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwor
CisgICAgc3RydWN0IEZlYXR1cmVzIHsKKyAgICAgICAgRmVhdHVyZXMoKTsKKyAgICAgICAgfkZl
YXR1cmVzKCk7CisgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7
CisgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGF0dHJzSW5SdWxlczsKKyAgICAg
ICAgT3duUHRyPFJ1bGVTZXQ+IHNpYmxpbmdSdWxlczsKKyAgICAgICAgYm9vbCB1c2VzRmlyc3RM
aW5lUnVsZXM7CisgICAgICAgIGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7CisgICAgICAgIGJv
b2wgdXNlc0xpbmtSdWxlczsKKyAgICB9OworCitwcml2YXRlOgorICAgIC8vIFRoaXMgZnVuY3Rp
b24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUg
Y3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCisgICAgdm9pZCBj
aGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
KTsKKworICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1
c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOworCisgICAgdm9pZCBhZGRN
YXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQo
cnVsZSk7IH0KKyAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiopOworCisgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwor
ICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsK
KyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICAKKyAgICBib29sIGNoZWNrU2VsZWN0
b3IoY29uc3QgUnVsZURhdGEmKTsKKworICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KKyAg
ICB2b2lkIGFwcGx5RGVjbGFyYXRpb25zKGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4KTsKKworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wg
aXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Cisg
ICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGJv
b2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7
CisgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNS
aWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUlu
ZGV4KTsgfQorICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAg
U3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIAorICAgIE93blB0cjxS
dWxlU2V0PiBtX2F1dGhvclN0eWxlOworICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsK
KworICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFt
ZSB7CisgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoKSB7IH0KKyAgICAgICAgUGFyZW50U3RhY2tG
cmFtZShFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkgeyB9CisgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQ7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhh
c2hlczsKKyAgICB9OworICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNr
OworICAgIAorICAgIC8vIFdpdGggMTAwIHVuaXF1ZSBzdHJpbmdzIGluIHRoZSBmaWx0ZXIsIDJe
MTIgc2xvdCB0YWJsZSBoYXMgZmFsc2UgcG9zaXRpdmUgcmF0ZSBvZiB+MC4yJS4KKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgYmxvb21GaWx0ZXJLZXlCaXRzID0gMTI7CisgICAgT3duUHRyPEJs
b29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4gPiBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
cjsKKworICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CisgICAgQm9yZGVyRGF0YSBtX2JvcmRl
ckRhdGE7CisgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CisgICAgQ29sb3IgbV9iYWNr
Z3JvdW5kQ29sb3I7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJl
ZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiA+IEtleWZyYW1lc1J1bGVNYXA7CisgICAgS2V5
ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFll
dEF2YWlsYWJsZTsgfQorCisgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOworICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJl
bmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworCisgICAgdm9pZCBtYXRjaFVBUnVs
ZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFSdWxlKTsKKyAgICB2b2lkIHVwZGF0ZUZv
bnQoKTsKKyAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworCisgICAgdm9pZCBt
YXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxSZXBlYXRZKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmls
bFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OworCisgICAgdm9pZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
IHZvaWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2
b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lk
IG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBt
YXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworCisgICAg
dm9pZCBtYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVj
ZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmlu
ZVBpZWNlSW1hZ2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVl
KiwgTmluZVBpZWNlSW1hZ2UmKTsKKworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVBhZ2VTaXplUHJvcGVydHkoQ1NTVmFsdWUqKTsK
KyAgICBib29sIHBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRp
dmVWYWx1ZSosIExlbmd0aCYgd2lkdGgsIExlbmd0aCYgaGVpZ2h0KTsKKyAgICBMZW5ndGggbW1M
ZW5ndGgoZG91YmxlIG1tKSBjb25zdDsKKyAgICBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5j
aCkgY29uc3Q7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5
KGludCBpZCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBD
U1NWYWx1ZSopOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOwor
ICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKIAotICAgICAgICAvLyBXZSBjb2xsZWN0IHRo
ZSBzZXQgb2YgZGVjbHMgdGhhdCBtYXRjaCBpbiB8bV9tYXRjaGVkRGVjbHN8LiAgV2UgdGhlbiB3
YWxrIHRoZQotICAgICAgICAvLyBzZXQgb2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRpbWVzLCBvbmNl
IGZvciB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXJzIGRlcGVuZCBvbiAobGlrZSBmb250LXNp
emUpLAotICAgICAgICAvLyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIGZvciBhbGwgdGhlIHJlbWFp
bmluZyBwcm9wZXJ0aWVzLiAgV2UgdGhlbiBkbyB0aGUgc2FtZSB0d28gcGFzc2VzCi0gICAgICAg
IC8vIGZvciBhbnkgIWltcG9ydGFudCBydWxlcy4KLSAgICAgICAgVmVjdG9yPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiwgNjQ+IG1fbWF0Y2hlZERlY2xzOwotCi0gICAgICAgIC8vIEEgYnVm
ZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQs
IGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAgICAgLy8gbWVyZ2Ugc29ydGlu
Zy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwot
Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLSAgICAgICAgCi0gICAg
ICAgIEhhc2hTZXQ8aW50PiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IC8vIEhhc2ggb2YgQ1NT
UHJvcGVydHlJRHMKLQotICAgICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRp
dW07Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwotCi0g
ICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKLQotICAgICAgICBTZWxlY3RvckNoZWNr
ZXIgbV9jaGVja2VyOwotCi0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAg
ICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBt
X3Jvb3RFbGVtZW50U3R5bGU7Ci0gICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICAgICAg
U3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwotICAgICAgICBFSW5zaWRlTGluayBtX2Vs
ZW1lbnRMaW5rU3RhdGU7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKLSAg
ICAgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwotICAgICAgICBib29sIG1fZm9udERp
cnR5OwotICAgICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwotICAgICAgICAK
LSAgICAgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7Ci0gICAgICAg
IFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+IG1fYWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlRGVjbHM7Ci0gICAgICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOworICAgIC8vIFdlIGNvbGxlY3QgdGhlIHNldCBv
ZiBkZWNscyB0aGF0IG1hdGNoIGluIHxtX21hdGNoZWREZWNsc3wuIFdlIHRoZW4gd2FsayB0aGUK
KyAgICAvLyBzZXQgb2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRpbWVzLCBvbmNlIGZvciB0aG9zZSBw
cm9wZXJ0aWVzIHRoYXQgb3RoZXJzIGRlcGVuZCBvbiAobGlrZSBmb250LXNpemUpLAorICAgIC8v
IGFuZCB0aGVuIGEgc2Vjb25kIHRpbWUgZm9yIGFsbCB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMu
IFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3NlcworICAgIC8vIGZvciBhbnkgIWltcG9ydGFu
dCBydWxlcy4KKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCA2ND4gbV9t
YXRjaGVkRGVjbHM7CisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBt
YXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQg
Zm9yCisgICAgLy8gbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAz
Mj4gbV9tYXRjaGVkUnVsZXM7CisKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7
CisgICAgCisgICAgSGFzaFNldDxpbnQ+IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgLy8gSGFz
aCBvZiBDU1NQcm9wZXJ0eUlEcworCisgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1f
bWVkaXVtOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOworCisg
ICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hl
Y2tlcjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHls
ZSogbV9wYXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwor
ICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1l
bnQ7CisgICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5v
ZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAg
Ym9vbCBtX2ZvbnREaXJ0eTsKKyAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwor
ICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTRm9udFNlbGVj
dG9yPiBtX2ZvbnRTZWxlY3RvcjsKKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOworICAgIFZlY3RvcjxNZWRpYVF1
ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCi0gICAg
ICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5OwotICAgIH07
CisgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7Cit9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFu
a3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29k
ZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKworI2luY2x1ZGUg
IkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQcm9n
cmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lLmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIK
KworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgorI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlhMaW5rTmFtZXMu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOworCitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQp
CisgICAgLCBtX3N0cmljdFBhcnNpbmcoc3RyaWN0UGFyc2luZykKKyAgICAsIG1fZG9jdW1lbnRJ
c0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgLCBtX2lzQ29sbGVjdGluZ1J1
bGVzT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5bGUoTk9QU0VVRE8pCisgICAgLCBtX2hh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cyhmYWxzZSkKKyAgICAsIG1faXNNYXRjaGluZ1Zpc2l0ZWRQ
c2V1ZG9DbGFzcyhmYWxzZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJp
bmcqIGxpbmtBdHRyaWJ1dGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzTGluaygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
OworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAmZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgCisjaWYgRU5BQkxFKFNWRykK
KyAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAmZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisjZW5kaWYKKyAgICAK
KyAgICByZXR1cm4gMDsKK30KKworRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1p
bmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIEFTU0VS
VChlbGVtZW50LT5pc0xpbmsoKSk7CisgICAgCisgICAgY29uc3QgQXRvbWljU3RyaW5nKiBhdHRy
ID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsKKyAgICBpZiAoIWF0dHIgfHwgYXR0ci0+aXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOworICAgIAorI2lmIFBMQVRGT1JNKFFU
KQorICAgIFZlY3RvcjxVQ2hhciwgNTEyPiB1cmw7CisgICAgdmlzaXRlZFVSTChtX2RvY3VtZW50
LT5iYXNlVVJMKCksICphdHRyLCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAgICAvLyBJZiB0aGUgUXQ0LjQg
aW50ZXJmYWNlIGZvciB0aGUgaGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhhdmUgdG8gZmFsbGJh
Y2sKKyAgICAvLyB0byB0aGUgb2xkIGdsb2JhbCBoaXN0b3J5LgorICAgIFFXZWJIaXN0b3J5SW50
ZXJmYWNlKiBpZmFjZSA9IFFXZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCk7
CisgICAgaWYgKGlmYWNlKQorICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3RvcnlDb250YWlucyhR
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwgdXJsLnNpemUoKSkp
ID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAgIExp
bmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Cisg
ICAgaWYgKCFoYXNoKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbHNl
CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJM
KCksICphdHRyKTsKKyAgICBpZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0
ZWRMaW5rOworI2VuZGlmCisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGlu
azsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAgIG1fbGlua3ND
aGVja2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKKyAgICAKKyNpZiBVU0UoUExBVEZPUk1f
U1RSQVRFR0lFUykKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnZpc2l0ZWRMaW5r
U3RyYXRlZ3koKS0+aXNMaW5rVmlzaXRlZChwYWdlLCBoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5r
IDogSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbHNlCisgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCku
aXNMaW5rVmlzaXRlZChoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVk
TGluazsKKyNlbmRpZgorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKSBjb25zdAoreworICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
KyAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpKSB7CisgICAgICAgIC8vIGZhc3RDaGVja1NlbGVjdG9yIGFzc3VtZXMgY2xhc3MgYW5kIGlk
IG1hdGNoIGZvciB0aGUgdG9wIHNlbGVjdG9yLgorICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzQ2xh
c3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KS5jb250YWlucyhzZWwtPnZhbHVlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0gZWxzZSBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewor
ICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVs
ZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5
bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOworfQorCituYW1l
c3BhY2UgeworICAgIAoraW5saW5lIGJvb2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIXNl
bGVjdG9yLT5oYXNUYWcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7CisgICAgaWYg
KGxvY2FsTmFtZSAhPSBzdGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gZWxlbWVudC0+bG9jYWxOYW1l
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICByZXR1cm4gbmFt
ZXNwYWNlVVJJID09IHN0YXJBdG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50LT5uYW1lc3Bh
Y2VVUkkoKTsKK30KKwordGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVtZW50Kiwg
QXRvbWljU3RyaW5nSW1wbCopPgoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNv
bnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQoreworICAgIEF0b21pY1N0cmluZ0lt
cGwqIHZhbHVlID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworICAgIGZvciAoOyBlbGVtZW50
OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChjaGVj
a1ZhbHVlKGVsZW1lbnQsIHZhbHVlKSAmJiBzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2Vs
ZWN0b3IpKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkRlc2NlbmRhbnQpCisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
ID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6
OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cik7CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7Cisg
ICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gZWxlbWVu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAh
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3It
PnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8vIENoaWxkIG9y
IHN1YnNlbGVjdG9yIGNoZWNrIGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCBl
bGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0aGUgdmVyeSB0
b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2ggCisgICAgICAgICAgICAvLyB0aGUgb3Jp
Z2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5nLgorICAgICAgICAgICAgaWYgKCF0b3BDaGls
ZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93biB0aGUgYW5j
ZXN0b3IgY2hhaW4uCisgICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1vc3QgY2hpbGQg
b3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRpbnVlIGNoZWNr
aW5nIGFuY2VzdG9ycy4KKyAgICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRPclN1YnNlbGVj
dG9yOworICAgICAgICAgICAgZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxl
bWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
ID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKK3sKKyAgICByZXR1cm4gZWxl
bWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oZWxl
bWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyh2YWx1ZSk7Cit9CisKK2lubGluZSBib29sIGNo
ZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1
ZSkgCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIGNoZWNrVGFn
VmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqKQoreworICAgIHJldHVybiB0
cnVlOworfQorICAgIAorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQor
eworICAgIEFTU0VSVChpc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpOworICAgIAor
ICAgIC8vIFRoZSB0b3Agc2VsZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVsZSBo
YXNoZXMgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCisgICAgaWYg
KCFzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ciA9IDA7CisgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVt
ZW50ID0gMDsKKyAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNo
aWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikK
KyAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgCisgICAgaWYg
KHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAg
ICAgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAKKyAgICBzZWxlY3Rv
ciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgCisgICAgLy8gV2Uga25vdyB0aGlzIGNv
bXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29t
YmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAgICB3aGlsZSAo
c2VsZWN0b3IpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2lu
Z2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpJZDoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0
b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpOb25lOgorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja1Rh
Z1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGls
ZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9
IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlv
bigpICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9
IENTU1NlbGVjdG9yOjpDaGlsZCAmJiBzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rv
cjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Tm9uZSAmJiBzZWxlY3Rvci0+bV9tYXRj
aCAhPSBDU1NTZWxlY3Rvcjo6SWQgJiYgc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6
OkNsYXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMK
Ky8vIEl0IGNhbiByZXR1cm4gMyBkaWZmZXJlbnQgdmFsdWVzOgorLy8gKiBTZWxlY3Rvck1hdGNo
ZXMgICAgICAgICAtIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKKy8vICogU2Vs
ZWN0b3JGYWlsc0xvY2FsbHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50
IGUKKy8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9y
IGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKK1NlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rv
ciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWRykKKyAg
ICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNvbmNl
cHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCisgICAgLy8gYmVjYXVzZSBpdHMgY29udGVudHMgYXJl
IG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgorICAgIGlmIChlLT5p
c1NWR1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OworI2VuZGlmCisgICAgCisgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCisgICAg
aWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3Rv
ciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAKKyAgICAvLyBUaGUgcmVz
dCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAorICAgIENTU1NlbGVjdG9yOjpSZWxhdGlv
biByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKKyAgICAKKyAgICAvLyBQcmVwYXJlIG5leHQg
c2VsCisgICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7CisgICAgaWYgKCFzZWwpCisgICAgICAg
IHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CisgICAgCisgICAgaWYgKHJlbGF0aW9uICE9IENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3Rv
ciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKKyAgICAgICAgaWYgKG1fcHNldWRv
U3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNldWRvKQorICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgIAorICAgIC8vIENo
ZWNrIGZvciBuZXN0ZWQgbGlua3MuCisgICAgaWYgKG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9D
bGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgeworICAgICAgICBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmluc2lkZUxpbmsoKSAmJiBl
LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTGluaykKKyAgICAgICAg
ICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBs
aW5rIGlzIG5vdCByZWxldmFudCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2Fi
bGUgbWF0Y2hpbmcuCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW5jb3VudGVy
ZWRMaW5rID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHJlbGF0
aW9uKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7
CisgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgICAgICBlID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9
IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRM
aW5rKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6IAorICAgICAgICB7CisgICAgICAgICAgICBDb250
YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFuIHx8ICFu
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAg
ICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFs
c2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpE
aXJlY3RBZGphY2VudDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRS
dWxlcygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICBp
ZiAoIW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIG1faXNN
YXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5r
KTsKKyAgICAgICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Cisg
ICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYm
IGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBl
LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBpZiAocGFyZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZv
cndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9D
bGFzcyA9IGZhbHNlOworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAg
ICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgorICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFs
aWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAorICAgICAgICAvLyBXZSBt
YWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cg
YSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCisgICAgICAgIC8vIHRv
IGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgorICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8
fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAm
JiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICYmICEoKFJlbmRlclNj
cm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBT
Q1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVs
ZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFu
dDoKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUgPSBlLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBlIHx8
ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0
b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Cit9
CisKK3N0YXRpYyB2b2lkIGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+KiBzZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQoreworICAgIHNldC0+YWRkKHFO
YW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7Cit9CisKK3N0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKQoreworICAg
IC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEgd2l0aCB2YWx1
ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCisgICAgLy8gTW96aWxsYSB0
cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBzbyBkbyB3ZS4K
KyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPjsKKyAgICAKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBh
Y2NlcHRfY2hhcnNldEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2Vw
dEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaWduQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpbmtBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBheGlzQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
Ymdjb2xvckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoYXJzZXRBdHRy
KTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjaGVja2VkQXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2xlYXJBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBjb2RldHlwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IGNvbG9yQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29tcGFjdEF0dHIp
OworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRlY2xhcmVBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBkZWZlckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGRpckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpc2Fi
bGVkQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZW5jdHlwZUF0dHIpOwor
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZhY2VBdHRyKTsKKyAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCBmcmFtZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGhyZWZsYW5nQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHR0cF9l
cXVpdkF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmdBdHRyKTsKKyAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBsYW5ndWFnZUF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGxpbmtBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBtZWRpYUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1ldGhvZEF0
dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG11bHRpcGxlQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm9ocmVmQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgbm9yZXNpemVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBub3NoYWRlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm93cmFw
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVhZG9ubHlBdHRyKTsKKyAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWxBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCByZXZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBy
dWxlc0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjb3BlQXR0cik7Cisg
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2Nyb2xsaW5nQXR0cik7CisgICAgYWRkTG9j
YWxOYW1lVG9TZXQoYXR0clNldCwgc2VsZWN0ZWRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBzaGFwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRh
cmdldEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRleHRBdHRyKTsKKyAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgdmFsaWduQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgdmFsdWV0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmxpbmtB
dHRyKTsKKyAgICAKKyAgICByZXR1cm4gYXR0clNldDsKK30KKworc3RhdGljIGJvb2wgaHRtbEF0
dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIp
Cit7CisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBodG1sQ2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlc1NldCA9IGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVz
U2V0KCk7CisgICAgYm9vbCBpc1Bvc3NpYmxlSFRNTEF0dHIgPSAhYXR0ci5oYXNQcmVmaXgoKSAm
JiAoYXR0ci5uYW1lc3BhY2VVUkkoKSA9PSBudWxsQXRvbSk7CisgICAgcmV0dXJuIGlzUG9zc2li
bGVIVE1MQXR0ciAmJiBodG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldC0+Y29udGFpbnMo
YXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworfQorCitzdGF0aWMgYm9vbCBhdHRyaWJ1dGVRdWFs
aWZpZWROYW1lTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgc2VsZWN0b3JBdHRyKQoreworICAgIGlmIChzZWxlY3RvckF0dHIubG9jYWxOYW1lKCkgIT0g
YXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBzZWxlY3RvckF0dHIucHJlZml4KCkgPT0gc3RhckF0b20gfHwgc2VsZWN0b3JBdHRy
Lm5hbWVzcGFjZVVSSSgpID09IGF0dHJpYnV0ZS0+bmFtZXNwYWNlVVJJKCk7Cit9CisKK3N0YXRp
YyBib29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENT
U1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVl
LCBib29sIGNhc2VTZW5zaXRpdmUpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHJpYnV0ZUl0ZW0tPnZhbHVlKCk7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtYXRjaCkgeworICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkV4YWN0OgorICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSA/IHNlbGVjdG9yVmFs
dWUgIT0gdmFsdWUgOiAhZXF1YWxJZ25vcmluZ0Nhc2Uoc2VsZWN0b3JWYWx1ZSwgdmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Nl
bGVjdG9yOjpMaXN0OgorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZW1wdHkgc2Vs
ZWN0b3JzIG9yIHNlbGVjdG9ycyBjb250YWluaW5nIHNwYWNlcworICAgICAgICAgICAgaWYgKHNl
bGVjdG9yVmFsdWUuY29udGFpbnMoJyAnKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVu
c2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICBzaXplX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbGVjdG9yVmFsdWUs
IHN0YXJ0U2VhcmNoQXQsIGNhc2VTZW5zaXRpdmUpOworICAgICAgICAgICAgICAgIGlmIChmb3Vu
ZFBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGlmICghZm91bmRQb3MgfHwgdmFsdWVbZm91bmRQb3MgLSAxXSA9PSAnICcp
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kU3RyID0gZm91bmRQb3MgKyBzZWxl
Y3RvclZhbHVlLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW5kU3RyID09IHZh
bHVlLmxlbmd0aCgpIHx8IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoLiBLZWVwIGxvb2tpbmcu
CisgICAgICAgICAgICAgICAgc3RhcnRTZWFyY2hBdCA9IGZvdW5kUG9zICsgMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6Q29udGFpbjoKKyAgICAgICAgaWYgKCF2YWx1ZS5jb250YWlucyhzZWxlY3RvclZhbHVlLCBj
YXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVnaW46
CisgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0
aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RW5kOgorICAgICAgICBp
ZiAoIXZhbHVlLmVuZHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpIHx8IHNlbGVj
dG9yVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBoZW46CisgICAgICAgIGlmICh2YWx1ZS5s
ZW5ndGgoKSA8IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vu
c2l0aXZlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gSXQgdGhleSBz
dGFydCB0aGUgc2FtZSwgY2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIGZvbGxvd2luZyAnLSc6Cisg
ICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBzZWxlY3RvclZhbHVlLmxlbmd0aCgpICYmIHZh
bHVlW3NlbGVjdG9yVmFsdWUubGVuZ3RoKCldICE9ICctJykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxl
Y3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0
ZW0oaSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRj
aGVzKGF0dHJpYnV0ZUl0ZW0sIHNlbGVjdG9yQXR0cikpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoYXR0cmlidXRlSXRl
bSwgbWF0Y2gsIHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNv
dW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVt
ZW50UGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGUpOworICAgIGlmICghZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGUs
IHNlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoc2VsLT5oYXNBdHRy
aWJ1dGUoKSkgeworICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFz
cykKKyAgICAgICAgICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlKS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKKyAgICAg
ICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0g
c2VsLT52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ciA9IHNlbC0+YXR0cmlidXRlKCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSGFuZGxl
IHRoZSBjYXNlIHdlcmUgZWxlbWVudFN0eWxlIGlzIDAuCisgICAgICAgIGlmIChlbGVtZW50U3R5
bGUgJiYgKCFlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCAoIXN0YXRpY19jYXN0PFN0eWxlZEVsZW1l
bnQqPihlKS0+aXNNYXBwZWRBdHRyaWJ1dGUoYXR0cikgJiYgYXR0ciAhPSB0eXBlQXR0ciAmJiBh
dHRyICE9IHJlYWRvbmx5QXR0cikpKQorICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZl
Y3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKCk7IC8vIFNwZWNpYWwtY2FzZSB0aGUgInR5cGUiIGFu
ZCAicmVhZG9ubHkiIGF0dHJpYnV0ZXMgc28gaW5wdXQgZm9ybSBjb250cm9scyBjYW4gc2hhcmUg
c3R5bGUuCisgICAgICAgIAorICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlLT5h
dHRyaWJ1dGVzKHRydWUpOworICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9k
b2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0
dHIpOworICAgICAgICAKKyAgICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVNYXRjaGVzKGF0dHJpYnV0
ZXMsIHN0YXRpY19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsLT5tX21hdGNoKSwgYXR0ciwg
c2VsLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3MpIHsKKyAgICAgICAgLy8gSGFuZGxlIDpub3QgdXAgZnJvbnQuCisgICAgICAgIGlmIChz
ZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7CisgICAgICAgICAg
ICBBU1NFUlQoc2VsLT5zZWxlY3Rvckxpc3QoKSk7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVj
dG9yKiBzdWJTZWwgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWw7IHN1YlNl
bCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5u
b3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCisgICAgICAgICAgICAg
ICAgLy8gcmVzdHJpY3Rpb24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4K
KyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBv
Y2N1cnMKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgIT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb05vdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5j
b3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xs
YmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVS
IHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikpIHsKKyAgICAgICAgICAgIC8vIENTUyBzY3Jv
bGxiYXJzIG1hdGNoIGEgc3BlY2lmaWMgc3Vic2V0IG9mIHBzZXVkbyBjbGFzc2VzLCBhbmQgdGhl
eSBoYXZlIHNwZWNpYWxpemVkIHJ1bGVzIGZvciBlYWNoCisgICAgICAgICAgICAvLyAoc2luY2Ug
dGhlcmUgYXJlIG5vIGVsZW1lbnRzIGludm9sdmVkKS4KKyAgICAgICAgICAgIHJldHVybiBjaGVj
a1Njcm9sbGJhclBzZXVkb0NsYXNzKHNlbCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoZHluYW1pY1BzZXVkbyA9PSBTRUxFQ1RJT04pIHsKKyAgICAgICAgICAgIGlmIChzZWwt
PnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuICFtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LT5pc0FjdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3JtYWwgZWxl
bWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCisgICAgICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9U
eXBlKCkpIHsKKyAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgorICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ob3Q6CisgICAgICAgICAgICBicmVhazsgLy8gQWxyZWFkeSBoYW5k
bGVkIHVwIGFib3ZlLgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eToKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgZm9yIChOb2RlKiBuID0gZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxl
c09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpICYmIChlLT5kb2N1bWVu
dCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0RW1wdHlTdGF0ZShy
ZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENo
aWxkOgorICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQg
dGhhdCBpcyBhbiBlbGVtZW50CisgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUt
PnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0
eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFy
ZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgJiYgY2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNl
dEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlOgorICAgICAgICAgICAgLy8gZmly
c3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCisgICAgICAg
ICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
d2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAm
JiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW4pCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5w
YXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJl
bnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdENoaWxkOgorICAg
ICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4g
ZWxlbWVudAorICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJl
bnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVz
T25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVs
ZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6Cisg
ICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0
cyB0eXBlCisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09u
bHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxl
bWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5
bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5h
bWUoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBuID0g
bi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFuKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOgorICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29sIGxhc3RD
aGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG4g
PSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICBmaXJz
dENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBwYXJlbnRF
bGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYm
ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6
IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1l
bnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5
bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgY2hpbGRTdHls
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkICYmIGNoaWxkU3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBs
YXN0Q2hpbGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJl
bnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4o
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJv
b2wgZmlyc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgbGFzdENoaWxkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRh
Z1FOYW1lKCk7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OworICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
LT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1l
KHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgICAgICAgICBu
ID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb050aENoaWxkOgorICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7
CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAg
ICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gbi0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
cyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xs
ZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGls
ZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0
Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9OdGhPZlR5cGU6CisgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6CisgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VO
dGgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBw
YXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0No
aWxkcmVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OworICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBlOgorICAg
ICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGls
ZSAobikgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGlu
ZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50
aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Rh
cmdldDoKKyAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2VsZWN0b3I7IHNl
bGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgeworICAgICAgICAgICAg
ICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBl
bmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxl
Y3Rvck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0FueUxpbms6CisgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9BdXRvZmlsbDoKKyAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
IChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Cisg
ICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
IW1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICAgICAgaWYgKGUg
JiYgZS0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXNNYXRjaGluZ1Zpc2l0
ZWRQc2V1ZG9DbGFzcyB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3Rh
dGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6CisgICAgICAgICAgICBpZiAoZWxl
bWVudFN0eWxlKQorICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURy
YWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCisg
ICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0
cnVlKTsKKyAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpICYmIGUtPnJlbmRlcmVyKCktPmlz
RHJhZ2dpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAgICAgICAgICAg
IGlmIChlICYmICgoZS0+Zm9jdXNlZCgpICYmIGUtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB8
fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0ZvY3VzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6CisgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2
ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCisgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmhvdmVy
IHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzaXRlcyBs
aWtlIHdzai5jb20uCisgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3ViU2Vs
ZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUtPmlz
TGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAg
ICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CisgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBt
YXRjaCBhbmNob3JzIHdpdGggbm8KKyAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6YWN0aXZlIHNo
b3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIAorICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2lu
ZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFU
YWcpKSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUp
CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1
bGVzKHRydWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCisg
ICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlBY3RpdmVS
dWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZS0+YWN0aXZlKCkgfHwgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9B
Y3RpdmUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFi
bGVkOgorICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsUGFnZU1lZGlh
OgorICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKSAmJiBlLT5kb2N1bWVudCgp
LT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNE
ZWZhdWx0QnV0dG9uRm9yRm9ybSgpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9E
aXNhYmxlZDoKKyAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuICFlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5
OgorICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRG
b3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOworICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6IAorICAgICAgICAgICAgaWYgKCFlIHx8ICFl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1JlYWRP
bmx5Rm9ybUNvbnRyb2woKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3B0aW9u
YWw6CisgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNvbnRyb2woKTsK
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVxdWlyZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsKKyAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvVmFsaWQ6CisgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNW
YWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlLT53aWxsVmFsaWRhdGUo
KSAmJiBlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0ludmFsaWQ6CisgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNW
YWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiAoZS0+d2lsbFZhbGlkYXRl
KCkgJiYgIWUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFzVW5hY2NlcHRh
YmxlVmFsdWUoKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hlY2tlZDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8v
IEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNv
LWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CisgICAgICAgICAgICAgICAg
Ly8geW91IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gV2Ugd2lsbCBi
ZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdAorICAgICAgICAgICAg
ICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRo
ZSBwc2V1ZG8uCisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50
ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQt
PmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvSW5kZXRlcm1pbmF0ZToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgICAgICAgICAgaWYg
KGUtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIEhUTUxQ
cm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVu
dCo+KGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXByb2dyZXNzLT5p
c0RldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVs
ZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVu
dC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Sb290OgorICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBlLT5jb21wdXRl
SW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGFyZ3VtZW50ID0gc2VsLT5hcmd1bWVudCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoYXJndW1lbnQsIGZhbHNlKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9
IGFyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0aCgpXSAhPSAnLScpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbjoKKyAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9j
dW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9jdW1lbnQncyBjdXJy
ZW50IGZ1bGxzY3JlZW4gCisgICAgICAgICAgICAvLyBlbGVtZW50IGlzIGFuIGVsZW1lbnQgaW4g
dGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVzIHRvIAor
ICAgICAgICAgICAgLy8gdGhhdCBlbGVtZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4g
b3IgPGVtYmVkPiBlbGVtZW50IHdob3NlIGNoaWxkIGJyb3dzaW5nIAorICAgICAgICAgICAgLy8g
Y29udGV4dCdzIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1
bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgorICAgICAgICAgICAgaWYgKGUtPmlzRnJh
bWVFbGVtZW50QmFzZSgpICYmIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZSkt
PmNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uOgor
ICAgICAgICAgICAgaWYgKGUgIT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3Jl
ZW5FbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5pbWF0aW5nRnVsbFNjcmVlbigpOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuQW5jZXN0b3I6CisgICAgICAgICAgICBy
ZXR1cm4gZS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOworICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuRG9jdW1lbnQ6CisgICAgICAgICAgICAvLyBXaGlsZSBh
IERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwtc2NyZWVuLWRv
Y3VtZW50JyBwc2V1ZG9jbGFzcyBhcHBsaWVzIAorICAgICAgICAgICAgLy8gdG8gYWxsIGVsZW1l
bnRzIG9mIHRoYXQgRG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndl
YmtpdElzRnVsbFNjcmVlbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0luUmFuZ2U6CisgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlLT5pc0luUmFuZ2UoKTsKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0T2ZSYW5nZToKKyAgICAgICAgICAgIGlmICghZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlLT5kb2N1bWVudCgp
LT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgcmV0dXJuIGUt
PmlzT3V0T2ZSYW5nZSgpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3du
OgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNl
bC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAgICAgICBpZiAo
IWVsZW1lbnRTdHlsZSAmJiAhbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9F
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBlLT5zaGFkb3dQc2V1ZG9JZCgpID09IHNlbC0+dmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NT
ZWxlY3Rvcjo6cHNldWRvSWQoc2VsLT5wc2V1ZG9UeXBlKCkpOworICAgICAgICBpZiAocHNldWRv
SWQgPT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0VXNlc0ZpcnN0
TGV0dGVyUnVsZXModHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5P
UFNFVURPKQorICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOworICAgIH0KKyAg
ICAvLyAjIyMgYWRkIHRoZSByZXN0IG9mIHRoZSBjaGVja3MuLi4KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NT
U2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBjb25zdAoreworICAgIFJlbmRlclNjcm9sbGJhciog
c2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKTsK
KyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRGb3JTdHlsZVJl
c29sdmUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIGZv
ciByZXNpemVycyBhbmQgc2Nyb2xsYmFyIGNvcm5lcnMuIEV2ZW50dWFsbHkgOndpbmRvdy1pbmFj
dGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAorICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQganVzdCBh
cHBseSB0byBldmVyeXRoaW5nLgorICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+
cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICAKKyAgICBpZiAoIXNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChzZWwtPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKKyAgICBzd2l0Y2ggKHNlbC0+cHNl
dWRvVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0Rpc2FibGVkOgorICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5hYmxlZCgpOworICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgorICAgICAgICB7CisgICAgICAgICAgICBT
Y3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpOworICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBob3ZlcmVkUGFydCAhPSBOb1BhcnQ7CisgICAgICAgICAgICBpZiAocGFydCA9PSBUcmFj
a0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJlZFBhcnQgPT0gQmFja1RyYWNr
UGFydCB8fCBob3ZlcmVkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IGhvdmVyZWRQYXJ0ID09
IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IGhvdmVyZWRQYXJ0OworICAg
ICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgorICAgICAgICB7Cisg
ICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2Vk
UGFydCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCAhPSBOb1BhcnQ7CisgICAgICAgICAgICBpZiAo
cGFydCA9PSBUcmFja0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQg
PT0gQmFja1RyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IHBy
ZXNzZWRQYXJ0ID09IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IHByZXNz
ZWRQYXJ0OworICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9yaXpvbnRh
bDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZlcnRpY2FsOgorICAgICAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyOwor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlY3JlbWVudDoKKyAgICAgICAgcmV0dXJuIHBh
cnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8
IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbmNy
ZW1lbnQ6CisgICAgICAgIHJldHVybiBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwg
cGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3RhcnQ6CisgICAgICAgIHJldHVybiBwYXJ0
ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bmQ6CisgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJh
ci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwg
cGFydCA9PSBCYWNrVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxh
Y2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50
ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0
ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFj
ZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50ID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9IAorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1NpbmdsZUJ1dHRvbjoKKyAg
ICAgICAgeworICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxh
Y2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7CisgICAgICAg
ICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1
dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRy
YWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3Jv
bGxiYXJCdXR0b25zU2luZ2xlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm9CdXR0b246CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9s
bGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYgKHBhcnQg
PT0gQmFja1RyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVu
dCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJh
ckJ1dHRvbnNEb3VibGVFbmQ7CisgICAgICAgICAgICBpZiAocGFydCA9PSBGb3J3YXJkVHJhY2tQ
YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJh
ckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZVN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ29ybmVyUHJlc2VudDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBTZWxlY3RvckNoZWNr
ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZv
clZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKE5vZGUq
IG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7CisgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JDaGVja2VyOjp2aXNp
dGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQoreworICAgIGlmICghbV9saW5r
c0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRlZEhhc2gpKQorICAgICAgICBy
ZXR1cm47CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcqIGF0
dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOworICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlu
a0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0gdmlzaXRlZEhhc2gpCisgICAg
ICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBj
YXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtz
ICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJp
Z2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBTZWxlY3RvckNoZWNrZXJfaAorI2RlZmluZSBTZWxlY3RvckNo
ZWNrZXJfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDU1NTZWxlY3RvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2Ns
YXNzIFNlbGVjdG9yQ2hlY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0b3JD
aGVja2VyKTsKK3B1YmxpYzoKKyAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0
cmljdFBhcnNpbmcpOworCisgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVz
LCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKworICAg
IGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENo
ZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OworICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywg
Ym9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqID0g
MCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIHN0YXRp
YyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CisgICAg
c3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBF
bGVtZW50Kik7CisKKyAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCop
IGNvbnN0OworICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgdmlz
aXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CisgICAgCisgICAgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGJvb2wgc3Ry
aWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQorICAgIAorICAg
IGJvb2wgaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHk7IH0KKyAgICB2b2lkIHNldENvbGxlY3RpbmdSdWxlc09ubHkoYm9vbCBiKSB7
IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ID0gYjsgfQorICAgIAorICAgIGJvb2wgaXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzcygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXRjaGluZ1Zpc2l0ZWRQ
c2V1ZG9DbGFzczsgfQorICAgIHZvaWQgc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MoYm9v
bCBiKSB7IG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGI7IH0KKyAgICAKKyAgICBQ
c2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5bGU7IH0KKyAg
ICB2b2lkIHNldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkKSB7IG1fcHNldWRvU3R5bGUg
PSBwc2V1ZG9JZDsgfQorCisgICAgYm9vbCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50czsgfQorICAgIHZvaWQgY2xlYXJI
YXNVbmtub3duUHNldWRvRWxlbWVudHMoKSB7IG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0g
ZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rv
ciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1l
bnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OworCisgICAgRUlu
c2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCopIGNvbnN0OworCisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CisgICAg
Ym9vbCBtX2RvY3VtZW50SXNIVE1MOworICAgIGJvb2wgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHk7
CisgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNVbmtu
b3duUHNldWRvRWxlbWVudHM7CisgICAgbXV0YWJsZSBib29sIG1faXNNYXRjaGluZ1Zpc2l0ZWRQ
c2V1ZG9DbGFzczsKKyAgICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtIYXNoSGFzaD4g
bV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7Cit9OworCitpbmxpbmUgRUluc2lkZUxpbmsg
U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29u
c3QKK3sKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzTGluaygpKQorICAgICAgICBy
ZXR1cm4gTm90SW5zaWRlTGluazsKKyAgICByZXR1cm4gZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nh
c2UoZWxlbWVudCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA5NDU4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyMyw3ICsxODIzLDcgQEAgYm9vbCBFbGVtZW50Ojp3ZWJraXRNYXRj
aGVzU2VsZWN0b3IoY29ucwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ1NT
U3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgp
LCBzdHJpY3RQYXJzaW5nKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRv
Y3VtZW50KCksIHN0cmljdFBhcnNpbmcpOwogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChzZWxlY3RvcikpIHsKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVj
a1NlbGVjdG9yKHNlbGVjdG9yLCB0aGlzKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24gOTQ1ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgU2VsZWN0b3JRdWVyeTo6U2VsZWN0b3JRdWVyeShOb2RlKiByb290TgogICAg
ICwgbV9zZWxlY3RvckNoZWNrZXIocm9vdE5vZGUtPmRvY3VtZW50KCksICFyb290Tm9kZS0+ZG9j
dW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiB7CiAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0
b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKLSAgICAgICAgbV9zZWxlY3RvcnMuYXBwZW5kKFNlbGVj
dG9yRGF0YShzZWxlY3RvciwgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjppc0Zh
c3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpKTsKKyAgICAgICAgbV9zZWxlY3RvcnMuYXBw
ZW5kKFNlbGVjdG9yRGF0YShzZWxlY3RvciwgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcihzZWxlY3RvcikpKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IFNl
bGVjdG9yUXVlcnk6OnF1ZXJ5QWxsKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuaAkocmV2aXNpb24gOTQ1ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JR
dWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdG9y
UXVlcnlfaAogI2RlZmluZSBTZWxlY3RvclF1ZXJ5X2gKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToK
ICAgICB9OwogICAgIE5vZGUqIG1fcm9vdE5vZGU7CiAgICAgVmVjdG9yPFNlbGVjdG9yRGF0YT4g
bV9zZWxlY3RvcnM7Ci0gICAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyIG1fc2Vs
ZWN0b3JDaGVja2VyOworICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKIH07
CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106553</attachid>
            <date>2011-09-07 01:12:36 -0700</date>
            <delta_ts>2011-09-07 01:27:27 -0700</delta_ts>
            <desc>for bots</desc>
            <filename>split-selectorchecker-6.patch</filename>
            <type>text/plain</type>
            <size>176482</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NjQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU2VsZWN0b3JDaGVja2Vy
IG91dCBmcm9tIENTU1N0eWxlU2VsZWN0b3Igc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICAtIE1vdmUgU2VsZWN0b3JDaGVja2VyIHRvIFNlbGVjdG9yQ2hl
Y2tlci5oL2NwcAorICAgICAgICAtIE1ha2UgcHJpdmF0ZSBmdW5jdGlvbnMgcHJpdmF0ZQorICAg
ICAgICAtIE1ha2UgbWVtYmVycyBwcml2YXRlLCBhZGQgYWNjZXNzb3JzCisgICAgICAgIC0gTW92
ZSBtX3NhbWVPcmlnaW5Pbmx5IHRvIENTU1N0eWxlU2VsZWN0b3IgYXMgaXQgaXMgbm90IHVzZWQg
YnkgU2VsZWN0b3JDaGVja2VyCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dAorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c29y
dE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppbml0
Rm9yU3R5bGVSZXNvbHZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Rm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpj
aGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpSdWxlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRGb250U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb2xvckZyb21QcmltaXRpdmVW
YWx1ZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpmb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cGFyZW50Rm9u
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRa
b29tKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldEVmZmVjdGl2ZVpv
b20pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0VGV4dFNpemVBZGp1
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2VzU2libGluZ1J1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnVzZXNGaXJzdExpbmVSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2VzQmVmb3JlQWZ0ZXJSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2VzTGlua1J1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmlzUmlnaHRQYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlBhcmVudFN0YWNrRnJhbWU6OlBhcmVudFN0YWNrRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVOb3RZZXRBdmFp
bGFibGUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OmxpbmtBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZExv
Y2FsTmFtZVRvU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRp
dmVBdHRyaWJ1dGVzU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Omh0bWxBdHRyaWJ1dGVIYXNDYXNl
SW5zZW5zaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVRdWFsaWZpZWRO
YW1lTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVWYWx1ZU1hdGNoZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6YW55QXR0cmlidXRlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6c3RyaWN0UGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Omlz
Q29sbGVjdGluZ1J1bGVzT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OnNldENvbGxlY3RpbmdSdWxlc09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjppc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6c2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpwc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OnNldFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGUpOgorICAg
ICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OndlYmtp
dE1hdGNoZXNTZWxlY3Rvcik6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JRdWVyeTo6U2VsZWN0b3JRdWVyeSk6CisgICAgICAgICog
ZG9tL1NlbGVjdG9yUXVlcnkuaDoKKwogMjAxMS0wOS0wNyAgRG1pdHJ5IExvbW92ICA8ZHNsb21v
dkBnb29nbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzQxMyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDY0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NzAs
NiArNDcwLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmNwcAogICAgIGNzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKICAgICBjc3MvUkdCQ29s
b3IuY3BwCisgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUu
Y3BwCiAgICAgY3NzL1N0eWxlQmFzZS5jcHAKICAgICBjc3MvU3R5bGVMaXN0LmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NDY0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNDYsNiArMTA0
Niw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1JlY3QuaCBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL1JHQkNvbG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1JHQkNvbG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9TaGFkb3dWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA5NDY0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjQxNiw2ICsyNDE2LDggQEAKICAgICAgICAgICAgICdjc3MvU1ZHQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NWR0NTU1Bh
cnNlci5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCcsCisg
ICAgICAgICAgICAnY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAg
ICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZUJh
c2UuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA5NDY0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIFwKICAgICBjc3Mv
TWVkaWFRdWVyeU1hdGNoZXIuY3BwIFwKICAgICBjc3MvUkdCQ29sb3IuY3BwIFwKKyAgICBjc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAgICAgY3Nz
L1N0eWxlQmFzZS5jcHAgXAogICAgIGNzcy9TdHlsZUxpc3QuY3BwIFwKQEAgLTE0NDksNiArMTQ1
MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggXAog
ICAgIGNzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oIFwKICAgICBjc3MvUkdCQ29sb3IuaCBcCisgICAg
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oIFwKICAgICBjc3MvU2hhZG93VmFsdWUuaCBcCiAgICAgY3Nz
L1N0eWxlQmFzZS5oIFwKICAgICBjc3MvU3R5bGVMaXN0LmggXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDk0NjQ4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTMzMjE4LDYgKzMzMjE4LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTZWxlY3RvckNoZWNrZXIuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU2VsZWN0b3JDaGVj
a2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGNzc1xTaGFkb3dWYWx1ZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
OTQ2NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTU2NTYsNiArNTY1Niw4IEBACiAJCUU0NDYxNDNDMENENjg5
Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM3MjBDQkZCNkUwMDBBRjJFQ0UgLyogSlNI
VE1MU291cmNlRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTQ1MTBDRDY4QTM1MDBGQURBNzUgLyog
UmVuZGVyVmlkZW8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRCNDFFMzMwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmNwcCAqLzsgfTsK
IAkJRTQ0NjE0NTIwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzNDBDQkZCNjA5MDBBRjJF
Q0UgLyogUmVuZGVyVmlkZW8uaCAqLzsgfTsKKwkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhCIC8q
IFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDRCNEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNw
cCAqLzsgfTsKKwkJRTQ0QjRCQjQxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0QjRCQjIx
NDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oICovOyB9OwogCQlFNDUzMjJBQjE0
MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBOTE0MENFMjY3MDA1QTBGOTIgLyogU2Vs
ZWN0b3JRdWVyeS5jcHAgKi87IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxl
Y3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovOyB9OwogCQlF
NDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAg
LyogSW50UG9pbnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEyNDE0LDYgKzEyNDE2LDggQEAKIAkJRTQ0NjE0MTEwQ0Q2ODI2OTAwRkFE
QTc1IC8qIEpTTWVkaWFFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01lZGlhRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTIwQ0Q2
ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1RpbWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDQ2MTQxMzBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNDRCNEJCMTE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEI0QkIyMTQxNjUwRDcwMDJC
MUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VsZWN0b3JDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTMy
MkE5MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yUXVlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQ
b2ludEhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU1Miw2ICsxOTU1Niw4IEBACiAJ
CQkJQkM3NERBMzYxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzc0
REEzNTEwMTNGM0Y3MDA3OTg3QUQgLyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBBQThG
REQxMDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAorCQkJCUU0NEI0QkIxMTQxNjUwRDcwMDJC
MUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwICovLAorCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJC
MUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4
QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAv
KiBTaGFkb3dWYWx1ZS5oICovLAogCQkJCUE4MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHls
ZUJhc2UuY3BwICovLApAQCAtMjM0NjQsNiArMjM0NzAsNyBAQAogCQkJCTlCMEZCMTkyMTQwREI1
NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyQ0JG
NEUxNDBGMUFCRDAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMjc0QjJGMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxl
Y3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3OEFENjc1MTQxMzBBOEQwMEM3Q0FF
MyAvKiBIVE1MU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTJEMzhFMTQxMzEw
NEIwMDMzMDVCRCAvKiBKU0hUTUxTcGFuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5
MjdGRDIxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVhZGVycyAqLywKQEAgLTI2Mjgw
LDYgKzI2Mjg3LDcgQEAKIAkJCQk5QjBGQjE5MTE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlk
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyQ0JGN0IxNDBGMUQ1ODAwMzg3OUJFIC8q
IEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNzRCMzExNDBF
QkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFNDRCNEJCMzE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3OEFENjc0MTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1MU3BhbkVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1MkQzOEQxNDEzMTA0QjAwMzMwNUJEIC8q
IEpTSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDk0NjQ4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJDb3VudGVyLmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRm9udEZhbWlseVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVW
YWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgpAQCAtNjMsMTIgKzYyLDEwIEBACiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWZy
YW1lTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiTG9jYWxlVG9TY3Jp
cHRNYXBwaW5nLmgiCkBAIC0xMTAsMTcgKzEwNywxMSBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBVU0UoUExBVEZPUk1fU1RS
QVRFR0lFUykKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJWaXNp
dGVkTGlua1N0cmF0ZWd5LmgiCi0jZW5kaWYKLQogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKICNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNlbmRp
ZgogCkBAIC0zNDAsMTEgKzMzMSwxMiBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVj
dG9yKERvY3VtCiAgICAgLCBtX2VsZW1lbnQoMCkKICAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQog
ICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCisgICAgLCBtX2ZvbnREaXJ0
eShmYWxzZSkKKyAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykKKyAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCiAgICAgLCBtX2ZvbnRT
ZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAgICAgLCBtX2FwcGx5
UHJvcGVydHkoQ1NTU3R5bGVBcHBseVByb3BlcnR5OjpzaGFyZWRDU1NTdHlsZUFwcGx5UHJvcGVy
dHkoKSkKIHsKLSAgICBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9IG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlczsKLSAgICAKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOwogCiAgICAgaWYgKCFkZWZhdWx0U3R5bGUpIHsKQEAgLTY0MSw3ICs2MzMsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNlCiAgICAgc29ydE1hdGNo
ZWRSdWxlcygpOwogICAgIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQg
cnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5tX2Nv
bGxlY3RSdWxlc09ubHkpIHsKKyAgICBpZiAoIW1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09u
bHkoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMu
c2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSk7CiAgICAgfSBlbHNlIHsKQEAgLTcxMiwx
OSArNzA0LDE5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAg
ICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgZmFzdFJlamVjdFNlbGVjdG9yKHJ1bGVEYXRh
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxl
RGF0YSkpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+
dHJlZVNjb3BlKCksIG1fY2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykpCisgICAg
ICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBt
X2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8g
YXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAg
IENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKICAgICAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKICAgICAg
ICAgICAgIGlmICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFpbmNsdWRlRW1wdHlSdWxl
cykpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobV9jaGVja2Vy
Lm1fc2FtZU9yaWdpbk9ubHkgJiYgIW1fY2hlY2tlci5tX2RvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KHJ1bGUtPmJhc2VVUkwoKSkpCisgICAgICAgICAgICBpZiAobV9zYW1l
T3JpZ2luT25seSAmJiAhbV9jaGVja2VyLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QocnVsZS0+YmFzZVVSTCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsgCiAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVk
byBiaXQgaWYgCiAgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRv
LWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYm
IG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkpCisgICAgICAgICAgICBpZiAobV9keW5h
bWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09IE5PUFNF
VURPKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09u
bHkoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYg
KG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQogICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFtaWNQc2V1ZG8pOwpAQCAt
NzUyLDEzICs3NDQsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMo
CiB7CiAgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQotCi1pbmxpbmUgRUluc2lkZUxpbmsgQ1NTU3R5bGVT
ZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzTGluaygpKQot
ICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKLSAgICByZXR1cm4gZGV0ZXJtaW5lTGlua1N0
YXRlU2xvd0Nhc2UoZWxlbWVudCk7Ci19CiAgICAgCiBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogewpAQCAtNzc1LDcgKzc2MCw3IEBAIGlubGlu
ZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW4KIAogaW5saW5lIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQogewotICAgIG1fY2hlY2tlci5tX3BzZXVk
b1N0eWxlID0gcHNldWRvSUQ7CisgICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKHBzZXVkb0lE
KTsKIAogICAgIG1fcGFyZW50Tm9kZSA9IGUgPyBlLT5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5k
U3R5bGUoKSA6IDA7CiAKQEAgLTc4NSw3ICs3NzAsNyBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjppbml0Rm9yU3R5CiAgICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUg
PyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwogCiAgICAgTm9kZSogZG9jRWxlbWVu
dCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVy
U3R5bGUqIGRvY1N0eWxlID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnJlbmRlclN0eWxlKCk7Cisg
ICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnJlbmRlclN0
eWxlKCk7CiAgICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0Vs
ZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CiAKICAgICBtX3N0
eWxlID0gMDsKQEAgLTc5OSw5OSArNzg0LDYgQEAgaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6aW5pdEZvclN0eQogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKE5vZGUqIG5vZGUpCi17Ci0gICAg
aWYgKCFub2RlLT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOwotICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCi0gICAg
ICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7Ci0KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuICZlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLSNl
bmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzdHJpY3RQYXJz
aW5nKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fc3RyaWN0UGFyc2luZyhz
dHJpY3RQYXJzaW5nKQotICAgICwgbV9jb2xsZWN0UnVsZXNPbmx5KGZhbHNlKQotICAgICwgbV9z
YW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fcHNldWRvU3R5bGUoTk9QU0VVRE8pCi0gICAg
LCBtX2RvY3VtZW50SXNIVE1MKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICwgbV9o
YXNVbmtub3duUHNldWRvRWxlbWVudHMoZmFsc2UpCi0gICAgLCBtX21hdGNoVmlzaXRlZFBzZXVk
b0NsYXNzKGZhbHNlKQotewotfQotCi1FSW5zaWRlTGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzTGluaygpKTsKLSAgICAKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpOwotICAgIGlmICgh
YXR0ciB8fCBhdHRyLT5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7Ci0K
LSNpZiBQTEFURk9STShRVCkKLSAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOwotICAgIHZpc2l0
ZWRVUkwobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0ciwgdXJsKTsKLSAgICBpZiAodXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0KLSAgICAvLyBJ
ZiB0aGUgUXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUgaGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhh
dmUgdG8gZmFsbGJhY2sKLSAgICAvLyB0byB0aGUgb2xkIGdsb2JhbCBoaXN0b3J5LgotICAgIFFX
ZWJIaXN0b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFXZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0
SW50ZXJmYWNlKCk7Ci0gICAgaWYgKGlmYWNlKQotICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3Rv
cnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwg
dXJsLnNpemUoKSkpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwot
Ci0gICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6
ZSgpKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5r
OwotI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQt
PmJhc2VVUkwoKSwgKmF0dHIpOwotICAgIGlmICghaGFzaCkKLSAgICAgICAgcmV0dXJuIEluc2lk
ZVVudmlzaXRlZExpbms7Ci0jZW5kaWYKLQotICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRl
ZExpbms7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAgbV9saW5rc0NoZWNr
ZWRGb3JWaXNpdGVkU3RhdGUuYWRkKGhhc2gpOwotCi0jaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJ
RVMpCi0gICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT52aXNpdGVkTGlua1N0cmF0ZWd5
KCktPmlzTGlua1Zpc2l0ZWQocGFnZSwgaGFzaCkgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lk
ZVVudmlzaXRlZExpbms7Ci0jZWxzZQotICAgIHJldHVybiBwYWdlLT5ncm91cCgpLmlzTGlua1Zp
c2l0ZWQoaGFzaCkgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7Ci0j
ZW5kaWYKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RD
aGVja2FibGVTZWxlY3RvcikgY29uc3QKLXsKLSAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87Ci0gICAgaWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5p
c1NWR0VsZW1lbnQoKSkgewotICAgICAgICAvLyBmYXN0Q2hlY2tTZWxlY3RvciBhc3N1bWVzIGNs
YXNzIGFuZCBpZCBtYXRjaCBmb3IgdGhlIHRvcCBzZWxlY3Rvci4KLSAgICAgICAgaWYgKHNlbC0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKLSAgICAgICAgICAgIGlmICghKGVsZW1l
bnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5j
bGFzc05hbWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6SWQpIHsKLSAgICAgICAgICAgIGlmICghKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFzdENoZWNrU2VsZWN0
b3Ioc2VsLCBlbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBl
bGVtZW50LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsK
LX0KLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwog
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7CiAK
QEAgLTExNTEsMTEgKzEwNDMsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVs
ZXMoaW50JgogICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1bGUs
IGxhc3RVQVJ1bGUsIGZhbHNlKTsKIAogICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KLSAgICBpZiAoIW1fY2hlY2tl
ci5tX3N0cmljdFBhcnNpbmcpCisgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQog
ICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RV
QVJ1bGUsIGZhbHNlKTsKICAgICAgICAgCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNv
dXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwg
dGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KLSAg
ICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmlzVmlld1NvdXJjZSgpKSB7CisgICAgaWYgKG1f
Y2hlY2tlci5kb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkgewogICAgICAgICBpZiAoIWRlZmF1
bHRWaWV3U291cmNlU3R5bGUpCiAgICAgICAgICAgICBsb2FkVmlld1NvdXJjZVN0eWxlKCk7CiAg
ICAgICAgIG1hdGNoUnVsZXMoZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSwgZmlyc3RVQVJ1bGUsIGxh
c3RVQVJ1bGUsIGZhbHNlKTsKQEAgLTEyNjYsNyArMTE1OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBk
ZWZhdWx0UGFyZW50KTsKICAgICB9CiAKLSAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOworICAgIG1fY2hlY2tlci5zZXRNYXRj
aGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyk7CiAKICAgICBt
X3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogCkBAIC0xNDIyLDcgKzEzMTQsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogCiAgICAgLy8g
UmVzZXQgdGhlIHZhbHVlIGJhY2sgYmVmb3JlIGFwcGx5aW5nIHByb3BlcnRpZXMsIHNvIHRoYXQg
LXdlYmtpdC1saW5rIGtub3dzIHdoYXQgY29sb3IgdG8gdXNlLgotICAgIG1fY2hlY2tlci5tX21h
dGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAgbV9j
aGVja2VyLnNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKG1hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzKTsKICAgICAKICAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMg
aW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiAgV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5CiAgICAg
Ly8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVz
IHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCkBAIC0xNjEyLDcgKzE1MDQsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgaWYgKHBhcmVudFN0
eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRTdHlsZSk7CiAKLSAgICBt
X2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzOworICAgIG1fY2hlY2tlci5zZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtYXRjaFZp
c2l0ZWRQc2V1ZG9DbGFzcyk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVs
ZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qg
d2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCkBAIC0xNjM0LDcgKzE1MjYs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgbV9saW5l
SGVpZ2h0VmFsdWUgPSAwOwogICAgIAogICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBiYWNrIGJlZm9y
ZSBhcHBseWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0IC13ZWJraXQtbGluayBrbm93cyB3aGF0IGNv
bG9yIHRvIHVzZS4KLSAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1h
dGNoVmlzaXRlZFBzZXVkb0NsYXNzOworICAgIG1fY2hlY2tlci5zZXRNYXRjaGluZ1Zpc2l0ZWRQ
c2V1ZG9DbGFzcyhtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyk7CiAKICAgICAvLyBIaWdoLXByaW9y
aXR5IHByb3BlcnRpZXMuCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1f
bWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwpAQCAtMTY4MCw3ICsxNTcyLDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAgICBp
bml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hlY2tlci5tX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5
bGUuCisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShtX2NoZWNrZXIuZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRv
Y3VtZW50IHN0eWxlLgogCiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAg
ICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOwpAQCAtMTc0Miw3ICsx
NjM0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQogICAgICAg
ICAvLyBwcm9wZXJ0eS4KICAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxh
eTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiAgSW4gcXVpcmtzIG1vZGUgd2Ug
Zm9yY2UKICAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBl
cy4KLSAgICAgICAgaWYgKCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nICYmIGUpIHsKKyAgICAg
ICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpICYmIGUpIHsKICAgICAgICAgICAgIGlm
IChlLT5oYXNUYWdOYW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNw
bGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zs
b2F0KTsKQEAgLTE3OTUsNyArMTY4Nyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0
UmVuZGVyU3R5bGUKICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gTElT
VF9JVEVNKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9h
dGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBx
dWlyaywKICAgICAgICAgICAgICAgICAvLyBidXQgb25seSBpbiBxdWlya3MgbW9kZS4KLSAgICAg
ICAgICAgICAgICBpZiAoIW1fY2hlY2tlci5tX3N0cmljdFBhcnNpbmcgJiYgc3R5bGUtPmlzRmxv
YXRpbmcoKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkg
JiYgc3R5bGUtPmlzRmxvYXRpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTk1Myw3
ICsxODQ1LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3RvcgogICAg
IGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSA9IHRydWU7
CisgICAgbV9jaGVja2VyLnNldENvbGxlY3RpbmdSdWxlc09ubHkodHJ1ZSk7CiAKICAgICBpbml0
RWxlbWVudChlKTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKQEAg
LTE5NzEsMTYgKzE4NjMsMTYgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxl
Y3RvcgogICAgIH0KIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVs
ZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxlcykpIHsKLSAgICAgICAgbV9jaGVja2VyLm1fc2Ft
ZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Cisg
ICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5D
U1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMu
CiAgICAgICAgIGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsK
ICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUs
IGxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCi0gICAg
ICAgIG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgICAgIG1fc2FtZU9y
aWdpbk9ubHkgPSBmYWxzZTsKICAgICB9CiAKLSAgICBtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNP
bmx5ID0gZmFsc2U7CisgICAgbV9jaGVja2VyLnNldENvbGxlY3RpbmdSdWxlc09ubHkoZmFsc2Up
OwogICAgCiAgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQpAQCAtMTk4OCwxMiAr
MTg4MCwxMiBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yCiBpbmxp
bmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKIHsKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICBtX2NoZWNr
ZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsKKyAgICBtX2NoZWNrZXIuY2xl
YXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKIAogICAgIC8vIExldCB0aGUgc2xvdyBwYXRo
IGhhbmRsZSBTVkcgYXMgaXQgaGFzIHNvbWUgYWRkaXRpb25hbCBydWxlcyByZWdhcmRpbmcgc2hh
ZG93IHRyZWVzLgogICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSAm
JiAhbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMg
c2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIHNlbGVjdG9ycy4KLSAgICAgICAg
aWYgKG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBpZiAobV9j
aGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0
IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVs
ZSBoYXNoLgogICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRv
bid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KQEAgLTIwMDMsMTAzMCArMTg5NSwxNCBA
QCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjCiAgICAgfQogCiAgICAg
Ly8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tT
ZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIG1fZHluYW1pY1BzZXVkbywg
ZmFsc2UsIGZhbHNlLCBzdHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRl
clN0eWxlKCkgOiAwKTsKLSAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlICE9IE5PUFNF
VURPICYmIG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKKyAgICBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxl
Y3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIG1fZHluYW1pY1BzZXVkbywgZmFs
c2UsIGZhbHNlLCBzdHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0
eWxlKCkgOiAwKTsKKyAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1h
dGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAK
LW5hbWVzcGFjZSB7Ci0KLWlubGluZSBib29sIHNlbGVjdG9yVGFnTWF0Y2hlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKCFz
ZWxlY3Rvci0+aGFzVGFnKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgpOwotICAgIGlm
IChsb2NhbE5hbWUgIT0gc3RhckF0b20gJiYgbG9jYWxOYW1lICE9IGVsZW1lbnQtPmxvY2FsTmFt
ZSgpKQorICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETyAmJiBtX2No
ZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX2R5bmFtaWNQc2V1ZG8pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IHNlbGVjdG9yLT50
YWcoKS5uYW1lc3BhY2VVUkkoKTsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJID09IHN0YXJBdG9t
IHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLX0KLSAgICAKLXRl
bXBsYXRlIDxib29sIGNoZWNrVmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwq
KT4KLWlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciom
IHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3QgRWxlbWVudComIHRvcENoaWxkT3JTdWJzZWxl
Y3Rvck1hdGNoRWxlbWVudCkKLXsKLSAgICBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSA9IHNlbGVj
dG9yLT52YWx1ZSgpLmltcGwoKTsKLSAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoY2hlY2tWYWx1ZShlbGVtZW50LCB2
YWx1ZSkgJiYgc2VsZWN0b3JUYWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkgewotICAgICAg
ICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
KQotICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxlY3Rv
ci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwotICAgICAgICAgICAg
ICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgIHRv
cENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yKQotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9wQ2hpbGRP
clN1YnNlbGVjdG9yKSB7Ci0gICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVj
ayBmYWlsZWQuCi0gICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBh
bmQgaGFkIHRvIG1hdGNoIAotICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2Ug
d2VyZSBjaGVja2luZy4KLSAgICAgICAgICAgIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8v
IFRoZXJlIG1heSBiZSBvdGhlciBtYXRjaGVzIGRvd24gdGhlIGFuY2VzdG9yIGNoYWluLgotICAg
ICAgICAgICAgLy8gUmV3aW5kIHRvIHRoZSB0b3Btb3N0IGNoaWxkIG9yIHN1YnNlbGVjdG9yIGFu
ZCB0aGUgZWxlbWVudCBpdCBtYXRjaGVkLCBjb250aW51ZSBjaGVja2luZyBhbmNlc3RvcnMuCi0g
ICAgICAgICAgICBzZWxlY3RvciA9IHRvcENoaWxkT3JTdWJzZWxlY3RvcjsKLSAgICAgICAgICAg
IGVsZW1lbnQgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKTsKLSAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IDA7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWlubGluZSBib29sIGNoZWNrQ2xhc3NWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9t
aWNTdHJpbmdJbXBsKiB2YWx1ZSkgCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkg
JiYgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVz
KCkuY29udGFpbnModmFsdWUpOwotfQotCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29uc3Qg
RWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIAotewotICAgIHJldHVy
biBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1w
bCgpID09IHZhbHVlOwotfQotCi1pbmxpbmUgYm9vbCBjaGVja1RhZ1ZhbHVlKGNvbnN0IEVsZW1l
bnQqLCBBdG9taWNTdHJpbmdJbXBsKikKLXsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotfQotCi1i
b29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIEFTU0VSVChpc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpOwotCi0gICAgLy8g
VGhlIHRvcCBzZWxlY3RvciByZXF1aXJlcyB0YWcgY2hlY2sgb25seSBhcyBydWxlIGhhc2hlcyBo
YXZlIGFscmVhZHkgaGFuZGxlZCBpZCBhbmQgY2xhc3MgbWF0Y2hlcy4KLSAgICBpZiAoIXNlbGVj
dG9yVGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGNvbnN0IENTU1NlbGVjdG9yKiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAg
IGNvbnN0IEVsZW1lbnQqIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IDA7Ci0g
ICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBzZWxl
Y3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIHRv
cENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOwotCi0gICAgaWYgKHNlbGVjdG9yLT5yZWxh
dGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgZWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLQotICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKTsKLQotICAgIC8vIFdlIGtub3cgdGhpcyBjb21wb3VuZCBzZWxlY3RvciBoYXMgZGVz
Y2VuZGFudCwgY2hpbGQgYW5kIHN1YnNlbGVjdG9yIGNvbWJpbmF0b3JzIG9ubHkgYW5kIGFsbCBj
b21wb25lbnRzIGFyZSBzaW1wbGUuCi0gICAgd2hpbGUgKHNlbGVjdG9yKSB7Ci0gICAgICAgIHN3
aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xh
c3M6Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrQ2xhc3NW
YWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0gICAg
ICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZT4oc2VsZWN0
b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
TWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Tm9uZToKLSAgICAgICAgICAgIGlm
ICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tUYWdWYWx1ZT4oc2VsZWN0b3IsIGVsZW1l
bnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVt
ZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxl
Y3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAh
PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiBzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NT
ZWxlY3Rvcjo6Q2hpbGQgJiYgc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6Ok5vbmUgJiYgc2VsZWN0b3ItPm1fbWF0Y2ggIT0g
Q1NTU2VsZWN0b3I6OklkICYmIHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpDbGFz
cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIFJlY3Vyc2l2ZSBjaGVjayBvZiBzZWxlY3RvcnMgYW5kIGNvbWJpbmF0b3JzCi0vLyBJ
dCBjYW4gcmV0dXJuIDMgZGlmZmVyZW50IHZhbHVlczoKLS8vICogU2VsZWN0b3JNYXRjaGVzICAg
ICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCi0vLyAqIFNlbGVjdG9y
RmFpbHNMb2NhbGx5ICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCi0v
LyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFu
ZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCi1DU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rv
ck1hdGNoIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1l
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoU1ZHKQotICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVk
IHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKLSAgICAvLyBiZWNhdXNlIGl0
cyBjb250ZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIGZvcm1hbCBkb2N1bWVudCBzdHJ1Y3R1cmUu
Ci0gICAgaWYgKGUtPmlzU1ZHU2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7Ci0jZW5kaWYKLQotICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBt
YXRjaAotICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGlz
U3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50
U3R5bGUpKQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0KLSAgICAvLyBU
aGUgcmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpS
ZWxhdGlvbiByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKLQotICAgIC8vIFByZXBhcmUgbmV4
dCBzZWwKLSAgICBzZWwgPSBzZWwtPnRhZ0hpc3RvcnkoKTsKLSAgICBpZiAoIXNlbCkKLSAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKLQotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxl
Y3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3Ig
aXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCi0gICAgICAgIGlmIChtX3BzZXVkb1N0
eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKLSAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLQotICAgIC8vIENoZWNrIGZv
ciBuZXN0ZWQgbGlua3MuCi0gICAgaWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlz
U3ViU2VsZWN0b3IpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChj
dXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkp
IHsKLSAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZExpbmspCi0gICAgICAgICAgICAgICAgbV9t
YXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2
YW50IHRvIHRoZSBzdHlsZSBiZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChyZWxhdGlvbikgewotICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAgICAg
ICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICAgICAgZSA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNo
IG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNv
dW50ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxz
TG9jYWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgp
OwotICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9y
KHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAm
JiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHls
ZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICB3aGlsZSAo
biAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pOwotICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOwot
ICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBm
YWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09u
bHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgp
OwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgIHdo
aWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG4gPSBu
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKLSAgICAgICAgICAgICAgICBl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgICAgIG1fbWF0Y2hWaXNp
dGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1h
dGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50
ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9j
YWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cjoKLSAgICAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9s
bG93cyBhIHBzZXVkby1lbGVtZW50Ci0gICAgICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlv
biBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRv
IGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCi0gICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhl
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1fY29s
bGVjdFJ1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWljUHNl
dWRvICE9IFNFTEVDVElPTiAmJgotICAgICAgICAgICAgICAgICEoKFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJf
Q09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBl
LCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxl
bWVudFBhcmVudFN0eWxlKTsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2Vu
ZGFudDoKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUgPSBlLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBl
IHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLX0K
LQotc3RhdGljIHZvaWQgYWRkTG9jYWxOYW1lVG9TZXQoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4qIHNldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCi17Ci0gICAgc2V0LT5hZGQocU5h
bWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKLX0KLQotc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+KiBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCgpCi17Ci0gICAg
Ly8gVGhpcyBpcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIGluIEhUTUwgNC4wMSB3aXRoIHZhbHVl
cyBtYXJrZWQgYXMgIltDSV0iIG9yIGNhc2UtaW5zZW5zaXRpdmUKLSAgICAvLyBNb3ppbGxhIHRy
ZWF0cyBhbGwgb3RoZXIgdmFsdWVzIGFzIGNhc2Utc2Vuc2l0aXZlLCB0aHVzIHNvIGRvIHdlLgot
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBhdHRyU2V0ID0gbmV3IEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+OwotCi0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0
X2NoYXJzZXRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2NlcHRBdHRy
KTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlnbkF0dHIpOwotICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaW5rQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgYXhpc0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGJnY29s
b3JBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjaGFyc2V0QXR0cik7Ci0g
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hlY2tlZEF0dHIpOwotICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGNsZWFyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgY29kZXR5cGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb2xv
ckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvbXBhY3RBdHRyKTsKLSAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBkZWNsYXJlQXR0cik7Ci0gICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgZGVmZXJBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBkaXJBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBkaXNhYmxlZEF0
dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGVuY3R5cGVBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBmYWNlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgZnJhbWVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBo
cmVmbGFuZ0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGh0dHBfZXF1aXZB
dHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBsYW5nQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ3VhZ2VBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBsaW5rQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
bWVkaWFBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtZXRob2RBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtdWx0aXBsZUF0dHIpOwotICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5vaHJlZkF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIG5vcmVzaXplQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
bm9zaGFkZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5vd3JhcEF0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJlYWRvbmx5QXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVsQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgcmV2QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcnVsZXNB
dHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzY29wZUF0dHIpOwotICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjcm9sbGluZ0F0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIHNlbGVjdGVkQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgc2hhcGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0YXJnZXRB
dHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0ZXh0QXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdHlwZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIHZhbGlnbkF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZh
bHVldHlwZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZsaW5rQXR0cik7
Ci0KLSAgICByZXR1cm4gYXR0clNldDsKLX0KLQotc3RhdGljIGJvb2wgaHRtbEF0dHJpYnV0ZUhh
c0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIpCi17Ci0gICAg
c3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBodG1sQ2FzZUluc2Vuc2l0aXZlQXR0
cmlidXRlc1NldCA9IGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCk7Ci0g
ICAgYm9vbCBpc1Bvc3NpYmxlSFRNTEF0dHIgPSAhYXR0ci5oYXNQcmVmaXgoKSAmJiAoYXR0ci5u
YW1lc3BhY2VVUkkoKSA9PSBudWxsQXRvbSk7Ci0gICAgcmV0dXJuIGlzUG9zc2libGVIVE1MQXR0
ciAmJiBodG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldC0+Y29udGFpbnMoYXR0ci5sb2Nh
bE5hbWUoKS5pbXBsKCkpOwotfQotCi1zdGF0aWMgYm9vbCBhdHRyaWJ1dGVRdWFsaWZpZWROYW1l
TWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0
b3JBdHRyKQotewotICAgIGlmIChzZWxlY3RvckF0dHIubG9jYWxOYW1lKCkgIT0gYXR0cmlidXRl
LT5sb2NhbE5hbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNlbGVj
dG9yQXR0ci5wcmVmaXgoKSA9PSBzdGFyQXRvbSB8fCBzZWxlY3RvckF0dHIubmFtZXNwYWNlVVJJ
KCkgPT0gYXR0cmlidXRlLT5uYW1lc3BhY2VVUkkoKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0cmli
dXRlVmFsdWVNYXRjaGVzKEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1h
dGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJvb2wgY2FzZVNl
bnNpdGl2ZSkKLXsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlSXRl
bS0+dmFsdWUoKTsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN3aXRjaCAobWF0Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoK
LSAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWxlY3RvclZhbHVlICE9IHZhbHVlIDogIWVx
dWFsSWdub3JpbmdDYXNlKHNlbGVjdG9yVmFsdWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDogewot
ICAgICAgICAvLyBJZ25vcmUgZW1wdHkgc2VsZWN0b3JzIG9yIHNlbGVjdG9ycyBjb250YWluaW5n
IHNwYWNlcwotICAgICAgICBpZiAoc2VsZWN0b3JWYWx1ZS5jb250YWlucygnICcpIHx8IHNlbGVj
dG9yVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IHVuc2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgc2l6ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3RvclZhbHVlLCBzdGFy
dFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKLSAgICAgICAgICAgIGlmIChmb3VuZFBvcyA9PSBu
b3RGb3VuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
IWZvdW5kUG9zIHx8IHZhbHVlW2ZvdW5kUG9zIC0gMV0gPT0gJyAnKSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgZW5kU3RyID0gZm91bmRQb3MgKyBzZWxlY3RvclZhbHVlLmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIGlmIChlbmRTdHIgPT0gdmFsdWUubGVuZ3RoKCkgfHwgdmFsdWVbZW5k
U3RyXSA9PSAnICcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3VuZCBhIG1h
dGNoLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBObyBtYXRj
aC4gS2VlcCBsb29raW5nLgotICAgICAgICAgICAgc3RhcnRTZWFyY2hBdCA9IGZvdW5kUG9zICsg
MTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NTZWxlY3Rv
cjo6Q29udGFpbjoKLSAgICAgICAgaWYgKCF2YWx1ZS5jb250YWlucyhzZWxlY3RvclZhbHVlLCBj
YXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVnaW46
Ci0gICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0
aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6RW5kOgotICAgICAgICBp
ZiAoIXZhbHVlLmVuZHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpIHx8IHNlbGVj
dG9yVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBoZW46Ci0gICAgICAgIGlmICh2YWx1ZS5s
ZW5ndGgoKSA8IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vu
c2l0aXZlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gSXQgdGhleSBz
dGFydCB0aGUgc2FtZSwgY2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIGZvbGxvd2luZyAnLSc6Ci0g
ICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBzZWxlY3RvclZhbHVlLmxlbmd0aCgpICYmIHZh
bHVlW3NlbGVjdG9yVmFsdWUubGVuZ3RoKCldICE9ICctJykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6
Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wg
YW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9y
OjpNYXRjaCBtYXRjaCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyLCBjb25zdCBB
dG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShp
KTsKLQotICAgICAgICBpZiAoIWF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKGF0dHJpYnV0
ZUl0ZW0sIHNlbGVjdG9yQXR0cikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoYXR0cmlidXRlVmFsdWVNYXRjaGVzKGF0dHJpYnV0ZUl0ZW0sIG1hdGNoLCBzZWxlY3RvclZh
bHVlLCBjYXNlU2Vuc2l0aXZlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJl
ZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFy
ZW50U3R5bGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGUpOwotICAgIGlmICghZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZSwgc2VsKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNlbC0+aGFzQXR0cmlidXRlKCkpIHsKLSAg
ICAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCi0gICAgICAgICAg
ICByZXR1cm4gZS0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZSkt
PmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpOwotCi0gICAgICAgIGlmIChzZWwt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0lE
KCkgJiYgZS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCk7Ci0KLSAgICAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3ZXJlIGVsZW1lbnRTdHlsZSBpcyAwLgotICAg
ICAgICBpZiAoZWxlbWVudFN0eWxlICYmICghZS0+aXNTdHlsZWRFbGVtZW50KCkgfHwgKCFzdGF0
aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZSktPmlzTWFwcGVkQXR0cmlidXRlKGF0dHIpICYmIGF0
dHIgIT0gdHlwZUF0dHIgJiYgYXR0ciAhPSByZWFkb25seUF0dHIpKSkKLSAgICAgICAgICAgIGVs
ZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycygpOyAvLyBTcGVjaWFs
LWNhc2UgdGhlICJ0eXBlIiBhbmQgInJlYWRvbmx5IiBhdHRyaWJ1dGVzIHNvIGlucHV0IGZvcm0g
Y29udHJvbHMgY2FuIHNoYXJlIHN0eWxlLgotCi0gICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcyA9IGUtPmF0dHJpYnV0ZXModHJ1ZSk7Ci0gICAgICAgIGlmICghYXR0cmlidXRlcykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAh
bV9kb2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVl
KGF0dHIpOwotCi0gICAgICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhhdHRyaWJ1dGVzLCBz
dGF0aWNfY2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNlbC0+bV9tYXRjaCksIGF0dHIsIHNlbC0+
dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
KSB7Ci0gICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250LgotICAgICAgICBpZiAoc2VsLT5w
c2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCkgewotICAgICAgICAgICAgQVNT
RVJUKHNlbC0+c2VsZWN0b3JMaXN0KCkpOwotICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciog
c3ViU2VsID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViU2VsOyBzdWJTZWwgPSBz
dWJTZWwtPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICAgICAgICAgIC8vIDpub3QgY2Fubm90IG5l
c3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQotICAgICAgICAgICAgICAgIC8v
IHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3IgaXQuCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2ZXIgb2NjdXJz
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgpICE9IENTU1NlbGVj
dG9yOjpQc2V1ZG9Ob3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9y
KHN1YlNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gIT0g
Tk9QU0VVRE8gJiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkg
fHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
UkVTSVpFUikpIHsKLSAgICAgICAgICAgIC8vIENTUyBzY3JvbGxiYXJzIG1hdGNoIGEgc3BlY2lm
aWMgc3Vic2V0IG9mIHBzZXVkbyBjbGFzc2VzLCBhbmQgdGhleSBoYXZlIHNwZWNpYWxpemVkIHJ1
bGVzIGZvciBlYWNoCi0gICAgICAgICAgICAvLyAoc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRz
IGludm9sdmVkKS4KLSAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KHNlbCwgZHluYW1pY1BzZXVkbyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyA9
PSBTRUxFQ1RJT04pIHsKLSAgICAgICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICFt
X2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gTm9ybWFsIGVsZW1lbnQgcHNldWRvIGNsYXNzIGNoZWNraW5nLgot
ICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgICAgICAvLyBQc2V1
ZG8gY2xhc3NlczoKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsgLy8gQWxyZWFkeSBoYW5kbGVkIHVwIGFib3ZlLgotICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW1wdHk6IHsKLSAgICAgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gZS0+Zmly
c3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXRleHROb2RlLT5kYXRhKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxl
Y3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpICYmIChlLT5k
b2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+cmVuZGVyU3R5bGUoKS0+dW5pcXVl
KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0RW1wdHlT
dGF0ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRmlyc3RDaGlsZDogewotICAgICAgICAgICAgICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMg
dGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAgICAgICAgICAgICAgIGlmIChl
LT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
biA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5y
ZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9k
ZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGls
ZFN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlOiB7Ci0gICAgICAgICAgICAgICAgLy8gZmlyc3Qtb2Yt
dHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCi0gICAgICAgICAgICAg
ICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUo
dHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09u
bHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVu
ZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTGFzdENoaWxkOiB7Ci0gICAgICAgICAgICAgICAgLy8gbGFzdC1jaGlsZCBt
YXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAgICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9j
b2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
Y2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJT
dHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBj
aGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldExh
c3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9M
YXN0T2ZUeXBlOiB7Ci0gICAgICAgICAgICAgICAgLy8gbGFzdC1vZi10eXBlIG1hdGNoZXMgdGhl
IGxhc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUg
OiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxl
LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+
aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFt
ZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGJvb2wgbGFzdENoaWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0Zp
bmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBl
LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/
IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50
U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQgJiYgY2hpbGRTdHlsZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkICYm
IGxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5T2ZU
eXBlOiB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBz
bG93LgotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFy
ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNP
bmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVs
ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgbGFzdENoaWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxl
IChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYm
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9k
ZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdENoaWxkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBsYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoIXNl
bC0+cGFyc2VOdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gbi0+cmVuZGVyU3R5
bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHMgPyBz
LT5jaGlsZEluZGV4KCkgOiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlv
dXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/
IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50
U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRT
dHlsZS0+c2V0Q2hpbGRJbmRleChjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNlbC0+bWF0Y2hOdGgoY291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZUeXBlOiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFt
ZSgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFz
VGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291
bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5
bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBv
c2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBp
bnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1h
dGNoTnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6IHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09u
bHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
c2VsLT5tYXRjaE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9UYXJnZXQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgotICAgICAgICAgICAgICAgIGZvciAoQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2VsZWN0
b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVk
bywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHls
ZSkgPT0gU2VsZWN0b3JNYXRjaGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKLSAgICAgICAgICAgICAgICBpZiAo
ZSAmJiBlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9B
dXRvZmlsbDogewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYg
KEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGluazoKLSAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xp
bmsoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX21hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvVmlzaXRlZDoKLSAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgfHwg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6IHsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlE
cmFnUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURy
YWdSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5y
ZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgKChl
LT5mb2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlLT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkpIHx8IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9j
dXMpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewotICAg
ICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3Vs
ZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KLSAgICAgICAgICAgICAgICAvLyBocmVmIGFu
ZCAqOmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuICBUaGlzIGlzIGltcG9ydGFudCBm
b3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNp
bmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShh
VGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRC
eUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRl
clN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRB
ZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhv
dmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwg
Q1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKLSAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNo
b3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KLSAgICAgICAgICAgICAgICAvLyBocmVm
IGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAKLSAgICAgICAgICAgICAg
ICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkg
JiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGUt
PnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGUtPmFjdGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJs
ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9GdWxsUGFnZU1lZGlhOgotICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50
KCkgJiYgZS0+ZG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKTsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgotICAgICAgICAgICAg
ICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5OiB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUt
PmlzVGV4dEZvcm1Db250cm9sKCkgJiYgZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PcHRp
b25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNvbnRy
b2woKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgotICAg
ICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOwotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmFsaWQ6IHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBlLT53aWxsVmFsaWRhdGUoKSAmJiBlLT5pc1ZhbGlkRm9ybUNv
bnRyb2xFbGVtZW50KCk7Ci0gICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0lu
dmFsaWQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgICAgIHJldHVybiAoZS0+d2lsbFZhbGlk
YXRlKCkgJiYgIWUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFzVW5hY2Nl
cHRhYmxlVmFsdWUoKTsKLSAgICAgICAgICAgIH0gY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hl
Y2tlZDogewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gRXZl
biB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhp
c3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRoYXQKLSAgICAgICAgICAgICAgICAvLyB5
b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlLiAgV2Ugd2lsbCBiZWhh
dmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdAotICAgICAgICAgICAgICAg
IC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBw
c2V1ZG8uCi0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
ZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYm
IGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlz
SW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwg
IWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgICAgICAg
ICAgaWYgKGUtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEhUTUxQcm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNz
RWxlbWVudCo+KGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXByb2dy
ZXNzLT5pc0RldGVybWluYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5w
dXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUm9vdDoKLSAgICAgICAg
ICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYW5nOiB7Ci0gICAgICAgICAgICAgICAg
QXRvbWljU3RyaW5nIHZhbHVlID0gZS0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9IHNlbC0+YXJndW1lbnQo
KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNX
aXRoKGFyZ3VtZW50LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1
ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0nKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxs
U2NyZWVuOgotICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1
bGxzY3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9jdW1lbnQncyBjdXJyZW50IGZ1bGxzY3JlZW4gCi0g
ICAgICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwg
dGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllcyB0byAKLSAgICAgICAgICAgICAg
ICAvLyB0aGF0IGVsZW1lbnQuIEFsc28sIGFuIDxpZnJhbWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+
IGVsZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3NpbmcgCi0gICAgICAgICAgICAgICAgLy8gY29udGV4
dCdzIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1bGwtc2Ny
ZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgotICAgICAgICAgICAgICAgIGlmIChlLT5pc0ZyYW1l
RWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGUpLT5j
b250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2Ny
ZWVuKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZSA9PSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1l
bnQoKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxT
Y3JlZW5UcmFuc2l0aW9uOgotICAgICAgICAgICAgICAgIGlmIChlICE9IGUtPmRvY3VtZW50KCkt
PndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5p
bWF0aW5nRnVsbFNjcmVlbigpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
RnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAgICAgICAgICAgIHJldHVybiBlLT5jb250YWluc0Z1
bGxTY3JlZW5FbGVtZW50KCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
dWxsU2NyZWVuRG9jdW1lbnQ6Ci0gICAgICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBp
cyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgdGhlICdmdWxsLXNjcmVlbi1kb2N1bWVudCcgcHNl
dWRvY2xhc3MgYXBwbGllcyAKLSAgICAgICAgICAgICAgICAvLyB0byBhbGwgZWxlbWVudHMgb2Yg
dGhhdCBEb2N1bWVudC4KLSAgICAgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtp
dElzRnVsbFNjcmVlbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0luUmFuZ2U6Ci0gICAgICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+
c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZS0+aXNJblJhbmdlKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PdXRP
ZlJhbmdlOgotICAgICAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFs
aWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzT3V0T2ZSYW5n
ZSgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVW5rbm93bjoKLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdFBhcnNlZDoKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7Ci0gICAg
ICAgIGlmICghZWxlbWVudFN0eWxlICYmICFtX2NvbGxlY3RSdWxlc09ubHkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRvRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gZS0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWwtPnZhbHVlKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1
ZG9JZChzZWwtPnBzZXVkb1R5cGUoKSk7Ci0gICAgICAgIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9M
RVRURVIpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyh0
cnVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAg
ICAgICAgICBkeW5hbWljUHNldWRvID0gcHNldWRvSWQ7Ci0gICAgfQotICAgIC8vICMjIyBhZGQg
dGhlIHJlc3Qgb2YgdGhlIGNoZWNrcy4uLgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENT
U1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSBSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2
ZSgpOwotICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0
eWxlUmVzb2x2ZSgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFjayBm
b3IgcmVzaXplcnMgYW5kIHNjcm9sbGJhciBjb3JuZXJzLiAgRXZlbnR1YWxseSA6d2luZG93LWlu
YWN0aXZlIHNob3VsZCBiZWNvbWUgYSByZWFsCi0gICAgLy8gcHNldWRvIGNsYXNzIGFuZCBqdXN0
IGFwcGx5IHRvIGV2ZXJ5dGhpbmcuCi0gICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkKLSAgICAgICAgcmV0dXJuICFtX2RvY3VtZW50
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwotICAgIAotICAgIGlmICgh
c2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIEFTU0VSVChz
ZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKLSAgICBzd2l0Y2ggKHNl
bC0+cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJs
ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCk7Ci0gICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgotICAgICAgICAgICAgcmV0dXJuICFzY3Jv
bGxiYXItPmVuYWJsZWQoKTsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6
IHsKLSAgICAgICAgICAgIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ICE9IE5vUGFydDsKLSAgICAgICAgICAg
IGlmIChwYXJ0ID09IFRyYWNrQkdQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBob3ZlcmVk
UGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IGhvdmVyZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQg
fHwgaG92ZXJlZFBhcnQgPT0gVGh1bWJQYXJ0OwotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0g
aG92ZXJlZFBhcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
QWN0aXZlOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xs
YmFyLT5wcmVzc2VkUGFydCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQ
YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCAhPSBOb1BhcnQ7Ci0gICAg
ICAgICAgICBpZiAocGFydCA9PSBUcmFja0JHUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cHJlc3NlZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJh
Y2tQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IFRodW1iUGFydDsKLSAgICAgICAgICAgIHJldHVybiBw
YXJ0ID09IHByZXNzZWRQYXJ0OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0hvcml6b250YWw6Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb1ZlcnRpY2FsOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRGVjcmVtZW50OgotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFy
dDsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5jcmVtZW50OgotICAgICAgICAg
ICAgcmV0dXJuIHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKLSAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBC
YWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBw
YXJ0ID09IEJhY2tUcmFja1BhcnQ7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Vu
ZDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQg
PT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OwotICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Eb3VibGVCdXR0b246IHsKLSAgICAgICAgICAg
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+
dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBCYWNrVHJhY2tQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2Vt
ZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25zUGxhY2VtZW50ID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09
IEZvcndhcmRUcmFja1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1l
bnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50ID09IFNj
cm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9IAotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TaW5nbGVCdXR0b246IHsK
LSAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9
IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwotICAgICAgICAgICAgaWYg
KHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQ
YXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0
dG9uc1NpbmdsZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob0J1dHRvbjogewotICAgICAgICAgICAgU2Nyb2xs
YmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgp
LT5idXR0b25zUGxhY2VtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrVHJhY2tQ
YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJh
ckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZDsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ29ybmVyUHJlc2VudDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPnNj
cm9sbGFibGVBcmVhKCktPmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
c3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQpAQCAtMzA0Niw3ICsxOTIyLDcgQEAgUnVsZURh
dGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVsZSwgQwogICAgICwgbV9zZWxlY3RvcihzZWxl
Y3RvcikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCiAgICAg
LCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cihzZWxlY3RvcikpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihTZWxlY3RvckNo
ZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSkKICAgICAsIG1faGFzTXVs
dGlwYXJ0U2VsZWN0b3Ioc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkKICAgICAsIG1faGFzVG9wU2Vs
ZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaChzZWxlY3RvcikpCiB7CkBAIC0zNTgzLDcgKzI0NTksNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgCiAgICAgaWQgPSBDU1NQcm9w
ZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIG1fc3R5bGUtPmRpcmVjdGlv
bigpLCBtX3N0eWxlLT53cml0aW5nTW9kZSgpKTsKIAotICAgIGlmIChtX2NoZWNrZXIubV9tYXRj
aFZpc2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7
CisgICAgaWYgKG1fY2hlY2tlci5pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKCkgJiYgIWlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJv
cGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6
dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MDYsNyArMjU4Miw3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKIAogICAgICAgICBFUmVzaXpl
IHIgPSBSRVNJWkVfTk9ORTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpKQorICAgICAgICAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAg
ICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVf
Qk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHIgPSAqcHJp
bWl0aXZlVmFsdWU7CkBAIC0zNzU0LDcgKzI2MzAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBpZiAobV9wYXJlbnROb2RlKQogICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShtX3BhcmVudFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0lu
aXRpYWwpIHsKLSAgICAgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2Vy
Lm1fZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKTsKKyAgICAgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVj
a2VyLmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6
ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBLZXl3b3Jk
cyBhcmUgYmVpbmcgdXNlZC4KQEAgLTM3NjcsMTQgKzI2NDMsMTQgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVY
TGFyZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAgICAgICBz
aXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2Vy
LmRvY3VtZW50KCksIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpIC0gQ1NTVmFsdWVY
eFNtYWxsICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVMYXJnZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBsYXJnZXJG
b250U2l6ZShvbGRTaXplLCBtX2NoZWNrZXIubV9kb2N1bWVudC0+aW5RdWlya3NNb2RlKCkpOwor
ICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFyZ2VyRm9udFNpemUob2xkU2l6ZSwgbV9jaGVj
a2VyLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6Ci0gICAgICAgICAgICAg
ICAgICAgIHNpemUgPSBzbWFsbGVyRm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLm1fZG9jdW1l
bnQtPmluUXVpcmtzTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNtYWxsZXJG
b250U2l6ZShvbGRTaXplLCBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zODI1LDcgKzI3MDEsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIGVsc2UgaWYgKENTU1ByaW1p
dGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7CiAgICAgICAgICAgICBkb3VibGUg
bXVsdGlwbGllciA9IHpvb21GYWN0b3I7CiAgICAgICAgICAgICBpZiAobV9zdHlsZS0+dGV4dFNp
emVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2NoZWNr
ZXIubV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gbV9jaGVja2VyLmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIG11
bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG11bHRpcGxpZXIpOwpAQCAtNDA0Miw3ICsy
OTE4LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdl
bmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9u
LW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUo
KSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAg
ICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hl
Y2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29y
ZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERl
c2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENTU1Zh
bHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsK
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNj
LmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFt
aWx5KCkuZmFtaWx5SXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKSk7CkBAIC00MDY2LDcgKzI5NDIsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAgIEF0
b21pY1N0cmluZyBmYWNlOwotICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgIGlmIChj
b250ZW50VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykgewogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzRm9udEZhbWlseVZh
bHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzdGF0aWNfY2FzdDxGb250RmFtaWx5
VmFsdWUqPihjb250ZW50VmFsdWUpLT5mYW1pbHlOYW1lKCk7CkBAIC00MTIyLDcgKzI5OTgsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIC8vIElm
IGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBv
biB0aGlzIGRlc2NyaXB0aW9uLgogICAgICAgICBpZiAoY3VyckZhbWlseSkgewogICAgICAgICAg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0g
ICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktl
eXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlw
dGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7
CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZv
cktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNj
cmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXpl
KSk7CiAKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICB9CkBAIC00MTc4LDcgKzMwNTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBzZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKICAgICAgICAgICAgIHNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBtX2No
ZWNrZXIubV9kb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+em9vbSgpOworICAgICAgICAg
ICAgZmxvYXQgZG9jWm9vbSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT56b29tKCk7CiAgICAgICAgICAgICBzZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwogICAg
ICAgICAgICAgc2V0Wm9vbShkb2Nab29tKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkgewpAQCAtNDIxNCwyMSArMzA5MCwyMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfSBlbHNl
IGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hl
Y2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBBU1NF
UlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRv
Y3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdz
CiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJk
RmFtaWx5KTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNl
dHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIubV9kb2N1bWVudC0+cHJpbnRpbmcoKSk7Ci0g
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udEZhbWlseSA9IG1fY2hl
Y2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5k
YXJkRm9udEZhbWlseSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpLT5zdGFuZGFy
ZEZvbnRGYW1pbHkoKTsKICAgICAgICAgICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNl
dEZhbWlseShzdGFuZGFyZEZvbnRGYW1pbHkpOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIENTU1ZhbHVlTWVk
aXVtLCBmYWxzZSkpOworICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBm
b250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBm
YWxzZSkpOwogICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7
CiAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTQy
NDIsMTUgKzMxMTgsMTUgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dAogICAgICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBh
bnl0aGluZy4gIElmIG5vdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBmb250LgogICAgICAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgbW9kZSBhbmQgcHJpbnRlciBmb250IHNl
dHRpbmdzIGFyZSB1cGRhdGVkLgotICAgICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpOworICAgICAgICAgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29s
dXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVz
IGhhdmUgc2V0dGluZ3MKICAgICAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJl
bmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIubV9kb2N1bWVu
dC0+cHJpbnRpbmcoKSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmludGluZygpKTsKICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21T
cGVjaWZpZWRTaXplKG1fY2hlY2tlci5tX2RvY3VtZW50LCBtX3N0eWxlLmdldCgpLCBmb250RGVz
Y3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUo
KSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNp
emUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkp
KTsKICAgICAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkg
ewpAQCAtNDgxMCw3ICszNjg2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KGludAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzY1NjEwNzc+IFdvcmsgYXJvdW5kIHRoZSBTdG9ja3Mgd2lkZ2V0J3MgbWlzdXNl
IG9mIHRoZQogICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBieSBub3QgYXBwbHlp
bmcgaXQgaW4gRGFzaGJvYXJkLgotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNr
ZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
bV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgIGlmIChzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICNlbmRpZgpAQCAtNTkwMyw5ICs0Nzc5LDkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja0ZvckdlbmVyaWNGYQogICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91
ciBzY2FsZSBmYWN0b3IuCiAgICAgZmxvYXQgc2l6ZTsKICAgICBpZiAoY2hpbGRGb250LmtleXdv
cmRTaXplKCkpCi0gICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1f
ZG9jdW1lbnQsIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwg
Y2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgIHNpemUgPSBmb250U2l6
ZUZvcktleXdvcmQobV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxk
Rm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tlci5tX2Rv
Y3VtZW50LT5zZXR0aW5ncygpOworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNr
ZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3Rv
ciA9IHNldHRpbmdzCiAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+
ZGVmYXVsdEZpeGVkRm9udFNpemUoKSkgLyBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKICAg
ICAgICAgICAgIDogMTsKQEAgLTU5MjIsNyArNDc5OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y2hlY2tGb3JHZW5lcmljRmEKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c2V0Rm9udFNpemUo
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNr
ZXIubV9kb2N1bWVudCwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIu
ZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXpl
KCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IENTU1N0eWxlU2VsZWN0
b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRT
aXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTYxMjgsNyArNTAwNCw3IEBAIENvbG9yIENT
U1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW0KICAgICAgICAgaWYgKGlkZW50ID09IENT
U1ZhbHVlV2Via2l0VGV4dCkKICAgICAgICAgICAgIGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+dGV4dENvbG9yKCk7CiAgICAgICAgIGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0
TGluaykKLSAgICAgICAgICAgIGNvbCA9IG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9jaGVja2Vy
Lm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAg
ICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fY2hlY2tlci5pc01hdGNoaW5n
VmlzaXRlZFBzZXVkb0NsYXNzKCkgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5r
Q29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0QWN0aXZlbGluaykKICAgICAgICAgICAgIGNv
bCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCkBAIC02MTYyLDI3
ICs1MDM4LDYgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjphZmZlY3RlZEJ5Vmlld3BvcgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZv
clZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIG5vZGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQot
ewotICAgIGlmICghbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRl
ZEhhc2gpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVu
dDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOwotICAgICAgICBpZiAo
YXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0g
dmlzaXRlZEhhc2gpCi0gICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0g
ICAgfQotfQotCiBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNp
bmNsdWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC04NCwzMDcgKzg1LDMwNSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBtX3Jlc3VsdDsKIH07CiAKLSAgICAvLyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJT
dHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNo
ZWV0cy4KLSAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIHsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IENTU1N0eWxlQXBwbHlQcm9wZXJ0eTsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NT
U3R5bGVTZWxlY3Rvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgQ1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCosIFN0eWxlU2hlZXRMaXN0KiBhdXRob3JT
aGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMpOwotICAgICAgICB+Q1NTU3R5bGVTZWxlY3RvcigpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9y
IHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1cHMuCi0gICAg
ICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwotICAgICAgICB2b2lkIHBvcFBh
cmVudChFbGVtZW50KiBwYXJlbnQpOwotCi0KLSAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQg
PSBmYWxzZSwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlKTsKLSAgICAgICAg
Ci0gICAgICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0
IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0JiBsaXN0KTsKLQotICAgICAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVt
ZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIG1hdGNoVmlzaXRlZFBz
ZXVkb0NsYXNzID0gZmFsc2UpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCopOwotCi0gICAgICAgIFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsg
fQotICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdEVsZW1lbnRTdHlsZTsgfQotICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50OyB9Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICBG
b250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uKCkge3JldHVybiBwYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlv
bihGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgICAgIHZvaWQg
c2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0K
LSAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgICAgICB2b2lkIHNldFRleHRTaXpl
QWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVz
dChiKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZl
KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNF
VURPKTsKLSAgICAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgICAgIFJlbmRl
clN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAgICAgICBib29sIG1hdGNoZXNTaWJsaW5n
UnVsZXMoKTsKLSAgICAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQs
IHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICAgICAgTm9kZSogZmluZFNp
YmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqKSBjb25zdDsKLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgcHVzaFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogcGFyZW50KTsKLSAg
ICAgICAgdm9pZCBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdl
YktpdENTU0tleWZyYW1lUnVsZSosIEtleWZyYW1lVmFsdWUmKTsKLQotICAgIHB1YmxpYzoKLSAg
ICAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRo
YXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KLSAg
ICAgICAgZW51bSBDU1NSdWxlRmlsdGVyIHsKLSAgICAgICAgICAgIFVBQW5kVXNlckNTU1J1bGVz
ICAgPSAxIDw8IDEsCi0gICAgICAgICAgICBBdXRob3JDU1NSdWxlcyAgICAgID0gMSA8PCAyLAot
ICAgICAgICAgICAgRW1wdHlDU1NSdWxlcyAgICAgICA9IDEgPDwgMywKLSAgICAgICAgICAgIENy
b3NzT3JpZ2luQ1NTUnVsZXMgPSAxIDw8IDQsCi0gICAgICAgICAgICBBbGxCdXRFbXB0eUNTU1J1
bGVzID0gVUFBbmRVc2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2luQ1NT
UnVsZXMsCi0gICAgICAgICAgICBBbGxDU1NSdWxlcyAgICAgICAgID0gQWxsQnV0RW1wdHlDU1NS
dWxlcyB8IEVtcHR5Q1NTUnVsZXMsCi0gICAgICAgIH07Ci0gICAgICAgIFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1Rv
SW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVu
c2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0KLSAgICAgICAg
Ly8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUgcmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQt
eHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgotICAgICAgICAvLyB0aGUgY29y
cmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVk
aXVtKS4KLSAgICAgICAgc3RhdGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCos
IGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgICAg
IC8vIEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJu
IGxlZ2FjeSBmb250IHNpemUgYmV0d2VlbiAxIGFuZCA3LgotICAgICAgICBzdGF0aWMgaW50IGxl
Z2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNl
Rml4ZWREZWZhdWx0U2l6ZSk7Ci0KLSAgICBwcml2YXRlOgotCi0gICAgICAgIC8vIFdoZW4gdGhl
IENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdHRlbXB0
IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZAotICAgICAgICAvLyB0YWJsZSwgYW5kIGZhaWxp
bmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgotICAgICAgICBmbG9hdCBsYXJn
ZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0OwotCi0gICAgICAg
IC8vIExpa2UgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgZm9yIHRoZSBrZXl3b3JkICJzbWFs
bGVyIi4KLSAgICAgICAgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVp
cmtzTW9kZSkgY29uc3Q7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgc2V0U3R5bGUoUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gcykgeyBtX3N0eWxlID0gczsgfSAvLyBVc2VkIGJ5IHRoZSBk
b2N1bWVudCB3aGVuIHNldHRpbmcgdXAgaXRzIHJvb3Qgc3R5bGUuCi0KLSAgICAgICAgdm9pZCBh
cHBseVByb3BlcnR5VG9TdHlsZShpbnQgaWQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKLSAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVk
U2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZs
b2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWlu
aW11bUZvckZvbnRGaXplKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc2V0Rm9udFNp
emUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7Ci0KLSAgICAgICAgc3RhdGljIGZsb2F0
IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5bGUq
LCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pv
b21SdWxlcyk7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7
Ci0KLSAgICAgICAgQ29sb3IgZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWUqKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNv
bnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotIAotICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9Ci0KLSAg
ICAgICAgdm9pZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVk
aWFRdWVyeUV4cCosIGJvb2wgcmVzdWx0KTsKLQotICAgICAgICBib29sIGFmZmVjdGVkQnlWaWV3
cG9ydENoYW5nZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdl
ZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsgfQotICAgICAgICB2b2lk
IHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpIHsgbV9jaGVja2VyLnZp
c2l0ZWRTdGF0ZUNoYW5nZWQodmlzaXRlZEhhc2gpOyB9Ci0KLSAgICAgICAgdm9pZCBhZGRLZXlm
cmFtZVN0eWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gcnVsZSk7Ci0gICAg
ICAgIHZvaWQgYWRkUGFnZVN0eWxlKFBhc3NSZWZQdHI8Q1NTUGFnZVJ1bGU+KTsKLQotICAgICAg
ICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnNpYmxp
bmdSdWxlczsgfQotICAgICAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzOyB9Ci0gICAgICAgIGJvb2wgdXNlc0Jl
Zm9yZUFmdGVyUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNCZWZvcmVBZnRl
clJ1bGVzOyB9Ci0gICAgICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXMudXNlc0xpbmtSdWxlczsgfQotCi0gICAgICAgIHN0YXRpYyBib29sIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxl
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRp
b25zKTsKLQotICAgICAgICBzdHJ1Y3QgRmVhdHVyZXMgewotICAgICAgICAgICAgRmVhdHVyZXMo
KTsKLSAgICAgICAgICAgIH5GZWF0dXJlcygpOwotICAgICAgICAgICAgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4gaWRzSW5SdWxlczsKLSAgICAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+IGF0dHJzSW5SdWxlczsKLSAgICAgICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5n
UnVsZXM7Ci0gICAgICAgICAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlczsKLSAgICAgICAgICAg
IGJvb2wgdXNlc0JlZm9yZUFmdGVyUnVsZXM7Ci0gICAgICAgICAgICBib29sIHVzZXNMaW5rUnVs
ZXM7Ci0gICAgICAgIH07Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBlbnVtIFNlbGVjdG9yTWF0
Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxz
Q29tcGxldGVseSB9OwotCi0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRl
ZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZv
bnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgICAgIHZvaWQgY2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAg
ICAgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpOwotICAgICAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLQot
ICAgICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKLQotICAgICAgICB2b2lkIGFk
ZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsgfQotICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7Ci0KLSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVT
ZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihj
b25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsK
LSAgICAgICAgCi0gICAgICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpOwot
Ci0gICAgICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KLSAgICAgICAgdm9pZCBhcHBseURl
Y2xhcmF0aW9ucyhib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCk7
Ci0KLSAgICAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiwgYm9vbCBpc0xlZnRQYWdl
LCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLSAgICAgICAgdm9p
ZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGJvb2wgaXNM
ZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAg
ICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICAgICAgYm9vbCBp
c1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdl
SW5kZXgpOyB9Ci0gICAgICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7
Ci0gICAgICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICAgICAg
Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwotICAgICAgICBPd25QdHI8
UnVsZVNldD4gbV91c2VyU3R5bGU7Ci0KLSAgICAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKLQot
ICAgICAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7Ci0gICAgICAgICAgICBQYXJlbnRTdGFj
a0ZyYW1lKCkge30KLSAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVu
dCkgOiBlbGVtZW50KGVsZW1lbnQpIHt9Ci0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50Owot
ICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCA0PiBpZGVudGlmaWVySGFzaGVzOwotICAgICAg
ICB9OwotICAgICAgICBWZWN0b3I8UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFdpdGggMTAwIHVuaXF1ZSBzdHJpbmdzIGluIHRoZSBmaWx0ZXIs
IDJeMTIgc2xvdCB0YWJsZSBoYXMgZmFsc2UgcG9zaXRpdmUgcmF0ZSBvZiB+MC4yJS4KLSAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVyS2V5Qml0cyA9IDEyOwotICAgICAg
ICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPiA+IG1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyOwotCi0gICAgICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgICAg
IEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwotICAgICAgICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5k
RGF0YTsKLSAgICAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZT4gPiBLZXlmcmFtZXNSdWxlTWFwOwotICAgICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJh
bWVzUnVsZU1hcDsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBz
dHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0K
LQotICAgICAgICBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewotICAgICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsKLSAgICAgICAgcHVibGljOgotICAgICAgICAg
ICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJzaW5nKTsKLQotICAg
ICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wg
aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7Ci0gICAgICAgICAgICBTZWxl
Y3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQm
IGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmss
IFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAwKSBj
b25zdDsKLSAgICAgICAgICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVs
ZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29s
IGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVu
dFN0eWxlKSBjb25zdDsKLSAgICAgICAgICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKLSAgICAgICAg
ICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
Kik7Ci0gICAgICAgICAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsKLQotICAgICAgICAgICAgRUluc2lkZUxpbmsgZGV0
ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0OwotICAgICAgICAgICAgRUlu
c2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29u
c3Q7Ci0gICAgICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKLSAgICAgICAg
ICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7Ci0KLSAg
ICAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgICAgICAgICAgYm9vbCBtX3N0cmlj
dFBhcnNpbmc7Ci0gICAgICAgICAgICBib29sIG1fY29sbGVjdFJ1bGVzT25seTsKLSAgICAgICAg
ICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKLSAgICAgICAgICAgIFBzZXVkb0lkIG1fcHNldWRv
U3R5bGU7Ci0gICAgICAgICAgICBib29sIG1fZG9jdW1lbnRJc0hUTUw7Ci0gICAgICAgICAgICBt
dXRhYmxlIGJvb2wgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHM7Ci0gICAgICAgICAgICBtdXRh
YmxlIGJvb2wgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKLSAgICAgICAgICAgIG11dGFibGUg
SGFzaFNldDxMaW5rSGFzaCwgTGlua0hhc2hIYXNoPiBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRT
dGF0ZTsKLSAgICAgICAgfTsKLQotICAgICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlKENTU1By
b3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAgICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7Ci0K
LSAgICAgICAgdm9pZCBtYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFS
dWxlKTsKLSAgICAgICAgdm9pZCB1cGRhdGVGb250KCk7Ci0gICAgICAgIHZvaWQgY2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKCk7Ci0KLSAgICAgICAgdm9pZCBtYXBGaWxsQXR0YWNobWVudChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxD
bGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQg
bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwot
ICAgICAgICB2b2lkIG1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxSZXBlYXRZ
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFw
RmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAg
dm9pZCBtYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOwotCi0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2Rl
KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0
aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRp
b25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9u
UGxheVN0YXRlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotCi0gICAgICAgIHZv
aWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJ
bWFnZSYpOwotICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqLCBO
aW5lUGllY2VJbWFnZSYpOwotICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlV2lkdGgoQ1NT
VmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdl
UmVwZWF0KENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLQotICAgICAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdm9p
ZCBhcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBhcHBseVBh
Z2VTaXplUHJvcGVydHkoQ1NTVmFsdWUqKTsKLSAgICAgICAgYm9vbCBwYWdlU2l6ZUZyb21OYW1l
KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBMZW5ndGgmIHdpZHRoLCBM
ZW5ndGgmIGhlaWdodCk7Ci0gICAgICAgIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pIGNvbnN0
OwotICAgICAgICBMZW5ndGggaW5jaExlbmd0aChkb3VibGUgaW5jaCkgY29uc3Q7CisvLyBUaGlz
IGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9u
IGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KK2NsYXNzIENTU1N0eWxlU2VsZWN0b3Igewor
ICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUFwcGx5UHJvcGVydHk7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ1NTU3R5bGVTZWxlY3Rvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIENTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqLCBTdHlsZVNoZWV0TGlzdCogYXV0
aG9yU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCisgICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAorICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxl
cyk7CisgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKKyAgICAKKyAgICAvLyBVc2luZyB0aGVzZSBk
dXJpbmcgdHJlZSB3YWxrIHdpbGwgYWxsb3cgc3R5bGUgc2VsZWN0b3IgdG8gb3B0aW1pemUgY2hp
bGQgYW5kIGRlc2NlbmRhbnQgc2VsZWN0b3IgbG9va3Vwcy4KKyAgICB2b2lkIHB1c2hQYXJlbnQo
RWxlbWVudCogcGFyZW50KTsKKyAgICB2b2lkIHBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwor
CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCog
ZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVl
LCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlLCBib29sIG1hdGNoVmlzaXRlZFBz
ZXVkb0NsYXNzID0gZmFsc2UpOworICAgIAorICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0JiBsaXN0KTsK
KworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1
ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJv
b2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7CisKKyAgICBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCopOworCisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7
IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKCkgeyBy
ZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBGb250RGVzY3JpcHRpb24g
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkge3JldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2Zv
bnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVa
b29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShm
KTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBp
bml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAw
LCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsK
KyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBib29sIG1hdGNoZXNT
aWJsaW5nUnVsZXMoKTsKKyAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVu
dCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OworICAgIE5vZGUqIGZpbmRTaWJs
aW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJv
b2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCk7CisgICAgdm9pZCBwb3BQYXJl
bnRTdGFja0ZyYW1lKCk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktl
eWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiwg
S2V5ZnJhbWVWYWx1ZSYpOworCitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdp
dmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50
IChvciBhIHBzZXVkby1lbGVtZW50KS4KKyAgICBlbnVtIENTU1J1bGVGaWx0ZXIgeworICAgICAg
ICBVQUFuZFVzZXJDU1NSdWxlcyAgID0gMSA8PCAxLAorICAgICAgICBBdXRob3JDU1NSdWxlcyAg
ICAgID0gMSA8PCAyLAorICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAorICAg
ICAgICBDcm9zc09yaWdpbkNTU1J1bGVzID0gMSA8PCA0LAorICAgICAgICBBbGxCdXRFbXB0eUNT
U1J1bGVzID0gVUFBbmRVc2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2lu
Q1NTUnVsZXMsCisgICAgICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1
bGVzIHwgRW1wdHlDU1NSdWxlcywKKyAgICB9OworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBzZXVk
b1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNU
b0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKworICAgIC8vIEdpdmVuIGEgQ1NTIGtl
eXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMg
ZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVk
IHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KKyAgICBzdGF0aWMgZmxv
YXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxk
VXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKKyAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhl
bCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBh
bmQgNy4KKyAgICBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVs
Rm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKK3ByaXZhdGU6CisK
KyAgICAvLyBXaGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0
aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKKyAgICAvLyB0YWJs
ZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgorICAgIGZs
b2F0IGxhcmdlckZvbnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7CisK
KyAgICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAi
c21hbGxlciIuCisgICAgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVp
cmtzTW9kZSkgY29uc3Q7CisKK3B1YmxpYzoKKyAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUgZG9jdW1lbnQg
d2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgorCisgICAgdm9pZCBhcHBseVByb3BlcnR5
VG9TdHlsZShpbnQgaWQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAKKyAgICBzdGF0
aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9h
dCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBF
U21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
aXplKTsKKworICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3Bl
Y2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOworCitwdWJsaWM6CisgICAgYm9vbCB1
c2VTVkdab29tUnVsZXMoKTsKKworICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlKikgY29uc3Q7CisKKyAgICBib29sIGhhc1NlbGVjdG9yRm9yQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgQ1NTRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQor
CisgICAgdm9pZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVk
aWFRdWVyeUV4cCosIGJvb2wgcmVzdWx0KTsKKworICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0
Q2hhbmdlKCkgY29uc3Q7CisKKyAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1f
Y2hlY2tlci5hbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHZpc2l0ZWRTdGF0
ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpIHsgbV9jaGVja2VyLnZpc2l0ZWRTdGF0ZUNo
YW5nZWQodmlzaXRlZEhhc2gpOyB9CisKKyAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUGFzc1Jl
ZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPik7CisgICAgdm9pZCBhZGRQYWdlU3R5bGUoUGFz
c1JlZlB0cjxDU1NQYWdlUnVsZT4pOworCisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXM7IH0KKyAgICBib29sIHVzZXNGaXJz
dExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVz
OyB9CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KKworICAgIHN0YXRpYyBi
b29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKKworICAgIHN0cnVjdCBGZWF0dXJlcyB7CisgICAgICAgIEZlYXR1
cmVzKCk7CisgICAgICAgIH5GZWF0dXJlcygpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBpZHNJblJ1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBh
dHRyc0luUnVsZXM7CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7CisgICAg
ICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRl
clJ1bGVzOworICAgICAgICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJpdmF0ZToK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBp
dCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdl
ZC4gLWR3aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5n
ZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVj
a0ZvclRleHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQq
KTsKKworICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9t
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKKworICAgIHZvaWQgbWF0Y2hSdWxlcyhS
dWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0
IFJ1bGVEYXRhJikgY29uc3Q7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgCisg
ICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CisKKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBmaXJzdFBhc3M+CisgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFu
dCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCk7CisKKyAgICB2b2lkIG1hdGNoUGFnZVJ1
bGVzKFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0
cmluZyYgcGFnZU5hbWUpOworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0
IFN0cmluZyYgcGFnZU5hbWUpOworICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBj
b25zdDsKKyAgICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJu
ICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KKyAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0OworICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
KyAgICAKKyAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKyAgICBPd25QdHI8UnVs
ZVNldD4gbV91c2VyU3R5bGU7CisKKyAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOworCisgICAgc3Ry
dWN0IFBhcmVudFN0YWNrRnJhbWUgeworICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKCkgeyB9Cisg
ICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1l
bnQpIHsgfQorICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGFyZW50U3RhY2tG
cmFtZT4gbV9wYXJlbnRTdGFjazsKKyAgICAKKyAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5n
cyBpbiB0aGUgZmlsdGVyLCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUg
b2YgfjAuMiUuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVyS2V5Qml0cyA9
IDEyOworICAgIE93blB0cjxCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNl
c3RvcklkZW50aWZpZXJGaWx0ZXI7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAg
IEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRh
OworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gPiBLZXlmcmFt
ZXNSdWxlTWFwOworICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOworCitw
dWJsaWM6CisgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsg
cmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KKworICAgIFN0eWxlSW1hZ2UqIHN0eWxl
SW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZUltYWdlKiBjYWNoZWRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKwor
ICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSk7
CisgICAgdm9pZCB1cGRhdGVGb250KCk7CisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91
bmQoKTsKKworICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRlKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsT3JpZ2luKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsSW1h
Z2UoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZp
bGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgbWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKKworICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRp
b24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbios
IENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRp
b24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBD
U1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiosIENT
U1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qLCBDU1NW
YWx1ZSopOworICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwg
Q1NTVmFsdWUqKTsKKworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VT
bGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJ
bWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisKKyAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisKKyAgICB2b2lkIG1h
cEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxTaXpl
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxs
WFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
CisKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIG1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAg
dm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lk
IG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQg
bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1h
cEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisKKyAgICB2
b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNl
SW1hZ2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqLCBOaW5l
UGllY2VJbWFnZSYpOworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VXaWR0aChDU1NWYWx1ZSos
IE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NW
YWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoaW50
IGlkLCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQYWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVl
Kik7CisgICAgYm9vbCBwYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJp
bWl0aXZlVmFsdWUqLCBMZW5ndGgmIHdpZHRoLCBMZW5ndGgmIGhlaWdodCk7CisgICAgTGVuZ3Ro
IG1tTGVuZ3RoKGRvdWJsZSBtbSkgY29uc3Q7CisgICAgTGVuZ3RoIGluY2hMZW5ndGgoZG91Ymxl
IGluY2gpIGNvbnN0OwogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIHZvaWQgYXBwbHlTVkdQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KGludCBp
ZCwgQ1NTVmFsdWUqKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMo
KTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CiAKLSAgICAgICAgLy8gV2UgY29sbGVj
dCB0aGUgc2V0IG9mIGRlY2xzIHRoYXQgbWF0Y2ggaW4gfG1fbWF0Y2hlZERlY2xzfC4gIFdlIHRo
ZW4gd2FsayB0aGUKLSAgICAgICAgLy8gc2V0IG9mIG1hdGNoZWQgZGVjbHMgZm91ciB0aW1lcywg
b25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVycyBkZXBlbmQgb24gKGxpa2UgZm9u
dC1zaXplKSwKLSAgICAgICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3IgYWxsIHRoZSBy
ZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3NlcwotICAg
ICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMuCi0gICAgICAgIFZlY3RvcjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiosIDY0PiBtX21hdGNoZWREZWNsczsKLQotICAgICAgICAvLyBB
IGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVt
ZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCi0gICAgICAgIC8vIG1lcmdlIHNv
cnRpbmcuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxl
czsKLQotICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7Ci0gICAgICAgIAot
ICAgICAgICBIYXNoU2V0PGludD4gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOyAvLyBIYXNoIG9m
IENTU1Byb3BlcnR5SURzCi0KLSAgICAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1f
bWVkaXVtOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsK
LQotICAgICAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0KLSAgICAgICAgU2VsZWN0b3JD
aGVja2VyIG1fY2hlY2tlcjsKLQotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgICAgICBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAg
ICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICAgICAgRUluc2lkZUxpbmsg
bV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7
Ci0gICAgICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICAgICAgYm9vbCBtX2Zv
bnREaXJ0eTsKLSAgICAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICAg
ICAgCi0gICAgICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAg
ICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZURlY2xzOwotICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdCo+IG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKKyAgICAvLyBXZSBjb2xsZWN0IHRoZSBz
ZXQgb2YgZGVjbHMgdGhhdCBtYXRjaCBpbiB8bV9tYXRjaGVkRGVjbHN8LiBXZSB0aGVuIHdhbGsg
dGhlCisgICAgLy8gc2V0IG9mIG1hdGNoZWQgZGVjbHMgZm91ciB0aW1lcywgb25jZSBmb3IgdGhv
c2UgcHJvcGVydGllcyB0aGF0IG90aGVycyBkZXBlbmQgb24gKGxpa2UgZm9udC1zaXplKSwKKyAg
ICAvLyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIGZvciBhbGwgdGhlIHJlbWFpbmluZyBwcm9wZXJ0
aWVzLiBXZSB0aGVuIGRvIHRoZSBzYW1lIHR3byBwYXNzZXMKKyAgICAvLyBmb3IgYW55ICFpbXBv
cnRhbnQgcnVsZXMuCisgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgNjQ+
IG1fbWF0Y2hlZERlY2xzOworCisgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQg
b2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1
c2VkIGZvcgorICAgIC8vIG1lcmdlIHNvcnRpbmcuCisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRh
KiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworCisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX3J1bGVM
aXN0OworICAgIAorICAgIEhhc2hTZXQ8aW50PiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IC8v
IEhhc2ggb2YgQ1NTUHJvcGVydHlJRHMKKworICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9y
PiBtX21lZGl1bTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsK
KworICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKKworICAgIFNlbGVjdG9yQ2hlY2tlciBt
X2NoZWNrZXI7CisKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CisgICAgUmVuZGVy
U3R5bGUqIG1fcGFyZW50U3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHls
ZTsKKyAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRF
bGVtZW50OworICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKKyAgICBDb250YWlu
ZXJOb2RlKiBtX3BhcmVudE5vZGU7CisgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwor
ICAgIGJvb2wgbV9mb250RGlydHk7CisgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
czsKKyAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7CisgICAgCisgICAgUmVmUHRyPENTU0ZvbnRT
ZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CisgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKj4gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsKKyAgICBWZWN0b3I8TWVk
aWFRdWVyeVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAot
ICAgICAgICBjb25zdCBDU1NTdHlsZUFwcGx5UHJvcGVydHkmIG1fYXBwbHlQcm9wZXJ0eTsKLSAg
ICB9OworICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5Owor
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAg
ICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNr
c2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEs
IENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisKKyNpbmNs
dWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgorI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1M
UHJvZ3Jlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0
LmgiCisKKyNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCIKKyNpbmNsdWRlICJWaXNpdGVkTGlua1N0cmF0ZWd5LmgiCisjZW5kaWYKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJYTGlua05h
bWVzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKKworU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIoRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBtX2RvY3VtZW50KGRvY3Vt
ZW50KQorICAgICwgbV9zdHJpY3RQYXJzaW5nKHN0cmljdFBhcnNpbmcpCisgICAgLCBtX2RvY3Vt
ZW50SXNIVE1MKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQorICAgICwgbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHkoZmFsc2UpCisgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICwg
bV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMoZmFsc2UpCisgICAgLCBtX2lzTWF0Y2hpbmdWaXNp
dGVkUHNldWRvQ2xhc3MoZmFsc2UpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWlj
U3RyaW5nKiBsaW5rQXR0cmlidXRlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0xp
bmsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVu
dE5vZGUoKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4g
JmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgIAorI2lmIEVOQUJMRShT
VkcpCisgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gJmVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworI2VuZGlmCisg
ICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0VJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0
ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoZWxlbWVudC0+aXNMaW5rKCkpOworICAgIAorICAgIGNvbnN0IEF0b21pY1N0cmluZyog
YXR0ciA9IGxpbmtBdHRyaWJ1dGUoZWxlbWVudCk7CisgICAgaWYgKCFhdHRyIHx8IGF0dHItPmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKKyAgICAKKyNpZiBQTEFURk9S
TShRVCkKKyAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOworICAgIHZpc2l0ZWRVUkwobV9kb2N1
bWVudC0+YmFzZVVSTCgpLCAqYXR0ciwgdXJsKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CisgICAgCisgICAgLy8gSWYgdGhlIFF0
NC40IGludGVyZmFjZSBmb3IgdGhlIGhpc3RvcnkgaXMgdXNlZCwgd2Ugd2lsbCBoYXZlIHRvIGZh
bGxiYWNrCisgICAgLy8gdG8gdGhlIG9sZCBnbG9iYWwgaGlzdG9yeS4KKyAgICBRV2ViSGlzdG9y
eUludGVyZmFjZSogaWZhY2UgPSBRV2ViSGlzdG9yeUludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFj
ZSgpOworICAgIGlmIChpZmFjZSkKKyAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5Q29udGFp
bnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVybC5zaXpl
KCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAg
ICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkp
OworICAgIGlmICghaGFzaCkKKyAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Cisj
ZWxzZQorICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFz
ZVVSTCgpLCAqYXR0cik7CisgICAgaWYgKCFoYXNoKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52
aXNpdGVkTGluazsKKyNlbmRpZgorICAgIAorICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRl
ZExpbms7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAgICBtX2xp
bmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5hZGQoaGFzaCk7CisgICAgCisjaWYgVVNFKFBMQVRG
T1JNX1NUUkFURUdJRVMpCisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT52aXNpdGVk
TGlua1N0cmF0ZWd5KCktPmlzTGlua1Zpc2l0ZWQocGFnZSwgaGFzaCkgPyBJbnNpZGVWaXNpdGVk
TGluayA6IEluc2lkZVVudmlzaXRlZExpbms7CisjZWxzZQorICAgIHJldHVybiBwYWdlLT5ncm91
cCgpLmlzTGlua1Zpc2l0ZWQoaGFzaCkgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlz
aXRlZExpbms7CisjZW5kaWYKK30KKworYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcikgY29uc3QKK3sKKyAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VV
RE87CisgICAgaWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSkgeworICAgICAgICAvLyBmYXN0Q2hlY2tTZWxlY3RvciBhc3N1bWVzIGNsYXNzIGFu
ZCBpZCBtYXRjaCBmb3IgdGhlIHRvcCBzZWxlY3Rvci4KKyAgICAgICAgaWYgKHNlbC0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgICAgIGlmICghKGVsZW1lbnQtPmhh
c0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05h
bWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQp
IHsKKyAgICAgICAgICAgIGlmICghKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JT
dHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFzdENoZWNrU2VsZWN0b3Ioc2Vs
LCBlbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50
LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsKK30KKwor
bmFtZXNwYWNlIHsKKyAgICAKK2lubGluZSBib29sIHNlbGVjdG9yVGFnTWF0Y2hlcyhjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYg
KCFzZWxlY3Rvci0+aGFzVGFnKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2FsTmFtZSgpOworICAg
IGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20gJiYgbG9jYWxOYW1lICE9IGVsZW1lbnQtPmxvY2Fs
TmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7CisgICAgcmV0dXJu
IG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxlbWVudC0+bmFt
ZXNwYWNlVVJJKCk7Cit9CisKK3RlbXBsYXRlIDxib29sIGNoZWNrVmFsdWUoY29uc3QgRWxlbWVu
dCosIEF0b21pY1N0cmluZ0ltcGwqKT4KK2lubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVtZW50
LCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3QgRWxlbWVu
dComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKK3sKKyAgICBBdG9taWNTdHJp
bmdJbXBsKiB2YWx1ZSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKKyAgICBmb3IgKDsgZWxl
bWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAo
Y2hlY2tWYWx1ZShlbGVtZW50LCB2YWx1ZSkgJiYgc2VsZWN0b3JUYWdNYXRjaGVzKGVsZW1lbnQs
IHNlbGVjdG9yKSkgeworICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENT
U1NlbGVjdG9yOjpEZXNjZW5kYW50KQorICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxl
Y3RvciA9IDA7CisgICAgICAgICAgICBlbHNlIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVj
dG9yOjpDaGlsZCB8fCBzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2Vs
ZWN0b3IpOworICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9y
OworICAgICAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IGVs
ZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9u
KCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodG9wQ2hpbGRPclN1YnNlbGVjdG9yKSB7CisgICAgICAgICAgICAvLyBDaGls
ZCBvciBzdWJzZWxlY3RvciBjaGVjayBmYWlsZWQuCisgICAgICAgICAgICAvLyBJZiB0aGUgbWF0
Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZl
cnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFkIHRvIG1hdGNoIAorICAgICAgICAgICAgLy8gdGhl
IG9yaWdpbmFsIGVsZW1lbnQgd2Ugd2VyZSBjaGVja2luZy4KKyAgICAgICAgICAgIGlmICghdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIC8vIFRoZXJlIG1heSBiZSBvdGhlciBtYXRjaGVzIGRvd24gdGhl
IGFuY2VzdG9yIGNoYWluLgorICAgICAgICAgICAgLy8gUmV3aW5kIHRvIHRoZSB0b3Btb3N0IGNo
aWxkIG9yIHN1YnNlbGVjdG9yIGFuZCB0aGUgZWxlbWVudCBpdCBtYXRjaGVkLCBjb250aW51ZSBj
aGVja2luZyBhbmNlc3RvcnMuCisgICAgICAgICAgICBzZWxlY3RvciA9IHRvcENoaWxkT3JTdWJz
ZWxlY3RvcjsKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRj
aEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRvcENoaWxkT3JTdWJzZWxl
Y3RvciA9IDA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIGNoZWNrQ2xhc3NWYWx1ZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgCit7CisgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29udGFpbnModmFsdWUpOworfQorCitpbmxpbmUgYm9v
bCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCog
dmFsdWUpIAoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHZhbHVlOworfQorCitpbmxpbmUgYm9vbCBjaGVj
a1RhZ1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBsKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyAgICAKK30KKworYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1Nl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsKKyAg
ICAKKyAgICAvLyBUaGUgdG9wIHNlbGVjdG9yIHJlcXVpcmVzIHRhZyBjaGVjayBvbmx5IGFzIHJ1
bGUgaGFzaGVzIGhhdmUgYWxyZWFkeSBoYW5kbGVkIGlkIGFuZCBjbGFzcyBtYXRjaGVzLgorICAg
IGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGNvbnN0IENTU1NlbGVjdG9yKiB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3IgPSAwOworICAgIGNvbnN0IEVsZW1lbnQqIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNo
RWxlbWVudCA9IDA7CisgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9y
OjpDaGlsZCB8fCBzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3IpCisgICAgICAgIHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOworICAgIAorICAg
IGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisg
ICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgCisgICAgc2Vs
ZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOworICAgIAorICAgIC8vIFdlIGtub3cgdGhp
cyBjb21wb3VuZCBzZWxlY3RvciBoYXMgZGVzY2VuZGFudCwgY2hpbGQgYW5kIHN1YnNlbGVjdG9y
IGNvbWJpbmF0b3JzIG9ubHkgYW5kIGFsbCBjb21wb25lbnRzIGFyZSBzaW1wbGUuCisgICAgd2hp
bGUgKHNlbGVjdG9yKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVj
a1NpbmdsZVNlbGVjdG9yPGNoZWNrQ2xhc3NWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENo
aWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6SWQ6CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNl
bGVjdG9yPGNoZWNrSURWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxl
Y3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6Tm9uZToKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hl
Y2tUYWdWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0
b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiBzZWxlY3Rvci0+cmVsYXRpb24o
KSAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQgJiYgc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6Ok5vbmUgJiYgc2VsZWN0b3ItPm1f
bWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OklkICYmIHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVj
dG9yOjpDbGFzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIFJlY3Vyc2l2ZSBjaGVjayBvZiBzZWxlY3RvcnMgYW5kIGNvbWJpbmF0
b3JzCisvLyBJdCBjYW4gcmV0dXJuIDMgZGlmZmVyZW50IHZhbHVlczoKKy8vICogU2VsZWN0b3JN
YXRjaGVzICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCisvLyAq
IFNlbGVjdG9yRmFpbHNMb2NhbGx5ICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxl
bWVudCBlCisvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCitTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9y
KiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2Vs
ZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAoreworI2lmIEVOQUJMRShTVkcp
CisgICAgLy8gU3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIChj
b25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJlZQorICAgIC8vIGJlY2F1c2UgaXRzIGNvbnRlbnRz
IGFyZSBub3QgcGFydCBvZiB0aGUgZm9ybWFsIGRvY3VtZW50IHN0cnVjdHVyZS4KKyAgICBpZiAo
ZS0+aXNTVkdTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseTsKKyNlbmRpZgorICAgIAorICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaAor
ICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGlzU3ViU2Vs
ZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUp
KQorICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgCisgICAgLy8gVGhl
IHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKKyAgICBDU1NTZWxlY3Rvcjo6UmVs
YXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9uKCk7CisgICAgCisgICAgLy8gUHJlcGFyZSBu
ZXh0IHNlbAorICAgIHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOworICAgIGlmICghc2VsKQorICAg
ICAgICByZXR1cm4gU2VsZWN0b3JNYXRjaGVzOworICAgIAorICAgIGlmIChyZWxhdGlvbiAhPSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2Vs
ZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCisgICAgICAgIGlmIChtX3Bz
ZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykK
KyAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAKKyAgICAv
LyBDaGVjayBmb3IgbmVzdGVkIGxpbmtzLgorICAgIGlmIChtX2lzTWF0Y2hpbmdWaXNpdGVkUHNl
dWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7
CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5pbnNpZGVMaW5rKCkg
JiYgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZExpbmspCisgICAg
ICAgICAgICAgICAgbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7IC8vIFRo
aXMgbGluayBpcyBub3QgcmVsZXZhbnQgdG8gdGhlIHN0eWxlIGJlaW5nIHJlc29sdmVkLCBzbyBk
aXNhYmxlIG1hdGNoaW5nLgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVuY291
bnRlcmVkTGluayA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3dpdGNoIChy
ZWxhdGlvbikgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9k
ZSgpOworICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgZSA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0
Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRl
cmVkTGluayk7CisgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOiAKKyAgICAgICAgeworICAgICAgICAgICAg
Q29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmICghbiB8
fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RGlyZWN0QWRqYWNlbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pc0NvbGxl
Y3RpbmdSdWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFj
ZW50UnVsZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAg
ICAgaWYgKCFuKQorICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsK
KyAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBt
X2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVk
TGluayk7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50
OgorICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUo
KSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgaWYgKHBhcmVu
dFN0eWxlKQorICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAg
biA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgIGUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNl
dWRvQ2xhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVj
a1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7
CisgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9OworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKKyAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBp
bnZhbGlkIGlmIHNvbWV0aGluZyBmb2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKKyAgICAgICAgLy8g
V2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFs
bG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQorICAgICAgICAv
LyB0byBmb2xsb3cgdGhlIHBzZXVkbyBlbGVtZW50cy4KKyAgICAgICAgaWYgKChlbGVtZW50U3R5
bGUgfHwgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VV
RE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04KKyAgICAgICAgICAgICAmJiAhKChSZW5k
ZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8g
PT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQorICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2Nl
bmRhbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+
c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0g
ZSB8fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgICAgICBlID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KHNoYWRvd0hvc3ROb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1Nl
bGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OworfQorCitzdGF0aWMgdm9pZCBhZGRMb2NhbE5hbWVUb1NldChIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiogc2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKK3sKKyAgICBzZXQtPmFk
ZChxTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworfQorCitzdGF0aWMgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4qIGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKK3sK
KyAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gSFRNTCA0LjAxIHdpdGgg
dmFsdWVzIG1hcmtlZCBhcyAiW0NJXSIgb3IgY2FzZS1pbnNlbnNpdGl2ZQorICAgIC8vIE1vemls
bGEgdHJlYXRzIGFsbCBvdGhlciB2YWx1ZXMgYXMgY2FzZS1zZW5zaXRpdmUsIHRodXMgc28gZG8g
d2UuCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGF0dHJTZXQgPSBuZXcgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj47CisgICAgCisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgYWNjZXB0X2NoYXJzZXRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBh
Y2NlcHRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlnbkF0dHIpOwor
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaW5rQXR0cik7CisgICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgYXhpc0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGJnY29sb3JBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjaGFyc2V0
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hlY2tlZEF0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNsZWFyQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgY29kZXR5cGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCBjb2xvckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvbXBhY3RB
dHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBkZWNsYXJlQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGVmZXJBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBkaXJBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBk
aXNhYmxlZEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGVuY3R5cGVBdHRy
KTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBmYWNlQXR0cik7CisgICAgYWRkTG9j
YWxOYW1lVG9TZXQoYXR0clNldCwgZnJhbWVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBocmVmbGFuZ0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGh0
dHBfZXF1aXZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBsYW5nQXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ3VhZ2VBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBsaW5rQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgbWVkaWFBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtZXRo
b2RBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtdWx0aXBsZUF0dHIpOwor
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5vaHJlZkF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIG5vcmVzaXplQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgbm9zaGFkZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG5v
d3JhcEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJlYWRvbmx5QXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVsQXR0cik7CisgICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgcmV2QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgcnVsZXNBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzY29wZUF0dHIp
OworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjcm9sbGluZ0F0dHIpOworICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNlbGVjdGVkQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgc2hhcGVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCB0YXJnZXRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0ZXh0QXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdHlwZUF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIHZhbGlnbkF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIHZhbHVldHlwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZs
aW5rQXR0cik7CisgICAgCisgICAgcmV0dXJuIGF0dHJTZXQ7Cit9CisKK3N0YXRpYyBib29sIGh0
bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyKQoreworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogaHRtbENhc2VJ
bnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQgPSBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmli
dXRlc1NldCgpOworICAgIGJvb2wgaXNQb3NzaWJsZUhUTUxBdHRyID0gIWF0dHIuaGFzUHJlZml4
KCkgJiYgKGF0dHIubmFtZXNwYWNlVVJJKCkgPT0gbnVsbEF0b20pOworICAgIHJldHVybiBpc1Bv
c3NpYmxlSFRNTEF0dHIgJiYgaHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQtPmNvbnRh
aW5zKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKK30KKworc3RhdGljIGJvb2wgYXR0cmlidXRl
UXVhbGlmaWVkTmFtZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGUsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHNlbGVjdG9yQXR0cikKK3sKKyAgICBpZiAoc2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgp
ICE9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gc2VsZWN0b3JBdHRyLnByZWZpeCgpID09IHN0YXJBdG9tIHx8IHNlbGVjdG9y
QXR0ci5uYW1lc3BhY2VVUkkoKSA9PSBhdHRyaWJ1dGUtPm5hbWVzcGFjZVVSSSgpOworfQorCitz
dGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVt
LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JW
YWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyaWJ1dGVJdGVtLT52YWx1ZSgpOworICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobWF0Y2gpIHsKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpFeGFjdDoKKyAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWxlY3Rv
clZhbHVlICE9IHZhbHVlIDogIWVxdWFsSWdub3JpbmdDYXNlKHNlbGVjdG9yVmFsdWUsIHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6TGlzdDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWdub3JlIGVtcHR5
IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMgY29udGFpbmluZyBzcGFjZXMKKyAgICAgICAgICAgIGlm
IChzZWxlY3RvclZhbHVlLmNvbnRhaW5zKCcgJykgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3RvclZh
bHVlLCBzdGFydFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgICAgICBpZiAo
Zm91bmRQb3MgPT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kUG9zIHx8IHZhbHVlW2ZvdW5kUG9zIC0gMV0gPT0g
JyAnKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZFN0ciA9IGZvdW5kUG9zICsg
c2VsZWN0b3JWYWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFN0ciA9
PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJdID09ICcgJykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3VuZCBhIG1hdGNoLgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBObyBtYXRjaC4gS2VlcCBsb29r
aW5nLgorICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkNvbnRhaW46CisgICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsZWN0b3JWYWx1
ZSwgY2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkJl
Z2luOgorICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNl
bnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKKyAgICAg
ICAgaWYgKCF2YWx1ZS5lbmRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBz
ZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SHlwaGVuOgorICAgICAgICBpZiAodmFs
dWUubGVuZ3RoKCkgPCBzZWxlY3RvclZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2Fz
ZVNlbnNpdGl2ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEl0IHRo
ZXkgc3RhcnQgdGhlIHNhbWUsIGNoZWNrIGZvciBleGFjdCBtYXRjaCBvciBmb2xsb3dpbmcgJy0n
OgorICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKSAm
JiB2YWx1ZVtzZWxlY3RvclZhbHVlLmxlbmd0aCgpXSAhPSAnLScpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcywgQ1NT
U2VsZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0gPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1
dGVJdGVtKGkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVRdWFsaWZpZWROYW1l
TWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBzZWxlY3RvckF0dHIpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWVNYXRjaGVzKGF0dHJpYnV0
ZUl0ZW0sIG1hdGNoLCBzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wg
ZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAoreworICAgIEFTU0VSVChlKTsKKyAgICBpZiAoIWUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXNlbGVjdG9yVGFnTWF0Y2hl
cyhlLCBzZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHNlbC0+aGFz
QXR0cmlidXRlKCkpIHsKKyAgICAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
Q2xhc3MpCisgICAgICAgICAgICByZXR1cm4gZS0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZSktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisg
ICAgICAgICAgICByZXR1cm4gZS0+aGFzSUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
ID09IHNlbC0+dmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEhh
bmRsZSB0aGUgY2FzZSB3ZXJlIGVsZW1lbnRTdHlsZSBpcyAwLgorICAgICAgICBpZiAoZWxlbWVu
dFN0eWxlICYmICghZS0+aXNTdHlsZWRFbGVtZW50KCkgfHwgKCFzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4oZSktPmlzTWFwcGVkQXR0cmlidXRlKGF0dHIpICYmIGF0dHIgIT0gdHlwZUF0dHIg
JiYgYXR0ciAhPSByZWFkb25seUF0dHIpKSkKKyAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0
QWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycygpOyAvLyBTcGVjaWFsLWNhc2UgdGhlICJ0eXBl
IiBhbmQgInJlYWRvbmx5IiBhdHRyaWJ1dGVzIHNvIGlucHV0IGZvcm0gY29udHJvbHMgY2FuIHNo
YXJlIHN0eWxlLgorICAgICAgICAKKyAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0g
ZS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
IW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1
ZShhdHRyKTsKKyAgICAgICAgCisgICAgICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhhdHRy
aWJ1dGVzLCBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNlbC0+bV9tYXRjaCksIGF0
dHIsIHNlbC0+dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzKSB7CisgICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250LgorICAgICAgICBp
ZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCkgeworICAgICAg
ICAgICAgQVNTRVJUKHNlbC0+c2VsZWN0b3JMaXN0KCkpOworICAgICAgICAgICAgZm9yIChDU1NT
ZWxlY3Rvciogc3ViU2VsID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViU2VsOyBz
dWJTZWwgPSBzdWJTZWwtPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAgICAgICAgIC8vIDpub3Qg
Y2Fubm90IG5lc3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQorICAgICAgICAg
ICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3Ig
aXQuCisgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2
ZXIgb2NjdXJzCisgICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgpICE9
IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUs
IGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNj
cm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NP
Uk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpKSB7CisgICAgICAgICAgICAvLyBDU1Mg
c2Nyb2xsYmFycyBtYXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5k
IHRoZXkgaGF2ZSBzcGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAorICAgICAgICAgICAgLy8gKHNp
bmNlIHRoZXJlIGFyZSBubyBlbGVtZW50cyBpbnZvbHZlZCkuCisgICAgICAgICAgICByZXR1cm4g
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhzZWwsIGR5bmFtaWNQc2V1ZG8pOworICAgICAgICB9
IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OKSB7CisgICAgICAgICAgICBpZiAo
c2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQor
ICAgICAgICAgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+aXNBY3RpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm9ybWFs
IGVsZW1lbnQgcHNldWRvIGNsYXNzIGNoZWNraW5nLgorICAgICAgICBzd2l0Y2ggKHNlbC0+cHNl
dWRvVHlwZSgpKSB7CisgICAgICAgICAgICAvLyBQc2V1ZG8gY2xhc3NlczoKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90OgorICAgICAgICAgICAgYnJlYWs7IC8vIEFscmVhZHkg
aGFuZGxlZCB1cCBhYm92ZS4KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW1wdHk6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
ZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5n
UnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9j
dW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3Rh
dGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmly
c3RDaGlsZDoKKyAgICAgICAgICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNo
aWxkIHRoYXQgaXMgYW4gZWxlbWVudAorICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAm
JiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUt
PnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0ICYmIGNoaWxkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxl
LT5zZXRGaXJzdENoaWxkU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKKyAgICAgICAgICAgIC8v
IGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQorICAg
ICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVu
dE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAg
ICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAg
ICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFu
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
ICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
ZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDoK
KyAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlz
IGFuIGVsZW1lbnQKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+
cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdS
dWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBl
bGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0T2ZUeXBl
OgorICAgICAgICAgICAgLy8gbGFzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGxhc3QgZWxlbWVudCBv
ZiBpdHMgdHlwZQorICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5w
YXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVs
ZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRh
Z1FOYW1lKCk7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
biA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDoKKyAgICAgICAgICAgIGlm
IChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbCBs
YXN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
KiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYg
IW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgcGFy
ZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
biAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4t
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5
bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRF
bGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxk
U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRGaXJzdENoaWxk
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBjaGlsZFN0eWxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQg
JiYgbGFzdENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5cGU6CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBzZWxlY3RvciBpcyB2ZXJ5IHNsb3cuCisgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlm
ICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29sIGxhc3RDaGls
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBl
LT50YWdRTmFtZSgpOworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFn
TmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIGxhc3RDaGlsZDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9OdGhDaGlsZDoKKyAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQg
PSAxOworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9
IG4tPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHMgPyBzLT5jaGlsZEluZGV4KCkgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX2lz
Q29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
Y2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxl
KCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Q2hpbGRJbmRleChjb3VudCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzZWwt
Pm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTnRoT2ZUeXBlOgorICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7
CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1l
KCk7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAg
ICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0Vs
ZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAg
biA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkOgorICAgICAgICAgICAgaWYgKCFzZWwtPnBh
cnNlTnRoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoRWxlbWVu
dCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdE9mVHlwZToK
KyAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7CisgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAg
ICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
d2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAm
JiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0
Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9UYXJnZXQ6CisgICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6CisgICAgICAgICAgICBmb3IgKENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVkbywgdHJ1
ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkgPT0g
U2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BbnlMaW5rOgorICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQXV0b2ZpbGw6CisgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5r
OgorICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuICFtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgICAgIGlm
IChlICYmIGUtPmlzTGluaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2lzTWF0Y2hpbmdW
aXNpdGVkUHNldWRvQ2xhc3MgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOgorICAgICAgICAgICAgaWYg
KGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVk
QnlEcmFnUnVsZXModHJ1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgp
KQorICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVs
ZXModHJ1ZSk7CisgICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigp
LT5pc0RyYWdnaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAg
ICAgICBpZiAoZSAmJiAoKGUtPmZvY3VzZWQoKSAmJiBlLT5kb2N1bWVudCgpLT5mcmFtZSgpICYm
IGUtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUo
KSkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Gb2N1cykpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgor
ICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIgc2hvdWxk
IG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubworICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjpo
b3ZlciBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0
ZXMgbGlrZSB3c2ouY29tLgorICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1
YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBl
LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgorICAgICAg
ICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQgbmV2
ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCisgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2
ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAKKyAgICAgICAgICAgIGlmIChtX3N0cmljdFBh
cnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFt
ZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0
eWxlKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3Rp
dmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgp
KQorICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5QWN0
aXZlUnVsZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGUtPmFjdGl2ZSgpIHx8IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNl
dWRvQWN0aXZlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
RW5hYmxlZDoKKyAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFBhZ2VN
ZWRpYToKKyAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50KCkgJiYgZS0+ZG9jdW1l
bnQoKS0+aXNNZWRpYURvY3VtZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlICYmIGUt
PmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRGlzYWJsZWQ6CisgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAhZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFk
T25seToKKyAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZS0+aXNU
ZXh0Rm9ybUNvbnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZFdyaXRlOiAKKyAgICAgICAgICAgIGlmICghZSB8
fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZS0+aXNS
ZWFkT25seUZvcm1Db250cm9sKCk7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09w
dGlvbmFsOgorICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25hbEZvcm1Db250cm9s
KCk7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgorICAgICAgICAg
ICAgcmV0dXJuIGUgJiYgZS0+aXNSZXF1aXJlZEZvcm1Db250cm9sKCk7CisgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb1ZhbGlkOgorICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRh
aW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZS0+d2lsbFZhbGlk
YXRlKCkgJiYgZS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9JbnZhbGlkOgorICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRh
aW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gKGUtPndpbGxWYWxp
ZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGUtPmhhc1VuYWNj
ZXB0YWJsZVZhbHVlKCk7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAvLyBFdmVuIHRob3VnaCBXaW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0
byBjby1leGlzdCwgdGhlIENTUyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAorICAgICAgICAgICAg
ICAgIC8vIHlvdSBjYW4ndCBiZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdp
bGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKKyAgICAgICAg
ICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGlu
ZyB0aGUgcHNldWRvLgorICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxl
bWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVt
ZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICAgICAgICAgICAgICBI
VE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0Vs
ZW1lbnQqPihlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzICYmICFwcm9ncmVz
cy0+aXNEZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVs
ZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvUm9vdDoKKyAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhbmc6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gZS0+Y29t
cHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhcmd1bWVudCA9IHNlbC0+YXJndW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgo
KSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0n
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW46CisgICAgICAgICAgICAvLyBXaGlsZSBh
IERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCBhbmQgdGhlIGRvY3VtZW50J3Mg
Y3VycmVudCBmdWxsc2NyZWVuIAorICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBhbiBlbGVtZW50
IGluIHRoZSBkb2N1bWVudCwgdGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllcyB0
byAKKyAgICAgICAgICAgIC8vIHRoYXQgZWxlbWVudC4gQWxzbywgYW4gPGlmcmFtZT4sIDxvYmpl
Y3Q+IG9yIDxlbWJlZD4gZWxlbWVudCB3aG9zZSBjaGlsZCBicm93c2luZyAKKyAgICAgICAgICAg
IC8vIGNvbnRleHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSBoYXMgdGhl
ICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4KKyAgICAgICAgICAgIGlmIChlLT5p
c0ZyYW1lRWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+
KGUpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVl
bigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBl
ID09IGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlv
bjoKKyAgICAgICAgICAgIGlmIChlICE9IGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxs
U2NyZWVuRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBlLT5kb2N1bWVudCgpLT5pc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKTsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkFuY2VzdG9yOgorICAgICAgICAg
ICAgcmV0dXJuIGUtPmNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKTsKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkRvY3VtZW50OgorICAgICAgICAgICAgLy8gV2hp
bGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgdGhlICdmdWxsLXNjcmVl
bi1kb2N1bWVudCcgcHNldWRvY2xhc3MgYXBwbGllcyAKKyAgICAgICAgICAgIC8vIHRvIGFsbCBl
bGVtZW50cyBvZiB0aGF0IERvY3VtZW50LgorICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgp
LT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9JblJhbmdlOgorICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRp
dHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZS0+aXNJblJhbmdlKCk7CisgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb091dE9mUmFuZ2U6CisgICAgICAgICAgICBpZiAo
IWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1l
bnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVy
biBlLT5pc091dE9mUmFuZ2UoKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVW5r
bm93bjoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90UGFyc2VkOgorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
IChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAg
aWYgKCFlbGVtZW50U3R5bGUgJiYgIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHNlbC0+aXNVbmtub3duUHNl
dWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZS0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWwtPnZh
bHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0g
Q1NTU2VsZWN0b3I6OnBzZXVkb0lkKHNlbC0+cHNldWRvVHlwZSgpKTsKKyAgICAgICAgaWYgKHBz
ZXVkb0lkID09IEZJUlNUX0xFVFRFUikgeworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1
bWVudCA9IGUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnNldFVzZXNG
aXJzdExldHRlclJ1bGVzKHRydWUpOworICAgICAgICB9CisgICAgICAgIGlmIChwc2V1ZG9JZCAh
PSBOT1BTRVVETykKKyAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKKyAgICB9
CisgICAgLy8gIyMjIGFkZCB0aGUgcmVzdCBvZiB0aGUgY2hlY2tzLi4uCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uc3QKK3sKKyAgICBSZW5kZXJTY3JvbGxi
YXIqIHNjcm9sbGJhciA9IFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZl
KCk7CisgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gUmVuZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5
bGVSZXNvbHZlKCk7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFj
ayBmb3IgcmVzaXplcnMgYW5kIHNjcm9sbGJhciBjb3JuZXJzLiBFdmVudHVhbGx5IDp3aW5kb3ct
aW5hY3RpdmUgc2hvdWxkIGJlY29tZSBhIHJlYWwKKyAgICAvLyBwc2V1ZG8gY2xhc3MgYW5kIGp1
c3QgYXBwbHkgdG8gZXZlcnl0aGluZy4KKyAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQorICAgICAgICByZXR1cm4gIW1fZG9jdW1l
bnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CisgICAgCisgICAgaWYg
KCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQoc2Vs
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CisgICAgc3dpdGNoIChzZWwt
PnBzZXVkb1R5cGUoKSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6Cisg
ICAgICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9EaXNhYmxlZDoKKyAgICAgICAgcmV0dXJuICFzY3JvbGxiYXItPmVuYWJsZWQoKTsK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjoKKyAgICAgICAgeworICAgICAgICAg
ICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsK
KyAgICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaG92ZXJlZFBhcnQgIT0gTm9QYXJ0OworICAgICAgICAgICAgaWYgKHBhcnQgPT0g
VHJhY2tCR1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ID09IEJhY2tU
cmFja1BhcnQgfHwgaG92ZXJlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBob3ZlcmVkUGFy
dCA9PSBUaHVtYlBhcnQ7CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBob3ZlcmVkUGFydDsK
KyAgICAgICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKKyAgICAgICAg
eworICAgICAgICAgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+cHJl
c3NlZFBhcnQoKTsKKyAgICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgIT0gTm9QYXJ0OworICAgICAgICAgICAg
aWYgKHBhcnQgPT0gVHJhY2tCR1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXNzZWRQ
YXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8
fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQ7CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBw
cmVzc2VkUGFydDsKKyAgICAgICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvcml6
b250YWw6CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcjsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WZXJ0aWNhbDoKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWNyZW1lbnQ6CisgICAgICAgIHJldHVy
biBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFy
dCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQ7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
SW5jcmVtZW50OgorICAgICAgICByZXR1cm4gcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQ
YXJ0OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1N0YXJ0OgorICAgICAgICByZXR1cm4g
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQ7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRW5kOgorICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0
ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKKyAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Eb3VibGVCdXR0b246IAorICAgICAgICB7CisgICAg
ICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3Jv
bGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChwYXJ0
ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9u
c1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQgfHwgYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKKyAgICAgICAgICAgIGlmIChwYXJ0
ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwg
cGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25z
UGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVu
dCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSAKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TaW5nbGVCdXR0b246
CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9u
c1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwYXJ0ID09IEZvcndh
cmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0g
U2Nyb2xsYmFyQnV0dG9uc1NpbmdsZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vQnV0dG9uOgorICAgICAgICB7Cisg
ICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBz
Y3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChw
YXJ0ID09IEJhY2tUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFj
ZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3Jv
bGxiYXJCdXR0b25zRG91YmxlRW5kOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZFRy
YWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3Jv
bGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNE
b3VibGVTdGFydDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Nvcm5lclByZXNlbnQ6CisgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JD
aGVja2VyOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9saW5rc0NoZWNr
ZWRGb3JWaXNpdGVkU3RhdGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChO
b2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkpCisgICAgICAgICAgICBub2RlLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6
dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkKK3sKKyAgICBpZiAoIW1f
bGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKHZpc2l0ZWRIYXNoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
KiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKKyAgICAgICAgaWYgKGF0dHIgJiYgdmlzaXRl
ZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09IHZpc2l0ZWRIYXNoKQor
ICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChr
ZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNo
YW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENv
cHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgU2VsZWN0b3JDaGVja2VyX2gKKyNkZWZpbmUgU2VsZWN0
b3JDaGVja2VyX2gKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJMaW5rSGFzaC5o
IgorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ1NTU2VsZWN0b3I7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOwor
CitjbGFzcyBTZWxlY3RvckNoZWNrZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlbGVj
dG9yQ2hlY2tlcik7CitwdWJsaWM6CisgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9v
bCBzdHJpY3RQYXJzaW5nKTsKKworICAgIGVudW0gU2VsZWN0b3JNYXRjaCB7IFNlbGVjdG9yTWF0
Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CisK
KyAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zh
c3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKKyAgICBTZWxlY3Rvck1hdGNoIGNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1
ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxl
KiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAwKSBjb25zdDsKKyAgICBz
dGF0aWMgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwor
ICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29u
c3QgRWxlbWVudCopOworCisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lk
IHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpOworICAgIAorICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBib29s
IHN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KKyAgICAK
KyAgICBib29sIGlzQ29sbGVjdGluZ1J1bGVzT25seSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xs
ZWN0aW5nUnVsZXNPbmx5OyB9CisgICAgdm9pZCBzZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGJvb2wg
YikgeyBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSA9IGI7IH0KKyAgICAKKyAgICBib29sIGlzTWF0
Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0Y2hpbmdWaXNp
dGVkUHNldWRvQ2xhc3M7IH0KKyAgICB2b2lkIHNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNz
KGJvb2wgYikgeyBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgPSBiOyB9CisgICAgCisg
ICAgUHNldWRvSWQgcHNldWRvU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0eWxlOyB9
CisgICAgdm9pZCBzZXRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCkgeyBtX3BzZXVkb1N0
eWxlID0gcHNldWRvSWQ7IH0KKworICAgIGJvb2wgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHM7IH0KKyAgICB2b2lkIGNs
ZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkgeyBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50
cyA9IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2Vs
ZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBl
bGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OworICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9D
bGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKKworICAg
IEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqKSBjb25zdDsK
KworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOwor
ICAgIGJvb2wgbV9kb2N1bWVudElzSFRNTDsKKyAgICBib29sIG1faXNDb2xsZWN0aW5nUnVsZXNP
bmx5OworICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7CisgICAgbXV0YWJsZSBib29sIG1faGFz
VW5rbm93blBzZXVkb0VsZW1lbnRzOworICAgIG11dGFibGUgYm9vbCBtX2lzTWF0Y2hpbmdWaXNp
dGVkUHNldWRvQ2xhc3M7CisgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtIYXNoLCBMaW5rSGFzaEhh
c2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOworfTsKKworaW5saW5lIEVJbnNpZGVM
aW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAg
ICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CisgICAgcmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNs
b3dDYXNlKGVsZW1lbnQpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MjMsNyArMTgyMyw3IEBAIGJvb2wgRWxlbWVudDo6d2Via2l0
TWF0Y2hlc1NlbGVjdG9yKGNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1l
bnQoKSwgc3RyaWN0UGFyc2luZyk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tl
cihkb2N1bWVudCgpLCBzdHJpY3RQYXJzaW5nKTsKICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7CiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIu
Y2hlY2tTZWxlY3RvcihzZWxlY3RvciwgdGhpcykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9uIDk0NjQ4KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIFNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkoTm9kZSogcm9vdE4K
ICAgICAsIG1fc2VsZWN0b3JDaGVja2VyKHJvb3ROb2RlLT5kb2N1bWVudCgpLCAhcm9vdE5vZGUt
PmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQogewogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCi0gICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChT
ZWxlY3RvckRhdGEoc2VsZWN0b3IsIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6
aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAgICAgIG1fc2VsZWN0b3Jz
LmFwcGVuZChTZWxlY3RvckRhdGEoc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CiB9CiAgICAgCiBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBTZWxlY3RvclF1ZXJ5OjpxdWVyeUFsbCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmgJKHJldmlzaW9uIDk0NjQ4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTZWxl
Y3RvclF1ZXJ5X2gKICNkZWZpbmUgU2VsZWN0b3JRdWVyeV9oCiAKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZh
dGU6CiAgICAgfTsKICAgICBOb2RlKiBtX3Jvb3ROb2RlOwogICAgIFZlY3RvcjxTZWxlY3RvckRh
dGE+IG1fc2VsZWN0b3JzOwotICAgIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBt
X3NlbGVjdG9yQ2hlY2tlcjsKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7
CiB9OwogCiB9Cg==
</data>
<flag name="commit-queue"
          id="103014"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106557</attachid>
            <date>2011-09-07 01:49:05 -0700</date>
            <delta_ts>2011-09-07 02:10:23 -0700</delta_ts>
            <desc>another one</desc>
            <filename>split-selectorchecker-7.patch</filename>
            <type>text/plain</type>
            <size>175062</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NjQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTEtMDktMDYgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU2VsZWN0b3JDaGVja2Vy
IG91dCBmcm9tIENTU1N0eWxlU2VsZWN0b3Igc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICAtIE1vdmUgU2VsZWN0b3JDaGVja2VyIHRvIFNlbGVjdG9yQ2hl
Y2tlci5oL2NwcAorICAgICAgICAtIE1ha2UgcHJpdmF0ZSBmdW5jdGlvbnMgcHJpdmF0ZQorICAg
ICAgICAtIE1ha2UgbWVtYmVycyBwcml2YXRlLCBhZGQgYWNjZXNzb3JzCisgICAgICAgIC0gTW92
ZSBtX3NhbWVPcmlnaW5Pbmx5IHRvIENTU1N0eWxlU2VsZWN0b3IgYXMgaXQgaXMgbm90IHVzZWQg
YnkgU2VsZWN0b3JDaGVja2VyCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNv
cnRNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5p
dEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFVBUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVG
b3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0
eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHls
ZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVu
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5
bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0Rm9udFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpwYXJlbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBhcmVudEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRG
b250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0
Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzZXRFZmZlY3RpdmVa
b29tKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFRleHRTaXplQWRq
dXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZvbnRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc1NpYmxpbmdSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1c2VzRmlyc3RMaW5lUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc0JlZm9yZUFmdGVyUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6dXNlc0xpbmtSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppc1JpZ2h0UGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJlbnRTdGFja0Zy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlTm90WWV0QXZh
aWxhYmxlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpsaW5rQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjphZGRM
b2NhbE5hbWVUb1NldCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0
aXZlQXR0cmlidXRlc1NldCk6CisgICAgICAgIChXZWJDb3JlOjpodG1sQXR0cmlidXRlSGFzQ2Fz
ZUluc2Vuc2l0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlUXVhbGlmaWVk
TmFtZU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlVmFsdWVNYXRjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmFueUF0dHJpYnV0ZU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNr
ZXI6OnN0cmljdFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpp
c0NvbGxlY3RpbmdSdWxlc09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2Vy
OjpzZXRDb2xsZWN0aW5nUnVsZXNPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6aXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6OnNldE1hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpzZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6Omhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3ZWJr
aXRNYXRjaGVzU2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVlcnk6OlNlbGVjdG9yUXVlcnkpOgorICAgICAgICAq
IGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisKIDIwMTEtMDktMDcgIERtaXRyeSBMb21vdiAgPGRzbG9t
b3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc0MTMgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTQ2NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcw
LDYgKzQ3MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAKICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCiAgICAgY3NzL1JHQkNv
bG9yLmNwcAorICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NoYWRvd1ZhbHVl
LmNwcAogICAgIGNzcy9TdHlsZUJhc2UuY3BwCiAgICAgY3NzL1N0eWxlTGlzdC5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ2LDYgKzEw
NDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9SZWN0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nz
cy9SR0JDb2xvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvU2hhZG93VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2hhZG93VmFsdWUu
aCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAgXApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTI0MTYsNiArMjQxNiw4IEBACiAgICAgICAgICAgICAnY3NzL1NWR0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9TVkdDU1NQ
YXJzZXIuY3BwJywKICAgICAgICAgICAgICdjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAnLAor
ICAgICAgICAgICAgJ2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwJywKKyAgICAgICAgICAgICdjc3Mv
U2VsZWN0b3JDaGVja2VyLmgnLAogICAgICAgICAgICAgJ2Nzcy9TaGFkb3dWYWx1ZS5jcHAnLAog
ICAgICAgICAgICAgJ2Nzcy9TaGFkb3dWYWx1ZS5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVC
YXNlLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNDQzLDYgKzQ0Myw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBcCiAgICAgY3Nz
L01lZGlhUXVlcnlNYXRjaGVyLmNwcCBcCiAgICAgY3NzL1JHQkNvbG9yLmNwcCBcCisgICAgY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAgXAogICAgIGNzcy9TaGFkb3dWYWx1ZS5jcHAgXAogICAgIGNz
cy9TdHlsZUJhc2UuY3BwIFwKICAgICBjc3MvU3R5bGVMaXN0LmNwcCBcCkBAIC0xNDQ5LDYgKzE0
NTAsNyBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIFwK
ICAgICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuaCBcCiAgICAgY3NzL1JHQkNvbG9yLmggXAorICAg
IGNzcy9TZWxlY3RvckNoZWNrZXIuaCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmggXAogICAgIGNz
cy9TdHlsZUJhc2UuaCBcCiAgICAgY3NzL1N0eWxlTGlzdC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5NDY0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzIxOCw2ICszMzIxOCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU2VsZWN0b3JDaGVja2VyLmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNlbGVjdG9yQ2hl
Y2tlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxjc3NcU2hhZG93VmFsdWUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk0NjQ4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NjU2LDYgKzU2NTYsOCBAQAogCQlFNDQ2MTQzQzBDRDY4
OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpT
SFRNTFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8q
IFJlbmRlclZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07
CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYy
RUNFIC8qIFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0NEI0QkIzMTQxNjUwRDcwMDJCMUQ4QiAv
KiBTZWxlY3RvckNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ0QjRCQjExNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5j
cHAgKi87IH07CisJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIy
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLzsgfTsKIAkJRTQ1MzIyQUIx
NDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzIyQTkxNDBDRTI2NzAwNUEwRjkyIC8qIFNl
bGVjdG9yUXVlcnkuY3BwICovOyB9OwogCQlFNDUzMjJBQzE0MENFMjY3MDA1QTBGOTIgLyogU2Vs
ZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ1MzIyQUExNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCAqLzsgfTsKIAkJ
RTQ2MkE0QTExMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIw
IC8qIEludFBvaW50SGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMjQxNCw2ICsxMjQxNiw4IEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZB
REE3NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENE
NjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ0QjRCQjExNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvckNoZWNr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDRCNEJCMjE0MTY1MEQ3MDAy
QjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlbGVjdG9yQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUz
MjJBOTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvclF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ1MzIyQUExNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JRdWVyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50
UG9pbnRIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFBvaW50SGFz
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NTIsNiArMTk1NTYsOCBAQAog
CQkJCUJDNzREQTM2MTAxM0YzRjcwMDc5ODdBRCAvKiBSR0JDb2xvci5jcHAgKi8sCiAJCQkJQkM3
NERBMzUxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmggKi8sCiAJCQkJODU4QzM4RUYwQUE4
RkREMTAwQjE4N0E0IC8qIFJHQkNvbG9yLmlkbCAqLywKKwkJCQlFNDRCNEJCMTE0MTY1MEQ3MDAy
QjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCAqLywKKwkJCQlFNDRCNEJCMjE0MTY1MEQ3MDAy
QjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggKi8sCiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZC
OEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUg
LyogU2hhZG93VmFsdWUuaCAqLywKIAkJCQlBODBFNzM0QzBBMTk5Qzc3MDA3RkI4QzUgLyogU3R5
bGVCYXNlLmNwcCAqLywKQEAgLTIzNDY0LDYgKzIzNDcwLDcgQEAKIAkJCQk5QjBGQjE5MjE0MERC
NTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMkNC
RjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDRCNEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2Vs
ZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzhBRDY3NTE0MTMwQThEMDBDN0NB
RTMgLyogSFRNTFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzUyRDM4RTE0MTMx
MDRCMDAzMzA1QkQgLyogSlNIVE1MU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
OTI3RkQyMTQxNkExNUIwMDNBODNDOCAvKiBucGFwaS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI4
MCw2ICsyNjI4Nyw3IEBACiAJCQkJOUIwRkIxOTExNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxp
ZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAv
KiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjc0QjMxMTQw
RUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NzhBRDY3NDE0MTMwQThEMDBDN0NBRTMgLyogSFRNTFNwYW5F
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTJEMzhEMTQxMzEwNEIwMDMzMDVCRCAv
KiBKU0hUTUxTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5NDY0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkZvbnRGYW1pbHlWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRGZWF0dXJl
VmFsdWUuaCIKICNpbmNsdWRlICJGb250VmFsdWUuaCIKQEAgLTYzLDEyICs2MiwxMCBAQAogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlm
cmFtZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2Ny
aXB0TWFwcGluZy5oIgpAQCAtMTEwLDE3ICsxMDcsMTEgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgVVNFKFBMQVRGT1JNX1NU
UkFURUdJRVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiVmlz
aXRlZExpbmtTdHJhdGVneS5oIgotI2VuZGlmCi0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCiAjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjZW5k
aWYKIApAQCAtMzQwLDExICszMzEsMTIgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxl
Y3RvcihEb2N1bQogICAgICwgbV9lbGVtZW50KDApCiAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkK
ICAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICwgbV9mb250RGly
dHkoZmFsc2UpCisgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCisgICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQogICAgICwgbV9mb250
U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogICAgICwgbV9hcHBs
eVByb3BlcnR5KENTU1N0eWxlQXBwbHlQcm9wZXJ0eTo6c2hhcmVkQ1NTU3R5bGVBcHBseVByb3Bl
cnR5KCkpCiB7Ci0gICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXM7Ci0gICAgCiAgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKIAogICAgIGlmICghZGVmYXVsdFN0eWxlKSB7CkBAIC02NDEsNyArNjMzLDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZQogICAgIHNvcnRNYXRj
aGVkUnVsZXMoKTsKICAgICAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVk
IHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2NoZWNrZXIubV9j
b2xsZWN0UnVsZXNPbmx5KSB7CisgICAgaWYgKCFtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNP
bmx5KCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVz
LnNpemUoKTsgaSsrKQogICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hl
ZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwogICAgIH0gZWxzZSB7CkBAIC03MTIs
MTkgKzcwNCwxOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0CiAg
ICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxlY3RvcihydWxlRGF0
YSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVs
ZURhdGEpKSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQt
PnRyZWVTY29wZSgpLCBtX2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpKQorICAg
ICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwg
bV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRv
IGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAg
ICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgKCFkZWNsLT5sZW5ndGgoKSAmJiAhaW5jbHVkZUVtcHR5UnVs
ZXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fY2hlY2tl
ci5tX3NhbWVPcmlnaW5Pbmx5ICYmICFtX2NoZWNrZXIubV9kb2N1bWVudC0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuUmVxdWVzdChydWxlLT5iYXNlVVJMKCkpKQorICAgICAgICAgICAgaWYgKG1fc2Ft
ZU9yaWdpbk9ubHkgJiYgIW1fY2hlY2tlci5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5SZXF1ZXN0KHJ1bGUtPmJhc2VVUkwoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7IAog
ICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1
ZG8gYml0IGlmIAogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVk
by1lbGVtZW50LgotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAm
JiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAgICAg
IGlmIChtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5KQorICAgICAgICAgICAgaWYgKG1fZHlu
YW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSA9PSBOT1BT
RVVETykgeworICAgICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNP
bmx5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlm
IChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKICAgICAgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKQEAg
LTc1MiwxMyArNzQ0LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVz
KAogewogICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxl
cy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KLQotaW5saW5lIEVJbnNpZGVMaW5rIENTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkK
LSAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7Ci0gICAgcmV0dXJuIGRldGVybWluZUxpbmtT
dGF0ZVNsb3dDYXNlKGVsZW1lbnQpOwotfQogICAgIAogaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIHsKQEAgLTc3NSw3ICs3NjAsNyBAQCBpbmxp
bmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVuCiAKIGlubGluZSB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKIHsKLSAgICBtX2NoZWNrZXIubV9wc2V1
ZG9TdHlsZSA9IHBzZXVkb0lEOworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9J
RCk7CiAKICAgICBtX3BhcmVudE5vZGUgPSBlID8gZS0+cGFyZW50Tm9kZUZvclJlbmRlcmluZ0Fu
ZFN0eWxlKCkgOiAwOwogCkBAIC03ODUsNyArNzcwLDcgQEAgaW5saW5lIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6aW5pdEZvclN0eQogICAgICAgICBtX3BhcmVudFN0eWxlID0gbV9wYXJlbnROb2Rl
ID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKIAogICAgIE5vZGUqIGRvY0VsZW1l
bnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRl
clN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpOwor
ICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5yZW5kZXJT
dHlsZSgpOwogICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NF
bGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwogCiAgICAgbV9z
dHlsZSA9IDA7CkBAIC03OTksOTkgKzc4NCw2IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmluaXRGb3JTdHkKICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5s
aW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2RlKQotewotICAg
IGlmICghbm9kZS0+aXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQotICAg
ICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwotCi0jaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJl
dHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1DU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFy
c2luZykKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3N0cmljdFBhcnNpbmco
c3RyaWN0UGFyc2luZykKLSAgICAsIG1fY29sbGVjdFJ1bGVzT25seShmYWxzZSkKLSAgICAsIG1f
c2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQotICAg
ICwgbV9kb2N1bWVudElzSFRNTChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAsIG1f
aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKGZhbHNlKQotICAgICwgbV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzcyhmYWxzZSkKLXsKLX0KLQotRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50
KSBjb25zdAotewotICAgIEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7Ci0gICAgCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsKLSAgICBpZiAo
IWF0dHIgfHwgYXR0ci0+aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOwot
Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgVmVjdG9yPFVDaGFyLCA1MTI+IHVybDsKLSAgICB2aXNp
dGVkVVJMKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIsIHVybCk7Ci0gICAgaWYgKHVybC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAgLy8g
SWYgdGhlIFF0NC40IGludGVyZmFjZSBmb3IgdGhlIGhpc3RvcnkgaXMgdXNlZCwgd2Ugd2lsbCBo
YXZlIHRvIGZhbGxiYWNrCi0gICAgLy8gdG8gdGhlIG9sZCBnbG9iYWwgaGlzdG9yeS4KLSAgICBR
V2ViSGlzdG9yeUludGVyZmFjZSogaWZhY2UgPSBRV2ViSGlzdG9yeUludGVyZmFjZTo6ZGVmYXVs
dEludGVyZmFjZSgpOwotICAgIGlmIChpZmFjZSkKLSAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0
b3J5Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSks
IHVybC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsK
LQotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNp
emUoKSk7Ci0gICAgaWYgKCFoYXNoKQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGlu
azsKLSNlbHNlCi0gICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50
LT5iYXNlVVJMKCksICphdHRyKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwotI2VuZGlmCi0KLSAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50
LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0
ZWRMaW5rOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLQotICAgIG1fbGlua3NDaGVj
a2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKLQotI2lmIFVTRShQTEFURk9STV9TVFJBVEVH
SUVTKQotICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+dmlzaXRlZExpbmtTdHJhdGVn
eSgpLT5pc0xpbmtWaXNpdGVkKHBhZ2UsIGhhc2gpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwotI2Vsc2UKLSAgICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5pc0xpbmtW
aXNpdGVkKGhhc2gpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwot
I2VuZGlmCi19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0
Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0Ci17Ci0gICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9
IE5PUFNFVURPOwotICAgIGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgLy8gZmFzdENoZWNrU2VsZWN0b3IgYXNzdW1lcyBj
bGFzcyBhbmQgaWQgbWF0Y2ggZm9yIHRoZSB0b3Agc2VsZWN0b3IuCi0gICAgICAgIGlmIChzZWwt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKSB7Ci0gICAgICAgICAgICBpZiAoIShlbGVt
ZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+
Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OklkKSB7Ci0gICAgICAgICAgICBpZiAoIShlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhc3RDaGVja1NlbGVj
dG9yKHNlbCwgZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZWxlbWVudCwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7
Ci19Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsK
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwog
CkBAIC0xMTUxLDExICsxMDQzLDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1
bGVzKGludCYKICAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2gg
cnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYgKCFtX2NoZWNr
ZXIubV9zdHJpY3RQYXJzaW5nKQorICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkK
ICAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0
VUFSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBz
b3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSks
IHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCi0g
ICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5pc1ZpZXdTb3VyY2UoKSkgeworICAgIGlmICht
X2NoZWNrZXIuZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpIHsKICAgICAgICAgaWYgKCFkZWZh
dWx0Vmlld1NvdXJjZVN0eWxlKQogICAgICAgICAgICAgbG9hZFZpZXdTb3VyY2VTdHlsZSgpOwog
ICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRWaWV3U291cmNlU3R5bGUsIGZpcnN0VUFSdWxlLCBs
YXN0VUFSdWxlLCBmYWxzZSk7CkBAIC0xMjY2LDcgKzExNTgsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwg
ZGVmYXVsdFBhcmVudCk7CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNl
dWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0
Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAg
bV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIApAQCAtMTQyMiw3ICsxMzE0LDcgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIH0KIAogICAgIC8v
IFJlc2V0IHRoZSB2YWx1ZSBiYWNrIGJlZm9yZSBhcHBseWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0
IC13ZWJraXQtbGluayBrbm93cyB3aGF0IGNvbG9yIHRvIHVzZS4KLSAgICBtX2NoZWNrZXIubV9t
YXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOworICAgIG1f
Y2hlY2tlci5zZXRNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyhtYXRjaFZpc2l0ZWRQc2V1ZG9D
bGFzcyk7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVz
IGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQogICAg
IC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGll
cyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgpAQCAtMTYxMiw3ICsxNTA0LDcgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIGlmIChwYXJlbnRT
dHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogCi0gICAg
bV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9D
bGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MobWF0Y2hW
aXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1l
bGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0
IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTYzNCw3ICsxNTI2
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIG1fbGlu
ZUhlaWdodFZhbHVlID0gMDsKICAgICAKICAgICAvLyBSZXNldCB0aGUgdmFsdWUgYmFjayBiZWZv
cmUgYXBwbHlpbmcgcHJvcGVydGllcywgc28gdGhhdCAtd2Via2l0LWxpbmsga25vd3Mgd2hhdCBj
b2xvciB0byB1c2UuCi0gICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBt
YXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtX2NoZWNrZXIuc2V0TWF0Y2hpbmdWaXNpdGVk
UHNldWRvQ2xhc3MobWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpOwogCiAgICAgLy8gSGlnaC1wcmlv
cml0eSBwcm9wZXJ0aWVzLgogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBt
X21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKQEAgLTE2ODAsNyArMTU3Miw3IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAg
aW5pdEZvclN0eWxlUmVzb2x2ZShtX2NoZWNrZXIubV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50
KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0
eWxlLgorICAgIGluaXRGb3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBk
b2N1bWVudCBzdHlsZS4KIAogICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAg
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKQEAgLTE3NDIsNyAr
MTYzNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAgICAg
ICAgLy8gcHJvcGVydHkuCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3Bs
YXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdl
IGZvcmNlCiAgICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlw
ZXMuCi0gICAgICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZyAmJiBlKSB7CisgICAg
ICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7CiAgICAgICAgICAgICBp
ZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlz
cGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9G
bG9hdCk7CkBAIC0xNzk1LDcgKzE2ODcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVz
dFJlbmRlclN0eWxlCiAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IExJ
U1RfSVRFTSkgewogICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgV2luSUUgYnVnIHRoYXQgZmxv
YXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2UnbGwgZW11bGF0ZSB0aGUg
cXVpcmssCiAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nICYmIHN0eWxlLT5pc0Zs
b2F0aW5nKCkpCisgICAgICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygp
ICYmIHN0eWxlLT5pc0Zsb2F0aW5nKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KEJMT0NLKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE5NTMs
NyArMTg0NSw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKICAg
ICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSB0cnVl
OworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KHRydWUpOwogCiAgICAgaW5p
dEVsZW1lbnQoZSk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CkBA
IC0xOTcxLDE2ICsxODYzLDE2IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2Vs
ZWN0b3IKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1
bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fY2hlY2tlci5tX3Nh
bWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOwor
ICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2lu
Q1NTUnVsZXMpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRz
LgogICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7
CiAgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RBdXRob3JSdWxl
LCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAotICAg
ICAgICBtX2NoZWNrZXIubV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAgICBtX3NhbWVP
cmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQogCi0gICAgbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVz
T25seSA9IGZhbHNlOworICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNl
KTsKICAgIAogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KQEAgLTE5ODgsMTIg
KzE4ODAsMTIgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3RvcgogaW5s
aW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYg
cnVsZURhdGEpCiB7CiAgICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgbV9jaGVj
a2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CisgICAgbV9jaGVja2VyLmNs
ZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7CiAKICAgICAvLyBMZXQgdGhlIHNsb3cgcGF0
aCBoYW5kbGUgU1ZHIGFzIGl0IGhhcyBzb21lIGFkZGl0aW9uYWwgcnVsZXMgcmVnYXJkaW5nIHNo
YWRvdyB0cmVlcy4KICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkg
JiYgIW1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlz
IHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBzZWxlY3RvcnMuCi0gICAgICAg
IGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKG1f
Y2hlY2tlci5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAvLyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFy
dCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1
bGUgaGFzaC4KICAgICAgICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBk
b24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3BhY2UuCkBAIC0yMDAzLDEwMzAgKzE4OTUsMTQg
QEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlYwogICAgIH0KIAogICAg
IC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNr
U2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8s
IGZhbHNlLCBmYWxzZSwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpIDogMCk7Ci0gICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BT
RVVETyAmJiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2Vs
ZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBmYWxzZSwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJT
dHlsZSgpIDogMCk7CisgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JN
YXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
Ci1uYW1lc3BhY2UgewotCi1pbmxpbmUgYm9vbCBzZWxlY3RvclRhZ01hdGNoZXMoY29uc3QgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmICgh
c2VsZWN0b3ItPmhhc1RhZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT50YWcoKS5sb2NhbE5hbWUoKTsKLSAgICBp
ZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBlbGVtZW50LT5sb2NhbE5h
bWUoKSkKKyAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9j
aGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+
dGFnKCkubmFtZXNwYWNlVVJJKCk7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRv
bSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0gICAgCi10
ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBs
Kik+Ci1pbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rv
ciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3Iq
JiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQpCi17Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUgPSBzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwg
dmFsdWUpICYmIHNlbGVjdG9yVGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHsKLSAgICAg
ICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFu
dCkKLSAgICAgICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAg
ICAgZWxzZSBpZiAoIXRvcENoaWxkT3JTdWJzZWxlY3RvcikgewotICAgICAgICAgICAgICAgIEFT
U0VSVChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0
b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLSAgICAgICAgICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3RvcikKLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpOwotICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvcENoaWxk
T3JTdWJzZWxlY3RvcikgewotICAgICAgICAgICAgLy8gQ2hpbGQgb3Igc3Vic2VsZWN0b3IgY2hl
Y2sgZmFpbGVkLgotICAgICAgICAgICAgLy8gSWYgdGhlIG1hdGNoIGVsZW1lbnQgaXMgbnVsbCwg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yIHdhcyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qgc2VsZWN0b3Ig
YW5kIGhhZCB0byBtYXRjaCAKLSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBlbGVtZW50IHdl
IHdlcmUgY2hlY2tpbmcuCi0gICAgICAgICAgICBpZiAoIXRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAv
LyBUaGVyZSBtYXkgYmUgb3RoZXIgbWF0Y2hlcyBkb3duIHRoZSBhbmNlc3RvciBjaGFpbi4KLSAg
ICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgdG9wbW9zdCBjaGlsZCBvciBzdWJzZWxlY3RvciBh
bmQgdGhlIGVsZW1lbnQgaXQgbWF0Y2hlZCwgY29udGludWUgY2hlY2tpbmcgYW5jZXN0b3JzLgot
ICAgICAgICAgICAgc2VsZWN0b3IgPSB0b3BDaGlsZE9yU3Vic2VsZWN0b3I7Ci0gICAgICAgICAg
ICBlbGVtZW50ID0gdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7Ci0gICAgICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1pbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgQXRv
bWljU3RyaW5nSW1wbCogdmFsdWUpIAotewotICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygp
ICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1l
cygpLmNvbnRhaW5zKHZhbHVlKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKLXsKLSAgICByZXR1
cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSA9PSB2YWx1ZTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVt
ZW50KiwgQXRvbWljU3RyaW5nSW1wbCopCi17CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLX0KLQot
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsK
LSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLQotICAgIC8v
IFRoZSB0b3Agc2VsZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVsZSBoYXNoZXMg
aGF2ZSBhbHJlYWR5IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCi0gICAgaWYgKCFzZWxl
Y3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBjb25zdCBDU1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKLSAg
ICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSAwOwot
ICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2Vs
ZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCi0gICAgICAgIGVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7Ci0KLSAgICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0b3IgaGFzIGRl
c2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5IGFuZCBhbGwg
Y29tcG9uZW50cyBhcmUgc2ltcGxlLgotICAgIHdoaWxlIChzZWxlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNs
YXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNz
VmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxk
T3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAg
ICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVj
dG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ck1hdGNoRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0gICAgICAgICAgICBp
ZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVt
ZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxl
bWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkg
IT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgc2VsZWN0b3ItPnJlbGF0aW9uKCkgIT0gQ1NT
U2VsZWN0b3I6OkNoaWxkICYmIHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3RvcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNlbGVj
dG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpOb25lICYmIHNlbGVjdG9yLT5tX21hdGNoICE9
IENTU1NlbGVjdG9yOjpJZCAmJiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Q2xh
c3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycwotLy8g
SXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9yTWF0Y2hlcyAg
ICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3Rv
ckZhaWxzTG9jYWxseSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQot
Ly8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBh
bmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3Io
Q1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJv
b2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Ci17Ci0jaWYg
RU5BQkxFKFNWRykKLSAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGll
ZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCi0gICAgLy8gYmVjYXVzZSBp
dHMgY29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJl
LgotICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5OwotI2VuZGlmCi0KLSAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8g
bWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBp
c1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVu
dFN0eWxlKSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotCi0gICAgLy8g
VGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKLSAgICBDU1NTZWxlY3Rvcjo6
UmVsYXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9uKCk7Ci0KLSAgICAvLyBQcmVwYXJlIG5l
eHQgc2VsCi0gICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7Ci0gICAgaWYgKCFzZWwpCi0gICAg
ICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7Ci0KLSAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKQotICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9y
IGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQotICAgICAgICBpZiAobV9wc2V1ZG9T
dHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1ZG8pCi0gICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0KLSAgICAvLyBDaGVjayBm
b3IgbmVzdGVkIGxpbmtzLgotICAgIGlmIChtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzICYmICFp
c1N1YlNlbGVjdG9yKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBlbGVt
ZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICBpZiAo
Y3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+aW5zaWRlTGluaygpICYmIGUtPmlzTGluaygp
KSB7Ci0gICAgICAgICAgICBpZiAoZW5jb3VudGVyZWRMaW5rKQotICAgICAgICAgICAgICAgIG1f
bWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsgLy8gVGhpcyBsaW5rIGlzIG5vdCByZWxl
dmFudCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQsIHNvIGRpc2FibGUgbWF0Y2hpbmcuCi0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW5jb3VudGVyZWRMaW5rID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAocmVsYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgICAgIGUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5j
b3VudGVyZWRMaW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWls
c0xvY2FsbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoK
LSAgICAgICAgewotICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUo
KTsKLSAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rv
cihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkg
JiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5
bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgd2hpbGUg
KG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlv
dXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKLSAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsK
LSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywg
ZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNP
bmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUo
KTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
IHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVz
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICAgICAg
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBtX21hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBt
YXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3Vu
dGVyZWRMaW5rKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xv
Y2FsbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3I6Ci0gICAgICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZv
bGxvd3MgYSBwc2V1ZG8tZWxlbWVudAotICAgICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRp
b24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVk
byBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQotICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRo
ZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2Nv
bGxlY3RSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1Bz
ZXVkbyAhPSBTRUxFQ1RJT04gJiYKLSAgICAgICAgICAgICAgICAhKChSZW5kZXJTY3JvbGxiYXI6
OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFS
X0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVs
ZW1lbnRQYXJlbnRTdHlsZSk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2Nl
bmRhbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+
c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0g
ZSB8fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KHNoYWRvd0hvc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1Nl
bGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+KiBzZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQotewotICAgIHNldC0+YWRkKHFO
YW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci19Ci0KLXN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKQotewotICAg
IC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEgd2l0aCB2YWx1
ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCi0gICAgLy8gTW96aWxsYSB0
cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBzbyBkbyB3ZS4K
LSAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPjsKLQotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2Vw
dF9jaGFyc2V0QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0QXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpZ25BdHRyKTsKLSAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlua0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGF4aXNBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBiZ2Nv
bG9yQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2hhcnNldEF0dHIpOwot
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoZWNrZWRBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBjbGVhckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIGNvZGV0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29s
b3JBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb21wYWN0QXR0cik7Ci0g
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGVjbGFyZUF0dHIpOwotICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGRlZmVyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgZGlyQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZGlzYWJsZWRB
dHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBlbmN0eXBlQXR0cik7Ci0gICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZmFjZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRv
U2V0KGF0dHJTZXQsIGZyYW1lQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
aHJlZmxhbmdBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBodHRwX2VxdWl2
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbGFuZ0F0dHIpOwotICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmd1YWdlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgbGlua0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IG1lZGlhQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbWV0aG9kQXR0cik7
Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbXVsdGlwbGVBdHRyKTsKLSAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBub2hyZWZBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBub3Jlc2l6ZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IG5vc2hhZGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3dyYXBBdHRy
KTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWFkb25seUF0dHIpOwotICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJlbEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIHJldkF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHJ1bGVz
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2NvcGVBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzY3JvbGxpbmdBdHRyKTsKLSAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCBzZWxlY3RlZEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIHNoYXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGFyZ2V0
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdGV4dEF0dHIpOwotICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHR5cGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCB2YWxpZ25BdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2
YWx1ZXR5cGVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2bGlua0F0dHIp
OwotCi0gICAgcmV0dXJuIGF0dHJTZXQ7Ci19Ci0KLXN0YXRpYyBib29sIGh0bWxBdHRyaWJ1dGVI
YXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyKQotewotICAg
IHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogaHRtbENhc2VJbnNlbnNpdGl2ZUF0
dHJpYnV0ZXNTZXQgPSBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCgpOwot
ICAgIGJvb2wgaXNQb3NzaWJsZUhUTUxBdHRyID0gIWF0dHIuaGFzUHJlZml4KCkgJiYgKGF0dHIu
bmFtZXNwYWNlVVJJKCkgPT0gbnVsbEF0b20pOwotICAgIHJldHVybiBpc1Bvc3NpYmxlSFRNTEF0
dHIgJiYgaHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQtPmNvbnRhaW5zKGF0dHIubG9j
YWxOYW1lKCkuaW1wbCgpKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0cmlidXRlUXVhbGlmaWVkTmFt
ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVj
dG9yQXR0cikKLXsKLSAgICBpZiAoc2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgpICE9IGF0dHJpYnV0
ZS0+bG9jYWxOYW1lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzZWxl
Y3RvckF0dHIucHJlZml4KCkgPT0gc3RhckF0b20gfHwgc2VsZWN0b3JBdHRyLm5hbWVzcGFjZVVS
SSgpID09IGF0dHJpYnV0ZS0+bmFtZXNwYWNlVVJJKCk7Ci19Ci0KLXN0YXRpYyBib29sIGF0dHJp
YnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpN
YXRjaCBtYXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VT
ZW5zaXRpdmUpCi17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZUl0
ZW0tPnZhbHVlKCk7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBzd2l0Y2ggKG1hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6
Ci0gICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlID8gc2VsZWN0b3JWYWx1ZSAhPSB2YWx1ZSA6ICFl
cXVhbElnbm9yaW5nQ2FzZShzZWxlY3RvclZhbHVlLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6Okxpc3Q6IHsK
LSAgICAgICAgLy8gSWdub3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMgY29udGFpbmlu
ZyBzcGFjZXMKLSAgICAgICAgaWYgKHNlbGVjdG9yVmFsdWUuY29udGFpbnMoJyAnKSB8fCBzZWxl
Y3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAgIHNpemVfdCBmb3VuZFBvcyA9IHZhbHVlLmZpbmQoc2VsZWN0b3JWYWx1ZSwgc3Rh
cnRTZWFyY2hBdCwgY2FzZVNlbnNpdGl2ZSk7Ci0gICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0g
bm90Rm91bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFmb3VuZFBvcyB8fCB2YWx1ZVtmb3VuZFBvcyAtIDFdID09ICcgJykgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGVuZFN0ciA9IGZvdW5kUG9zICsgc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKTsK
LSAgICAgICAgICAgICAgICBpZiAoZW5kU3RyID09IHZhbHVlLmxlbmd0aCgpIHx8IHZhbHVlW2Vu
ZFN0cl0gPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gV2UgZm91bmQgYSBt
YXRjaC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm8gbWF0
Y2guIEtlZXAgbG9va2luZy4KLSAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyAr
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkNvbnRhaW46Ci0gICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsZWN0b3JWYWx1ZSwg
Y2FzZVNlbnNpdGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkJlZ2lu
OgotICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNp
dGl2ZSkgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKLSAgICAgICAg
aWYgKCF2YWx1ZS5lbmRzV2l0aChzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWxl
Y3RvclZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SHlwaGVuOgotICAgICAgICBpZiAodmFsdWUu
bGVuZ3RoKCkgPCBzZWxlY3RvclZhbHVlLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoc2VsZWN0b3JWYWx1ZSwgY2FzZVNl
bnNpdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEl0IHRoZXkg
c3RhcnQgdGhlIHNhbWUsIGNoZWNrIGZvciBleGFjdCBtYXRjaCBvciBmb2xsb3dpbmcgJy0nOgot
ICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gc2VsZWN0b3JWYWx1ZS5sZW5ndGgoKSAmJiB2
YWx1ZVtzZWxlY3RvclZhbHVlLmxlbmd0aCgpXSAhPSAnLScpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29s
IGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rv
cjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgY29uc3Qg
QXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUpCi17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0o
aSk7Ci0KLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hlcyhhdHRyaWJ1
dGVJdGVtLCBzZWxlY3RvckF0dHIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBtYXRjaCwgc2VsZWN0b3JW
YWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVy
ZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBh
cmVudFN0eWxlKSBjb25zdAotewotICAgIEFTU0VSVChlKTsKLSAgICBpZiAoIWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGUsIHNlbCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0ZSgpKSB7Ci0g
ICAgICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQotICAgICAgICAg
ICAgcmV0dXJuIGUtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUp
LT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKTsKLQotICAgICAgICBpZiAoc2Vs
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKLSAgICAgICAgICAgIHJldHVybiBlLT5oYXNJ
RCgpICYmIGUtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpOwotCi0gICAg
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2VyZSBlbGVtZW50U3R5bGUgaXMgMC4KLSAg
ICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlzU3R5bGVkRWxlbWVudCgpIHx8ICghc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01hcHBlZEF0dHJpYnV0ZShhdHRyKSAmJiBh
dHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9ubHlBdHRyKSkpCi0gICAgICAgICAgICBl
bGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoKTsgLy8gU3BlY2lh
bC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFkb25seSIgYXR0cmlidXRlcyBzbyBpbnB1dCBmb3Jt
IGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4KLQotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMgPSBlLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
IW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1
ZShhdHRyKTsKLQotICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywg
c3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gpLCBhdHRyLCBzZWwt
PnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAKLSAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cykgewotICAgICAgICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KLSAgICAgICAgaWYgKHNlbC0+
cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKLSAgICAgICAgICAgIEFT
U0VSVChzZWwtPnNlbGVjdG9yTGlzdCgpKTsKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHN1YlNlbCA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0g
c3ViU2VsLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBu
ZXN0LiBJIGRvbid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKLSAgICAgICAgICAgICAgICAv
LyByZXN0cmljdGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgotICAg
ICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3Vy
cwotICAgICAgICAgICAgICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTm90KTsKLQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3Rv
cihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVu
dFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9
IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgp
IHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09
IFJFU0laRVIpKSB7Ci0gICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRjaCBhIHNwZWNp
ZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVjaWFsaXplZCBy
dWxlcyBmb3IgZWFjaAotICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBubyBlbGVtZW50
cyBpbnZvbHZlZCkuCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhzZWwsIGR5bmFtaWNQc2V1ZG8pOwotICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8g
PT0gU0VMRUNUSU9OKSB7Ci0gICAgICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQotICAgICAgICAgICAgICAgIHJldHVybiAh
bV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBjaGVja2luZy4K
LSAgICAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgewotICAgICAgICAgICAgLy8gUHNl
dWRvIGNsYXNzZXM6Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3Q6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIEFscmVhZHkgaGFuZGxlZCB1cCBhYm92ZS4KLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5OiB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGUtPmZp
cnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbV9jb2xs
ZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+
ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5
U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0ZpcnN0Q2hpbGQ6IHsKLSAgICAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVz
IHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAgICBpZiAo
ZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+
cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZTogewotICAgICAgICAgICAgICAgIC8vIGZpcnN0LW9m
LXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAgICAgICAgICAg
ICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
LT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1l
KHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNP
bmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJl
bmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDogewotICAgICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQg
bWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
Y29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHls
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYg
Y2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRM
YXN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
TGFzdE9mVHlwZTogewotICAgICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRo
ZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHls
ZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQt
PmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1l
KCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05h
bWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDogewotICAgICAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0g
ZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFu
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVu
dFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCAm
JiBsYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9m
VHlwZTogewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkg
c2xvdy4KLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBh
cmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVz
T25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAm
JiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aENoaWxkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFz
ZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IG4tPnJlbmRlclN0
eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8g
cy0+Y2hpbGRJbmRleCgpIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZp
b3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVu
dFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
U3R5bGUtPnNldENoaWxkSW5kZXgoY291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChzZWwtPm1hdGNoTnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZTogewot
ICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUt
PnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5h
bWUoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhh
c1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6
IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNv
dW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDogewotICAgICAgICAgICAgICAg
IGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLT5t
YXRjaE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBlOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFy
ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNP
bmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNlbC0+bWF0Y2hOdGgoY291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVGFyZ2V0OgotICAgICAg
ICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKLSAgICAgICAgICAgICAgICBmb3IgKENT
U1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFtaWNQc2V1
ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5
bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgICAgICAgICAgaWYg
KGUgJiYgZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
QXV0b2ZpbGw6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlm
IChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNM
aW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9tYXRjaFZpc2l0ZWRQc2V1ZG9D
bGFzczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzIHx8
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rv
cjo6UHNldWRvVmlzaXRlZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5
RHJhZ1J1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlE
cmFnUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPnJlbmRlcmVyKCkgJiYgZS0+
cmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICAgICAgICAgIGlmIChlICYmICgo
ZS0+Zm9jdXNlZCgpICYmIGUtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB8fCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0Zv
Y3VzKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKLSAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91
bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgLy8gaHJlZiBh
bmQgKjpob3ZlciBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQg
Zm9yIHNpdGVzIGxpa2Ugd3NqLmNvbS4KLSAgICAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJz
aW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUo
YVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVk
QnlIb3ZlclJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5k
ZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0
QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5o
b3ZlcmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUs
IENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6Ci0g
ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBz
aG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAgICAgICAgICAgICAgLy8gaHJl
ZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gCi0gICAgICAgICAgICAg
ICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygp
ICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
LT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChlLT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFi
bGVkOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRnVsbFBhZ2VNZWRpYToKLSAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVu
dCgpICYmIGUtPmRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCk7Ci0g
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAg
ICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIWUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkT25seTogewot
ICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBl
LT5pc1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZFdyaXRl
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgIWUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25hbEZvcm1Db250
cm9sKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZXF1aXJlZDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZhbGlkOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZS0+d2lsbFZhbGlkYXRlKCkgJiYgZS0+aXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpOwotICAgICAgICAgICAgfSBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
bnZhbGlkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNW
YWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGUtPndpbGxWYWxp
ZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGUtPmhhc1VuYWNj
ZXB0YWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0No
ZWNrZWQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIEV2
ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4
aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8g
eW91IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdlIHdpbGwgYmVo
YXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKLSAgICAgICAgICAgICAg
ICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUg
cHNldWRvLgotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAm
JiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5p
c0luZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9JbmRldGVybWluYXRlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8
ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgICAgICAgICAg
ICAgIGlmIChlLT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICAgICAgICAgICAg
ICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzICYmICFwcm9n
cmVzcy0+aXNEZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSNlbmRp
ZgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlu
cHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6Ci0gICAgICAg
ICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzogewotICAgICAgICAgICAgICAg
IEF0b21pY1N0cmluZyB2YWx1ZSA9IGUtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAg
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3VtZW50
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCAhdmFsdWUuc3RhcnRz
V2l0aChhcmd1bWVudCwgZmFsc2UpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gYXJndW1lbnQubGVuZ3RoKCkgJiYgdmFs
dWVbYXJndW1lbnQubGVuZ3RoKCldICE9ICctJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVs
bFNjcmVlbjoKLSAgICAgICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBm
dWxsc2NyZWVuIHN0YXRlLCBhbmQgdGhlIGRvY3VtZW50J3MgY3VycmVudCBmdWxsc2NyZWVuIAot
ICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQs
IHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8gCi0gICAgICAgICAgICAg
ICAgLy8gdGhhdCBlbGVtZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4gb3IgPGVtYmVk
PiBlbGVtZW50IHdob3NlIGNoaWxkIGJyb3dzaW5nIAotICAgICAgICAgICAgICAgIC8vIGNvbnRl
eHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSBoYXMgdGhlICdmdWxsLXNj
cmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4KLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNGcmFt
ZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlKS0+
Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNj
cmVlbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGUgPT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVt
ZW50KCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbmltYXRpbmdGdWxs
U2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgICAgICAgICBpZiAoZSAhPSBlLT5kb2N1bWVudCgp
LT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5kb2N1bWVudCgpLT5pc0Fu
aW1hdGluZ0Z1bGxTY3JlZW4oKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0Z1bGxTY3JlZW5BbmNlc3RvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+Y29udGFpbnNG
dWxsU2NyZWVuRWxlbWVudCgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
RnVsbFNjcmVlbkRvY3VtZW50OgotICAgICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQg
aXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBz
ZXVkb2NsYXNzIGFwcGxpZXMgCi0gICAgICAgICAgICAgICAgLy8gdG8gYWxsIGVsZW1lbnRzIG9m
IHRoYXQgRG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJr
aXRJc0Z1bGxTY3JlZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9JblJhbmdlOgotICAgICAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCkt
PnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGUtPmlzSW5SYW5nZSgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0
T2ZSYW5nZToKLSAgICAgICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc091dE9mUmFu
Z2UoKTsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd246Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgewotICAg
ICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9jb2xsZWN0UnVsZXNPbmx5KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1l
bnQoKSkgewotICAgICAgICAgICAgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIGUtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52YWx1ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNl
dWRvSWQoc2VsLT5wc2V1ZG9UeXBlKCkpOwotICAgICAgICBpZiAocHNldWRvSWQgPT0gRklSU1Rf
TEVUVEVSKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0VXNlc0ZpcnN0TGV0dGVyUnVsZXMo
dHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQotICAg
ICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwotICAgIH0KLSAgICAvLyAjIyMgYWRk
IHRoZSByZXN0IG9mIHRoZSBjaGVja3MuLi4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xh
c3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBjb25zdAotewotICAgIFJlbmRlclNjcm9s
bGJhciogc2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29s
dmUoKTsKLSAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRGb3JT
dHlsZVJlc29sdmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sg
Zm9yIHJlc2l6ZXJzIGFuZCBzY3JvbGxiYXIgY29ybmVycy4gIEV2ZW50dWFsbHkgOndpbmRvdy1p
bmFjdGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAotICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQganVz
dCBhcHBseSB0byBldmVyeXRoaW5nLgotICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCi0gICAgICAgIHJldHVybiAhbV9kb2N1bWVu
dC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICAKLSAgICBpZiAo
IXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBBU1NFUlQo
c2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7Ci0gICAgc3dpdGNoIChz
ZWwtPnBzZXVkb1R5cGUoKSkgewotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFi
bGVkOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwotICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAgIHJldHVybiAhc2Ny
b2xsYmFyLT5lbmFibGVkKCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVy
OiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBob3ZlcmVkUGFydCAhPSBOb1BhcnQ7Ci0gICAgICAgICAg
ICBpZiAocGFydCA9PSBUcmFja0JHUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJl
ZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0
IHx8IGhvdmVyZWRQYXJ0ID09IFRodW1iUGFydDsKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09
IGhvdmVyZWRQYXJ0OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0FjdGl2ZTogewotICAgICAgICAgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJH
UGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgIT0gTm9QYXJ0OwotICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gVHJhY2tCR1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRy
YWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQ7Ci0gICAgICAgICAgICByZXR1cm4g
cGFydCA9PSBwcmVzc2VkUGFydDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9Ib3Jpem9udGFsOgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9WZXJ0aWNhbDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0RlY3JlbWVudDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFy
dFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1Bh
cnQ7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luY3JlbWVudDoKLSAgICAgICAg
ICAgIHJldHVybiBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3
YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0gICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1N0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwg
cGFydCA9PSBCYWNrVHJhY2tQYXJ0OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bmQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0
ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKLSAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRG91YmxlQnV0dG9uOiB7Ci0gICAgICAgICAg
ICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXIt
PnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJh
Y2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBh
cnQgPT0gQmFja1RyYWNrUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQgfHwgYnV0dG9uc1BsYWNlbWVudCA9
PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJh
Y2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9
PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2Vt
ZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBT
Y3JvbGxiYXJCdXR0b25zRG91YmxlQm90aDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfSAKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU2luZ2xlQnV0dG9uOiB7
Ci0gICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQg
PSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKLSAgICAgICAgICAgIGlm
IChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5k
UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0
KQotICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1
dHRvbnNTaW5nbGU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm9CdXR0b246IHsKLSAgICAgICAgICAgIFNjcm9s
bGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUo
KS0+YnV0dG9uc1BsYWNlbWVudCgpOwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFja1RyYWNr
UGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxi
YXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3Vi
bGVFbmQ7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNOb25l
IHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0OwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLT5pc1Njcm9sbENvcm5lclZpc2libGUoKTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKQEAgLTMwNDYsNyArMTkyMiw3IEBAIFJ1bGVE
YXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIEMKICAgICAsIG1fc2VsZWN0b3Ioc2Vs
ZWN0b3IpCiAgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yLT5zcGVjaWZpY2l0eSgpKQogICAg
ICwgbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9y
KENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3Ioc2VsZWN0b3IpKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoU2VsZWN0b3JD
aGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpCiAgICAgLCBtX2hhc011
bHRpcGFydFNlbGVjdG9yKHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpCiAgICAgLCBtX2hhc1RvcFNl
bGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxC
YXNlZE9uUnVsZUhhc2goc2VsZWN0b3IpKQogewpAQCAtMzU4Myw3ICsyNDU5LDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIAogICAgIGlkID0gQ1NTUHJv
cGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rp
b24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7CiAKLSAgICBpZiAobV9jaGVja2VyLm1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkg
eworICAgIGlmIChtX2NoZWNrZXIuaXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcygpICYmICFp
c1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHBy
b3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkg
OnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzA2LDcgKzI1ODIsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAKICAgICAgICAgRVJlc2l6
ZSByID0gUkVTSVpFX05PTkU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKICAgICAg
ICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUkVTSVpF
X0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByID0gKnBy
aW1pdGl2ZVZhbHVlOwpAQCAtMzc1NCw3ICsyNjMwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgaWYgKG1fcGFyZW50Tm9kZSkKICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUobV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bml0aWFsKSB7Ci0gICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5tX2RvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSk7CisgICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hl
Y2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVk
RGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgLy8gS2V5d29y
ZHMgYXJlIGJlaW5nIHVzZWQuCkBAIC0zNzY3LDE0ICsyNjQzLDE0IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
WExhcmdlOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICAgICAg
c2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkp
OworICAgICAgICAgICAgICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tl
ci5kb2N1bWVudCgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRLZXl3b3JkU2l6ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAtIENTU1ZhbHVl
WHhTbWFsbCArIDEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgotICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFyZ2Vy
Rm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLm1fZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9sZFNpemUsIG1fY2hl
Y2tlci5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbGVyOgotICAgICAgICAgICAg
ICAgICAgICBzaXplID0gc21hbGxlckZvbnRTaXplKG9sZFNpemUsIG1fY2hlY2tlci5tX2RvY3Vt
ZW50LT5pblF1aXJrc01vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzbWFsbGVy
Rm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzgyNSw3ICsyNzAxLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBlbHNlIGlmIChDU1NQcmlt
aXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkgewogICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSB6b29tRmFjdG9yOwogICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnRleHRT
aXplQWRqdXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9jaGVj
a2VyLm1fZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBt
dWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBtdWx0aXBsaWVyKTsKQEAgLTQwNDIsNyAr
MjkxOCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBn
ZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5v
bi1tb25vc3BhY2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAg
ICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChtX2No
ZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnRE
ZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NW
YWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVz
Yy5nZW5lcmljRmFtaWx5KCkpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZh
bWlseSgpLmZhbWlseUlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOwpAQCAtNDA2Niw3ICsyOTQyLDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hl
Y2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9jaGVja2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBpZiAo
Y29udGVudFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc0ZvbnRGYW1pbHlW
YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBmYWNlID0gc3RhdGljX2Nhc3Q8Rm9udEZhbWls
eVZhbHVlKj4oY29udGVudFZhbHVlKS0+ZmFtaWx5TmFtZSgpOwpAQCAtNDEyMiw3ICsyOTk4LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAvLyBJ
ZiBjdXJyRmFtaWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkg
b24gdGhpcyBkZXNjcmlwdGlvbi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQot
ICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JL
ZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3Jp
cHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkp
OworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVG
b3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6
ZSkpOwogCiAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICAgICAgfQpAQCAtNDE3OCw3ICszMDU0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgICAgICBzZXRab29tKFJlbmRlclN0eWxlOjppbml0
aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gbV9j
aGVja2VyLm1fZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnpvb20oKTsKKyAgICAgICAg
ICAgIGZsb2F0IGRvY1pvb20gPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+em9vbSgpOwogICAgICAgICAgICAgc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKICAg
ICAgICAgICAgIHNldFpvb20oZG9jWm9vbSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpIHsKQEAgLTQyMTQsMjEgKzMwOTAsMjEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KGludAogICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgICAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2No
ZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICAgICAgQVNT
RVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBk
b2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5n
cwogICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFy
ZEZhbWlseSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShz
ZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnByaW50aW5nKCkpOwot
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBtX2No
ZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLmRvY3Vt
ZW50KCktPnByaW50aW5nKCkpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFu
ZGFyZEZvbnRGYW1pbHkgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+c3RhbmRh
cmRGb250RmFtaWx5KCk7CiAgICAgICAgICAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5z
ZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBD
U1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZU1l
ZGl1bSwgZmFsc2UpKTsKKyAgICAgICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
Zm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwg
ZmFsc2UpKTsKICAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAw
OwogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC00
MjQyLDE1ICszMTE4LDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0aGVtZSBkaWQg
YW55dGhpbmcuICBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KICAgICAg
ICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewogICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIgZm9udCBz
ZXR0aW5ncyBhcmUgdXBkYXRlZC4KLSAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNv
bHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1
cyBoYXZlIHNldHRpbmdzCiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRS
ZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1l
bnQtPnByaW50aW5nKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQ
cmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CiAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIubV9kb2N1bWVudCwgbV9zdHlsZS5nZXQoKSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXpl
KCksIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNr
ZXIuZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygp
KSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkp
IHsKQEAgLTQ4MTAsNyArMzY4Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS82NTYxMDc3PiBXb3JrIGFyb3VuZCB0aGUgU3RvY2tzIHdpZGdldCdzIG1pc3Vz
ZSBvZiB0aGUKICAgICAgICAgLy8gcG9pbnRlci1ldmVudHMgcHJvcGVydHkgYnkgbm90IGFwcGx5
aW5nIGl0IGluIERhc2hib2FyZC4KLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fY2hlY2tlci5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICBpZiAoc2V0dGluZ3Mg
JiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTU5MDMsOSArNDc3OSw5IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3JHZW5lcmljRmEKICAgICAvLyBtdWx0aXBseWluZyBieSBv
dXIgc2NhbGUgZmFjdG9yLgogICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKGNoaWxkRm9udC5rZXl3
b3JkU2l6ZSgpKQotICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5t
X2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEs
IGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBzaXplID0gZm9udFNp
emVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBjaGls
ZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkp
OwogICAgIGVsc2UgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9k
b2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVj
a2VyLmRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0
b3IgPSBzZXR0aW5ncwogICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3Mt
PmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpCiAg
ICAgICAgICAgICA6IDE7CkBAIC01OTIyLDcgKzQ3OTgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrRm9yR2VuZXJpY0ZhCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXpl
KEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVj
a2VyLm1fZG9jdW1lbnQsIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2Vy
LmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBDU1NTdHlsZVNlbGVj
dG9yOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQs
IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC02MTI4LDcgKzUwMDQsNyBAQCBDb2xvciBD
U1NTdHlsZVNlbGVjdG9yOjpnZXRDb2xvckZyb21QcmltCiAgICAgICAgIGlmIChpZGVudCA9PSBD
U1NWYWx1ZVdlYmtpdFRleHQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPnRleHRDb2xvcigpOwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtp
dExpbmspCi0gICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fY2hlY2tl
ci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNp
dGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAg
ICAgICAgICAgY29sID0gbV9lbGVtZW50LT5pc0xpbmsoKSAmJiBtX2NoZWNrZXIuaXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzcygpID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlu
a0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwogICAgICAgICBl
bHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCiAgICAgICAgICAgICBj
b2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwogICAgICAgICBl
bHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKQpAQCAtNjE2Miwy
NyArNTAzOCw2IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6YWZmZWN0ZWRCeVZpZXdwb3IKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9saW5rc0NoZWNrZWRG
b3JWaXNpdGVkU3RhdGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewotICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkpCi0gICAgICAgICAgICBub2RlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OlNl
bGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkK
LXsKLSAgICBpZiAoIW1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKHZpc2l0
ZWRIYXNoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1l
bnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAgICAgICAgaWYg
KGF0dHIgJiYgdmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09
IHZpc2l0ZWRIYXNoKQotICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwot
ICAgIH0KLX0KLQogc3RhdGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1P
cGVyYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDk0NjQ4KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAj
aW5jbHVkZSA8d3RmL0Jsb29tRmlsdGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtODQsMzA3ICs4NSwyNzggQEAgcHVibGljOgogICAg
IGJvb2wgbV9yZXN1bHQ7CiB9OwogCi0gICAgLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVy
U3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVz
aGVldHMuCi0gICAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvciB7Ci0gICAgICAgIGZyaWVuZCBjbGFz
cyBDU1NTdHlsZUFwcGx5UHJvcGVydHk7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENT
U1N0eWxlU2VsZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIENTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqLCBTdHlsZVNoZWV0TGlzdCogYXV0aG9y
U2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKTsKLSAgICAgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIFVzaW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3Rv
ciB0byBvcHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgotICAg
ICAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCogcGFyZW50KTsKLSAgICAgICAgdm9pZCBwb3BQ
YXJlbnQoRWxlbWVudCogcGFyZW50KTsKLQotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0
ID0gZmFsc2UsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7Ci0gICAgICAg
IAotICAgICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25z
dCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxl
bWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBtYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IGZhbHNlKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLQotICAgICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7
IH0KLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHtyZXR1cm4gcGFyZW50U3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQotICAgICAgICB2b2lk
IHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9
Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICAgICAgdm9pZCBzZXRUZXh0U2l6
ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1
c3QoYik7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2
ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BT
RVVETyk7Ci0gICAgICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwotICAgICAgICBSZW5k
ZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICAgICAgYm9vbCBtYXRjaGVzU2libGlu
Z1J1bGVzKCk7Ci0gICAgICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50
LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7Ci0gICAgICAgIE5vZGUqIGZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAg
ICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKikgY29uc3Q7Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCk7Ci0g
ICAgICAgIHZvaWQgcG9wUGFyZW50U3RhY2tGcmFtZSgpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqLCBLZXlmcmFtZVZhbHVlJik7Ci0KLSAgICBwdWJsaWM6Ci0g
ICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0
aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCi0g
ICAgICAgIGVudW0gQ1NTUnVsZUZpbHRlciB7Ci0gICAgICAgICAgICBVQUFuZFVzZXJDU1NSdWxl
cyAgID0gMSA8PCAxLAotICAgICAgICAgICAgQXV0aG9yQ1NTUnVsZXMgICAgICA9IDEgPDwgMiwK
LSAgICAgICAgICAgIEVtcHR5Q1NTUnVsZXMgICAgICAgPSAxIDw8IDMsCi0gICAgICAgICAgICBD
cm9zc09yaWdpbkNTU1J1bGVzID0gMSA8PCA0LAotICAgICAgICAgICAgQWxsQnV0RW1wdHlDU1NS
dWxlcyA9IFVBQW5kVXNlckNTU1J1bGVzIHwgQXV0aG9yQ1NTUnVsZXMgfCBDcm9zc09yaWdpbkNT
U1J1bGVzLAotICAgICAgICAgICAgQWxsQ1NTUnVsZXMgICAgICAgICA9IEFsbEJ1dEVtcHR5Q1NT
UnVsZXMgfCBFbXB0eUNTU1J1bGVzLAotICAgICAgICB9OwotICAgICAgICBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNU
b0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIFBzZXVkb0lkLCB1
bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAg
IC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFsbCB0byAtd2Via2l0
LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KLSAgICAgICAgLy8gdGhlIGNv
cnJlY3QgZm9udCBzaXplIHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1l
ZGl1bSkuCi0gICAgICAgIHN0YXRpYyBmbG9hdCBmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQq
LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQotICAgICAg
ICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVy
biBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KLSAgICAgICAgc3RhdGljIGludCBs
ZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVz
ZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgcHJpdmF0ZToKLQotICAgICAgICAvLyBXaGVuIHRo
ZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1w
dCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKLSAgICAgICAgLy8gdGFibGUsIGFuZCBmYWls
aW5nIHRoYXQsIHdpbGwgc2ltcGx5IG11bHRpcGx5IGJ5IDEuMi4KLSAgICAgICAgZmxvYXQgbGFy
Z2VyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NNb2RlKSBjb25zdDsKLQotICAgICAg
ICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21h
bGxlciIuCi0gICAgICAgIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1
aXJrc01vZGUpIGNvbnN0OwotCi0gICAgcHVibGljOgotICAgICAgICB2b2lkIHNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUg
ZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgotCi0gICAgICAgIHZvaWQg
YXBwbHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7Ci0g
ICAgICAgIAotICAgICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmll
ZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBm
bG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1p
bmltdW1Gb3JGb250Rml6ZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNldEZvbnRT
aXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwotCi0gICAgICAgIHN0YXRpYyBmbG9h
dCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxl
KiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkda
b29tUnVsZXMpOwotCi0gICAgcHVibGljOgotICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygp
OwotCi0gICAgICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlKikgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShj
b25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAKLSAgICAgICAgQ1NTRm9udFNlbGVjdG9yKiBm
b250U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQotCi0g
ICAgICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1l
ZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7Ci0KLSAgICAgICAgYm9vbCBhZmZlY3RlZEJ5Vmll
d3BvcnRDaGFuZ2UoKSBjb25zdDsKLQotICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5n
ZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7IH0KLSAgICAgICAgdm9p
ZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52
aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQotCi0gICAgICAgIHZvaWQgYWRkS2V5
ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpOwotICAg
ICAgICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7Ci0KLSAgICAg
ICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5zaWJs
aW5nUnVsZXM7IH0KLSAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlczsgfQotICAgICAgICBib29sIHVzZXNC
ZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51c2VzQmVmb3JlQWZ0
ZXJSdWxlczsgfQotICAgICAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJldHVybiBt
X2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBjcmVhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0
aW9ucyk7Ci0KLSAgICAgICAgc3RydWN0IEZlYXR1cmVzIHsKLSAgICAgICAgICAgIEZlYXR1cmVz
KCk7Ci0gICAgICAgICAgICB+RmVhdHVyZXMoKTsKLSAgICAgICAgICAgIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7Ci0gICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBhdHRyc0luUnVsZXM7Ci0gICAgICAgICAgICBPd25QdHI8UnVsZVNldD4gc2libGlu
Z1J1bGVzOwotICAgICAgICAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXM7Ci0gICAgICAgICAg
ICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOwotICAgICAgICAgICAgYm9vbCB1c2VzTGlua1J1
bGVzOwotICAgICAgICB9OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBTZWxlY3Rvck1h
dGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHkgfTsKLQotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBk
ZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBm
b250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgICAgICB2b2lkIGNoZWNrRm9yR2VuZXJp
Y0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0g
ICAgICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSAgICAgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0K
LSAgICAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVz
dCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7Ci0KLSAgICAgICAgdm9pZCBh
ZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBl
bmQocnVsZSk7IH0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOwotCi0gICAgICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxl
U2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7
Ci0gICAgICAgIAotICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKTsK
LQotICAgICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgICAgIHZvaWQgYXBwbHlE
ZWNsYXJhdGlvbnMoYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgp
OwotCi0gICAgICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAgICAgIHZv
aWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBib29sIGlz
TGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAg
ICAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIGJvb2wg
aXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFn
ZUluZGV4KTsgfQotICAgICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0
OwotICAgICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAg
IAotICAgICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKLSAgICAgICAgT3duUHRy
PFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwotCi0gICAgICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7Ci0K
LSAgICAgICAgc3RydWN0IFBhcmVudFN0YWNrRnJhbWUgewotICAgICAgICAgICAgUGFyZW50U3Rh
Y2tGcmFtZSgpIHt9Ci0gICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1l
bnQpIDogZWxlbWVudChlbGVtZW50KSB7fQotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsK
LSAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKLSAgICAg
ICAgfTsKLSAgICAgICAgVmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50U3RhY2s7Ci0g
ICAgICAgIAotICAgICAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVy
LCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAuMiUuCi0gICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICAg
ICAgT3duUHRyPEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4gPiBtX2FuY2VzdG9ySWRl
bnRpZmllckZpbHRlcjsKLQotICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwotICAgICAg
ICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3Vu
ZERhdGE7Ci0gICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1
bGU+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKLSAgICAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZy
YW1lc1J1bGVNYXA7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZW5kZXJTdHlsZSog
c3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9
Ci0KLSAgICAgICAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKLSAgICAgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7Ci0KLSAg
ICAgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29s
IGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgICAgICAgICAgU2Vs
ZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5r
LCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkg
Y29uc3Q7Ci0gICAgICAgICAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBF
bGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9v
bCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJl
bnRTdHlsZSkgY29uc3Q7Ci0gICAgICAgICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xh
c3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7Ci0gICAgICAg
ICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rv
ciopOwotICAgICAgICAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7Ci0KLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGRl
dGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKLSAgICAgICAgICAgIEVJ
bnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0OwotICAgICAgICAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAg
ICAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpOwotCi0g
ICAgICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICAgICAgICAgIGJvb2wgbV9zdHJp
Y3RQYXJzaW5nOwotICAgICAgICAgICAgYm9vbCBtX2NvbGxlY3RSdWxlc09ubHk7Ci0gICAgICAg
ICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0gICAgICAgICAgICBQc2V1ZG9JZCBtX3BzZXVk
b1N0eWxlOwotICAgICAgICAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwotICAgICAgICAgICAg
bXV0YWJsZSBib29sIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOwotICAgICAgICAgICAgbXV0
YWJsZSBib29sIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7Ci0gICAgICAgICAgICBtdXRhYmxl
IEhhc2hTZXQ8TGlua0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVk
U3RhdGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotICAgICAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwot
Ci0gICAgICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVB
UnVsZSk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgICAgICB2b2lkIGNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCgpOwotCi0gICAgICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxs
Q2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lk
IG1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
LSAgICAgICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENT
U1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0
WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1h
cEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAg
IHZvaWQgbWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1
ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFu
aW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24o
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25GaWxsTW9k
ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlv
blBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1h
dGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5p
bWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2
b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgTmluZVBpZWNl
SW1hZ2UmKTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwg
TmluZVBpZWNlSW1hZ2UmKTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVdpZHRoKENT
U1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFn
ZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0KLSAgICAgICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZv
aWQgYXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgYXBwbHlQ
YWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVlKik7Ci0gICAgICAgIGJvb2wgcGFnZVNpemVGcm9tTmFt
ZShDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgTGVuZ3RoJiB3aWR0aCwg
TGVuZ3RoJiBoZWlnaHQpOwotICAgICAgICBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKSBjb25z
dDsKLSAgICAgICAgTGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gpIGNvbnN0OworLy8gVGhp
cyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBv
biBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCitjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIHsK
KyAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVBcHBseVByb3BlcnR5OworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENTU1N0eWxlU2VsZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1
dGhvclNoZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAorICAgICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIGRvY3VtZW50VXNlclNoZWV0cywKKyAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpOworICAgIH5DU1NTdHlsZVNlbGVjdG9yKCk7CisgICAgCisgICAgLy8gVXNpbmcgdGhlc2Ug
ZHVyaW5nIHRyZWUgd2FsayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNo
aWxkIGFuZCBkZXNjZW5kYW50IHNlbGVjdG9yIGxvb2t1cHMuCisgICAgdm9pZCBwdXNoUGFyZW50
KEVsZW1lbnQqIHBhcmVudCk7CisgICAgdm9pZCBwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KTsK
KworCisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUs
IGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UsIGJvb2wgbWF0Y2hWaXNpdGVkUHNl
dWRvQ2xhc3MgPSBmYWxzZSk7CisgICAgCisgICAgdm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1h
dGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKKworICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCwg
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgbWF0Y2hWaXNpdGVk
UHNldWRvQ2xhc3MgPSBmYWxzZSk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCopOworCisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICBSZW5kZXJT
dHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHls
ZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0K
KyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkge3JldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAg
IHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24p
IHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsg
bV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQg
c2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRl
eHRTaXplQWRqdXN0KGIpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNv
bHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5P
UFNFVURPKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICBSZW5kZXJTdHls
ZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBib29sIG1hdGNoZXNTaWJsaW5nUnVsZXMoKTsK
KyAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQ291bnQpIGNvbnN0OworICAgIE5vZGUqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFy
aW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KE5vZGUqKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHB1c2hQYXJlbnRTdGFj
a0ZyYW1lKEVsZW1lbnQqIHBhcmVudCk7CisgICAgdm9pZCBwb3BQYXJlbnRTdGFja0ZyYW1lKCk7
CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiwgS2V5ZnJhbWVWYWx1ZSYp
OworCitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0
IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1l
bGVtZW50KS4KKyAgICBlbnVtIENTU1J1bGVGaWx0ZXIgeworICAgICAgICBVQUFuZFVzZXJDU1NS
dWxlcyAgID0gMSA8PCAxLAorICAgICAgICBBdXRob3JDU1NSdWxlcyAgICAgID0gMSA8PCAyLAor
ICAgICAgICBFbXB0eUNTU1J1bGVzICAgICAgID0gMSA8PCAzLAorICAgICAgICBDcm9zc09yaWdp
bkNTU1J1bGVzID0gMSA8PCA0LAorICAgICAgICBBbGxCdXRFbXB0eUNTU1J1bGVzID0gVUFBbmRV
c2VyQ1NTUnVsZXMgfCBBdXRob3JDU1NSdWxlcyB8IENyb3NzT3JpZ2luQ1NTUnVsZXMsCisgICAg
ICAgIEFsbENTU1J1bGVzICAgICAgICAgPSBBbGxCdXRFbXB0eUNTU1J1bGVzIHwgRW1wdHlDU1NS
dWxlcywKKyAgICB9OworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHN0eWxlUnVsZXNGb3JF
bGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NT
UnVsZXMpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KEVsZW1lbnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxC
dXRFbXB0eUNTU1J1bGVzKTsKKworICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJh
bmdlICh4eC1zbWFsbCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCBy
ZXR1cm4KKyAgICAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRo
ZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KKyAgICBzdGF0aWMgZmxvYXQgZm9udFNpemVGb3JL
ZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0
U2l6ZSk7CisKKyAgICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlv
biB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KKyAgICBzdGF0
aWMgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wg
c2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7CisKK3ByaXZhdGU6CisKKyAgICAvLyBXaGVuIHRo
ZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1w
dCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKKyAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcg
dGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgorICAgIGZsb2F0IGxhcmdlckZvbnRT
aXplKGZsb2F0IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7CisKKyAgICAvLyBMaWtlIHRo
ZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCisgICAg
ZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7
CisKK3B1YmxpYzoKKyAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHMp
IHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUgZG9jdW1lbnQgd2hlbiBzZXR0aW5nIHVw
IGl0cyByb290IHN0eWxlLgorCisgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShpbnQgaWQs
IENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAKKyAgICBzdGF0aWMgZmxvYXQgZ2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBi
b29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9y
Rm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKKworICAgIHN0
YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJl
bmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9v
bCB1c2VTVkdab29tUnVsZXMpOworCitwdWJsaWM6CisgICAgYm9vbCB1c2VTVkdab29tUnVsZXMo
KTsKKworICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlKikgY29uc3Q7CisKKyAgICBib29sIGhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQorCisgICAgdm9pZCBhZGRW
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCosIGJv
b2wgcmVzdWx0KTsKKworICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3Q7
CisKKyAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNp
dGVkU3RhdGVDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hh
c2ggdmlzaXRlZEhhc2gpIHsgbV9jaGVja2VyLnZpc2l0ZWRTdGF0ZUNoYW5nZWQodmlzaXRlZEhh
c2gpOyB9CisKKyAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlPik7CisgICAgdm9pZCBhZGRQYWdlU3R5bGUoUGFzc1JlZlB0cjxDU1NQYWdl
UnVsZT4pOworCisgICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlcy5zaWJsaW5nUnVsZXM7IH0KKyAgICBib29sIHVzZXNGaXJzdExpbmVSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0ZpcnN0TGluZVJ1bGVzOyB9CisgICAgYm9vbCB1
c2VzQmVmb3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0JlZm9y
ZUFmdGVyUnVsZXM7IH0KKyAgICBib29sIHVzZXNMaW5rUnVsZXMoKSBjb25zdCB7IHJldHVybiBt
X2ZlYXR1cmVzLnVzZXNMaW5rUnVsZXM7IH0KKworICAgIHN0YXRpYyBib29sIGNyZWF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25z
KTsKKworICAgIHN0cnVjdCBGZWF0dXJlcyB7CisgICAgICAgIEZlYXR1cmVzKCk7CisgICAgICAg
IH5GZWF0dXJlcygpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHNJblJ1
bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0luUnVsZXM7Cisg
ICAgICAgIE93blB0cjxSdWxlU2V0PiBzaWJsaW5nUnVsZXM7CisgICAgICAgIGJvb2wgdXNlc0Zp
cnN0TGluZVJ1bGVzOworICAgICAgICBib29sIHVzZXNCZWZvcmVBZnRlclJ1bGVzOworICAgICAg
ICBib29sIHVzZXNMaW5rUnVsZXM7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAorICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRq
dXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRv
QWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKworICAgIHZvaWQg
YWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBw
ZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qKTsKKworICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29u
c3Q7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgCisgICAgYm9vbCBjaGVja1Nl
bGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CisKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+
CisgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5k
ZXgsIGludCBlbmRJbmRleCk7CisKKyAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqLCBi
b29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUp
OworICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5h
bWUpOworICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICBib29s
IGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBh
Z2VJbmRleCk7IH0KKyAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Owor
ICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICAKKyAgICBPd25Q
dHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKyAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5
bGU7CisKKyAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOworCisgICAgc3RydWN0IFBhcmVudFN0YWNr
RnJhbWUgeworICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKCkgeyB9CisgICAgICAgIFBhcmVudFN0
YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZp
ZXJIYXNoZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRT
dGFjazsKKyAgICAKKyAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVy
LCAyXjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAuMiUuCisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVyS2V5Qml0cyA9IDEyOworICAgIE93blB0
cjxCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNlc3RvcklkZW50aWZpZXJG
aWx0ZXI7CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9i
b3JkZXJEYXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1f
YmFja2dyb3VuZENvbG9yOworCisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gPiBLZXlmcmFtZXNSdWxlTWFwOworICAg
IEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVO
b3RZZXRBdmFpbGFibGU7IH0KKworICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworCitwcml2YXRlOgorICAgIHN0YXRp
YyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKworICAgIHZvaWQgbWF0Y2hV
QVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSk7CisgICAgdm9pZCB1cGRh
dGVGb250KCk7CisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKworICAgIHZv
aWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7CisgICAgdm9pZCBtYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1hcEZpbGxSZXBlYXRYKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBGaWxsUmVwZWF0
WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwRmls
bFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIG1h
cEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKKworICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBtYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
IHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAg
dm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZv
aWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKwor
ICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5l
UGllY2VJbWFnZSYpOworICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSos
IE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVdpZHRoKENTU1Zh
bHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKKyAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0
KENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKKworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eShpbnQgaWQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVBhZ2VTaXplUHJvcGVydHkoQ1NT
VmFsdWUqKTsKKyAgICBib29sIHBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBD
U1NQcmltaXRpdmVWYWx1ZSosIExlbmd0aCYgd2lkdGgsIExlbmd0aCYgaGVpZ2h0KTsKKyAgICBM
ZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKSBjb25zdDsKKyAgICBMZW5ndGggaW5jaExlbmd0aChk
b3VibGUgaW5jaCkgY29uc3Q7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgdm9pZCBhcHBseVNW
R1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHko
aW50IGlkLCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBsb2FkUGVuZGluZ0lt
YWdlcygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKIAotICAgICAgICAvLyBXZSBj
b2xsZWN0IHRoZSBzZXQgb2YgZGVjbHMgdGhhdCBtYXRjaCBpbiB8bV9tYXRjaGVkRGVjbHN8LiAg
V2UgdGhlbiB3YWxrIHRoZQotICAgICAgICAvLyBzZXQgb2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRp
bWVzLCBvbmNlIGZvciB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXJzIGRlcGVuZCBvbiAobGlr
ZSBmb250LXNpemUpLAotICAgICAgICAvLyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIGZvciBhbGwg
dGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzLiAgV2UgdGhlbiBkbyB0aGUgc2FtZSB0d28gcGFzc2Vz
Ci0gICAgICAgIC8vIGZvciBhbnkgIWltcG9ydGFudCBydWxlcy4KLSAgICAgICAgVmVjdG9yPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgNjQ+IG1fbWF0Y2hlZERlY2xzOwotCi0gICAgICAg
IC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFu
IGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAgICAgLy8gbWVy
Z2Ugc29ydGluZy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hl
ZFJ1bGVzOwotCi0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLSAgICAg
ICAgCi0gICAgICAgIEhhc2hTZXQ8aW50PiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IC8vIEhh
c2ggb2YgQ1NTUHJvcGVydHlJRHMKLQotICAgICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRv
cj4gbV9tZWRpdW07Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0
eWxlOwotCi0gICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKLQotICAgICAgICBTZWxl
Y3RvckNoZWNrZXIgbV9jaGVja2VyOwotCi0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9z
dHlsZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAgICAgIFJlbmRl
clN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7Ci0gICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsK
LSAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwotICAgICAgICBFSW5zaWRl
TGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50
Tm9kZTsKLSAgICAgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwotICAgICAgICBib29s
IG1fZm9udERpcnR5OwotICAgICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwot
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7
Ci0gICAgICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+IG1fYWRkaXRpb25h
bEF0dHJpYnV0ZVN0eWxlRGVjbHM7Ci0gICAgICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4g
bV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOworICAgIC8vIFdlIGNvbGxlY3Qg
dGhlIHNldCBvZiBkZWNscyB0aGF0IG1hdGNoIGluIHxtX21hdGNoZWREZWNsc3wuIFdlIHRoZW4g
d2FsayB0aGUKKyAgICAvLyBzZXQgb2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRpbWVzLCBvbmNlIGZv
ciB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXJzIGRlcGVuZCBvbiAobGlrZSBmb250LXNpemUp
LAorICAgIC8vIGFuZCB0aGVuIGEgc2Vjb25kIHRpbWUgZm9yIGFsbCB0aGUgcmVtYWluaW5nIHBy
b3BlcnRpZXMuIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3NlcworICAgIC8vIGZvciBhbnkg
IWltcG9ydGFudCBydWxlcy4KKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCA2ND4gbV9tYXRjaGVkRGVjbHM7CisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhl
IHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVm
ZmVyIHVzZWQgZm9yCisgICAgLy8gbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8Y29uc3QgUnVs
ZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1f
cnVsZUxpc3Q7CisgICAgCisgICAgSGFzaFNldDxpbnQ+IG1fcGVuZGluZ0ltYWdlUHJvcGVydGll
czsgLy8gSGFzaCBvZiBDU1NQcm9wZXJ0eUlEcworCisgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFs
dWF0b3I+IG1fbWVkaXVtOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0
eWxlOworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgU2VsZWN0b3JDaGVj
a2VyIG1fY2hlY2tlcjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICBS
ZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVu
dFN0eWxlOworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0
eWxlZEVsZW1lbnQ7CisgICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworICAgIENv
bnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFs
dWU7CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzOworICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKKyAgICAKKyAgICBSZWZQdHI8Q1NT
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKKyAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzOworICAgIFZlY3Rv
cjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRz
OwogCi0gICAgICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5
OwotICAgIH07CisgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5UHJvcGVy
dHk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAg
ICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0
QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKwor
I2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUg
IlRleHQuaCIKKworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RyYXRlZ3kuaCIKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlhM
aW5rTmFtZXMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKKyAgICA6IG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCisgICAgLCBtX3N0cmljdFBhcnNpbmcoc3RyaWN0UGFyc2luZykKKyAgICAsIG1f
ZG9jdW1lbnRJc0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgLCBtX2lzQ29s
bGVjdGluZ1J1bGVzT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5bGUoTk9QU0VVRE8pCisg
ICAgLCBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyhmYWxzZSkKKyAgICAsIG1faXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzcyhmYWxzZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBB
dG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUt
PmlzTGluaygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+aXNF
bGVtZW50Tm9kZSgpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUpOworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgCisjaWYgRU5B
QkxFKFNWRykKKyAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVy
biAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisjZW5k
aWYKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2Vy
OjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAorewor
ICAgIEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7CisgICAgCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KTsKKyAgICBpZiAoIWF0dHIgfHwgYXR0
ci0+aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOworICAgIAorI2lmIFBM
QVRGT1JNKFFUKQorICAgIFZlY3RvcjxVQ2hhciwgNTEyPiB1cmw7CisgICAgdmlzaXRlZFVSTCht
X2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyLCB1cmwpOworICAgIGlmICh1cmwuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKKyAgICAKKyAgICAvLyBJZiB0
aGUgUXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUgaGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhhdmUg
dG8gZmFsbGJhY2sKKyAgICAvLyB0byB0aGUgb2xkIGdsb2JhbCBoaXN0b3J5LgorICAgIFFXZWJI
aXN0b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFXZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0SW50
ZXJmYWNlKCk7CisgICAgaWYgKGlmYWNlKQorICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3RvcnlD
b250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwgdXJs
LnNpemUoKSkpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAg
IAorICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNp
emUoKSk7CisgICAgaWYgKCFoYXNoKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGlu
azsKKyNlbHNlCisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50
LT5iYXNlVVJMKCksICphdHRyKTsKKyAgICBpZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOworI2VuZGlmCisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1
bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW5zaWRlVW52
aXNpdGVkTGluazsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworICAgIAorICAg
IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKKyAgICAKKyNpZiBVU0Uo
UExBVEZPUk1fU1RSQVRFR0lFUykKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnZp
c2l0ZWRMaW5rU3RyYXRlZ3koKS0+aXNMaW5rVmlzaXRlZChwYWdlLCBoYXNoKSA/IEluc2lkZVZp
c2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKKyNlbHNlCisgICAgcmV0dXJuIHBhZ2Ut
Pmdyb3VwKCkuaXNMaW5rVmlzaXRlZChoYXNoKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRl
VW52aXNpdGVkTGluazsKKyNlbmRpZgorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENo
ZWNrYWJsZVNlbGVjdG9yKSBjb25zdAoreworICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpKSB7CisgICAgICAgIC8vIGZhc3RDaGVja1NlbGVjdG9yIGFzc3VtZXMgY2xh
c3MgYW5kIGlkIG1hdGNoIGZvciB0aGUgdG9wIHNlbGVjdG9yLgorICAgICAgICBpZiAoc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVu
dC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNs
YXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCkgeworICAgICAgICAgICAgaWYgKCEoZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3Rv
cihzZWwsIGVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVs
ZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOwor
fQorCituYW1lc3BhY2UgeworICAgIAoraW5saW5lIGJvb2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAg
ICBpZiAoIXNlbGVjdG9yLT5oYXNUYWcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWxlY3Rvci0+dGFnKCkubG9jYWxOYW1lKCk7
CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gZWxlbWVudC0+
bG9jYWxOYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKKyAgICBy
ZXR1cm4gbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50
LT5uYW1lc3BhY2VVUkkoKTsKK30KKwordGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBF
bGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCopPgoraW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xl
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVs
ZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBF
bGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQoreworICAgIEF0b21p
Y1N0cmluZ0ltcGwqIHZhbHVlID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworICAgIGZvciAo
OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
IGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHZhbHVlKSAmJiBzZWxlY3RvclRhZ01hdGNoZXMoZWxl
bWVudCwgc2VsZWN0b3IpKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkg
PT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQpCisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0
b3IpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NT
U2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2Vs
ZWN0b3I7CisgICAgICAgICAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50
ID0gZWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZWxl
bWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yID0g
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGlmICh0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKKyAgICAgICAgICAgIC8v
IENoaWxkIG9yIHN1YnNlbGVjdG9yIGNoZWNrIGZhaWxlZC4KKyAgICAgICAgICAgIC8vIElmIHRo
ZSBtYXRjaCBlbGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxzbyB0
aGUgdmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2ggCisgICAgICAgICAgICAv
LyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5nLgorICAgICAgICAgICAgaWYg
KCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG90aGVyIG1hdGNoZXMgZG93
biB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAgICAgICAvLyBSZXdpbmQgdG8gdGhlIHRvcG1v
c3QgY2hpbGQgb3Igc3Vic2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50IGl0IG1hdGNoZWQsIGNvbnRp
bnVlIGNoZWNraW5nIGFuY2VzdG9ycy4KKyAgICAgICAgICAgIHNlbGVjdG9yID0gdG9wQ2hpbGRP
clN1YnNlbGVjdG9yOworICAgICAgICAgICAgZWxlbWVudCA9IHRvcENoaWxkT3JTdWJzZWxlY3Rv
ck1hdGNoRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAgICAgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSAKK3sKKyAgICBy
ZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVt
ZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyh2YWx1ZSk7Cit9CisKK2lubGlu
ZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJ
bXBsKiB2YWx1ZSkgCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29s
IGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqKQoreworICAg
IHJldHVybiB0cnVlOworfQorICAgIAorfQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENo
ZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBl
bGVtZW50KQoreworICAgIEFTU0VSVChpc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3Rvcikp
OworICAgIAorICAgIC8vIFRoZSB0b3Agc2VsZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkg
YXMgcnVsZSBoYXNoZXMgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMu
CisgICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHRvcENoaWxkT3JT
dWJzZWxlY3RvciA9IDA7CisgICAgY29uc3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9y
TWF0Y2hFbGVtZW50ID0gMDsKKyAgICBpZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcikKKyAgICAgICAgdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAg
CisgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cikKKyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAKKyAg
ICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgCisgICAgLy8gV2Uga25v
dyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2Vs
ZWN0b3IgY29tYmluYXRvcnMgb25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KKyAg
ICB3aGlsZSAoc2VsZWN0b3IpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkg
eworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgIGlmICghZmFz
dENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2lu
Z2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpOb25lOgorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rv
cjxjaGVja1RhZ1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9y
LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgZm9yICg7IHNlbGVjdG9yOyBz
ZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9y
LT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHNlbGVjdG9yLT5yZWxh
dGlvbigpICE9IENTU1NlbGVjdG9yOjpDaGlsZCAmJiBzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Tm9uZSAmJiBzZWxlY3Rv
ci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6SWQgJiYgc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29t
YmluYXRvcnMKKy8vIEl0IGNhbiByZXR1cm4gMyBkaWZmZXJlbnQgdmFsdWVzOgorLy8gKiBTZWxl
Y3Rvck1hdGNoZXMgICAgICAgICAtIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUK
Ky8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRo
ZSBlbGVtZW50IGUKKy8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3Ig
ZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKK1NlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNT
dWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KFNWRykKKyAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0
aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCisgICAgLy8gYmVjYXVzZSBpdHMgY29u
dGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgorICAg
IGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OworI2VuZGlmCisgICAgCisgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1h
dGNoCisgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNT
dWJTZWxlY3RvciwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRT
dHlsZSkpCisgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAKKyAgICAv
LyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAorICAgIENTU1NlbGVjdG9y
OjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKKyAgICAKKyAgICAvLyBQcmVw
YXJlIG5leHQgc2VsCisgICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7CisgICAgaWYgKCFzZWwp
CisgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CisgICAgCisgICAgaWYgKHJlbGF0aW9u
ICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhp
cyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKKyAgICAgICAgaWYg
KG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNl
dWRvKQorICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgIAor
ICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCisgICAgaWYgKG1faXNNYXRjaGluZ1Zpc2l0
ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgeworICAgICAgICBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5
bGUoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmluc2lkZUxp
bmsoKSAmJiBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTGluaykK
KyAgICAgICAgICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsg
Ly8gVGhpcyBsaW5rIGlzIG5vdCByZWxldmFudCB0byB0aGUgc3R5bGUgYmVpbmcgcmVzb2x2ZWQs
IHNvIGRpc2FibGUgbWF0Y2hpbmcuCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ZW5jb3VudGVyZWRMaW5rID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzd2l0
Y2ggKHJlbGF0aW9uKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgICAg
ICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAgICAgICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5j
b3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9j
YWxseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6IAorICAgICAgICB7CisgICAgICAg
ICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgaWYg
KCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1Bz
ZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1Nl
bGVjdG9yOjpEaXJlY3RBZGphY2VudDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2lz
Q29sbGVjdGluZ1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgp
LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2Rl
KCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0
QWRqYWNlbnRSdWxlcygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9kZSogbiA9IGUt
PnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAg
ICAgIG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3Vu
dGVyZWRMaW5rKTsKKyAgICAgICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRq
YWNlbnQ6CisgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgZS0+cGFyZW50
Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50
U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgfQorICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
ICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICBpZiAoIW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgZSA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIG1faXNNYXRjaGluZ1Zpc2l0
ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9
IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRM
aW5rKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgorICAgICAgICAvLyBhIHNlbGVjdG9y
IGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAorICAgICAg
ICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBh
bmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCisgICAg
ICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgorICAgICAgICBpZiAoKGVsZW1l
bnRTdHlsZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICYmICEo
KFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1Bz
ZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYg
c2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93
RGVzY2VuZGFudDoKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUg
PSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9k
ZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIGUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5r
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZExvY2FsTmFtZVRvU2V0KEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+KiBzZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQoreworICAgIHNl
dC0+YWRkKHFOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7Cit9CisKK3N0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQo
KQoreworICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEg
d2l0aCB2YWx1ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCisgICAgLy8g
TW96aWxsYSB0cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBz
byBkbyB3ZS4KKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjsKKyAgICAKKyAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBhY2NlcHRfY2hhcnNldEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGFjY2VwdEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaWduQXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpbmtBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCBheGlzQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgYmdjb2xvckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNo
YXJzZXRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjaGVja2VkQXR0cik7
CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY2xlYXJBdHRyKTsKKyAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBjb2RldHlwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGNvbG9yQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29t
cGFjdEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRlY2xhcmVBdHRyKTsK
KyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBkZWZlckF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGRpckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGRpc2FibGVkQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZW5jdHlw
ZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZhY2VBdHRyKTsKKyAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBmcmFtZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRv
U2V0KGF0dHJTZXQsIGhyZWZsYW5nQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgaHR0cF9lcXVpdkF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmdB
dHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBsYW5ndWFnZUF0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxpbmtBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBtZWRpYUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IG1ldGhvZEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG11bHRpcGxlQXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm9ocmVmQXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm9yZXNpemVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBub3NoYWRlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgbm93cmFwQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVhZG9ubHlB
dHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWxBdHRyKTsKKyAgICBhZGRM
b2NhbE5hbWVUb1NldChhdHRyU2V0LCByZXZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBydWxlc0F0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjb3Bl
QXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2Nyb2xsaW5nQXR0cik7Cisg
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2VsZWN0ZWRBdHRyKTsKKyAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBzaGFwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIHRhcmdldEF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRleHRB
dHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0eXBlQXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmFsaWduQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgdmFsdWV0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgdmxpbmtBdHRyKTsKKyAgICAKKyAgICByZXR1cm4gYXR0clNldDsKK30KKworc3RhdGljIGJv
b2wgaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHIpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBodG1s
Q2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCA9IGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVB
dHRyaWJ1dGVzU2V0KCk7CisgICAgYm9vbCBpc1Bvc3NpYmxlSFRNTEF0dHIgPSAhYXR0ci5oYXNQ
cmVmaXgoKSAmJiAoYXR0ci5uYW1lc3BhY2VVUkkoKSA9PSBudWxsQXRvbSk7CisgICAgcmV0dXJu
IGlzUG9zc2libGVIVE1MQXR0ciAmJiBodG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldC0+
Y29udGFpbnMoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworfQorCitzdGF0aWMgYm9vbCBhdHRy
aWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyKQoreworICAgIGlmIChzZWxlY3RvckF0dHIubG9jYWxO
YW1lKCkgIT0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBzZWxlY3RvckF0dHIucHJlZml4KCkgPT0gc3RhckF0b20gfHwgc2Vs
ZWN0b3JBdHRyLm5hbWVzcGFjZVVSSSgpID09IGF0dHJpYnV0ZS0+bmFtZXNwYWNlVVJJKCk7Cit9
CisKK3N0YXRpYyBib29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0
ZUl0ZW0sIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxl
Y3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRpdmUpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHJpYnV0ZUl0ZW0tPnZhbHVlKCk7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChtYXRjaCkgeworICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgorICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSA/IHNl
bGVjdG9yVmFsdWUgIT0gdmFsdWUgOiAhZXF1YWxJZ25vcmluZ0Nhc2Uoc2VsZWN0b3JWYWx1ZSwg
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpMaXN0OgorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZ25vcmUg
ZW1wdHkgc2VsZWN0b3JzIG9yIHNlbGVjdG9ycyBjb250YWluaW5nIHNwYWNlcworICAgICAgICAg
ICAgaWYgKHNlbGVjdG9yVmFsdWUuY29udGFpbnMoJyAnKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOworICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbGVj
dG9yVmFsdWUsIHN0YXJ0U2VhcmNoQXQsIGNhc2VTZW5zaXRpdmUpOworICAgICAgICAgICAgICAg
IGlmIChmb3VuZFBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGlmICghZm91bmRQb3MgfHwgdmFsdWVbZm91bmRQb3MgLSAx
XSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kU3RyID0gZm91bmRQ
b3MgKyBzZWxlY3RvclZhbHVlLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW5k
U3RyID09IHZhbHVlLmxlbmd0aCgpIHx8IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoLiBLZWVw
IGxvb2tpbmcuCisgICAgICAgICAgICAgICAgc3RhcnRTZWFyY2hBdCA9IGZvdW5kUG9zICsgMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6Q29udGFpbjoKKyAgICAgICAgaWYgKCF2YWx1ZS5jb250YWlucyhzZWxlY3Rv
clZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6QmVnaW46CisgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVlLCBj
YXNlU2Vuc2l0aXZlKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RW5kOgor
ICAgICAgICBpZiAoIXZhbHVlLmVuZHNXaXRoKHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUp
IHx8IHNlbGVjdG9yVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBoZW46CisgICAgICAgIGlm
ICh2YWx1ZS5sZW5ndGgoKSA8IHNlbGVjdG9yVmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWxlY3RvclZhbHVl
LCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
SXQgdGhleSBzdGFydCB0aGUgc2FtZSwgY2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIGZvbGxvd2lu
ZyAnLSc6CisgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBzZWxlY3RvclZhbHVlLmxlbmd0
aCgpICYmIHZhbHVlW3NlbGVjdG9yVmFsdWUubGVuZ3RoKCldICE9ICctJykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3M6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVz
LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9y
QXR0ciwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRp
dmUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWF0dHJpYnV0ZVF1YWxpZmll
ZE5hbWVNYXRjaGVzKGF0dHJpYnV0ZUl0ZW0sIHNlbGVjdG9yQXR0cikpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoYXR0
cmlidXRlSXRlbSwgbWF0Y2gsIHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwg
RWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rvciwg
Ym9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0
eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGUpOworICAgIGlm
ICghZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghc2VsZWN0b3JUYWdN
YXRjaGVzKGUsIHNlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoc2Vs
LT5oYXNBdHRyaWJ1dGUoKSkgeworICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpDbGFzcykKKyAgICAgICAgICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihlKS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUo
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkKKyAgICAgICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkgPT0gc2VsLT52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIHRoZSBjYXNlIHdlcmUgZWxlbWVudFN0eWxlIGlzIDAuCisgICAgICAgIGlmIChl
bGVtZW50U3R5bGUgJiYgKCFlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCAoIXN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnQqPihlKS0+aXNNYXBwZWRBdHRyaWJ1dGUoYXR0cikgJiYgYXR0ciAhPSB0eXBl
QXR0ciAmJiBhdHRyICE9IHJlYWRvbmx5QXR0cikpKQorICAgICAgICAgICAgZWxlbWVudFN0eWxl
LT5zZXRBZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKCk7IC8vIFNwZWNpYWwtY2FzZSB0aGUg
InR5cGUiIGFuZCAicmVhZG9ubHkiIGF0dHJpYnV0ZXMgc28gaW5wdXQgZm9ybSBjb250cm9scyBj
YW4gc2hhcmUgc3R5bGUuCisgICAgICAgIAorICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMgPSBlLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBib29sIGNhc2VTZW5zaXRp
dmUgPSAhbV9kb2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2
ZVZhbHVlKGF0dHIpOworICAgICAgICAKKyAgICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVNYXRjaGVz
KGF0dHJpYnV0ZXMsIHN0YXRpY19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsLT5tX21hdGNo
KSwgYXR0ciwgc2VsLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpIHsKKyAgICAgICAgLy8gSGFuZGxlIDpub3QgdXAgZnJvbnQuCisgICAg
ICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7Cisg
ICAgICAgICAgICBBU1NFUlQoc2VsLT5zZWxlY3Rvckxpc3QoKSk7CisgICAgICAgICAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzdWJTZWwgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJT
ZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgLy8g
Om5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCisgICAg
ICAgICAgICAgICAgLy8gcmVzdHJpY3Rpb24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBsZXQncyBo
b25vciBpdC4KKyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhp
cyBuZXZlciBvY2N1cnMKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3ViU2VsLT5wc2V1ZG9UeXBl
KCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgZHluYW1pY1BzZXVkbywg
dHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgKFJlbmRlclNjcm9sbGJh
cjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikpIHsKKyAgICAgICAgICAgIC8v
IENTUyBzY3JvbGxiYXJzIG1hdGNoIGEgc3BlY2lmaWMgc3Vic2V0IG9mIHBzZXVkbyBjbGFzc2Vz
LCBhbmQgdGhleSBoYXZlIHNwZWNpYWxpemVkIHJ1bGVzIGZvciBlYWNoCisgICAgICAgICAgICAv
LyAoc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIGludm9sdmVkKS4KKyAgICAgICAgICAgIHJl
dHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKHNlbCwgZHluYW1pY1BzZXVkbyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyA9PSBTRUxFQ1RJT04pIHsKKyAgICAgICAgICAg
IGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3Rp
dmUpCisgICAgICAgICAgICAgICAgcmV0dXJuICFtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBO
b3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCisgICAgICAgIHN3aXRjaCAoc2Vs
LT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgorICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3Q6CisgICAgICAgICAgICBicmVhazsgLy8gQWxy
ZWFkeSBoYW5kbGVkIHVwIGFib3ZlLgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bXB0eToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7
CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxl
Y3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpICYmIChl
LT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+cmVuZGVyU3R5bGUoKS0+dW5p
cXVlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0RW1w
dHlTdGF0ZShyZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9GaXJzdENoaWxkOgorICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmly
c3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CisgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9k
ZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
U3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlOgorICAgICAgICAg
ICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBl
CisgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4t
PnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIW4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5
bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdENo
aWxkOgorICAgICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRo
YXQgaXMgYW4gZWxlbWVudAorICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVj
dGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRT
dHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RP
ZlR5cGU6CisgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVt
ZW50IG9mIGl0cyB0eXBlCisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9
IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0g
ZS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmco
KTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFt
ZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOgorICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
b29sIGxhc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
biAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAg
ICAgICBmaXJzdENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAm
JiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBu
ID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJl
bnRTdHlsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYg
Y2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0
Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkICYmIGNoaWxk
U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRMYXN0Q2hpbGRT
dGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RD
aGlsZCAmJiBsYXN0Q2hpbGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KKyAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5
bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgbGFz
dENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5o
YXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkgeworICAgICAgICAgICAg
ICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYg
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENo
aWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb050aENoaWxkOgorICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRo
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFy
ZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBj
b3VudCA9IDE7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OworICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBzID0gbi0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9OdGhPZlR5cGU6CisgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGNvdW50
ID0gMTsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFn
UU5hbWUoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7
CisgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUo
dHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAg
ICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVu
dFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6CisgICAgICAgICAgICBpZiAoIXNl
bC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChF
bGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50
U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBl
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZU
eXBlOgorICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09u
bHkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxl
bWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5
bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsK
KyAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9k
ZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5u
ZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2Vs
LT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb1RhcmdldDoKKyAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50KCktPmNzc1Rh
cmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKKyAgICAgICAgICAgIGZvciAo
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2Vs
ZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgeworICAg
ICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5hbWljUHNldWRv
LCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxl
KSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0FueUxpbms6CisgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BdXRvZmlsbDoKKyAgICAgICAgICAgIGlmICghZSB8fCAh
ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxl
bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxl
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0xpbms6CisgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIW1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICAg
ICAgaWYgKGUgJiYgZS0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXNNYXRj
aGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNl
UHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RyYWc6CisgICAgICAgICAg
ICBpZiAoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZm
ZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0
eWxlKCkpCisgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURy
YWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpICYmIGUtPnJlbmRl
cmVyKCktPmlzRHJhZ2dpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAg
ICAgICAgICAgIGlmIChlICYmICgoZS0+Zm9jdXNlZCgpICYmIGUtPmRvY3VtZW50KCktPmZyYW1l
KCkgJiYgZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFj
dGl2ZSgpKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwg
Q1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92
ZXI6CisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBz
aG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCisgICAgICAgICAgICAvLyBocmVmIGFu
ZCAqOmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGZv
ciBzaXRlcyBsaWtlIHdzai5jb20uCisgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8
IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykp
IHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0
cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQorICAgICAg
ICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0
cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZS0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6Cisg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3Vs
ZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KKyAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6
YWN0aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIAorICAgICAgICAgICAgaWYgKG1fc3Ry
aWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNU
YWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRC
eUFjdGl2ZVJ1bGVzKHRydWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0
eWxlKCkpCisgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVk
QnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZS0+YWN0aXZlKCkgfHwg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9y
OjpQc2V1ZG9BY3RpdmUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbmFibGVkOgorICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxs
UGFnZU1lZGlhOgorICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKSAmJiBlLT5k
b2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGUg
JiYgZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9EaXNhYmxlZDoKKyAgICAgICAgICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuICFlLT5pc0VuYWJsZWRGb3JtQ29udHJv
bCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b1JlYWRPbmx5OgorICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBl
LT5pc1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOworICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6IAorICAgICAgICAgICAgaWYg
KCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFl
LT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvT3B0aW9uYWw6CisgICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNv
bnRyb2woKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVxdWlyZWQ6CisgICAg
ICAgICAgICByZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmFsaWQ6CisgICAgICAgICAgICBpZiAoIWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlLT53aWxs
VmFsaWRhdGUoKSAmJiBlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ludmFsaWQ6CisgICAgICAgICAgICBpZiAoIWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiAoZS0+d2ls
bFZhbGlkYXRlKCkgJiYgIWUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFz
VW5hY2NlcHRhYmxlVmFsdWUoKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hl
Y2tlZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWlu
YXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CisgICAgICAg
ICAgICAgICAgLy8geW91IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4g
V2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdAorICAg
ICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1h
dGNoaW5nIHRoZSBwc2V1ZG8uCisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5w
dXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICYmICFpbnB1
dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5kZXRlcm1pbmF0ZToKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXBy
b2dyZXNzLT5pc0RldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlu
cHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Sb290OgorICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFu
ZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBl
LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFyZ3VtZW50ID0gc2VsLT5hcmd1bWVudCgpOworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoYXJndW1lbnQsIGZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxl
bmd0aCgpICE9IGFyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0aCgpXSAh
PSAnLScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbjoKKyAgICAgICAgICAgIC8vIFdo
aWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9jdW1l
bnQncyBjdXJyZW50IGZ1bGxzY3JlZW4gCisgICAgICAgICAgICAvLyBlbGVtZW50IGlzIGFuIGVs
ZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBs
aWVzIHRvIAorICAgICAgICAgICAgLy8gdGhhdCBlbGVtZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwg
PG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50IHdob3NlIGNoaWxkIGJyb3dzaW5nIAorICAgICAg
ICAgICAgLy8gY29udGV4dCdzIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhh
cyB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgorICAgICAgICAgICAgaWYg
KGUtPmlzRnJhbWVFbGVtZW50QmFzZSgpICYmIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRC
YXNlKj4oZSktPmNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxs
U2NyZWVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIGUgPT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxTY3JlZW5UcmFu
c2l0aW9uOgorICAgICAgICAgICAgaWYgKGUgIT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5pbWF0aW5nRnVsbFNjcmVlbigpOwor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuQW5jZXN0b3I6CisgICAg
ICAgICAgICByZXR1cm4gZS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuRG9jdW1lbnQ6CisgICAgICAgICAgICAv
LyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwt
c2NyZWVuLWRvY3VtZW50JyBwc2V1ZG9jbGFzcyBhcHBsaWVzIAorICAgICAgICAgICAgLy8gdG8g
YWxsIGVsZW1lbnRzIG9mIHRoYXQgRG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoIWUtPmRvY3Vt
ZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0luUmFuZ2U6CisgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNW
YWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlLT5pc0luUmFuZ2UoKTsK
KyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0T2ZSYW5nZToKKyAgICAgICAgICAg
IGlmICghZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlLT5k
b2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAg
cmV0dXJuIGUtPmlzT3V0T2ZSYW5nZSgpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9Vbmtub3duOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAg
ICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoc2VsLT5pc1Vua25v
d25Qc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgICAgIG1faGFzVW5rbm93blBzZXVkb0VsZW1l
bnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBlLT5zaGFkb3dQc2V1ZG9JZCgpID09IHNl
bC0+dmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUHNldWRvSWQgcHNldWRv
SWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoc2VsLT5wc2V1ZG9UeXBlKCkpOworICAgICAgICBp
ZiAocHNldWRvSWQgPT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0
VXNlc0ZpcnN0TGV0dGVyUnVsZXModHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBzZXVk
b0lkICE9IE5PUFNFVURPKQorICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwor
ICAgIH0KKyAgICAvLyAjIyMgYWRkIHRoZSByZXN0IG9mIHRoZSBjaGVja3MuLi4KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRv
Q2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBjb25zdAoreworICAgIFJlbmRlclNj
cm9sbGJhciogc2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJl
c29sdmUoKTsKKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRG
b3JTdHlsZVJlc29sdmUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFy
eSBoYWNrIGZvciByZXNpemVycyBhbmQgc2Nyb2xsYmFyIGNvcm5lcnMuIEV2ZW50dWFsbHkgOndp
bmRvdy1pbmFjdGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAorICAgIC8vIHBzZXVkbyBjbGFzcyBh
bmQganVzdCBhcHBseSB0byBldmVyeXRoaW5nLgorICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAgICAgIHJldHVybiAhbV9k
b2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICAKKyAg
ICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VS
VChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKKyAgICBzd2l0Y2gg
KHNlbC0+cHNldWRvVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxl
ZDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOworICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgorICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5hYmxl
ZCgpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgorICAgICAgICB7CisgICAg
ICAgICAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBob3ZlcmVkUGFydCAhPSBOb1BhcnQ7CisgICAgICAgICAgICBpZiAocGFy
dCA9PSBUcmFja0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJlZFBhcnQgPT0g
QmFja1RyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IGhvdmVy
ZWRQYXJ0ID09IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IGhvdmVyZWRQ
YXJ0OworICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgorICAg
ICAgICB7CisgICAgICAgICAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpOworICAgICAgICAgICAgaWYgKHBhcnQgPT0gU2Nyb2xsYmFyQkdQYXJ0
KQorICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCAhPSBOb1BhcnQ7CisgICAgICAg
ICAgICBpZiAocGFydCA9PSBUcmFja0JHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJl
c3NlZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJhY2tQ
YXJ0IHx8IHByZXNzZWRQYXJ0ID09IFRodW1iUGFydDsKKyAgICAgICAgICAgIHJldHVybiBwYXJ0
ID09IHByZXNzZWRQYXJ0OworICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
SG9yaXpvbnRhbDoKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZlcnRpY2Fs
OgorICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlY3JlbWVudDoKKyAgICAgICAg
cmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25F
bmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9JbmNyZW1lbnQ6CisgICAgICAgIHJldHVybiBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRU
cmFja1BhcnQ7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3RhcnQ6CisgICAgICAgIHJl
dHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9FbmQ6CisgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8
IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogCisgICAgICAgIHsK
KyAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9
IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAgaWYg
KHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBi
dXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydCB8fCBidXR0b25z
UGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgaWYg
KHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFy
dCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxh
Y2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9IAorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1NpbmdsZUJ1
dHRvbjoKKyAgICAgICAgeworICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBi
dXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7
CisgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0g
Rm9yd2FyZFRyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVu
dCA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm9CdXR0b246CisgICAgICAg
IHsKKyAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVu
dCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOworICAgICAgICAgICAg
aWYgKHBhcnQgPT0gQmFja1RyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9u
c1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09
IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ7CisgICAgICAgICAgICBpZiAocGFydCA9PSBGb3J3
YXJkVHJhY2tQYXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09
IFNjcm9sbGJhckJ1dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZVN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ29ybmVyUHJlc2VudDoKKyAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBTZWxl
Y3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2xpbmtz
Q2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgIG5v
ZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0b3JDaGVj
a2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQoreworICAgIGlm
ICghbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRlZEhhc2gpKQor
ICAgICAgICByZXR1cm47CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOworICAgICAgICBpZiAoYXR0ciAmJiB2
aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0gdmlzaXRlZEhh
c2gpCisgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5z
ZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9s
YXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTZWxlY3RvckNoZWNrZXJfaAorI2RlZmluZSBT
ZWxlY3RvckNoZWNrZXJfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkxpbmtI
YXNoLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NTZWxlY3RvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5
bGU7CisKK2NsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2VsZWN0b3JDaGVja2VyKTsKK3B1YmxpYzoKKyAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQq
LCBib29sIHN0cmljdFBhcnNpbmcpOworCisgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0
b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkg
fTsKKworICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29s
IGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OworICAgIFNlbGVjdG9yTWF0
Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVy
U3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0Owor
ICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
Kik7CisgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
LCBjb25zdCBFbGVtZW50Kik7CisKKyAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUo
RWxlbWVudCopIGNvbnN0OworICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOworICAg
IHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CisgICAgCisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAg
IGJvb2wgc3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQor
ICAgIAorICAgIGJvb2wgaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbGxlY3RpbmdSdWxlc09ubHk7IH0KKyAgICB2b2lkIHNldENvbGxlY3RpbmdSdWxlc09ubHko
Ym9vbCBiKSB7IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ID0gYjsgfQorICAgIAorICAgIGJvb2wg
aXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzczsgfQorICAgIHZvaWQgc2V0TWF0Y2hpbmdWaXNpdGVkUHNldWRv
Q2xhc3MoYm9vbCBiKSB7IG1faXNNYXRjaGluZ1Zpc2l0ZWRQc2V1ZG9DbGFzcyA9IGI7IH0KKyAg
ICAKKyAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5
bGU7IH0KKyAgICB2b2lkIHNldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkKSB7IG1fcHNl
dWRvU3R5bGUgPSBwc2V1ZG9JZDsgfQorCisgICAgYm9vbCBoYXNVbmtub3duUHNldWRvRWxlbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50czsgfQorICAgIHZv
aWQgY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSB7IG1faGFzVW5rbm93blBzZXVkb0Vs
ZW1lbnRzID0gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3Io
Q1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNT
dWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgYm9vbCBjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0Owor
CisgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCopIGNv
bnN0OworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgYm9vbCBtX3N0cmljdFBhcnNp
bmc7CisgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOworICAgIGJvb2wgbV9pc0NvbGxlY3RpbmdS
dWxlc09ubHk7CisgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKKyAgICBtdXRhYmxlIGJvb2wg
bV9oYXNVbmtub3duUHNldWRvRWxlbWVudHM7CisgICAgbXV0YWJsZSBib29sIG1faXNNYXRjaGlu
Z1Zpc2l0ZWRQc2V1ZG9DbGFzczsKKyAgICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtI
YXNoSGFzaD4gbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGU7Cit9OworCitpbmxpbmUgRUlu
c2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK3sKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzTGluaygpKQor
ICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKKyAgICByZXR1cm4gZGV0ZXJtaW5lTGlua1N0
YXRlU2xvd0Nhc2UoZWxlbWVudCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5NDY0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMyw3ICsxODIzLDcgQEAgYm9vbCBFbGVtZW50Ojp3
ZWJraXRNYXRjaGVzU2VsZWN0b3IoY29ucwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihk
b2N1bWVudCgpLCBzdHJpY3RQYXJzaW5nKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyKGRvY3VtZW50KCksIHN0cmljdFBhcnNpbmcpOwogICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENT
U1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hl
Y2tlci5jaGVja1NlbGVjdG9yKHNlbGVjdG9yLCB0aGlzKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24gOTQ2
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgU2VsZWN0b3JRdWVyeTo6U2VsZWN0b3JRdWVyeShOb2RlKiBy
b290TgogICAgICwgbV9zZWxlY3RvckNoZWNrZXIocm9vdE5vZGUtPmRvY3VtZW50KCksICFyb290
Tm9kZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiB7CiAgICAgZm9yIChDU1NTZWxlY3Rv
ciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKLSAgICAgICAgbV9zZWxlY3RvcnMuYXBw
ZW5kKFNlbGVjdG9yRGF0YShzZWxlY3RvciwgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpKTsKKyAgICAgICAgbV9zZWxl
Y3RvcnMuYXBwZW5kKFNlbGVjdG9yRGF0YShzZWxlY3RvciwgU2VsZWN0b3JDaGVja2VyOjppc0Zh
c3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpKTsKIH0KICAgICAKIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IFNlbGVjdG9yUXVlcnk6OnF1ZXJ5QWxsKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1NlbGVjdG9yUXVlcnkuaAkocmV2aXNpb24gOTQ2NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFNlbGVjdG9yUXVlcnlfaAogI2RlZmluZSBTZWxlY3RvclF1ZXJ5X2gKIAotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDcgKzU3LDcgQEAg
cHJpdmF0ZToKICAgICB9OwogICAgIE5vZGUqIG1fcm9vdE5vZGU7CiAgICAgVmVjdG9yPFNlbGVj
dG9yRGF0YT4gbV9zZWxlY3RvcnM7Ci0gICAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyIG1fc2VsZWN0b3JDaGVja2VyOworICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hl
Y2tlcjsKIH07CiAKIH0K
</data>
<flag name="commit-queue"
          id="103023"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>