<?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>161095</bug_id>
          
          <creation_ts>2016-08-23 11:07:10 -0700</creation_ts>
          <short_desc>Add pref for enabling new CSS parsing and move parser files into subdirectory.</short_desc>
          <delta_ts>2016-09-22 13:37:45 -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>WebKit 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>
          
          <blocked>46591</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1222291</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:07:10 -0700</bug_when>
    <thetext>Add pref for enabling new CSS parsing and move parser files into subdirectory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222293</commentid>
    <comment_count>1</comment_count>
      <attachid>286739</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:07:35 -0700</bug_when>
    <thetext>Created attachment 286739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222298</commentid>
    <comment_count>2</comment_count>
      <attachid>286741</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:10:39 -0700</bug_when>
    <thetext>Created attachment 286741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222303</commentid>
    <comment_count>3</comment_count>
      <attachid>286743</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:12:25 -0700</bug_when>
    <thetext>Created attachment 286743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222308</commentid>
    <comment_count>4</comment_count>
      <attachid>286745</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:17:14 -0700</bug_when>
    <thetext>Created attachment 286745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222310</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-23 11:18:51 -0700</bug_when>
    <thetext>Attachment 286745 did not pass style-queue:


ERROR: Source/WebCore/CMakeLists.txt:1348:  There should be exactly one empty line instead of 0 between &quot;css/CSSPageRule.cpp&quot; and &quot;css/parser/CSSParser.cpp&quot;.  [list/emptyline] [5]
ERROR: Source/WebCore/CMakeLists.txt:1393:  There should be exactly one empty line instead of 0 between &quot;css/SVGCSSComputedStyleDeclaration.cpp&quot; and &quot;css/parser/SVGCSSParser.cpp&quot;.  [list/emptyline] [5]
Total errors found: 2 in 9 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>1222315</commentid>
    <comment_count>6</comment_count>
      <attachid>286746</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 11:23:34 -0700</bug_when>
    <thetext>Created attachment 286746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222317</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-23 11:25:58 -0700</bug_when>
    <thetext>Attachment 286746 did not pass style-queue:

ERROR: Source/WebCore/css/parser/CSSParser.h:242:  &apos;parseGridTrackList&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedTrackListType&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/css/parser/CSSParser.h:261:  &apos;parseShapeProperty&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedCSSPropertyID&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/css/parser/CSSParser.h:692:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/WebCore/css/parser/CSSParser.h:730:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParserValues.h:119:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/css/parser/CSSParserValues.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:168:  MAX_SCALE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:616:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:617:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:618:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:798:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:799:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:800:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:808:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:828:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1708:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1717:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1909:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1903:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1947:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1950:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1966:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:1973:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2028:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2020:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2040:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2066:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2068:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2133:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2202:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2202:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2203:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2204:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2216:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2239:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2240:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2241:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2255:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2262:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2273:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2274:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2275:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2276:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2276:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2318:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2319:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2320:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2321:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2322:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2323:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2324:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2325:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2325:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2336:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2353:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2358:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2809:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2801:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2820:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2820:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2873:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2894:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2962:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:2963:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:3612:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:3615:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:3777:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:3996:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4045:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4074:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4074:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4099:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4102:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4315:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4435:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4698:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4707:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4711:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4727:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4825:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:4864:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:5063:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:5143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:5342:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:6205:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:6284:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:6502:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:6514:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7103:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7105:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7106:  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]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7145:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7155:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:7916:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8047:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8053:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8064:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8083:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8087:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8089:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8114:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8196:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8197:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8198:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8199:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8200:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8201:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8202:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8203:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8204:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8428:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/W
ebCore/css/parser/CSSParser.cpp:8429:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8430:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8431:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8432:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8543:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8544:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8545:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8749:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8757:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8875:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8878:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8908:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8910:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8919:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8949:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:8958:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9014:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9637:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9770:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9784:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9796:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9797:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9798:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9811:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9822:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9832:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9833:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9834:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9835:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9836:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9852:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9864:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9865:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9866:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9867:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9868:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9869:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9885:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9898:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9899:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9900:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9901:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9902:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9903:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9904:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9905:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9913:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9931:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9956:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9971:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9972:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9973:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9974:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9975:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9976:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9977:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9978:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9979:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9980:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:9981:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:10122:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12077:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12109:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12129:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12184:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12203:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:12617:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:13258:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:13576:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:13657:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/CSSParser.cpp:13734:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:27:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:49:  valid_primitive is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:292:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:59:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:59:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:60:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:66:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:66:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:67:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:77:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:77:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:78:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:78:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:102:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:108:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:112:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:117:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:122:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:131:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:131:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:137:  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]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:137:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:152:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:162:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:188:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:189:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:246:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:254:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:261:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:324:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:347:  valid_primitive is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/parser/SVGCSSParser.cpp:354:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 219 in 15 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>1222318</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-23 11:27:45 -0700</bug_when>
    <thetext>rs=me on the moves, r=me on the settings changes, when it builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222365</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-08-23 12:40:03 -0700</bug_when>
    <thetext>Landed in r204852.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286739</attachid>
            <date>2016-08-23 11:07:35 -0700</date>
            <delta_ts>2016-08-23 11:10:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4633</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA1LTMxICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04ocjIwMTA0MCk6IFJl
cGFpbnRpbmcgb2YgbW92aW5nIG92ZXJmbG93OmhpZGRlbiBvYmplY3RzIGlzIGJyb2tlbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODA3OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0
ZXN0IGZhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRtbAorCisgICAgICAg
IENoYW5nZSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSB0byBvbmx5IGJlIHRydWUgZm9y
IHNlbGYtcGFpbnRpbmcgbGF5ZXJzCisgICAgICAgIGFuZCBub3QgZm9yIGFsbCBsYXllcnMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
aGFzU2VsZlBhaW50aW5nTGF5ZXIpOgorCiAyMDE2LTA1LTMxICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEFpclBsYXkgcm91dGUgaXMgc29t
ZXRpbWVzIHJlc2V0IHdoZW4gY2hhbmdpbmcgdmlkZW8uc3JjCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjAxMTg2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
Niw5ICs5MzYsMTkgQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OnBpeGVsU25hcHBlZEFic29sdQog
ICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7
CiB9CiAKK2Jvb2wgUmVuZGVyT2JqZWN0OjpoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0Cit7
CisgICAgaWYgKCFoYXNMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKTsK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGxheWVy
LT5pc1NlbGZQYWludGluZ0xheWVyKCk7Cit9CisgICAgCiBib29sIFJlbmRlck9iamVjdDo6Y2hl
Y2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWRvY3VtZW50
KCkudmlldygpLT5uZWVkc0Z1bGxSZXBhaW50KCkgJiYgIWhhc0xheWVyKCkgJiYgZXZlckhhZExh
eW91dCgpOworICAgIHJldHVybiAhZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzRnVsbFJlcGFpbnQo
KSAmJiBldmVySGFkTGF5b3V0KCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiB9CiAKIExh
eW91dFJlY3QgUmVuZGVyT2JqZWN0OjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFVuaXQgb3V0bGlu
ZVdpZHRoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkocmV2aXNpb24gMjAxMTg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNiArNTA3LDcgQEAgcHVibGljOgogICAgIFZp
c2libGVJblZpZXdwb3J0U3RhdGUgdmlzaWJsZUluVmlld3BvcnRTdGF0ZSgpIHsgcmV0dXJuIG1f
Yml0ZmllbGRzLmhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLnZpc2libGVJblZpZXdwb3J0U3Rh
dGUoKSA6IFZpc2liaWxpdHlVbmtub3duOyB9CiAKICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzTGF5ZXIoKTsgfQorICAgIGJvb2wgaGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdDsKIAogICAgIGVudW0gQm94RGVjb3JhdGlvblN0YXRlIHsKICAgICAg
ICAgTm9Cb3hEZWNvcmF0aW9ucywKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUyMykKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA1
LTMxICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04o
cjIwMTA0MCk6IFJlcGFpbnRpbmcgb2YgbW92aW5nIG92ZXJmbG93OmhpZGRlbiBvYmplY3RzIGlz
IGJyb2tlbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9yZXBhaW50L292ZXJmbG93LWhpZGRlbi1tb3ZlbWVudC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRt
bDogQWRkZWQuCisKIDIwMTYtMDUtMzEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW01hY10gQWlyUGxheSByb3V0ZSBpcyBzb21ldGltZXMgcmVzZXQg
d2hlbiBjaGFuZ2luZyB2aWRlby5zcmMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVwYWludC9v
dmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L292ZXJmbG93LWhpZGRl
bi1tb3ZlbWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3IEBACiso
cmVwYWludCByZWN0cworICAocmVjdCA4IDggMzAwIDEwMCkKKyAgKHJlY3QgOCAxMDggMzAwIDIw
MCkKKyAgKHJlY3QgOCAxMDggMzAwIDIwMCkKKyAgKHJlY3QgOCA4IDMwMCAzMDApCispCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvb3ZlcmZsb3ctaGlkZGVu
LW1vdmVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQv
b3ZlcmZsb3ctaGlkZGVuLW1vdmVtZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPjwvaGVhZD4KKzxib2R5PgorPGRp
diBzdHlsZT0iaGVpZ2h0OiAzMDBweDsgb3ZlcmZsb3cteTogaGlkZGVuOyIgaWQ9Im91dGVyRGl2
Ij4KKyAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEwMHB4OyB3aWR0aDozMDBweDsgYmFja2dyb3Vu
ZDogcmVkOyBvdmVyZmxvdzpoaWRkZW4iIGlkPSJ1cHBlckRpdiI+PC9kaXY+CisgICAgPGRpdiBz
dHlsZT0iaGVpZ2h0OiAyMDBweDsgd2lkdGg6MzAwcHg7IGJhY2tncm91bmQ6IGdyZWVuOyBvdmVy
ZmxvdzpoaWRkZW4iIGlkPSJsb3dlckRpdiI+PC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGV4dC1iYXNlZC1yZXBhaW50LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKyAgICByZXBhaW50VGVzdCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBwZXJEaXYnKS5zdHlsZS5oZWlnaHQgPSAnMCc7
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb3dlckRpdicpLnN0eWxlLmhlaWdo
dCA9ICczMDBweCc7CisgICAgfTsKKyAgICBydW5SZXBhaW50VGVzdCgpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286741</attachid>
            <date>2016-08-23 11:10:39 -0700</date>
            <delta_ts>2016-08-23 11:12:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4633</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA1LTMxICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04ocjIwMTA0MCk6IFJl
cGFpbnRpbmcgb2YgbW92aW5nIG92ZXJmbG93OmhpZGRlbiBvYmplY3RzIGlzIGJyb2tlbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODA3OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0
ZXN0IGZhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRtbAorCisgICAgICAg
IENoYW5nZSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSB0byBvbmx5IGJlIHRydWUgZm9y
IHNlbGYtcGFpbnRpbmcgbGF5ZXJzCisgICAgICAgIGFuZCBub3QgZm9yIGFsbCBsYXllcnMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
aGFzU2VsZlBhaW50aW5nTGF5ZXIpOgorCiAyMDE2LTA1LTMxICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEFpclBsYXkgcm91dGUgaXMgc29t
ZXRpbWVzIHJlc2V0IHdoZW4gY2hhbmdpbmcgdmlkZW8uc3JjCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjAxMTg2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
Niw5ICs5MzYsMTkgQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OnBpeGVsU25hcHBlZEFic29sdQog
ICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7
CiB9CiAKK2Jvb2wgUmVuZGVyT2JqZWN0OjpoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0Cit7
CisgICAgaWYgKCFoYXNMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKTsK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGxheWVy
LT5pc1NlbGZQYWludGluZ0xheWVyKCk7Cit9CisgICAgCiBib29sIFJlbmRlck9iamVjdDo6Y2hl
Y2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWRvY3VtZW50
KCkudmlldygpLT5uZWVkc0Z1bGxSZXBhaW50KCkgJiYgIWhhc0xheWVyKCkgJiYgZXZlckhhZExh
eW91dCgpOworICAgIHJldHVybiAhZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzRnVsbFJlcGFpbnQo
KSAmJiBldmVySGFkTGF5b3V0KCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiB9CiAKIExh
eW91dFJlY3QgUmVuZGVyT2JqZWN0OjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFVuaXQgb3V0bGlu
ZVdpZHRoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkocmV2aXNpb24gMjAxMTg2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNiArNTA3LDcgQEAgcHVibGljOgogICAgIFZp
c2libGVJblZpZXdwb3J0U3RhdGUgdmlzaWJsZUluVmlld3BvcnRTdGF0ZSgpIHsgcmV0dXJuIG1f
Yml0ZmllbGRzLmhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLnZpc2libGVJblZpZXdwb3J0U3Rh
dGUoKSA6IFZpc2liaWxpdHlVbmtub3duOyB9CiAKICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzTGF5ZXIoKTsgfQorICAgIGJvb2wgaGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdDsKIAogICAgIGVudW0gQm94RGVjb3JhdGlvblN0YXRlIHsKICAgICAg
ICAgTm9Cb3hEZWNvcmF0aW9ucywKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUyMykKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA1
LTMxICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04o
cjIwMTA0MCk6IFJlcGFpbnRpbmcgb2YgbW92aW5nIG92ZXJmbG93OmhpZGRlbiBvYmplY3RzIGlz
IGJyb2tlbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9yZXBhaW50L292ZXJmbG93LWhpZGRlbi1tb3ZlbWVudC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRt
bDogQWRkZWQuCisKIDIwMTYtMDUtMzEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW01hY10gQWlyUGxheSByb3V0ZSBpcyBzb21ldGltZXMgcmVzZXQg
d2hlbiBjaGFuZ2luZyB2aWRlby5zcmMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVwYWludC9v
dmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZXBhaW50L292ZXJmbG93LWhpZGRl
bi1tb3ZlbWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3IEBACiso
cmVwYWludCByZWN0cworICAocmVjdCA4IDggMzAwIDEwMCkKKyAgKHJlY3QgOCAxMDggMzAwIDIw
MCkKKyAgKHJlY3QgOCAxMDggMzAwIDIwMCkKKyAgKHJlY3QgOCA4IDMwMCAzMDApCispCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvcmVwYWludC9vdmVyZmxvdy1oaWRkZW4tbW92ZW1lbnQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvb3ZlcmZsb3ctaGlkZGVu
LW1vdmVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQv
b3ZlcmZsb3ctaGlkZGVuLW1vdmVtZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPjwvaGVhZD4KKzxib2R5PgorPGRp
diBzdHlsZT0iaGVpZ2h0OiAzMDBweDsgb3ZlcmZsb3cteTogaGlkZGVuOyIgaWQ9Im91dGVyRGl2
Ij4KKyAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEwMHB4OyB3aWR0aDozMDBweDsgYmFja2dyb3Vu
ZDogcmVkOyBvdmVyZmxvdzpoaWRkZW4iIGlkPSJ1cHBlckRpdiI+PC9kaXY+CisgICAgPGRpdiBz
dHlsZT0iaGVpZ2h0OiAyMDBweDsgd2lkdGg6MzAwcHg7IGJhY2tncm91bmQ6IGdyZWVuOyBvdmVy
ZmxvdzpoaWRkZW4iIGlkPSJsb3dlckRpdiI+PC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGV4dC1iYXNlZC1yZXBhaW50LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKyAgICByZXBhaW50VGVzdCA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBwZXJEaXYnKS5zdHlsZS5oZWlnaHQgPSAnMCc7
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb3dlckRpdicpLnN0eWxlLmhlaWdo
dCA9ICczMDBweCc7CisgICAgfTsKKyAgICBydW5SZXBhaW50VGVzdCgpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286743</attachid>
            <date>2016-08-23 11:12:25 -0700</date>
            <delta_ts>2016-08-23 11:17:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>653399</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQ4NDApCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTIzICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCBwcmVmIGZvciBlbmFibGluZyBuZXcgQ1NTIHBhcnNpbmcgYW5kIG1v
dmUgcGFyc2VyIGZpbGVzIGludG8gc3ViZGlyZWN0b3J5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdLUHJlZmVyZW5jZXNTZXROZXdDU1NQYXJzZXJFbmFibGVkKToKKyAgICAgICAgKFdL
UHJlZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZl
cmVuY2VzKToKKwogMjAxNi0wOC0yMyAgSHVuc2VvcCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgW0VGTF0gVVJUQkYgYWZ0ZXIgcjIwNDc0My4KSW5kZXg6IFdlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJKHJldmlzaW9uIDIwNDc0MykK
KysrIFdlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIxLDYgKzIyMSw3IEBACiAgICAgbWFjcm8oRW5hYmxlSW5oZXJpdFVSSVF1ZXJ5
Q29tcG9uZW50LCBlbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnQsIEJvb2wsIGJvb2wsIGZh
bHNlLCAiIiwgIiIpIFwKICAgICBtYWNybyhTZXJ2aWNlQ29udHJvbHNFbmFibGVkLCBzZXJ2aWNl
Q29udHJvbHNFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8o
TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQsIG5ld0Jsb2NrSW5zaWRlSW5saW5lTW9k
ZWxFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCisgICAgbWFjcm8oTmV3Q1NT
UGFyc2VyRW5hYmxlZCwgbmV3Q1NTUGFyc2VyRW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFsc2UsICIi
LCAiIikgXAogICAgIG1hY3JvKEhUVFBFcXVpdkVuYWJsZWQsIGh0dHBFcXVpdkVuYWJsZWQsIEJv
b2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAogICAgIG1hY3JvKE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwg
IiIpIFwKICAgICBtYWNybyhTaGFkb3dET01FbmFibGVkLCBzaGFkb3dET01FbmFibGVkLCBCb29s
LCBib29sLCB0cnVlLCAiU2hhZG93IERPTSIsICJIVE1MIFNoYWRvdyBET00gcHJvdG90eXBlIikg
XApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDIwNDc0MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYxLDYgKzEyNjEsMTYgQEAKICAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+bmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQoKTsKIH0K
IAordm9pZCBXS1ByZWZlcmVuY2VzU2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChmbGFnKTsKK30KKworYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5uZXdDU1NQYXJzZXJFbmFi
bGVkKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0
cmljc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQog
ewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0
cmljc0VuYWJsZWQoZmxhZyk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHJldmlzaW9uIDIwNDc0MykKKysrIFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyOCw2ICszMjgsMTAgQEAKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXROZXdC
bG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAogLy8gRGVm
YXVsdHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmV3Q1NTUGFy
c2VyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLUHJl
ZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOworCisvLyBE
ZWZhdWx0cyB0byBmYWxzZS4KIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhl
bENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0cmljc0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5Myw3ICszMDkzLDggQEAKICAg
ICBzZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZChzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNpbXBsZUxpbmVMYXlvdXREZWJ1
Z0JvcmRlcnNFbmFibGVkS2V5KCkpKTsKICAgICAKICAgICBzZXR0aW5ncy5zZXROZXdCbG9ja0lu
c2lkZUlubGluZU1vZGVsRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6Om5ld0Jsb2NrSW5zaWRlSW5saW5lTW9kZWxFbmFibGVkS2V5KCkpKTsKLSAgICAK
KyAgICBzZXR0aW5ncy5zZXROZXdDU1NQYXJzZXJFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6bmV3Q1NTUGFyc2VyRW5hYmxlZEtleSgpKSk7CisKICAg
ICBzZXR0aW5ncy5zZXRTdWJwaXhlbENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3VicGl4ZWxDU1NPTUVsZW1lbnRN
ZXRyaWNzRW5hYmxlZEtleSgpKSk7CiAKICAgICBzZXR0aW5ncy5zZXRVc2VMZWdhY3lUZXh0QWxp
Z25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQ
cmVmZXJlbmNlc0tleTo6dXNlTGVnYWN5VGV4dEFsaWduUG9zaXRpb25lZEVsZW1lbnRCZWhhdmlv
cktleSgpKSk7CkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDc0MykKKysrIFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAiJHtXRUJDT1JF
X0RJUn0vY3J5cHRvL2tleXMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2NyeXB0by9wYXJhbWV0ZXJz
IgogICAgICIke1dFQkNPUkVfRElSfS9jc3MiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Nzcy9wYXJz
ZXIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Nzc2ppdCIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9t
IgogICAgICIke1dFQkNPUkVfRElSfS9kb20vZGVmYXVsdCIKQEAgLTEzNDYsOCArMTM0Nyw4IEBA
CiAgICAgY3NzL0NTU05hbWVkSW1hZ2VWYWx1ZS5jcHAKICAgICBjc3MvQ1NTT01VdGlscy5jcHAK
ICAgICBjc3MvQ1NTUGFnZVJ1bGUuY3BwCi0gICAgY3NzL0NTU1BhcnNlci5jcHAKLSAgICBjc3Mv
Q1NTUGFyc2VyVmFsdWVzLmNwcAorICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorICAgIGNz
cy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAogICAgIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKICAgICBjc3MvQ1NTUHJvcGVydHkuY3BwCiAgICAgY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0
YS5jcHAKQEAgLTEzOTEsNyArMTM5Miw3IEBACiAgICAgY3NzL1J1bGVGZWF0dXJlLmNwcAogICAg
IGNzcy9SdWxlU2V0LmNwcAogICAgIGNzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCi0gICAgY3NzL1NWR0NTU1BhcnNlci5jcHAKKyAgICBjc3MvcGFyc2VyL1NWR0NTU1BhcnNl
ci5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAogICAgIGNzcy9TZWxlY3RvckZpbHRl
ci5jcHAKICAgICBjc3MvU291cmNlU2l6ZUxpc3QuY3BwCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0ODQwKQorKysg
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0w
OC0yMyAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlZiBm
b3IgZW5hYmxpbmcgbmV3IENTUyBwYXJzaW5nIGFuZCBtb3ZlIHBhcnNlciBmaWxlcyBpbnRvIHN1
YmRpcmVjdG9yeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MTA5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyTW9k
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBj
c3MvU1ZHQ1NTUGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyOiBBZGRl
ZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6IENvcGllZCBmcm9tIGNzcy9D
U1NQYXJzZXIuY3BwLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6IENvcGllZCBm
cm9tIGNzcy9DU1NQYXJzZXIuaC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUu
aDogQ29waWVkIGZyb20gY3NzL0NTU1BhcnNlck1vZGUuaC4KKyAgICAgICAgKiBjc3MvcGFyc2Vy
L0NTU1BhcnNlclZhbHVlcy5jcHA6IENvcGllZCBmcm9tIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3Bw
LgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmg6IENvcGllZCBmcm9tIGNz
cy9DU1NQYXJzZXJWYWx1ZXMuaC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL1NWR0NTU1BhcnNlci5j
cHA6IENvcGllZCBmcm9tIGNzcy9TVkdDU1NQYXJzZXIuY3BwLgorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaW46CisKIDIwMTYtMDgtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgc2hvdWxkIG5vdCBoYXZlIGEgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCBwYXJlbnQgaW50ZXJmYWNlCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMz
MjIsNiArMzMyMiwxMiBAQAogCQk5M0Y5QjdBMDBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNGOUI3OUUwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
OTNGOUI3QTEwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5Qjc5RjBCQTYwMzI2MDA4NTQw
NjQgLyogSlNDREFUQVNlY3Rpb24uaCAqLzsgfTsKIAkJOTNGREFGQ0EwQjExMzA3NDAwRTI3NDZG
IC8qIEVkaXRvckluc2VydEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNGREFGQzkwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFj
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTk0NkQzNzJEMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MjgxRDZDQjI4QjAwNzcwODRG
IC8qIENTU1BhcnNlci5jcHAgKi87IH07CisJCTk0NkQzNzJFMUQ2Q0IyOTQwMDc3MDg0RiAvKiBD
U1NQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk0NkQzNzI5MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuaCAqLzsgfTsKKwkJOTQ2RDM3
MkYxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBD
U1NQYXJzZXJNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJOTQ2RDM3MzAxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzcyQjFE
NkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLzsgfTsKKwkJOTQ2RDM3MzEx
RDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MkMxRDZDQjI4QjAwNzcwODRGIC8qIENT
U1BhcnNlclZhbHVlcy5oICovOyB9OworCQk5NDZEMzczMzFENkNDNDJCMDA3NzA4NEYgLyogU1ZH
Q1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk0NkQzNzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovOyB9Owog
CQk5NkFCQTQyMzE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTZB
QkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cCAqLzsgfTsKIAkJOTcwM0UxQkYxNURDNEUzNzAwMUYyNEM4IC8qIEpTVm9pZENhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RTlFQzhC
MTVEQzQ5MkYwMDRGMkU3MSAvKiBKU1ZvaWRDYWxsYmFjay5jcHAgKi87IH07CiAJCTk3MDU5OTc3
MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyog
UG9saWN5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtNDUwMyw3ICs0NTA5LDYgQEAKIAkJQjIyMjdB
RjUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc5NUYwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1pvb21BbmRQYW4uY3BwICovOyB9OwogCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHWm9vbUFuZFBhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjIyMjc5NjAwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uaCAqLzsgfTsK
IAkJQjIyMjdCMDUwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjIyN0IwMDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCAqLzsgfTsKLQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyN0Iw
MTBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLzsgfTsKIAkJQjIyMkY2OTgw
QUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OTYwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZH
QW5nbGUuY3BwICovOyB9OwogCQlCMjIyRjY5OTBBQjc3MTk1MDAyMkVGQUQgLyogSlNTVkdBbmds
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2
OTcwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuaCAqLzsgfTsKIAkJQjIyMkY2OUMwQUI3
NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyRjY5QTBBQjc3MUI4MDAyMkVGQUQgLyogSlNTVkdF
bGVtZW50LmNwcCAqLzsgfTsKQEAgLTQ5MTksOCArNDkyNCw2IEBACiAJCUJDMDBGMDE1MEUwQTE4
OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDBGMDExMEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAwRjAxNjBFMEEx
ODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAxMjBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlz
dC5jcHAgKi87IH07CiAJCUJDMDBGMDE3MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAxMzBF
MEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oICovOyB9OwotCQlCQzAyQTRCNzBFMDk5N0I5
MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTRCNjBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFyc2Vy
VmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQkMwMkE1NDAwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTUzRjBFMDk5QzVB
MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLzsgfTsKIAkJQkMwMkE2M0MwRTA5QTlD
RjAwNEI2RDJCIC8qIENTU0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDJBNjNCMEUwOUE5Q0YwMDRCNkQyQiAvKiBDU1NGdW5j
dGlvblZhbHVlLmggKi87IH07CiAJCUJDMDJBNjQ2MEUwOUFBRTkwMDRCNkQyQiAvKiBDU1NGdW5j
dGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDJBNjQ1MEUwOUFBRTkwMDRCNkQyQiAvKiBDU1NGdW5jdGlvblZhbHVlLmNwcCAqLzsg
fTsKIAkJQkMwNkVEMDYwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
NkVEMDQwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwICov
OyB9OwpAQCAtNTExOCw4ICs1MTIxLDYgQEAKIAkJQkM3NERBNDkxMDEzRjQ2ODAwNzk4N0FEIC8q
IEpTUkdCQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNzREQTQ3MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JHQkNvbG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM3NkFDMTMwREQ3QUQ1QzAw
NDE1RjM0IC8qIFBhcnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM3NkFDMTEwREQ3QUQ1QzAwNDE1RjM0IC8qIFBhcnNlclV0aWxp
dGllcy5oICovOyB9OwogCQlCQzc3MkIzQzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzNjBD
NEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM3NzJCM0QwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Qzc3MkIzNzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLzsgfTsKLQkJQkM3NzJC
M0UwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NDBDNEVCMkM2MDA4
MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OwogCQlCQzc3MkM0NzBDNEVCMkM2MDA4
MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVz
dC5oICovOyB9OwogCQlCQzc3MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3
MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi87IH07CkBAIC02
MzMxLDcgKzYzMzIsNiBAQAogCQlGQjMwNTZDMjE2OUU1REFDMDA5NkEyMzIgLyogQ1NTR3JvdXBp
bmdSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjMwNTZDMTE2OUU1REFDMDA5NkEyMzIgLyogQ1NTR3JvdXBpbmdSdWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkI0ODRGNEMxNzFGODIxRTAw
MDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjQ4NEY0QTE3MUY4MjFFMDAwNDA3NTUgLyogVHJhbnNm
b3JtRnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJRkI0ODRGNEQxNzFGODIxRTAwMDQwNzU1IC8qIFRy
YW5zZm9ybUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5o
ICovOyB9OwotCQlGQjc4QUQyRTE1MUJGNUU2MDBGRTU0RDMgLyogQ1NTUGFyc2VyTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkI3OEFEMkMxNTFC
RjVEMjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGQjkxMzkyNDE2QUU0QzE3MDAxRkU2ODIgLyogRE9N
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkI5
MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaCAqLzsgfTsKIAkJRkI5MTM5MkExNkFF
NEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkI5MTM5MjgxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5o
ICovOyB9OwogCQlGQjkxMzkyQjE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCOTEzOTI5MTZBRTRG
QzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovOyB9OwpAQCAtMTA0MjksNiArMTA0MjksMTIg
QEAKIAkJOTNGOUI3OUUwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0RBVEFTZWN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8qIEpT
Q0RBVEFTZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0RBVEFT
ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRkRBRkM5MEIxMTMwNzQw
MEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVkaXRvckluc2VydEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NDZEMzcyODFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIv
Q1NTUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3MjkxRDZD
QjI4QjAwNzcwODRGIC8qIENTU1BhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDU1NQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3MkExRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlck1v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyTW9kZS5oOyBw
YXRoID0gcGFyc2VyL0NTU1BhcnNlck1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTQ2RDM3MkIxRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQYXJzZXJWYWx1ZXMuY3BwOyBwYXRo
ID0gcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyVmFsdWVzLmg7IHBhdGggPSBwYXJz
ZXIvQ1NTUGFyc2VyVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQz
NzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gU1ZHQ1NTUGFyc2VyLmNwcDsgcGF0aCA9IHBhcnNlci9TVkdD
U1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBDNEMwMkJFRDg5
MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHR3JhcGhpY3NFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3MDU5OTczMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg3OSw3ICsxMTg4NSw2IEBACiAJCUIyMjI3
OTYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdab29tQW5kUGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyMjI3OTYxMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyMjI3QjAwMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyMjI3QjAxMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0NTU1BhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdDU1NWYWx1
ZUtleXdvcmRzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyRjY5NjBBQjc3
MTk1MDAyMkVGQUQgLyogSlNTVkdBbmdsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTVkdBbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyMjJGNjk3MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjMwNyw4ICsxMjMxMiw2IEBACiAJCUJDMDBGMDExMEUwQTE4OTUwMEZEMDRFMyAv
KiBKU0ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDEyMEUwQTE4OTUwMEZEMDRFMyAvKiBK
U0ZpbGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmls
ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAxMzBFMEExODk1
MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0ZpbGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDJBNEI2MEUw
OTk3QjkwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMDJBNTNGMEUwOTlDNUEwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkE2M0IwRTA5QTlDRjAwNEI2RDJCIC8qIENT
U0Z1bmN0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRnVu
Y3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyQTY0NTBFMDlB
QUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NGdW5jdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwNkVEMDQwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTI1MTcsOCArMTI1MjAsNiBAQAogCQlCQzc0REE0NzEwMTNGNDY4MDA3OTg3QUQgLyogSlNSR0JD
b2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JHQkNvbG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzZBQzExMEREN0FENUMwMDQxNUYzNCAvKiBQ
YXJzZXJVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM2MEM0RUE5
MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3MkIzNzBD
NEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQ1NTUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzQ0MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRw
UmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0
cFJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NTBDNEVC
MkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNzcyQzRDMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FVHlwZVJlZ2lzdHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTA1LDcgKzEzOTA2LDYgQEAKIAkJRkIzMDU2
QzExNjlFNURBQzAwOTZBMjMyIC8qIENTU0dyb3VwaW5nUnVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NHcm91cGluZ1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkI0ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1GdW5jdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjQ4NEY0QjE3MUY4MjFFMDAw
NDA3NTUgLyogVHJhbnNmb3JtRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRyYW5zZm9ybUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjc4QUQyQzE1MUJGNUQyMDBGRTU0RDMgLyogQ1NTUGFyc2VyTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQYXJzZXJNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkI5MTM5MjExNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IERPTVBhdGguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQjkxMzkyODE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTgwNDYsNiArMTgwNDYsMTkgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTk0NkQzNzI3MUQ2Q0IyMjUwMDc3MDg0RiAvKiBw
YXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk0
NkQzNzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovLAorCQkJCTk0NkQz
NzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovLAorCQkJCTk0NkQzNzI5MUQ2
Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuaCAqLywKKwkJCQk5NDZEMzcyQTFENkNCMjhCMDA3
NzA4NEYgLyogQ1NTUGFyc2VyTW9kZS5oICovLAorCQkJCTk0NkQzNzJCMUQ2Q0IyOEIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovLAorCQkJCTk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLywKKwkJCSk7CisJCQluYW1lID0gcGFyc2VyOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJOTcxMTQ1RkUxNEVGMDA2RTAwNjc0RkQ5
IC8qIE1vZHVsZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMjIxMTIsNiArMjIxMjUsNyBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3Nz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5NDZEMzcy
NzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2VyICovLAogCQkJCUZCRDZBRjg0MTVFRjIxRDQwMDhC
NzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlGQkQ2QUY4NTE1RUYyMUQ0
MDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0aW9ucy5oICovLAogCQkJCUE4MEU2Q0RBMEExOTg5
Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggKi8sCkBAIC0yMjIxMywxMSArMjIyMjcsNiBAQAogCQkJ
CUE4MEU2Q0NCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5jcHAgKi8sCiAJCQkJQTgw
RTZDRDYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmggKi8sCiAJCQkJODVDNTZDQTYw
QUE4OUQ1RjAwRDk1NzU1IC8qIENTU1BhZ2VSdWxlLmlkbCAqLywKLQkJCQlCQzc3MkIzNzBDNEVB
OTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLywKLQkJCQlCQzc3MkIzODBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTUGFyc2VyLmggKi8sCi0JCQkJRkI3OEFEMkMxNTFCRjVEMjAwRkU1NEQzIC8q
IENTU1BhcnNlck1vZGUuaCAqLywKLQkJCQlCQzAyQTUzRjBFMDk5QzVBMDA0QjZEMkIgLyogQ1NT
UGFyc2VyVmFsdWVzLmNwcCAqLywKLQkJCQlCQzAyQTRCNjBFMDk5N0I5MDA0QjZEMkIgLyogQ1NT
UGFyc2VyVmFsdWVzLmggKi8sCiAJCQkJQTgwRTZDREIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1By
aW1pdGl2ZVZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UHJpbWl0aXZlVmFsdWUuaCAqLywKIAkJCQk5MzA3MDU5MDA5RTBDNzU4MDBCMTdGRTQgLyogQ1NT
UHJpbWl0aXZlVmFsdWUuaWRsICovLApAQCAtMjIzODQsNyArMjIzOTMsNiBAQAogCQkJCTg1MDY1
NkRGMEFBQjQ1NEYwMDJEMTVDMCAvKiBTdHlsZVNoZWV0TGlzdC5pZGwgKi8sCiAJCQkJOTNDQTRD
QTIwOURGOTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAwRDAwQkZGMTAw
NzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCi0JCQkJQjIy
MjdCMDEwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCiAJCQkJQjIyMjdC
MDQwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCiAJCQkJRkI0
ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJ
RkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5oICovLApAQCAt
MjM5NzEsOSArMjM5NzksNiBAQAogCQkJCTMxNEJFM0ExMUIzMEY2QjcwMDE0MTk4MiAvKiBDU1NO
YW1lZEltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY5OEZGRjQ1MTFBMjY3NjIwMEY1
NDhFOCAvKiBDU1NPTVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwMDBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNzcyQjNFMEM0
RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUZCNzhBRDJF
MTUxQkY1RTYwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
QzAyQTRCNzBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzdCMzg2MzEyMjg4M0U5MDBCODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0U2MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRp
dmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRDhBQzMwQ0M0OUJFMDAwQkZDNTU3IC8q
IENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxNTAsNiAr
MjUxNTUsNyBAQAogCQkJCUIyRkEzREI1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdQYXRoU2VnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCOTBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdQYXRoU2VnQXJjQWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NDZEMzcyRTFENkNC
Mjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCQjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQXJjUmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkZBM0RCRDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ2xvc2VQYXRoLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkZBM0RCRjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljQWJzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzIyLDYgKzI1MzI4LDcgQEAK
IAkJCQlFNEUzOUFGQjEzMzBFRkE4MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxheWVyUG9vbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RjUwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFy
Y2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBM
ZW5ndGguaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzJGMUQ2Q0IyOTQwMDc3MDg0RiAvKiBD
U1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2
RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUJBN0Q2MzE1MTQzN0NBMDBG
RTFFM0YgLyogTGVuZ3RoRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg3MTY3MDFD
ODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjY1MDAs
NiArMjY1MDcsNyBAQAogCQkJCTA4MTNBNEVBMTI4NDEzMjYwMDk5MjUxMSAvKiBTVkdTdGF0aWNQ
cm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUE5MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdTdG9wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQz
NzMxMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QUI4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHlsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QUJCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTVkdFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3dpdGNo
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYxOSw4ICsyNzYyNyw2IEBACiAJCQkJMzE0
QkUzQTMxQjMwRjZEMTAwMTQxOTgyIC8qIENTU05hbWVkSW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGOThGRkY0NDExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODBFNkNGNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM3NzJCM0QwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzAyQTU0MDBFMDk5QzVBMDA0QjZEMkIgLyog
Q1NTUGFyc2VyVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzODYyMTIyODgzRTkw
MEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBF
NkQwNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgwRTZDRjcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjg2MzEsNiArMjg2MzcsNyBAQAogCQkJCTFBNzUwRDhEMEE5MEU1MjEw
MDBGRjIxNSAvKiBKU05vZGVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc1MERE
NDBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTQ2RDM3MzAxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q5QzI2NTBDMTdBQTY3MDA1QzkwQTIgLyogSlNO
b2RlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzkxQTM4RjFCNDk4QUJFMDAz
RjlFRkEgLyogSlNOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzM1MDNDQTMx
MDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjkyOTMsNiArMjkzMDAsNyBAQAogCQkJCTBGNDNDODVEMTg5RTEwQ0YwMDAxOUFFMiAvKiBQZXJm
b3JtYW5jZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDU4MUZCNDE1MjBGOTNCMDAz
QTdBNzUgLyogUGVyaW9kaWNXYXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RDVEQzJEMEY0
MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5NDZEMzczMzFENkNDNDJCMDA3NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUQwRkYyQTVEMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9h
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEN0QzMzQzMUM3QTEyM0YwMDA0MTI5MyAvKiBQ
aXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREY0NUE3MUJE
MUM2RkQwMEU0RkE4QyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjk4MjUsNyArMjk4MzMsNiBAQAogCQkJCUIyMjI3OUExMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBNDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdCMDUwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjIyN0IwNjBEMDBCRkYxMDA3MUI3ODIg
LyogU1ZHQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUFEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyNzlCMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVzY0VsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMDAyOCw2ICszMDAzNSw3IEBACiAJCQkJN0FBM0E2OTkxOTRBNjRFNzAw
MUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFGNzJCRjBB
MTg3RkQ0NDkwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2QTMxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFn
ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyog
Q1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBQTNBNjlCMTk0QTY0RTcwMDFDQkQy
NCAvKiBUaWxlR3JpZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTg3NzBGMjEyNDJDNTM1MDAy
MjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0REQjEyNTFG
MTJEMDAzRUYyNjkgLyogVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzg1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Via2l0QG5pY2tzaGFua3MuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRp
b25UcmlnZ2VyU2Nyb2xsVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5o
IgotI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Nh
bnZhc1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCi0j
aW5jbHVkZSAiQ1NTQ3Jvc3NmYWRlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZh
bHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKLSNpbmNs
dWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFs
dWUuaCIKLSNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VT
ZXRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbmhl
cml0ZWRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0luaXRpYWxWYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0tleWZyYW1lUnVsZS5oIgotI2luY2x1ZGUgIkNTU0tleWZyYW1lc1J1bGUuaCIKLSNpbmNsdWRl
ICJDU1NMaW5lQm94Q29udGFpblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCi0j
aW5jbHVkZSAiQ1NTTmFtZWRJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIK
LSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNs
dWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSZXZlcnRWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVW5zZXRW
YWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1
ZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJDU1NWYXJpYWJs
ZURlcGVuZGVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ291bnRlci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR3JpZEFyZWEu
aCIKLSNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgotI2luY2x1ZGUgIkhhc2hUb29scy5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKLSNpbmNsdWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUmVj
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNW
R1BhdGhCeXRlU3RyZWFtLmgiCi0jaW5jbHVkZSAiU1ZHUGF0aFV0aWxpdGllcy5oIgotI2luY2x1
ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlclRlc3RGdW5j
dGlvbnMuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKLSNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRz
LmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTRmlsdGVy
VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDxiaXRzZXQ+Ci0jaW5jbHVkZSA8bGlt
aXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
Ci0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotI2luY2x1ZGUgIkNTU0dyaWRBdXRvUmVw
ZWF0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NHcmlkTGluZU5hbWVzVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0jaW5jbHVkZSAiTGVuZ3RoUmVwZWF0LmgiCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKLSNl
bmRpZgotCi0jZGVmaW5lIFlZREVCVUcgMAotCi0jaWYgWVlERUJVRyA+IDAKLWV4dGVybiBpbnQg
Y3NzeXlkZWJ1ZzsKLSNlbmRpZgotCi1leHRlcm4gaW50IGNzc3l5cGFyc2UoV2ViQ29yZTo6Q1NT
UGFyc2VyKik7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSB7Ci0KLWVudW0g
UHJvcGVydHlUeXBlIHsKLSAgICBQcm9wZXJ0eUV4cGxpY2l0LAotICAgIFByb3BlcnR5SW1wbGlj
aXQKLX07Ci0KLWNsYXNzIEltcGxpY2l0U2NvcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltcGxpY2l0U2NvcGUpOwotcHVibGljOgotICAgIEltcGxpY2l0U2NvcGUoV2ViQ29yZTo6Q1NT
UGFyc2VyJiBwYXJzZXIsIFByb3BlcnR5VHlwZSBwcm9wZXJ0eVR5cGUpCi0gICAgICAgIDogbV9w
YXJzZXIocGFyc2VyKQotICAgIHsKLSAgICAgICAgbV9wYXJzZXIubV9pbXBsaWNpdFNob3J0aGFu
ZCA9IHByb3BlcnR5VHlwZSA9PSBQcm9wZXJ0eUltcGxpY2l0OwotICAgIH0KLQotICAgIH5JbXBs
aWNpdFNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fcGFyc2VyLm1faW1wbGljaXRTaG9ydGhhbmQg
PSBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q1NTUGFyc2VyJiBtX3Bh
cnNlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29u
c3QgdW5zaWduZWQgQ1NTUGFyc2VyOjppbnZhbGlkUGFyc2VkUHJvcGVydGllc0NvdW50ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotc3RhdGljIGNvbnN0IGRvdWJsZSBN
QVhfU0NBTEUgPSAxMDAwMDAwOwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBj
b25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKLXsKLSAgICBBU1NFUlQodmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHZhbHVlLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgIHJldHVybiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5zdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwotfQotCi1z
dGF0aWMgYm9vbCBoYXNQcmVmaXgoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IGNoYXIqIHByZWZpeCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVmaXhbaV0pCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSAhPSBwcmVmaXhbaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLXN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1p
dGl2ZVZhbHVlUGFpcihBcmdzJiYuLi4gYXJncykKLXsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSk7Ci19Ci0KLWNsYXNzIEFuaW1hdGlvblBhcnNlQ29udGV4dCB7Ci1wdWJsaWM6
Ci0gICAgQW5pbWF0aW9uUGFyc2VDb250ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBjb21t
aXRGaXJzdEFuaW1hdGlvbigpCi0gICAgewotICAgICAgICBtX2ZpcnN0QW5pbWF0aW9uQ29tbWl0
dGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9u
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZpcnN0QW5pbWF0aW9uQ29tbWl0dGVk
OwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCkKLSAg
ICB7Ci0gICAgICAgIG1fYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxvd2Vk
OwotICAgIH0KLQotICAgIGJvb2wgaGFzU2VlbkFuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9oYXNTZWVuQW5pbWF0aW9uUHJvcGVydHlLZXl3
b3JkOwotICAgIH0KLQotICAgIHZvaWQgc2F3QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCkKLSAg
ICB7Ci0gICAgICAgIG1faGFzU2VlbkFuaW1hdGlvblByb3BlcnR5S2V5d29yZCA9IHRydWU7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxv
d2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9maXJzdEFuaW1hdGlvbkNvbW1pdHRlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQgeyBmYWxzZSB9
OwotfTsKLQotY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENTU1BhcnNlckNvbnRleHQ+IHN0cmljdENv
bnRleHQoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgcmV0dXJuIHN0cmljdENvbnRleHQ7Ci19Ci0KLUNT
U1BhcnNlckNvbnRleHQ6OkNTU1BhcnNlckNvbnRleHQoQ1NTUGFyc2VyTW9kZSBtb2RlLCBjb25z
dCBVUkwmIGJhc2VVUkwpCi0gICAgOiBiYXNlVVJMKGJhc2VVUkwpCi0gICAgLCBtb2RlKG1vZGUp
Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICAsIGNzc0dyaWRMYXlvdXRFbmFibGVk
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKQotI2VuZGlmCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBG
b3JjZSB0aGUgc2l0ZSBzcGVjaWZpYyBxdWlyayBiZWxvdyB0byB3b3JrIG9uIGlPUy4gSW52ZXN0
aWdhdGluZyBvdGhlciBzaXRlIHNwZWNpZmljIHF1aXJrcwotICAgIC8vIHRvIHNlZSBpZiB3ZSBj
YW4gZW5hYmxlIHRoZSBwcmVmZXJlbmNlIGFsbCB0b2dldGhlciBpcyB0byBiZSBoYW5kbGVkIGJ5
OgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84NDkzMzA5PiBJbnZlc3RpZ2F0ZSBFbmFibGluZyBT
aXRlIFNwZWNpZmljIFF1aXJrcyBpbiBNb2JpbGVTYWZhcmkgYW5kIFVJV2ViVmlldwotICAgIG5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gdHJ1ZTsKLSNlbmRpZgotfQotCi1DU1NQYXJzZXJDb250
ZXh0OjpDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBiYXNl
VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi0gICAgOiBiYXNlVVJMKGJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBiYXNlVVJMKQotICAgICwgY2hhcnNldChjaGFyc2V0
KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUoKSA/IENTU1F1aXJrc01vZGUgOiBD
U1NTdHJpY3RNb2RlKQotICAgICwgaXNIVE1MRG9jdW1lbnQoZG9jdW1lbnQuaXNIVE1MRG9jdW1l
bnQoKSkKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgICwgY3NzR3JpZExheW91dEVu
YWJsZWQoZG9jdW1lbnQuaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKQotI2VuZGlmCi17Ci0gICAg
aWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LnNldHRpbmdzKCkpIHsKLSAgICAgICAg
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKTsKLSAgICAgICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlID0gc2V0dGlu
Z3MtPmVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCk7Ci0gICAgICAgIHVzZUxlZ2Fj
eUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgPSBzZXR0aW5ncy0+dXNlTGVnYWN5QmFj
a2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpOwotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQotICAgICAgICB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgPSBzZXR0aW5ncy0+dGV4dEF1
dG9zaXppbmdFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkID0gc2V0dGluZ3MtPnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpOwotICAgIH0K
LQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogRm9yY2UgdGhlIHNpdGUgc3BlY2lm
aWMgcXVpcmsgYmVsb3cgdG8gd29yayBvbiBpT1MuIEludmVzdGlnYXRpbmcgb3RoZXIgc2l0ZSBz
cGVjaWZpYyBxdWlya3MKLSAgICAvLyB0byBzZWUgaWYgd2UgY2FuIGVuYWJsZSB0aGUgcHJlZmVy
ZW5jZSBhbGwgdG9nZXRoZXIgaXMgdG8gYmUgaGFuZGxlZCBieToKLSAgICAvLyA8cmRhcjovL3By
b2JsZW0vODQ5MzMwOT4gSW52ZXN0aWdhdGUgRW5hYmxpbmcgU2l0ZSBTcGVjaWZpYyBRdWlya3Mg
aW4gTW9iaWxlU2FmYXJpIGFuZCBVSVdlYlZpZXcKLSAgICBuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyA9IHRydWU7Ci0jZW5kaWYKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCi17Ci0gICAgcmV0dXJuIGEuYmFz
ZVVSTCA9PSBiLmJhc2VVUkwKLSAgICAgICAgJiYgYS5jaGFyc2V0ID09IGIuY2hhcnNldAotICAg
ICAgICAmJiBhLm1vZGUgPT0gYi5tb2RlCi0gICAgICAgICYmIGEuaXNIVE1MRG9jdW1lbnQgPT0g
Yi5pc0hUTUxEb2N1bWVudAotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgICAgICYm
IGEuY3NzR3JpZExheW91dEVuYWJsZWQgPT0gYi5jc3NHcmlkTGF5b3V0RW5hYmxlZAotI2VuZGlm
Ci0gICAgICAgICYmIGEubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPT0gYi5uZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcwotICAgICAgICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9k
ZSA9PSBiLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZQotICAgICAgICAmJiBhLnVz
ZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNr
Z3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yCi0gICAgICAgICYmIGEuc3ByaW5nVGltaW5nRnVu
Y3Rpb25FbmFibGVkID09IGIuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkOwotfQotCi1DU1NQ
YXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQotICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCi17Ci0jaWYgWVlERUJVRyA+IDAKLSAgICBjc3N5eWRlYnVnID0g
MTsKLSNlbmRpZgotfQotCi1DU1NQYXJzZXI6On5DU1NQYXJzZXIoKQotewotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZShDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3RlcnNbaV0pOwot
fQotCi12b2lkIENTU1BhcnNlclN0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNl
KCkKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlSW5QbGFjZShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBXZWJDb3JlOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNo
YXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBTdHJpbmdWaWV3IHN0cmluZywgY29u
c3QgY2hhciogc3VmZml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpCi17Ci0gICAgbV9wYXJzZWRU
ZXh0UHJlZml4TGVuZ3RoID0gcHJlZml4TGVuZ3RoOwotICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdMZW5ndGgg
KyBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGggKyBzdWZmaXhMZW5ndGggKyAxOwotICAgIG1fbGVu
Z3RoID0gbGVuZ3RoOwotCi0gICAgaWYgKCFzdHJpbmdMZW5ndGggfHwgc3RyaW5nLmlzOEJpdCgp
KSB7Ci0gICAgICAgIG1fZGF0YVN0YXJ0OCA9IHN0ZDo6bWFrZV91bmlxdWU8TENoYXJbXT4obGVu
Z3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkVGV4dFByZWZp
eExlbmd0aDsgKytpKQotICAgICAgICAgICAgbV9kYXRhU3RhcnQ4W2ldID0gcHJlZml4W2ldOwot
Ci0gICAgICAgIGlmIChzdHJpbmdMZW5ndGgpCi0gICAgICAgICAgICBtZW1jcHkobV9kYXRhU3Rh
cnQ4LmdldCgpICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoLCBzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgc3Rh
cnQgPSBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGggKyBzdHJpbmdMZW5ndGg7Ci0gICAgICAgIHVu
c2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3VmZml4TGVuZ3RoOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICAgICAgbV9kYXRhU3RhcnQ4W2ldID0g
c3VmZml4W2kgLSBzdGFydF07Ci0KLSAgICAgICAgbV9kYXRhU3RhcnQ4W2xlbmd0aCAtIDFdID0g
J1wwJzsKLQotICAgICAgICBtX2lzOEJpdFNvdXJjZSA9IHRydWU7Ci0gICAgICAgIG1fY3VycmVu
dENoYXJhY3RlcjggPSBtX2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgICAgIG1fY3VycmVudENoYXJh
Y3RlcjE2ID0gbnVsbHB0cjsKLSAgICAgICAgc2V0VG9rZW5TdGFydDxMQ2hhcj4obV9jdXJyZW50
Q2hhcmFjdGVyOCk7Ci0gICAgICAgIG1fbGV4RnVuYyA9ICZDU1NQYXJzZXI6OnJlYWxMZXg8TENo
YXI+OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYXRhU3RhcnQxNiA9IHN0ZDo6
bWFrZV91bmlxdWU8VUNoYXJbXT4obGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoOyArK2kpCi0gICAgICAgIG1fZGF0YVN0YXJ0MTZb
aV0gPSBwcmVmaXhbaV07Ci0KLSAgICBBU1NFUlQoc3RyaW5nTGVuZ3RoKTsKLSAgICBtZW1jcHko
bV9kYXRhU3RhcnQxNi5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmdMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLQotICAgIHVuc2ln
bmVkIHN0YXJ0ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nTGVuZ3RoOwotICAg
IHVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3VmZml4TGVuZ3RoOwotICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVN0YXJ0MTZbaV0gPSBzdWZm
aXhbaSAtIHN0YXJ0XTsKLQotICAgIG1fZGF0YVN0YXJ0MTZbbGVuZ3RoIC0gMV0gPSAnXDAnOwot
Ci0gICAgbV9pczhCaXRTb3VyY2UgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXI4ID0g
bnVsbHB0cjsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG1fZGF0YVN0YXJ0MTYuZ2V0KCk7
Ci0gICAgc2V0VG9rZW5TdGFydDxVQ2hhcj4obV9jdXJyZW50Q2hhcmFjdGVyMTYpOwotICAgIG1f
bGV4RnVuYyA9ICZDU1NQYXJzZXI6OnJlYWxMZXg8VUNoYXI+OwotfQotCi12b2lkIENTU1BhcnNl
cjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgVGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24sIFJ1bGVTb3VyY2VEYXRhTGlz
dCogcnVsZVNvdXJjZURhdGFSZXN1bHQsIGJvb2wgbG9nRXJyb3JzKQotewotICAgIHNldFN0eWxl
U2hlZXQoc2hlZXQpOwotICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNl
dCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCi0gICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVzdWx0KQot
ICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291
cmNlRGF0YUxpc3Q+KCk7Ci0gICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IHJ1bGVTb3VyY2VE
YXRhUmVzdWx0OwotCi0gICAgbV9sb2dFcnJvcnMgPSBsb2dFcnJvcnMgJiYgc2hlZXQtPnNpbmds
ZU93bmVyRG9jdW1lbnQoKSAmJiAhc2hlZXQtPmJhc2VVUkwoKS5pc0VtcHR5KCkgJiYgc2hlZXQt
PnNpbmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIG1faWdub3JlRXJyb3JzSW5EZWNs
YXJhdGlvbiA9IGZhbHNlOwotICAgIG1fc2hlZXRTdGFydExpbmVOdW1iZXIgPSB0ZXh0UG9zaXRp
b24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgIG1fc2hlZXRTdGFydENvbHVtbk51bWJlciA9
IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICBtX2xpbmVOdW1iZXIg
PSBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyOwotICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IDA7
Ci0gICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7
Ci0gICAgc2hlZXQtPnNocmlua1RvRml0KCk7Ci0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5y
ZXNldCgpOwotICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgPSBudWxscHRyOwotICAgIG1fcnVs
ZSA9IG51bGxwdHI7Ci0gICAgbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uID0gZmFsc2U7Ci0g
ICAgbV9sb2dFcnJvcnMgPSBmYWxzZTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6cGFyc2VSdWxlKFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotewotICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwotICAgIG1fYWxsb3dOYW1lc3Bh
Y2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtcnVsZXsi
LCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1fcnVs
ZTsKLX0KLQotUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1
bGUoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgc2V0U3R5bGVTaGVldChzaGVldCk7Ci0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWtleWZy
YW1lLXJ1bGV7ICIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBy
ZXR1cm4gbV9rZXlmcmFtZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25k
aXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9zdXBwb3J0c0NvbmRpdGlvbiA9
IGZhbHNlOwotICAgIC8vIGNhbid0IHVzZSB7IGJlY2F1c2UgdG9rZW5pemVyIHN0YXRlIHN3aXRj
aGVzIGZyb20gc3VwcG9ydHMgdG8gaW5pdGlhbCBzdGF0ZSB3aGVuIGl0IHNlZXMgeyB0b2tlbi4K
LSAgICAvLyBpbnN0ZWFkIGluc2VydCBvbmUgIiAiICh3aGljaCBpcyBXSElURVNQQUNFIGluIENT
U0dyYW1tYXIueSkKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc3VwcG9ydHMtY29uZGl0aW9u
ICIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICByZXR1cm4gbV9z
dXBwb3J0c0NvbmRpdGlvbjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29sb3JQcm9wZXJ0
eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExp
bmVUaHJvdWdoQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckJlZm9yZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xvcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbkNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFz
aXNDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZUlEKQot
ewotICAgIHJldHVybiB2YWx1ZUlEID49IENTU1ZhbHVlQXF1YSAmJiB2YWx1ZUlEIDw9IENTU1Zh
bHVlQXBwbGVTeXN0ZW1ZZWxsb3c7Ci19Ci0KLXN0YXRpYyBib29sIHZhbGlkUHJpbWl0aXZlVmFs
dWVDb2xvcihDU1NWYWx1ZUlEIHZhbHVlSUQsIGJvb2wgc3RyaWN0ID0gZmFsc2UpCi17Ci0gICAg
cmV0dXJuICh2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQ3VycmVudGNvbG9yIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgIHx8IENT
U1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUodmFsdWVJRCkgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUFscGhhCi0gICAgICAgIHx8ICh2YWx1ZUlEID49IENTU1ZhbHVlV2Via2l0Rm9jdXNS
aW5nQ29sb3IgJiYgdmFsdWVJRCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiAhc3RyaWN0KSk7Ci19
Ci0KLXN0YXRpYyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IHBhcnNlQ29sb3JWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSkKLXsKLSAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwotICAgIGJvb2wgc3Ry
aWN0ID0gaXNTdHJpY3RQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwotICAgIGlmICghaXNDb2xv
clByb3BlcnR5SUQocHJvcGVydHlJZCkpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpFcnJvcjsKLQotICAgIENTU1BhcnNlclN0cmluZyBjc3NTdHJpbmc7Ci0gICAgY3Nz
U3RyaW5nLmluaXQoc3RyaW5nKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtl
eXdvcmRJRChjc3NTdHJpbmcpOwotICAgIGlmICh2YWxpZFByaW1pdGl2ZVZhbHVlQ29sb3IodmFs
dWVJRCwgc3RyaWN0KSkgewotICAgICAgICBhdXRvIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7Ci0gICAgICAgIHJldHVybiBk
ZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBXVEZN
b3ZlKHZhbHVlKSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2Vk
IDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotICAgIH0KLSAgICBSR0JBMzIg
Y29sb3I7Ci0gICAgaWYgKCFDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9yKGNvbG9yLCBzdHJpbmcs
IHN0cmljdCAmJiBzdHJpbmdbMF0gIT0gJyMnKSkKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6
UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xvcik7Ci0gICAgcmV0dXJuIGRlY2xhcmF0aW9u
LmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIFdURk1vdmUodmFsdWUp
LCBpbXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJz
ZXI6OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Np
bXBsZUxlbmd0aFByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBib29sJiBhY2Nl
cHRzTmVnYXRpdmVOdW1iZXJzKQotewotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGlu
Z0JvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVBhZGRpbmdSaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRMb2dpY2FsSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dp
Y2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0UGFkZGluZ0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGlu
Z0VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgotI2lmIEVOQUJM
RShDU1NfR1JJRF9MQVlPVVQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW5HYXA6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3dHYXA6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0jZW5kaWYKLSAg
ICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDeDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q3k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2lu
TGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpblRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Ung6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdo
dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5BZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcmdpblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlYOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlZOgotICAgICAgICBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJv
b2wgcGFyc2VTaW1wbGVMZW5ndGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5z
aWduZWQmIGxlbmd0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyYgdW5pdCwgZG91Ymxl
JiBudW1iZXIpCi17Ci0gICAgaWYgKGxlbmd0aCA+IDIgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0g
Ml0gfCAweDIwKSA9PSAncCcgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gfCAweDIwKSA9PSAn
eCcpIHsKLSAgICAgICAgbGVuZ3RoIC09IDI7Ci0gICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYOwotICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gMSAmJiBjaGFyYWN0ZXJzW2xl
bmd0aCAtIDFdID09ICclJykgewotICAgICAgICBsZW5ndGggLT0gMTsKLSAgICAgICAgdW5pdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRTsKLSAgICB9Ci0KLSAgICAvLyBXZSBy
ZWx5IG9uIGNoYXJhY3RlcnNUb0RvdWJsZSBmb3IgdmFsaWRhdGlvbiBhcyB3ZWxsLiBUaGUgZnVu
Y3Rpb24KLSAgICAvLyB3aWxsIHNldCAib2siIHRvICJmYWxzZSIgaWYgdGhlIGVudGlyZSBwYXNz
ZWQtaW4gY2hhcmFjdGVyIHJhbmdlIGRvZXMKLSAgICAvLyBub3QgcmVwcmVzZW50IGEgZG91Ymxl
LgotICAgIGJvb2wgb2s7Ci0gICAgbnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgJm9rKTsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0IHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCi17Ci0g
ICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBib29sIGFjY2VwdHNOZWdhdGl2ZU51
bWJlcnM7Ci0gICAgaWYgKCFpc1NpbXBsZUxlbmd0aFByb3BlcnR5SUQocHJvcGVydHlJZCwgYWNj
ZXB0c05lZ2F0aXZlTnVtYmVycykpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVz
dWx0OjpFcnJvcjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAg
ICBkb3VibGUgbnVtYmVyOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwotCi0gICAgaWYgKHN0cmluZy5pczhCaXQo
KSkgewotICAgICAgICBpZiAoIXBhcnNlU2ltcGxlTGVuZ3RoKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIHVuaXQsIG51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFwYXJzZVNpbXBs
ZUxlbmd0aChzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgdW5pdCwgbnVtYmVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLSAgICB9Ci0K
LSAgICBpZiAodW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAg
ICBpZiAobnVtYmVyICYmIGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLSAgICAgICAgdW5p
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg7Ci0gICAgfQotICAgIGlmIChudW1iZXIgPCAw
ICYmICFhY2NlcHRzTmVnYXRpdmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgaWYgKHN0ZDo6aXNpbmYobnVtYmVyKSkKLSAgICAgICAg
cmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB2YWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobnVtYmVyLCB1bml0KTsKLSAg
ICByZXR1cm4gZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVy
dHlJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIGludCB2YWx1ZUlELCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJz
ZXJDb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cykKLXsKLSAg
ICBpZiAoIXZhbHVlSUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZTogLy8gY29sbGFw
c2UgfCBzZXBhcmF0ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVD
b2xsYXBzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU2VwYXJhdGUpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0
eWxlOiAvLyA8Ym9yZGVyLXN0eWxlPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRTdHlsZTogLy8gRGVmaW5lZCBhczogbm9uZSB8IGhpZGRlbiB8IGRvdHRlZCB8IGRh
c2hlZCB8Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOiAvLyBzb2xpZCB8
IGRvdWJsZSB8IGdyb292ZSB8IHJpZGdlIHwgaW5zZXQgfCBvdXRzZXQKLSAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJB
ZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVt
blJ1bGVTdHlsZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPj0gQ1NTVmFsdWVOb25lICYmIHZhbHVl
SUQgPD0gQ1NTVmFsdWVEb3VibGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKLSAgICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250ZW50Qm94
KQotICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUNhcHRpb25TaWRlOiAvLyB0b3AgfCBib3R0b20gfCBsZWZ0IHwgcmlnaHQgfCBp
bmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQm90dG9tKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjogLy8gbm9uZSB8IGxlZnQgfCByaWdodCB8IGJvdGgg
fCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUJvdGgpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjogLy8gbHRyIHwgcnRsIHwgaW5oZXJpdAot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUx0ciB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
UnRsKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlEaXNwbGF5OgotICAgICAgICAvLyBpbmxpbmUgfCBibG9jayB8IGxpc3QtaXRl
bSB8IGlubGluZS1ibG9jayB8IHRhYmxlIHwKLSAgICAgICAgLy8gaW5saW5lLXRhYmxlIHwgdGFi
bGUtcm93LWdyb3VwIHwgdGFibGUtaGVhZGVyLWdyb3VwIHwgdGFibGUtZm9vdGVyLWdyb3VwIHwg
dGFibGUtcm93IHwKLSAgICAgICAgLy8gdGFibGUtY29sdW1uLWdyb3VwIHwgdGFibGUtY29sdW1u
IHwgdGFibGUtY2VsbCB8IHRhYmxlLWNhcHRpb24gfCAtd2Via2l0LWJveCB8IC13ZWJraXQtaW5s
aW5lLWJveCB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIC8vIGZsZXggfCAtd2Via2l0LWZsZXgg
fCBpbmxpbmUtZmxleCB8IC13ZWJraXQtaW5saW5lLWZsZXggfCBncmlkIHwgaW5saW5lLWdyaWQg
fCBjb250ZW50cwotICAgICAgICBpZiAoKHZhbHVlSUQgPj0gQ1NTVmFsdWVJbmxpbmUgJiYgdmFs
dWVJRCA8PSBDU1NWYWx1ZUNvbnRlbnRzKSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAg
ICAgIGlmIChwYXJzZXJDb250ZXh0LmNzc0dyaWRMYXlvdXRFbmFibGVkICYmICh2YWx1ZUlEID09
IENTU1ZhbHVlR3JpZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSW5saW5lR3JpZCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlFbXB0eUNlbGxzOiAvLyBzaG93IHwgaGlkZSB8IGluaGVyaXQKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVTaG93IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbG9hdDogLy8gbGVmdCB8IHJpZ2h0IHwgbm9uZSB8IGNlbnRlciAoZm9yIGJ1Z2d5IENTUywg
bWFwcyB0byBub25lKQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZTogLy8gbm9ybWFsIHwgaXRhbGlj
IHwgb2JsaXF1ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT2Js
aXF1ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6IC8vIGF1dG8gfCBvcHRpbWl6ZVNwZWVkIHwgb3B0
aW1pemVRdWFsaXR5IHwgLXdlYmtpdC1jcmlzcC1lZGdlcyB8IC13ZWJraXQtb3B0aW1pemUtY29u
dHJhc3QgfCBjcmlzcC1lZGdlcyB8IHBpeGVsYXRlZAotICAgICAgICAvLyBvcHRpbWl6ZVNwZWVk
IGFuZCBvcHRpbWl6ZVF1YWxpdHkgYXJlIGRlcHJlY2F0ZWQ7IGEgdXNlciBhZ2VudCBtdXN0IGFj
Y2VwdCB0aGVtIGFzIHZhbGlkIHZhbHVlcyBidXQgbXVzdCB0cmVhdCB0aGVtIGFzIGhhdmluZyB0
aGUgc2FtZSBiZWhhdmlvciBhcyBwaXhlbGF0ZWQgYW5kIGF1dG8gcmVzcGVjdGl2ZWx5LgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9w
dGltaXplc3BlZWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9wdGltaXplcXVhbGl0eQotICAgICAg
ICAgICAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdENyaXNwRWRnZXMgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVdlYmtpdE9wdGltaXplQ29udHJhc3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNy
aXNwRWRnZXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBpeGVsYXRlZCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxl
UG9zaXRpb246IC8vIGluc2lkZSB8IG91dHNpZGUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlSW5zaWRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdXRzaWRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGVUeXBlOgotICAgICAgICAvLyBTZWUgc2VjdGlvbiBDU1NfUFJPUF9MSVNUX1NU
WUxFX1RZUEUgb2YgZmlsZSBDU1NWYWx1ZUtleXdvcmRzLmluCi0gICAgICAgIC8vIGZvciB0aGUg
bGlzdCBvZiBzdXBwb3J0ZWQgbGlzdC1zdHlsZS10eXBlcy4KLSAgICAgICAgaWYgKCh2YWx1ZUlE
ID49IENTU1ZhbHVlRGlzYyAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlS2F0YWthbmFJcm9oYSkgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKLSAgICAgICAgaWYgKHZh
bHVlSUQgPT0gQ1NTVmFsdWVGaWxsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250YWluIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVDb3ZlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU2NhbGVEb3duKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6IC8vICg8Ym9yZGVy
LXN0eWxlPiBleGNlcHQgaGlkZGVuKSB8IGF1dG8gfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWVJ
RCA+PSBDU1NWYWx1ZUluc2V0ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVEb3VibGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlP
dmVyZmxvd1dyYXA6IC8vIG5vcm1hbCB8IGJyZWFrLXdvcmQKLSAgICBjYXNlIENTU1Byb3BlcnR5
V29yZFdyYXA6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVCcmVha1dvcmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5
VG91Y2hBY3Rpb246IC8vIGF1dG8gfCBtYW5pcHVsYXRpb24KLSAgICAgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNYW5pcHVsYXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwVHlw
ZTogLy8gbm9uZSB8IG1hbmRhdG9yeSB8IHByb3hpbWl0eQotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU1hbmRhdG9yeSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUHJveGltaXR5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDogLy8gdmlzaWJs
ZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gIHwgb3ZlcmxheSB8IGluaGVyaXQKLSAgICAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRk
ZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0
byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT3ZlcmxheSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOiAvLyB2aXNp
YmxlIHwgaGlkZGVuIHwgc2Nyb2xsIHwgYXV0byB8IG92ZXJsYXkgfCBpbmhlcml0IHwgLXdlYmtp
dC1wYWdlZC14IHwgLXdlYmtpdC1wYWdlZC15Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSGlkZGVuIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVTY3JvbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZU92ZXJsYXkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlV2Via2l0UGFnZWRZKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjogLy8gYXV0byB8
IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWdlQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFsd2F5cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6
IC8vIGF2b2lkIHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtJbnNpZGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgICAgIC8v
IG5vbmUgfCB2aXNpYmxlUGFpbnRlZCB8IHZpc2libGVGaWxsIHwgdmlzaWJsZVN0cm9rZSB8IHZp
c2libGUgfAotICAgICAgICAvLyBwYWludGVkIHwgZmlsbCB8IHN0cm9rZSB8IGF1dG8gfCBhbGwg
fCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWxsIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvIHx8ICh2YWx1ZUlEID49IENTU1ZhbHVlVmlzaWJsZXBhaW50ZWQgJiYg
dmFsdWVJRCA8PSBDU1NWYWx1ZVN0cm9rZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOiAvLyBzdGF0aWMgfCBy
ZWxhdGl2ZSB8IGFic29sdXRlIHwgZml4ZWQgfCBzdGlja3kgfCBpbmhlcml0Ci0gICAgICAgIGlm
ICh2YWx1ZUlEID09IENTU1ZhbHVlU3RhdGljIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZWxhdGl2
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWJzb2x1dGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUZp
eGVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRTdGlja3kpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZTogLy8g
bm9uZSB8IGJvdGggfCBob3Jpem9udGFsIHwgdmVydGljYWwgfCBhdXRvCi0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQm90aCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlSG9yaXpvbnRhbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlVmVydGljYWwg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOiAvLyBub25lIHwgbm9ybWFs
IHwgc3BlbGwtb3V0IHwgZGlnaXRzIHwgbGl0ZXJhbC1wdW5jdHVhdGlvbiB8IG5vLXB1bmN0dWF0
aW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3BlbGxPdXQgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZURpZ2l0cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGl0ZXJhbFB1
bmN0dWF0aW9uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb1B1bmN0dWF0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJs
ZUxheW91dDogLy8gYXV0byB8IGZpeGVkIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUZpeGVkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGlu
ZVRocm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lTW9kZToKLSAgICAgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVDb250aW51b3VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTa2lwV2hpdGVTcGFj
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRP
dmVybGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0g
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
U29saWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURvdWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RGFzaGVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEb3REYXNoIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVEb3REb3REYXNoIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXYXZlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmZs
b3c6IC8vIGNsaXAgfCBlbGxpcHNpcwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUNs
aXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVsbGlwc2lzKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOiAv
LyBhdXRvIHwgb3B0aW1pemVTcGVlZCB8IG9wdGltaXplTGVnaWJpbGl0eSB8IGdlb21ldHJpY1By
ZWNpc2lvbgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZU9wdGltaXplc3BlZWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9wdGltaXplbGVn
aWJpbGl0eSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlR2VvbWV0cmljcHJlY2lzaW9uKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0VHJhbnNmb3JtOiAvLyBjYXBpdGFsaXplIHwgdXBwZXJjYXNlIHwgbG93ZXJjYXNlIHwgbm9u
ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKCh2YWx1ZUlEID49IENTU1ZhbHVlQ2FwaXRhbGl6ZSAm
JiB2YWx1ZUlEIDw9IENTU1ZhbHVlTG93ZXJjYXNlKSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5VmlzaWJpbGl0eTogLy8gdmlzaWJsZSB8IGhpZGRlbiB8IGNvbGxhcHNlIHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVZpc2libGUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUhpZGRlbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sbGFwc2UpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFwcGVhcmFuY2U6Ci0gICAgICAgIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUNoZWNrYm94
ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVDYXBzTG9ja0luZGljYXRvcikgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRkZW4p
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENT
U19DT01QT1NJVElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgotICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTXVs
dGlwbHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcmVlbgotICAgICAgICAgICAgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU92ZXJsYXkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURhcmtlbiB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTGlnaHRlbiB8fCAgdmFsdWVJRCA9PSBDU1NWYWx1ZUNvbG9yRG9kZ2UK
LSAgICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2xvckJ1cm4gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUhhcmRMaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU29mdExpZ2h0IHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVEaWZmZXJlbmNlCi0gICAgICAgICAgICB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlRXhjbHVzaW9uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQbHVzRGFya2VyIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVQbHVzTGlnaHRlcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5SXNvbGF0aW9uOgotICAgICAgICBpZiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUlzb2xhdGUpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZUJvcmRlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGluZXMpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFs
aWduOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVN0YXJ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbmQgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUNlbnRlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmFzZWxpbmUpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JB
VElPTl9CUkVBSykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFr
OgotICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVDbG9uZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlU2xpY2UpCi0gICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgICAg
IGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZl
cnNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVTaW5nbGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU11bHRpcGxlKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94T3JpZW50OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZVZlcnRpY2FsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJbmxpbmVB
eGlzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCbG9ja0F4aXMpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6
Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUVuZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ2VudGVyIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVKdXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhbGFuY2UpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rp
b246Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlUm93IHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVSb3dSZXZlcnNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW4gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUNvbHVtblJldmVyc2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhXcmFwOgotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZU5vd3JhcCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV3JhcCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlV3JhcFJldmVyc2UpCi0gICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhp
bmc6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQW50aWFsaWFzZWQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWFu
dWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246Ci0g
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RWRnZXMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazogLy8gYXV0byB8IGxvb3NlIHwgbm9ybWFsIHwg
c3RyaWN0IHwgYWZ0ZXItd2hpdGUtc3BhY2UKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMb29zZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
Tm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdHJpY3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFmdGVyV2hpdGVTcGFjZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZVNuYXA6Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmFzZWxpbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUNvbnRhaW4pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENT
U1ZhbHVlQ29sbGFwc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNlcGFyYXRlIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVEaXNjYXJkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUZvcndhcmRzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVC
YWNrd2FyZHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFoZWFkIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVSZXZlcnNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVSaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRG93bgotICAgICAgICAgICAgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVVwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJxdWVlU3R5bGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU2xpZGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlQWx0ZXJuYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZTogLy8gbm9ybWFs
IHwgc3BhY2UKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgotICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVRvdWNoKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlRXhhY3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVjb25vbXkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBbHdheXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUF2b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVS
aWdodCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFJlZ2lvbkZyYWdtZW50OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZUJyZWFrKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5n
OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxvZ2ljYWwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZVZpc3VhbCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlQmVmb3JlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBZnRlciB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSW50ZXJDaGFyYWN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0OgotICAgICAgICAvLyBhdXRvIHwgc3RhcnQgfCBl
bmQgfCBsZWZ0IHwgcmlnaHQgfCBjZW50ZXIgfCBqdXN0aWZ5Ci0gICAgICAgIGlmICgodmFsdWVJ
RCA+PSBDU1NWYWx1ZUxlZnQgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUp1c3RpZnkpIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVTdGFydCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRW5kIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29t
YmluZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVIb3Jpem9udGFsKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRKdXN0aWZ5OgotICAgICAgICAvLyBhdXRvIHwgbm9uZSB8IGludGVyLXdvcmQgfCBkaXN0cmli
dXRlCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW50ZXJXb3JkIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVEaXN0cmlidXRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
U2VjdXJpdHk6Ci0gICAgICAgIC8vIGRpc2MgfCBjaXJjbGUgfCBzcXVhcmUgfCBub25lIHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZURpc2MgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUNpcmNsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3F1YXJlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U2l6ZUFkanVzdDoKLSAgICAgICAgaWYgKCFwYXJzZXJDb250ZXh0LnRleHRBdXRvc2l6
aW5nRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bVN0eWxlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUZsYXQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVByZXNlcnZlM2QpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOiAvLyBhdXRvIHwgbm9u
ZSB8IGVsZW1lbnQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRVc2VyTW9kaWZ5OiAvLyByZWFkLW9ubHkgfCByZWFkLXdyaXRlCi0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlUmVhZE9ubHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRXcml0
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVhZFdyaXRlUGxhaW50ZXh0T25seSkgewotICAgICAg
ICAgICAgaWYgKHN0eWxlU2hlZXRDb250ZW50cykKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
Q29udGVudHMtPnBhcnNlclNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OiAvLyBhdXRvIHwgbm9uZSB8IHRleHQgfCBhbGwKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVO
b25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUZXh0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQWxsKSB7Ci0gICAgICAgICAgICBpZiAo
c3R5bGVTaGVldENvbnRlbnRzKQotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRDb250ZW50cy0+
cGFyc2VyU2V0VXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFdyaXRpbmdNb2RlOgotICAgICAgICBpZiAodmFsdWVJRCA+PSBDU1NWYWx1ZUhvcml6b250
YWxUYiAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlSG9yaXpvbnRhbEJ0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNl
OiAvLyBub3JtYWwgfCBwcmUgfCBub3dyYXAgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVByZVdyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVByZUxpbmUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU5vd3JhcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOiAvLyBub3JtYWwgfCBicmVhay1h
bGwgfCBrZWVwLWFsbCB8IGJyZWFrLXdvcmQgKHRoaXMgaXMgYSBjdXN0b20gZXh0ZW5zaW9uKQot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQnJlYWtBbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUtlZXBBbGwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUJyZWFrV29yZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoQ1NTX1RSQUlMSU5HX1dPUkQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFw
cGxlVHJhaWxpbmdXb3JkOiAvLyBhdXRvIHwgLWFwcGxlLXBhcnRpYWxseS1iYWxhbmNlZAotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdl
YmtpdFBhcnRpYWxseUJhbGFuY2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50UG9zaXRpb246
IC8vIG5vcm1hbCB8IHN1YiB8IHN1cGVyCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
Tm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdWIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVN1
cGVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6IC8vIG5vcm1hbCB8IHNtYWxsLWNhcHMgfCBhbGwt
c21hbGwtY2FwcyB8IHBldGl0ZS1jYXBzIHwgYWxsLXBldGl0ZS1jYXBzIHwgdW5pY2FzZSB8IHRp
dGxpbmctY2FwcwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU21hbGxDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBbGxTbWFsbENh
cHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBldGl0ZUNhcHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFsbFBldGl0ZUNhcHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVVuaWNhc2UgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVRpdGxpbmdDYXBzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6IC8vIFdl
IG9ubHkgc3VwcG9ydCB0aGUgbm9ybWFsIGFuZCBoaXN0b3JpY2FsLWZvcm1zIHZhbHVlcy4KLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUhpc3RvcmljYWxGb3JtcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0FmdGVyOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKLSAgICAgICAgLy8gYXV0byB8IGF2b2lkIHwgbGVm
dCB8IHJpZ2h0IHwgcmVjdG8gfCB2ZXJzbyB8IGNvbHVtbiB8IHBhZ2UgfCByZWdpb24gfCBhdm9p
ZC1wYWdlIHwgYXZvaWQtY29sdW1uIHwgYXZvaWQtcmVnaW9uCi0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0Ci0gICAgICAgICAgICB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVjdG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVZlcnNvIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBhZ2UKLSAg
ICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZWdpb24gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUF2b2lkQ29sdW1uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFBhZ2UgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUF2b2lkUmVnaW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0luc2lkZToKLSAgICAgICAgLy8g
YXV0byB8IGF2b2lkIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiB8IGF2b2lkLXJlZ2lvbgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUF2b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZENvbHVtbiB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQXZvaWRQYWdlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFJlZ2lvbikKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNp
ZiAhRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBVTlVTRURfUEFSQU0ocGFyc2VyQ29udGV4
dCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c0tleXdvcmRQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0luc2lkZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNs
ZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eURpc3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVQ
b3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5T2JqZWN0Rml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3dYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5UG9pbnRlckV2ZW50czoKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRo
cm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFRyYW5zZm9ybToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKLSNpZiBF
TkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaXhCbGVuZE1vZGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlvbjoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckFmdGVyU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9y
ZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRTdHlsZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJTdGFydFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hBbGlnbjoK
LSNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hEZWNvcmF0aW9uQnJlYWs6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0Fm
dGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbHVtbkZpbGw6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5RmxleERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rmxl
eFdyYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZVNuYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcnF1ZWVEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHls
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3Zl
cmZsb3dTY3JvbGxpbmc6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UHJpbnRD
b2xvckFkanVzdDoKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lv
bkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lk
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uRnJhZ21lbnQ6Ci0jZW5kaWYKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJ1YnlQb3NpdGlvbjoKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0OgotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZToKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeToKLSNlbmRpZiAvLyBDU1MzX1RF
WFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNlY3VyaXR5OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUcmFuc2Zvcm1TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyU2VsZWN0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFr
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlUb3VjaEFjdGlvbjoKLSNlbmRpZgotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBUeXBl
OgotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19UUkFJTElOR19XT1JEKQotICAgIGNhc2UgQ1NTUHJv
cGVydHlBcHBsZVRyYWlsaW5nV29yZDoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
VmFyaWFudFBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50QWx0ZXJuYXRlczoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
c3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3b3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIC8vIFRoZXNlIGtleXdvcmRzIGNhbiBiZSB1c2VkIGZvciBhbGwgcHJvcGVydGllcy4KLSAg
ICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiaW5pdGlhbCIp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImluaGVy
aXQiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ1
bnNldCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywg
InJldmVydCIpOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZUtleXdv
cmRWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQsIFN0eWxlU2hlZXRDb250ZW50cyogc3R5
bGVTaGVldENvbnRlbnRzKQotewotICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIWlzS2V5d29yZFByb3BlcnR5SUQocHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKCFp
c1VuaXZlcnNhbEtleXdvcmQoc3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgICAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgaW5p
dGlhbC9pbmhlcml0L3Vuc2V0L3JldmVydCBzaG9ydGhhbmRzOyByZXR1cm4gYW4gZXJyb3Igc28g
dGhlIGNhbGxlciB3aWxsIHVzZSB0aGUgZnVsbCBDU1MgcGFyc2VyLgotICAgICAgICBpZiAoc2hv
cnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJZCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1
cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgfQotCi0gICAgQ1NTUGFyc2Vy
U3RyaW5nIGNzc1N0cmluZzsKLSAgICBjc3NTdHJpbmcuaW5pdChzdHJpbmcpOwotICAgIENTU1Zh
bHVlSUQgdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29yZElEKGNzc1N0cmluZyk7Ci0KLSAgICBpZiAo
IXZhbHVlSUQpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVJbmhlcml0KQotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBlbHNlIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW5p
dGlhbCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4
cGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVVu
c2V0KQotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVW5z
ZXRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZlcnQpCi0gICAg
ICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVSZXZlcnRWYWx1ZSgp
OwotICAgIGVsc2UgaWYgKGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShwcm9wZXJ0eUlk
LCB2YWx1ZUlELCBwYXJzZXJDb250ZXh0LCBzdHlsZVNoZWV0Q29udGVudHMpKQotICAgICAgICB2
YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlSUQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OkVycm9yOwotCi0gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnR5KENTU1By
b3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCkpID8g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OlVuY2hhbmdlZDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0ZUFyZ3VtZW50cyhXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZSYgdHJhbnNmb3JtVmFsdWUsIENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGV4cGVjdGVkQ291bnQpCi17Ci0g
ICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKLSAgICB3
aGlsZSAoZXhwZWN0ZWRDb3VudCkgewotICAgICAgICBzaXplX3QgZW5kID0gV1RGOjpmaW5kKGNo
YXJhY3RlcnMsIGxlbmd0aCwgZXhwZWN0ZWRDb3VudCA9PSAxID8gJyknIDogJywnLCBzdGFydCk7
Ci0gICAgICAgIGlmIChlbmQgPT0gbm90Rm91bmQgfHwgKGV4cGVjdGVkQ291bnQgPT0gMSAmJiBl
bmQgIT0gbGVuZ3RoIC0gMSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50TGVuZ3RoID0gZW5kIC0gc3RhcnQ7Ci0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwot
ICAgICAgICBkb3VibGUgbnVtYmVyOwotICAgICAgICBpZiAoIXBhcnNlU2ltcGxlTGVuZ3RoKGNo
YXJhY3RlcnMgKyBzdGFydCwgYXJndW1lbnRMZW5ndGgsIHVuaXQsIG51bWJlcikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh1bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFggJiYgKG51bWJlciB8fCB1bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUu
YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShudW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKLSAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwotICAgICAgICAtLWV4cGVjdGVk
Q291bnQ7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmIHByb3BlcnRpZXMsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmIChwcm9wZXJ0eUlEICE9IENTU1By
b3BlcnR5VHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6
RXJyb3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnRlc3RWYWxpZFRyYW5zZm9y
bVN0cmluZ0xlbmd0aCA9IDEyOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsaWtlbHlNdWx0
aXBhcnRUcmFuc2Zvcm1TdHJpbmdMZW5ndGhDdXRvZmYgPSAzMjsKLSAgICBpZiAoc3RyaW5nLmxl
bmd0aCgpIDwgc2hvcnRlc3RWYWxpZFRyYW5zZm9ybVN0cmluZ0xlbmd0aCB8fCBzdHJpbmcubGVu
Z3RoKCkgPiBsaWtlbHlNdWx0aXBhcnRUcmFuc2Zvcm1TdHJpbmdMZW5ndGhDdXRvZmYpCi0gICAg
ICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGlmICghc3Ry
aW5nLnN0YXJ0c1dpdGgoInRyYW5zbGF0ZSIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIENTU1Bh
cnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgVUNoYXIgYzkgPSB0b0FTQ0lJTG93ZXIo
c3RyaW5nWzldKTsKLSAgICBVQ2hhciBjMTAgPSB0b0FTQ0lJTG93ZXIoc3RyaW5nWzEwXSk7Ci0K
LSAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0cmFu
c2Zvcm1UeXBlOwotICAgIHVuc2lnbmVkIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9IDE7Ci0gICAg
dW5zaWduZWQgYXJndW1lbnRTdGFydCA9IDExOwotICAgIGlmIChjOSA9PSAneCcgJiYgYzEwID09
ICcoJykKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGM5ID09ICd5JyAmJiBj
MTAgPT0gJygnKQotICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoYzkgPT0gJ3on
ICYmIGMxMCA9PSAnKCcpCi0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChjOSA9
PSAnKCcpIHsKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgIGV4cGVjdGVkQXJndW1lbnRD
b3VudCA9IDI7Ci0gICAgICAgIGFyZ3VtZW50U3RhcnQgPSAxMDsKLSAgICB9IGVsc2UgaWYgKGM5
ID09ICczJyAmJiBjMTAgPT0gJ2QnICYmIHN0cmluZ1sxMV0gPT0gJygnKSB7Ci0gICAgICAgIHRy
YW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zv
cm1PcGVyYXRpb247Ci0gICAgICAgIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9IDM7Ci0gICAgICAg
IGFyZ3VtZW50U3RhcnQgPSAxMjsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIENTU1BhcnNl
cjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB0cmFuc2Zvcm1WYWx1ZSA9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUodHJhbnNmb3JtVHlwZSk7Ci0gICAgYm9vbCBzdWNj
ZXNzOwotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHN1Y2Nlc3MgPSBwYXJzZVRy
YW5zZm9ybVRyYW5zbGF0ZUFyZ3VtZW50cyh0cmFuc2Zvcm1WYWx1ZSwgc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0cmluZy5sZW5ndGgoKSwgYXJndW1lbnRTdGFydCwgZXhwZWN0ZWRBcmd1bWVudENv
dW50KTsKLSAgICBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0
ZUFyZ3VtZW50cyh0cmFuc2Zvcm1WYWx1ZSwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4cGVjdGVkQXJndW1lbnRDb3VudCk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQo
KTsKLSAgICByZXN1bHQtPmFwcGVuZChXVEZNb3ZlKHRyYW5zZm9ybVZhbHVlKSk7Ci0gICAgcmV0
dXJuIHByb3BlcnRpZXMuYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2Zvcm0sIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpDaGFuZ2VkIDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotfQot
Ci1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGZhbWlseU5h
bWVzOwotICAgIHN0cmluZy5zdHJpbmcoKS5zcGxpdCgnLCcsIHRydWUsIGZhbWlseU5hbWVzKTsK
LQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0g
ICAgZm9yIChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMpIHsKLSAgICAgICAgU3RyaW5n
IHN0cmlwcGVkID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGZhbWlseU5hbWUp
OwotICAgICAgICBpZiAoc3RyaXBwZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICAgICAgZm9yIChh
dXRvIHByb3BlcnR5SUQgOiB7IENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlU2Fuc1NlcmlmLCBDU1NW
YWx1ZUN1cnNpdmUsIENTU1ZhbHVlRmFudGFzeSwgQ1NTVmFsdWVNb25vc3BhY2UsIENTU1ZhbHVl
V2Via2l0Qm9keSB9KSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpcHBlZCwgZ2V0VmFsdWVOYW1lKHByb3BlcnR5SUQpKSkgewotICAgICAgICAgICAgICAgIHZh
bHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShwcm9wZXJ0eUlEKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlRm9udEZh
bWlseVZhbHVlKHN0cmlwcGVkKTsKLSAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQodmFsdWUucmVs
ZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUodmFsdWVMaXN0KTsK
LX0KLQotQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAg
QVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IHJl
c3VsdCA9IHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0
cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNl
UmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc3VsdCA9IHBh
cnNlQ29sb3JWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQs
IGNzc1BhcnNlck1vZGUpOwotICAgIGlmIChyZXN1bHQgIT0gUGFyc2VSZXN1bHQ6OkVycm9yKQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KGNz
c1BhcnNlck1vZGUpOwotICAgIGlmIChjb250ZXh0U3R5bGVTaGVldCkgewotICAgICAgICBjb250
ZXh0ID0gY29udGV4dFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKTsKLSAgICAgICAgY29udGV4
dC5tb2RlID0gY3NzUGFyc2VyTW9kZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBwYXJzZUtleXdv
cmRWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRl
eHQsIGNvbnRleHRTdHlsZVNoZWV0KTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0OjpF
cnJvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc3VsdCA9IHBhcnNlVHJhbnNs
YXRlVHJhbnNmb3JtVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0
YW50KTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7Ci0gICAgcmV0dXJu
IHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9y
dGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwotfQotCi1DU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENT
U1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMm
IGRlY2xhcmF0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgQ1NTUGFyc2Vy
Q29udGV4dCBjb250ZXh0KGNzc1BhcnNlck1vZGUpOwotICAgIGlmIChjb250ZXh0U3R5bGVTaGVl
dCkgewotICAgICAgICBjb250ZXh0ID0gY29udGV4dFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQo
KTsKLSAgICAgICAgY29udGV4dC5tb2RlID0gY3NzUGFyc2VyTW9kZTsKLSAgICB9Ci0KLSAgICBD
U1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwotICAgIHBhcnNlci5zZXRDdXN0b21Qcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRp
b24sIENTU1Byb3BlcnR5Q3VzdG9tLCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hl
ZXQpOwotfQotCi1DU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5
bGVTaGVldCk7Ci0KLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtdmFsdWV7Iiwgc3RyaW5nLCAi
fSAiKTsKLQotICAgIG1faWQgPSBwcm9wZXJ0eUlEOwotICAgIG1faW1wb3J0YW50ID0gaW1wb3J0
YW50OwotCi0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLQotICAgIG1fcnVsZSA9IG51bGxwdHI7Ci0K
LSAgICBQYXJzZVJlc3VsdCByZXN1bHQgPSBQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICBpZiAo
IW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gZGVjbGFy
YXRpb24uYWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMpID8gUGFyc2VSZXN1
bHQ6OkNoYW5nZWQgOiBQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotICAgICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGUgY29sb3Ig
d2lsbCBvbmx5IGJlIGNoYW5nZWQgd2hlbiBzdHJpbmcgY29udGFpbnMgYSB2YWxpZCBDU1MgY29s
b3IsIHNvIGNhbGxlcnMKLS8vIGNhbiBzZXQgaXQgdG8gYSBkZWZhdWx0IGNvbG9yIGFuZCBpZ25v
cmUgdGhlIGJvb2xlYW4gcmVzdWx0LgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMy
JiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RyaWN0KQotewotICAgIGlmIChz
dHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGaXJzdCB0
cnkgY3JlYXRpbmcgYSBjb2xvciBzcGVjaWZpZWQgYnkgbmFtZSwgcmdiYSgpLCByZ2IoKSBvciAi
IyIgc3ludGF4LgotICAgIGlmIChmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBzdHJpY3Qp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0
TW9kZSk7Ci0KLSAgICAvLyBJbiBjYXNlIHRoZSBmYXN0LXBhdGggcGFyc2VyIGRpZG4ndCB1bmRl
cnN0YW5kIHRoZSBjb2xvciwgdHJ5IHRoZSBmdWxsIHBhcnNlci4KLSAgICBpZiAoIXBhcnNlci5w
YXJzZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1ZhbHVl
JiB2YWx1ZSA9ICpwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKLSAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1JHQkNv
bG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbG9yID0gcHJpbWl0aXZlVmFs
dWUuZ2V0UkdCQTMyVmFsdWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgc2V0dXBQYXJzZXIo
IkAtd2Via2l0LWRlY2xze2NvbG9yOiIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0
aGlzKTsKLSAgICBtX3J1bGUgPSBudWxscHRyOwotCi0gICAgcmV0dXJuICFtX3BhcnNlZFByb3Bl
cnRpZXMuaXNFbXB0eSgpICYmIG1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLmlkKCkgPT0gQ1NT
UHJvcGVydHlDb2xvcjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoUkdC
QTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJTdHJpbmcgY3NzQ29sb3I7Ci0gICAgY3NzQ29sb3IuaW5p
dChzdHJpbmcpOwotICAgIENTU1ZhbHVlSUQgaWQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NDb2xv
cik7Ci0gICAgaWYgKCF2YWxpZFByaW1pdGl2ZVZhbHVlQ29sb3IoaWQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBwYXJzZWRDb2xvciA9IGRvY3VtZW50LT5wYWdlKCktPnRo
ZW1lKCkuc3lzdGVtQ29sb3IoaWQpOwotICAgIGlmICghcGFyc2VkQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb2xvciA9IHBhcnNlZENvbG9yLnJnYigpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIHN0cmluZywgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCi17Ci0gICAg
bV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gJnNlbGVjdG9yTGlzdDsKLQotICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1zZWxlY3RvcnsiLCBzdHJpbmcsICJ9Iik7Ci0KLSAgICBjc3N5
eXBhcnNlKHRoaXMpOwotCi0gICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gbnVs
bHB0cjsKLX0KLQotUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJz
ZUlubGluZVN0eWxlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS5lbGVtZW50U2hlZXQoKS5jb250ZW50cygpLnBhcnNlckNvbnRleHQoKTsKLSAgICBjb250
ZXh0Lm1vZGUgPSBzdHJpY3RUb0NTU1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
ICYmICFlbGVtZW50LT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKLSAgICByZXR1cm4gQ1NT
UGFyc2VyKGNvbnRleHQpLnBhcnNlRGVjbGFyYXRpb24oc3RyaW5nLCAmZWxlbWVudC0+ZG9jdW1l
bnQoKS5lbGVtZW50U2hlZXQoKS5jb250ZW50cygpKTsKLX0KLQotUmVmPEltbXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIHNldFN0
eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0
LWRlY2xzeyIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBtX3J1
bGUgPSBudWxscHRyOwotCi0gICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUg
PSBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICBy
ZXR1cm4gc3R5bGU7Ci19Ci0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+JiYgcnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgLy8gTGVuZ3RoIG9mIHRoZSAiQC13ZWJr
aXQtZGVjbHN7IiBwcmVmaXguCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZpeExlbmd0
aCA9IDE1OwotCi0gICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7Ci0KLSAgICBp
ZiAocnVsZVNvdXJjZURhdGEpIHsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IHN0
ZDo6bWFrZV91bmlxdWU8UnVsZVNvdXJjZURhdGFMaXN0PigpOwotICAgICAgICBtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5hcHBlbmQoKnJ1bGVTb3VyY2VEYXRhKTsKLSAgICB9Ci0KLSAgICBzZXR1
cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7Iiwgc3RyaW5nLCAifSAiKTsKLSAgICBjc3N5eXBhcnNl
KHRoaXMpOwotICAgIG1fcnVsZSA9IG51bGxwdHI7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0g
ICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG9rID0gdHJ1
ZTsKLSAgICAgICAgZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3Bl
cnRpZXMpOwotICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICB9Ci0KLSAgICBpZiAocnVs
ZVNvdXJjZURhdGEpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnNp
emUoKSA9PSAxKTsKLSAgICAgICAgcnVsZVNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQg
PSAwOwotICAgICAgICBydWxlU291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcnVsZVNvdXJjZURh
dGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eURhdGEgPSBydWxl
U291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXQoaSk7Ci0gICAgICAg
ICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3RhcnQgLT0gcHJlZml4TGVuZ3RoOwotICAgICAgICAg
ICAgcHJvcGVydHlEYXRhLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKCpydWxlU291cmNlRGF0YSk7Ci0gICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sucmVzZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
b2s7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBDU1NQYXJzZXI6OnBhcnNlTWVk
aWFRdWVyeShjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1fbWVkaWFRdWVyeSk7
Ci0KLSAgICAvLyBjYW4ndCB1c2UgeyBiZWNhdXNlIHRva2VuaXplciBzdGF0ZSBzd2l0Y2hlcyBm
cm9tIG1lZGlhcXVlcnkgdG8gaW5pdGlhbCBzdGF0ZSB3aGVuIGl0IHNlZXMgeyB0b2tlbi4KLSAg
ICAvLyBpbnN0ZWFkIGluc2VydCBvbmUgIiAiICh3aGljaCBpcyBXSElURVNQQUNFIGluIENTU0dy
YW1tYXIueSkKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtbWVkaWFxdWVyeSAiLCBzdHJpbmcs
ICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShtX21l
ZGlhUXVlcnkpOwotfQotCi1WZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiBDU1NQYXJzZXI6
OnBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgVmVjdG9yPFNv
dXJjZVNpemU+IHJlc3VsdDsKLQotICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgQVNTRVJUKCFtX3NvdXJjZVNpemVMaXN0KTsKLQotICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1zaXplc2F0dHIgIiwgc3RyaW5nLCAifSIpOwotICAgIGNzc3l5
cGFyc2UodGhpcyk7Ci0KLSAgICBpZiAoIW1fc291cmNlU2l6ZUxpc3QpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKCptX3NvdXJjZVNpemVMaXN0KTsKLSAg
ICBtX3NvdXJjZVNpemVMaXN0ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyBGSVhNRSgxNDEyODkpOiBUaGUgZm9sbG93aW5nIHR3byBjb25zdHJ1Y3RvcnMgYXJlIG9ubHkg
bmVlZGVkIGJlY2F1c2Ugb2YgYSBidWcgaW4gTVNWQyAyMDEzIChhbmQgcHJpb3IpLgotLy8gV2Ug
c2hvdWxkIHJlbW92ZSB0aGlzIGNvZGUgYXMgc29vbiBhcyBhIFZpc3VhbCBTdHVkaW8gdXBkYXRl
IHRoYXQgZml4ZXMgdGhpcyBwcm9ibGVtIGlzIHJlbGVhc2VkLgotCi1DU1NQYXJzZXI6OlNvdXJj
ZVNpemU6OlNvdXJjZVNpemUoQ1NTUGFyc2VyOjpTb3VyY2VTaXplJiYgb3JpZ2luYWwpCi0gICAg
OiBleHByZXNzaW9uKFdURk1vdmUob3JpZ2luYWwuZXhwcmVzc2lvbikpCi0gICAgLCBsZW5ndGgo
V1RGTW92ZShvcmlnaW5hbC5sZW5ndGgpKQotewotfQotCi1DU1NQYXJzZXI6OlNvdXJjZVNpemU6
OlNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBSZWY8Q1NTVmFs
dWU+JiYgdmFsdWUpCi0gICAgOiBleHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCi0gICAg
LCBsZW5ndGgoV1RGTW92ZSh2YWx1ZSkpCi17Ci19Ci0KLU9wdGlvbmFsPENTU1BhcnNlcjo6U291
cmNlU2l6ZT4gQ1NTUGFyc2VyOjpzb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhw
cmVzc2lvbiwgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlKQotewotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGlzQ2FsY3VsYXRpb24ocGFyc2VyVmFsdWUpKSB7Ci0gICAg
ICAgIGF1dG8qIGFyZ3MgPSBwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICAg
ICAgaWYgKGFyZ3MgJiYgYXJncy0+c2l6ZSgpKQotICAgICAgICAgICAgdmFsdWUgPSBDU1NDYWxj
VmFsdWU6OmNyZWF0ZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIENhbGN1bGF0
aW9uUmFuZ2VOb25OZWdhdGl2ZSk7Ci0gICAgfQotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHZh
bHVlID0gcGFyc2VyVmFsdWUuY3JlYXRlQ1NTVmFsdWUoKTsKLSAgICBkZXN0cm95KHBhcnNlclZh
bHVlKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICAvLyBG
SVhNRTogQ2FsbGluZyB0aGUgY29uc3RydWN0b3IgZXhwbGljaXRseSBoZXJlIHRvIHdvcmsgYXJv
dW5kIGFuIE1TVkMgYnVnLgotICAgIC8vIEZvciBvdGhlciBjb21waWxlcnMsIHdlIGRpZCBub3Qg
bmVlZCB0byBkZWZpbmUgdGhlIGNvbnN0cnVjdG9ycyBhbmQgd2UgY291bGQgdXNlIGFnZ3JlZ2F0
ZSBpbml0aWFsaXphdGlvbiBzeW50YXguCi0gICAgcmV0dXJuIFNvdXJjZVNpemUoV1RGTW92ZShl
eHByZXNzaW9uKSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQYXJzZWRQcm9wZXJ0
eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3Qm
IHVudXNlZEVudHJpZXMsIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVy
dGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuQ3VzdG9tUHJvcGVydGllcykKLXsKLSAg
ICAvLyBBZGQgcHJvcGVydGllcyBpbiByZXZlcnNlIG9yZGVyIHNvIHRoYXQgaGlnaGVzdCBwcmlv
cml0eSBkZWZpbml0aW9ucyBhcmUgcmVhY2hlZCBmaXJzdC4gRHVwbGljYXRlIGRlZmluaXRpb25z
IGNhbiB0aGVuIGJlIGlnbm9yZWQgd2hlbiBmb3VuZC4KLSAgICBmb3IgKGludCBpID0gaW5wdXQu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5ID0gaW5wdXRbaV07Ci0gICAgICAgIGlmIChwcm9wZXJ0eS5pc0ltcG9ydGFudCgpICE9
IGltcG9ydGFudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYg
KHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKLSAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS52YWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKS5uYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFzZWVuQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSkuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
Wy0tdW51c2VkRW50cmllc10gPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgcHJvcGVydHlJ
REluZGV4ID0gcHJvcGVydHkuaWQoKSAtIGZpcnN0Q1NTUHJvcGVydHk7Ci0gICAgICAgIEFTU0VS
VChwcm9wZXJ0eUlESW5kZXggPCBzZWVuUHJvcGVydGllcy5zaXplKCkpOwotICAgICAgICBpZiAo
c2VlblByb3BlcnRpZXNbcHJvcGVydHlJREluZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBzZWVuUHJvcGVydGllcy5zZXQocHJvcGVydHlJREluZGV4KTsKLSAgICAgICAgb3V0
cHV0Wy0tdW51c2VkRW50cmllc10gPSBwcm9wZXJ0eTsKLSAgICB9Ci19Ci0KLVJlZjxJbW11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkKLXsK
LSAgICBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzPiBzZWVuUHJvcGVydGllczsKLSAgICBz
aXplX3QgdW51c2VkRW50cmllcyA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgVmVj
dG9yPENTU1Byb3BlcnR5LCAyNTY+IHJlc3VsdHModW51c2VkRW50cmllcyk7Ci0KLSAgICAvLyBJ
bXBvcnRhbnQgcHJvcGVydGllcyBoYXZlIGhpZ2hlciBwcmlvcml0eSwgc28gYWRkIHRoZW0gZmly
c3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQu
Ci0gICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHNlZW5DdXN0b21Qcm9wZXJ0aWVzOwotICAgIGZp
bHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCByZXN1bHRzLCB1bnVzZWRF
bnRyaWVzLCBzZWVuUHJvcGVydGllcywgc2VlbkN1c3RvbVByb3BlcnRpZXMpOwotICAgIGZpbHRl
clByb3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50
cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKTsKLSAgICBpZiAodW51
c2VkRW50cmllcykKLSAgICAgICAgcmVzdWx0cy5yZW1vdmUoMCwgdW51c2VkRW50cmllcyk7Ci0K
LSAgICByZXR1cm4gSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUocmVzdWx0cy5kYXRh
KCksIHJlc3VsdHMuc2l6ZSgpLCBtX2NvbnRleHQubW9kZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
OjphZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZh
bHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCkKLXsKLSAgICAvLyBUaGlzIHByb3Bl
cnR5IGRvZXNuJ3QgYmVsb25nIHRvIGEgc2hvcnRoYW5kIG9yIGlzIGEgQ1NTIHZhcmlhYmxlICh3
aGljaCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyKS4KLSAgICBpZiAoIW1fY3VycmVudFNob3J0aGFu
ZCkgewotICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJ
ZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgZmFsc2UsIENTU1Byb3BlcnR5SW52YWxpZCwg
bV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byBzaG9ydGhhbmRzID0gbWF0Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQo
cHJvcElkKTsKLSAgICBpZiAoc2hvcnRoYW5kcy5zaXplKCkgPT0gMSkKLSAgICAgICAgbV9wYXJz
ZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBp
bXBvcnRhbnQsIHRydWUsIENTU1Byb3BlcnR5SW52YWxpZCwgbV9pbXBsaWNpdFNob3J0aGFuZCB8
fCBpbXBsaWNpdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVu
ZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIHRydWUsIGlu
ZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChtX2N1cnJlbnRTaG9ydGhhbmQsIHNob3J0aGFuZHMp
LCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
Ojpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCi17Ci0gICAgQVNTRVJUKG51bSA+PSAw
KTsKLSAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obnVtKSk7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnNocmluayhtX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gbnVtKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVy
dGllcygpCi17Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gaW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3Vu
dDsKLX0KLQotVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIFVSTCgpOwotICAgIGlmIChjb250ZXh0LmNoYXJzZXQuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gVVJMKGNvbnRleHQuYmFzZVVSTCwgdXJsKTsKLSAgICByZXR1cm4g
VVJMKGNvbnRleHQuYmFzZVVSTCwgdXJsLCBjb250ZXh0LmNoYXJzZXQpOwotfQotCi1VUkwgQ1NT
UGFyc2VyOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKLXsKLSAgICByZXR1
cm4gY29tcGxldGVVUkwobV9jb250ZXh0LCB1cmwpOwotfQotCi1ib29sIENTU1BhcnNlcjo6dmFs
aWRhdGVDYWxjdWxhdGlvblVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MpCi17Ci0gICAgYm9vbCBtdXN0QmVOb25OZWdhdGl2ZSA9
IHVuaXRGbGFncyAmIEZOb25OZWc7Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxjdWxh
dGlvbjsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSkgewotICAg
ICAgICAvLyBUaGUgY2FsY3VsYXRpb24gdmFsdWUgd2FzIGFscmVhZHkgcGFyc2VkIHNvIHdlIHJl
dXNlIGl0LiBIb3dldmVyLCB3ZSBtYXkgbmVlZCB0byB1cGRhdGUgaXRzIHJhbmdlLgotICAgICAg
ICBjYWxjdWxhdGlvbiA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCk7Ci0gICAg
ICAgIGNhbGN1bGF0aW9uLT5zZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKG11c3RCZU5vbk5lZ2F0aXZl
ID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5nZUFsbCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24uc2V0Q2FsY3VsYXRpb24o
cGFyc2VDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgbXVzdEJlTm9uTmVnYXRpdmUg
PyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSk7Ci0g
ICAgICAgIGNhbGN1bGF0aW9uID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKTsK
LSAgICAgICAgaWYgKCFjYWxjdWxhdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKGNhbGN1bGF0aW9u
LT5jYXRlZ29yeSgpKSB7Ci0gICAgY2FzZSBDYWxjTnVtYmVyOgotICAgICAgICBpc1ZhbGlkID0g
KHVuaXRGbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWlzVmFsaWQgJiYgKHVuaXRGbGFn
cyAmIEZJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSkKLSAgICAgICAgICAgIGlzVmFs
aWQgPSB0cnVlOwotICAgICAgICBpZiAoIWlzVmFsaWQgJiYgKHVuaXRGbGFncyAmIEZQb3NpdGl2
ZUludGVnZXIpICYmIGNhbGN1bGF0aW9uLT5pc0ludCgpICYmIGNhbGN1bGF0aW9uLT5pc1Bvc2l0
aXZlKCkpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDYWxjTGVuZ3RoOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZMZW5ndGgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNQZXJjZW50OgotICAgICAgICBpc1ZhbGlk
ID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxj
UGVyY2VudExlbmd0aDoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGUGVyY2VudCkg
JiYgKHVuaXRGbGFncyAmIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNQ
ZXJjZW50TnVtYmVyOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KSAm
JiAodW5pdEZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FsY0Fu
Z2xlOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZBbmdsZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ2FsY1RpbWU6Ci0gICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYg
RlRpbWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNGcmVxdWVuY3k6Ci0gICAgICAg
IGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkZyZXF1ZW5jeSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ2FsY090aGVyOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXNW
YWxpZDsKLX0KLQotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1Zh
bHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRGbGFncywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQotewotICAgIC8vIFFpcmtzIG1vZGUgYW5kIHN2ZyBwcmVzZW50YXRp
b24gYXR0cmlidXRlcyBhY2NlcHQgdW5pdCBsZXNzIHZhbHVlcy4KLSAgICByZXR1cm4gKHVuaXRG
bGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBj
c3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRy
aWJ1dGVNb2RlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlVW5pdChWYWx1ZVdpdGhD
YWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24sIFVuaXRzIHVuaXRGbGFncywgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotewotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlV2l0
aENhbGN1bGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCB1bml0RmxhZ3MpOwotICAgICAgICAKLSAgICBib29sIGIgPSBm
YWxzZTsKLSAgICBzd2l0Y2ggKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCkgewot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI6Ci0gICAgICAgIGIgPSAodW5p
dEZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiBzaG91bGRBY2NlcHRVbml0TGVz
c1ZhbHVlcyh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzLCBjc3NQYXJzZXJNb2RlKSkg
ewotICAgICAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID0gKHVuaXRG
bGFncyAmIEZMZW5ndGgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5pdEZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUyk7Ci0gICAgICAgICAgICBiID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWIgJiYgKHVuaXRGbGFncyAmIEZJbnRlZ2Vy
KSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlzSW50KQotICAgICAgICAgICAgYiA9
IHRydWU7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdEZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikg
JiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCAmJiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmZWYWx1ZSA+IDApCi0gICAgICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAg
ICAgIGIgPSAodW5pdEZsYWdzICYgRlBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1BhcnNlclZhbHVlOjpRX0VNUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VYUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19N
TToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU46Ci0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlc6Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYOgotICAgICAgICBiID0gKHVuaXRG
bGFncyAmIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1M6Ci0gICAgICAg
IGIgPSAodW5pdEZsYWdzICYgRlRpbWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19S
QUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk46Ci0gICAgICAgIGIgPSAodW5pdEZsYWdzICYgRkFuZ2xl
KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBF
TkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNOgotICAgICAgICBiID0gKHVuaXRGbGFncyAm
IEZSZXNvbHV0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OOgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoYiAmJiB1bml0RmxhZ3MgJiBGTm9uTmVn
ICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlIDwgMCkKLSAgICAgICAgYiA9
IGZhbHNlOwotICAgIGlmIChiICYmIHN0ZDo6aXNpbmYodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUpKQotICAgICAgICBiID0gZmFsc2U7Ci0gICAgcmV0dXJuIGI7Ci19Ci0KLWlu
bGluZSBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsK
LSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSkKLSAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3Vs
YXRpb24oKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSB2YWx1ZVdpdGhDYWxjdWxh
dGlvbjsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
S0haKQotICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RV
Uk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKLSAgICAgICAg
fHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZS51bml0
IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19EUENNKSk7Ci0jZWxzZQotICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NI
UykKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAm
JiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuZlZh
bHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0
KSk7Ci19Ci0KLWlubGluZSBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRl
UHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIEFTU0VS
VCh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZhbHVlLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCk7Ci0gICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuc3RyaW5nLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1hKENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSkKLXsgCi0gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJzsgCi19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcvJzsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OmlzVmFs
aWRTaXplKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsKLSAg
ICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9
PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250
ZW50IHx8IGlkID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1
ZVdlYmtpdEZpdENvbnRlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQg
JiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKTsKLX0KLQotaW5saW5lIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgVmFsdWVXaXRo
Q2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotewotICAgIGlmIChpZGVudGlmaWVy
KQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWRlbnRpZmllcik7Ci0KLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBpZiAodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DSFMpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVUSU9OX01FRElB
X1FVRVJZKQotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotI2VuZGlmCi0g
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1
ZTo6UV9FTVMpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dp
bmdNYXJnaW5RdWlyayh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpOwotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxj
dWxhdGlvbigpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKTsKLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi12b2lkIENTU1BhcnNlcjo6YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBSZWY8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQotewot
ICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0aGFuZEZv
clByb3BlcnR5KHByb3BJZCk7Ci0gICAgdW5zaWduZWQgc2hvcnRoYW5kTGVuZ3RoID0gc2hvcnRo
YW5kLmxlbmd0aCgpOwotICAgIGlmICghc2hvcnRoYW5kTGVuZ3RoKSB7Ci0gICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAg
IGNvbnN0IENTU1Byb3BlcnR5SUQqIGxvbmdoYW5kcyA9IHNob3J0aGFuZC5wcm9wZXJ0aWVzKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZExlbmd0aDsgKytpKQotICAg
ICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0sIHZhbHVlLmNvcHlSZWYoKSwgaW1wb3J0YW50
KTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZSYgZGVwZW5kZW50VmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3Rv
bVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKLXsKLSAgICBtX3ZhbHVlTGlzdC5yZXNldChuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0KCkp
OwotICAgIGlmICghZGVwZW5kZW50VmFsdWUudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxp
c3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMobV92YWx1ZUxpc3QuZ2V0KCksIGN1c3RvbVByb3BlcnRp
ZXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1Byb3BlcnR5SUQgZGVwZW5k
ZW50VmFsdWVQcm9wZXJ0eUlEID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOwotICAgIGlm
IChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVudFZhbHVlUHJv
cGVydHlJRCkpCi0gICAgICAgIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5
OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQs
IGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotCi0gICAgaWYgKCFwYXJzZVZhbHVlKGRlcGVuZGVu
dFZhbHVlUHJvcGVydHlJRCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGZvciAoYXV0byYgcHJvcGVydHkgOiBtX3BhcnNlZFByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYg
KHByb3BlcnR5LmlkKCkgPT0gcHJvcElEKQotICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LnZh
bHVlKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgYm9vbCBpc0lt
YWdlU2V0RnVuY3Rpb25WYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImltYWdlLXNldCgi
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtaW1hZ2Utc2V0KCIpKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghbV92YWx1
ZUxpc3QgfHwgIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgCi0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUN1
c3RvbSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihpbXBv
cnRhbnQsIGlkKTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y29udGFpbnNWYXJpYWJsZXMoKSkg
ewotICAgICAgICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNl
clZhbHVlTGlzdCgqbV92YWx1ZUxpc3QpOwotICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9y
VmFsdWUocHJvcElkLCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlOjpjcmVhdGUoV1RGTW92ZSh2
YWx1ZUxpc3QpLCBwcm9wSWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
OwotICAgIHVuc2lnbmVkIG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3QtPnNp
emUoKTsKLQotICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQpIHsKLSAgICAgICAgaWYgKG51
bSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRFeHBhbmRlZFBy
b3BlcnR5Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW5oZXJpdGVkVmFsdWUo
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYg
KGlkID09IENTU1ZhbHVlSW5pdGlhbCkgewotICAgICAgICBpZiAobnVtICE9IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShw
cm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRh
bnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGlkID09IENTU1ZhbHVl
VW5zZXQpIHsKLSAgICAgICAgaWYgKG51bSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlVW5zZXRWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChudW0g
IT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkRXhwYW5kZWRQcm9w
ZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZVJldmVydFZhbHVlKCksIGlt
cG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5QWxsKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vICJhbGwiIGRv
ZXNuJ3QgYWxsb3cgeW91IHRvIHNwZWNpZnkgYW55dGhpbmcgb3RoZXIgdGhhbiBpbmhlcml0L2lu
aXRpYWwvdW5zZXQuCi0KLSAgICBpZiAoaXNLZXl3b3JkUHJvcGVydHlJRChwcm9wSWQpKSB7Ci0g
ICAgICAgIGlmICghaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKHByb3BJZCwgaWQsIG1f
Y29udGV4dCwgbV9zdHlsZVNoZWV0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkgJiYgIWluU2hvcnRoYW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYg
KGluVmlld3BvcnQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRQcm9wZXJ0eShwcm9w
SWQsIGltcG9ydGFudCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxz
ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotCi0gICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5U2l6ZTogICAgICAgICAgICAgICAgIC8vIDxsZW5n
dGg+ezEsMn0gfCBhdXRvIHwgWyA8cGFnZS1zaXplPiB8fCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBl
XSBdCi0gICAgICAgIHJldHVybiBwYXJzZVNpemUocHJvcElkLCBpbXBvcnRhbnQpOwotCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVF1b3RlczogICAgICAgICAgICAgICAvLyBbPHN0cmluZz4gPHN0cmlu
Zz5dKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZVF1b3Rlcyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaTogLy8gbm9ybWFsIHwgZW1iZWQgfCBi
aWRpLW92ZXJyaWRlIHwgaXNvbGF0ZSB8IGlzb2xhdGUtb3ZlcnJpZGUgfCBwbGFpbnRleHQgfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbAotICAgICAgICAgICAgfHwg
aWQgPT0gQ1NTVmFsdWVFbWJlZAotICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVCaWRpT3Zl
cnJpZGUKLSAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlV2Via2l0SXNvbGF0ZQotICAgICAg
ICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRJc29sYXRlT3ZlcnJpZGUKLSAgICAgICAgICAg
IHx8IGlkID09IENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDb250
ZW50OiAgICAgICAgICAgICAgLy8gWyA8c3RyaW5nPiB8IDx1cmk+IHwgPGNvdW50ZXI+IHwgYXR0
cihYKSB8IG9wZW4tcXVvdGUgfAotICAgICAgICAvLyBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVv
dGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlQ29u
dGVudChwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5QWx0OiAvLyBb
IDxzdHJpbmc+IHwgYXR0cihYKSBdCi0gICAgICAgIHJldHVybiBwYXJzZUFsdChwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAgICAg
ICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xpcFNoYXBlKHByb3BJ
ZCwgaW1wb3J0YW50KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvKiBTdGFydCBvZiBzdXBwb3J0
ZWQgQ1NTIHByb3BlcnRpZXMgd2l0aCB2YWxpZGF0aW9uLiBUaGlzIGlzIG5lZWRlZCBmb3IgcGFy
c2VTaG9ydGhhbmQgdG8gd29yawotICAgICAqIGNvcnJlY3RseSBhbmQgYWxsb3dzIG9wdGltaXph
dGlvbiBpbiBXZWJDb3JlOjphcHBseVJ1bGUoLi4pCi0gICAgICovCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU92ZXJmbG93OiB7Ci0gICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJ
ZCk7Ci0gICAgICAgIGlmIChudW0gIT0gMSB8fCAhcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eU92ZXJm
bG93WSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IG92ZXJmbG93WFZhbHVlOwotCi0gICAgICAgIC8vIEZJWE1FOiAtd2Vi
a2l0LXBhZ2VkLXggb3IgLXdlYmtpdC1wYWdlZC15IG9ubHkgYXBwbHkgdG8gb3ZlcmZsb3cteS4g
SWYgdGhpcyB2YWx1ZSBoYXMgYmVlbgotICAgICAgICAvLyBzZXQgdXNpbmcgdGhlIHNob3J0aGFu
ZCwgdGhlbiBmb3Igbm93IG92ZXJmbG93LXggd2lsbCBkZWZhdWx0IHRvIGF1dG8sIGJ1dCBvbmNl
IHdlIGltcGxlbWVudAotICAgICAgICAvLyBwYWdpbmF0aW9uIGNvbnRyb2xzLCBpdCBzaG91bGQg
ZGVmYXVsdCB0byBoaWRkZW4uIElmIHRoZSBvdmVyZmxvdy15IHZhbHVlIGlzIGFueXRoaW5nIGJ1
dAotICAgICAgICAvLyBwYWdlZC14IG9yIHBhZ2VkLXksIHRoZW4gb3ZlcmZsb3cteCBhbmQgb3Zl
cmZsb3cteSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlV2Via2l0UGFnZWRYIHx8IGlkID09IENTU1ZhbHVlV2Via2l0UGFnZWRZKQotICAgICAg
ICAgICAgb3ZlcmZsb3dYVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG92ZXJmbG93WFZhbHVl
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwotICAgICAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eU92ZXJmbG93WCwgV1RGTW92ZShvdmVyZmxvd1hWYWx1ZSksIGltcG9ydGFu
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0QWxpZ246Ci0gICAgICAgIC8vIGxlZnQgfCByaWdodCB8IGNlbnRlciB8IGp1c3RpZnkgfCAt
d2Via2l0LWxlZnQgfCAtd2Via2l0LXJpZ2h0IHwgLXdlYmtpdC1jZW50ZXIgfCAtd2Via2l0LW1h
dGNoLXBhcmVudAotICAgICAgICAvLyB8IHN0YXJ0IHwgZW5kIHwgaW5oZXJpdCB8IC13ZWJraXQt
YXV0byAoY29udmVydGVkIHRvIHN0YXJ0KQotICAgICAgICAvLyBOT1RFOiA8c3RyaW5nPiBpcyBu
b3Qgc3VwcG9ydGVkLgotICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVlV2Via2l0QXV0byAmJiBp
ZCA8PSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KSB8fCBpZCA9PSBDU1NWYWx1ZVN0YXJ0IHx8
IGlkID09IENTU1ZhbHVlRW5kKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OiAgeyAvLyBu
b3JtYWwgfCBib2xkIHwgYm9sZGVyIHwgbGlnaHRlciB8IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8
IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMCB8IGluaGVyaXQKLSAgICAgICAgaWYgKG1fdmFs
dWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHBhcnNlRm9udFdlaWdodChpbXBvcnRhbnQpOwotICAgIH0KLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250U3ludGhlc2lzOiAvLyBub25lIHwgWyB3ZWlnaHQgfHwgc3R5bGUgXQotICAg
ICAgICByZXR1cm4gcGFyc2VGb250U3ludGhlc2lzKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogewotICAgICAgICBpZiAobnVtID09IDEpIHsKLSAgICAg
ICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2lu
Zyk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJI
b3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFz
dCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlclZlcnRpY2FsU3BhY2luZywgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChudW0gPT0gMikgewotICAgICAg
ICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5n
KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhv
cml6b250YWxTcGFjaW5nLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhv
cml6b250YWxTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNh
bFNwYWNpbmc6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwg
aW5oZXJpdAotICAgICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlv
bmFsIGtleXdvcmQuCi0gICAgICAgIC8vIEFsc28sIHdlIHdhbnQgdG8gYWxsb3cgdGhlIHNwZWNp
YWwgZm9jdXMgY29sb3IgZXZlbiBpbiBzdHJpY3QgcGFyc2luZyBtb2RlLgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVJbnZlcnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xv
cikgewotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcjogLy8gPGNvbG9yPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckVuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVD
b2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOiAvLyBDU1MzIHRleHQgZGVjb3JhdGlvbiBjb2xv
cnMKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUnVs
ZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOyAvLyBBbHdheXMgYWxsb3cgdGhpcywg
ZXZlbiB3aGVuIHN0cmljdCBwYXJzaW5nIGlzIG9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2luY2Ugd2UgdXNlIHRoaXMgaW4gb3VyIFVBIHNoZWV0cy4KLSAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRTeXN0ZW1Db2xvclZh
bHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUKLSAgICAgICAgICAgIHx8IChpZCA+PSBDU1NW
YWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yICYmIGlkIDwgQ1NTVmFsdWVXZWJraXRUZXh0ICYmIGlu
UXVpcmtzTW9kZSgpKSkgewotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvbG9yKCk7Ci0g
ICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlDdXJzb3I6IHsKLSAgICAgICAgLy8gR3JhbW1hciBkZWZpbmVkIGJ5IENTUzMgVUkgYW5kIG1v
ZGlmaWVkIGJ5IENTUzQgaW1hZ2VzOgotICAgICAgICAvLyBbIFs8aW1hZ2U+IFs8eD4gPHk+XT8s
XSoKLSAgICAgICAgLy8gWyBhdXRvIHwgY3Jvc3NoYWlyIHwgZGVmYXVsdCB8IHBvaW50ZXIgfCBw
cm9ncmVzcyB8IG1vdmUgfCBlLXJlc2l6ZSB8IG5lLXJlc2l6ZSB8Ci0gICAgICAgIC8vIG53LXJl
c2l6ZSB8IG4tcmVzaXplIHwgc2UtcmVzaXplIHwgc3ctcmVzaXplIHwgcy1yZXNpemUgfCB3LXJl
c2l6ZSB8IGV3LXJlc2l6ZSB8Ci0gICAgICAgIC8vIG5zLXJlc2l6ZSB8IG5lc3ctcmVzaXplIHwg
bndzZS1yZXNpemUgfCBjb2wtcmVzaXplIHwgcm93LXJlc2l6ZSB8IHRleHQgfCB3YWl0IHwgaGVs
cCB8Ci0gICAgICAgIC8vIHZlcnRpY2FsLXRleHQgfCBjZWxsIHwgY29udGV4dC1tZW51IHwgYWxp
YXMgfCBjb3B5IHwgbm8tZHJvcCB8IG5vdC1hbGxvd2VkIHwKLSAgICAgICAgLy8gem9vbS1pbiB8
IHpvb20tb3V0IHwgYWxsLXNjcm9sbCB8IC13ZWJraXQtZ3JhYiB8IC13ZWJraXQtZ3JhYmJpbmcg
fCAtd2Via2l0LXpvb20taW4gfAotICAgICAgICAvLyAtd2Via2l0LXpvb20tb3V0IF0gXSB8IGlu
aGVyaXQKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gJnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCk7Ci0gICAgICAg
IHdoaWxlICh2YWx1ZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkg
ewotICAgICAgICAgICAgICAgIFN0cmluZyB1cmkgPSB2YWx1ZS0+c3RyaW5nOwotICAgICAgICAg
ICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh1cmkpKTsKLSNpZiBFTkFCTEUoTU9VU0Vf
Q1VSU09SX1NDQUxFKQotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25W
YWx1ZSgqdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgaW1hZ2UgPSBwYXJzZUltYWdlU2V0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBWZWN0b3I8aW50PiBjb29yZHM7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICB3aGlsZSAodmFsdWUgJiYgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBjb29y
ZHMuYXBwZW5kKGludCh2YWx1ZS0+ZlZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm9vbCBoYXNI
b3RTcG90ID0gZmFsc2U7Ci0gICAgICAgICAgICBJbnRQb2ludCBob3RTcG90KC0xLCAtMSk7Ci0g
ICAgICAgICAgICBpbnQgbnJjb29yZHMgPSBjb29yZHMuc2l6ZSgpOwotICAgICAgICAgICAgaWYg
KG5yY29vcmRzID4gMCAmJiBucmNvb3JkcyAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChucmNvb3JkcyA9PSAyKSB7Ci0gICAgICAgICAgICAgICAg
aGFzSG90U3BvdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaG90U3BvdCA9IEludFBvaW50KGNv
b3Jkc1swXSwgY29vcmRzWzFdKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFs
aXN0KQotICAgICAgICAgICAgICAgIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZSkKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y3JlYXRlKGltYWdlLnJlbGVhc2VOb25OdWxs
KCksIGhhc0hvdFNwb3QsIGhvdFNwb3QpKTsKLQotICAgICAgICAgICAgaWYgKChpblN0cmljdE1v
ZGUoKSAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZh
bHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsg
Ly8gY29tbWEKLSAgICAgICAgfQotICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIG5vIHZhbHVlIGFmdGVyIHVybCBsaXN0IChN
U0lFIDUgY29tcGF0aWJpbGl0eSkKLSAgICAgICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3RoKCkg
IT0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChpblF1aXJrc01vZGUoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSAvLyBN
U0lFIDUgY29tcGF0aWJpbGl0eSA6LwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUG9pbnRlcikpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9
IENTU1ZhbHVlV2Via2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gV1RGTW92
ZShsaXN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7
Ci0gICAgICAgICAgICBpZCA9IHZhbHVlLT5pZDsKLSAgICAgICAgICAgIGlmIChpblF1aXJrc01v
ZGUoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8g
TVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBpZCA9IENTU1ZhbHVlUG9p
bnRlcjsKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZhbHVlLT5pZCA8PSBD
U1NWYWx1ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvcHkgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJVFkpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHk6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgaWQgPT0gQ1NTVmFsdWVBdXRvSGlkZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQXR0YWNobWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEJsZW5k
TW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRT
aXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tTb3VyY2VUeXBlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFk6Ci0gICAgewotICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbDE7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMjsKLSAgICAgICAg
Q1NTUHJvcGVydHlJRCBwcm9wSWQxLCBwcm9wSWQyOwotICAgICAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgICAgICBpZiAocGFyc2VGaWxsUHJvcGVydHkocHJvcElkLCBwcm9wSWQxLCBwcm9w
SWQyLCB2YWwxLCB2YWwyKSkgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNob3J0aGFu
ZFNjb3BlPiBzaG9ydGhhbmRTY29wZTsKLSAgICAgICAgICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwKLSAgICAgICAgICAgICAgICBwcm9wSWQgPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8Ci0gICAgICAgICAgICAgICAgcHJvcElkID09IENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uIHx8Ci0gICAgICAgICAgICAgICAgcHJvcElkID09
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkgewotICAgICAgICAgICAgICAgIHNob3J0aGFu
ZFNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxTaG9ydGhhbmRTY29wZT4odGhpcywgcHJvcElkKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIHZhbDEucmVs
ZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGlmICh2YWwyKQotICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDIsIHZhbDIucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6ICAgICAvLyA8dXJpPiB8IG5v
bmUgfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6Ci0gICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbikpIHsKLSAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdl
KCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9IGVsc2UgaWYgKGlzSW1hZ2VTZXRGdW5jdGlvblZhbHVlKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlSW1h
Z2VTZXQoKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDogICAgICAgIC8vIDxib3Jk
ZXItd2lkdGg+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDog
ICAgIC8vLy8gPGJvcmRlci13aWR0aD4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0V2lkdGg6ICAgLy8gICBXaGljaCBpcyBkZWZpbmVkIGFzCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOiAgLy8gICB0aGluIHwgbWVkaXVtIHwgdGhpY2sgfCA8
bGVuZ3RoPgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckVuZFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZv
cmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVUaGluIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2sp
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUxldHRlclNwYWNpbmc6ICAgICAgIC8vIG5vcm1hbCB8IDxsZW5ndGg+IHwgaW5oZXJpdAot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6ICAgICAgICAgLy8gbm9ybWFs
IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VUZXh0SW5kZW50KCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVBh
ZGRpbmdUb3A6ICAgICAgICAgIC8vLy8gPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdAotICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6ICAgICAgICAvLyAgIFdoaWNoIGlzIGRlZmluZWQg
YXMKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbTogICAgICAgLy8gICA8bGVuZ3Ro
PiB8IDxwZXJjZW50YWdlPgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDogICAgICAg
ICAvLy8vCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UGFkZGluZ0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IGlzVmFsaWRTaXplKHZhbHVlV2l0aENh
bGN1bGF0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsV2lkdGg6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9n
aWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSBpZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgaXNWYWxpZFNpemUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9n
aWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09
IENTU1ZhbHVlQXV0byB8fCBpc1ZhbGlkU2l6ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICAgICAgcmV0
dXJuIHBhcnNlRm9udFNpemUoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlWZXJ0
aWNhbEFsaWduOgotICAgICAgICAvLyBiYXNlbGluZSB8IHN1YiB8IHN1cGVyIHwgdG9wIHwgdGV4
dC10b3AgfCBtaWRkbGUgfCBib3R0b20gfCB0ZXh0LWJvdHRvbSB8Ci0gICAgICAgIC8vIDxwZXJj
ZW50YWdlPiB8IDxsZW5ndGg+IHwgaW5oZXJpdAotCi0gICAgICAgIGlmIChpZCA+PSBDU1NWYWx1
ZUJhc2VsaW5lICYmIGlkIDw9IENTU1ZhbHVlV2Via2l0QmFzZWxpbmVNaWRkbGUpCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3R0b206ICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBh
dXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OiAgICAgICAgICAgICAgICAg
Ly8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlSaWdodDogICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4g
fCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlUb3A6ICAgICAgICAgICAgICAg
ICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5Ub3A6ICAgICAgICAgICAvLy8vIDxtYXJnaW4td2lkdGg+IHwgaW5o
ZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDogICAgICAgICAvLyAgIFdoaWNo
IGlzIGRlZmluZWQgYXMKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOiAgICAgICAg
Ly8gICA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGF1dG8gfCBpbmhlcml0Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmdpbkxlZnQ6ICAgICAgICAgIC8vLy8KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkVuZDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJnaW5BZnRlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVpJbmRleDogICAgICAgICAgICAgIC8vIGF1dG8gfCA8aW50ZWdlcj4gfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2Vy
LCBDU1NRdWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eU9ycGhhbnM6IC8vIDxpbnRlZ2VyPiB8IGluaGVyaXQgfCBhdXRvIChXZSd2ZSBhZGRlZCBzdXBw
b3J0IGZvciBhdXRvIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKLSAgICBjYXNlIENTU1By
b3BlcnR5V2lkb3dzOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoRGl0dG8pCi0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENT
U1F1aXJrc01vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5TGlu
ZUhlaWdodDoKLSAgICAgICAgcmV0dXJuIHBhcnNlTGluZUhlaWdodChpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OiAgICAvLyBbIDxpZGVudGlmaWVyPiA8
aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkICE9IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvdW50ZXIocHJvcElkLCAxLCBpbXBvcnRh
bnQpOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6ICAgICAgICAvLyBbIDxpZGVudGlmaWVyPiA8
aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkICE9IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvdW50ZXIocHJvcElkLCAwLCBpbXBvcnRh
bnQpOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgotICAgICAgICAvLyBbWyA8ZmFtaWx5LW5hbWU+
IHwgPGdlbmVyaWMtZmFtaWx5PiBdLF0qIFs8ZmFtaWx5LW5hbWU+IHwgPGdlbmVyaWMtZmFtaWx5
Pl0gfCBpbmhlcml0Ci0gICAgewotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlRm9udEZhbWls
eSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb246Ci0gICAgICAgIC8vIFsgPHRleHQtZGVjb3JhdGlvbi1saW5lPiB8fCA8
dGV4dC1kZWNvcmF0aW9uLXN0eWxlPiB8fCA8dGV4dC1kZWNvcmF0aW9uLWNvbG9yPiBdIHwgaW5o
ZXJpdAotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbiwgd2Via2l0VGV4dERlY29yYXRpb25TaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uTGluZToKLSAgICAgICAgLy8gbm9uZSB8IFsgdW5kZXJsaW5lIHx8
IG92ZXJsaW5lIHx8IGxpbmUtdGhyb3VnaCB8fCBibGluayBdIHwgaW5oZXJpdAotICAgICAgICBy
ZXR1cm4gcGFyc2VUZXh0RGVjb3JhdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25TdHlsZToKLSAgICAgICAgLy8gc29saWQg
fCBkb3VibGUgfCBkb3R0ZWQgfCBkYXNoZWQgfCB3YXZ5Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZVNvbGlkIHx8IGlkID09IENTU1ZhbHVlRG91YmxlIHx8IGlkID09IENTU1ZhbHVlRG90dGVk
IHx8IGlkID09IENTU1ZhbHVlRGFzaGVkIHx8IGlkID09IENTU1ZhbHVlV2F2eSkKLSAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Ta2lwOgotICAgICAgICAvLyBub25lIHwgWyBv
YmplY3RzIHx8IHNwYWNlcyB8fCBpbmsgfHwgZWRnZXMgfHwgYm94LWRlY29yYXRpb24gXQotICAg
ICAgICByZXR1cm4gcGFyc2VUZXh0RGVjb3JhdGlvblNraXAoaW1wb3J0YW50KTsKLQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb246Ci0gICAgICAgIC8vIGF1
dG8gfCBhbHBoYWJldGljIHwgdW5kZXIKLSAgICAgICAgcmV0dXJuIHBhcnNlVGV4dFVuZGVybGlu
ZVBvc2l0aW9uKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAg
ICAgLy8gbm9ybWFsIHwgcmVzZXQgfCBkb2N1bWVudCB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+
IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NT
VmFsdWVSZXNldCB8fCBpZCA9PSBDU1NWYWx1ZURvY3VtZW50KQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwg
RlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Wm9vbToKLSAgICAgICAgLy8gbm9ybWFs
IHwgcmVzZXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1Zh
bHVlUmVzZXQpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIHdpdGhpbiBAZm9u
dC1mYWNlIGFuZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNhbm5vdCB1c2UgaW5oZXJpdCB8IGluaXRp
YWwgb3IgYmUgIWltcG9ydGFudC4gVGhpcyBpcyBhIGxpc3Qgb2YgdXJscyBvciBsb2NhbCByZWZl
cmVuY2VzLgotICAgICAgICByZXR1cm4gcGFyc2VGb250RmFjZVNyYygpOwotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVVuaWNvZGVSYW5nZToKLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udEZhY2VVbmlj
b2RlUmFuZ2UoKTsKLQotICAgIC8qIENTUzMgcHJvcGVydGllcyAqLwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0Owot
ICAgICAgICByZXR1cm4gcGFyc2VCb3JkZXJJbWFnZShwcm9wSWQsIHJlc3VsdCwgaW1wb3J0YW50
KTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2U6IHsKLSAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiByZXN1bHQ7Ci0gICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlKHByb3BJZCwgcmVzdWx0
KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGlt
cG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6IHsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7Ci0gICAgICAgIGlmIChwYXJzZUJvcmRlcklt
YWdlT3V0c2V0KHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShyZXN1bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlUmVwZWF0
OiB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VC
b3JkZXJJbWFnZVJlcGVhdChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
U2xpY2U6IHsKLSAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gcmVzdWx0
OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVNsaWNlKHByb3BJZCwgcmVzdWx0KSkgewot
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFu
dCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVdpZHRo
KHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1
bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJh
ZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHsKLSAgICAgICAgaWYgKG51bSAhPSAxICYmIG51bSAh
PSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZyk7Ci0gICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7Ci0gICAgICAgIGlmIChudW0gPT0gMikgewotICAgICAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3Zh
bHVlTGlzdC0+bmV4dCgpKTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5l
Zyk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMS5wdHIoKTsKLQotICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNl
ZFZhbHVlMSksIHBhcnNlZFZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkludGVnZXIgfCBGTm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgotICAgICAgICByZXR1cm4gcGFyc2VBc3BlY3RSYXRpbyhp
bXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKLSAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVy
UmFkaXVzKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFNoYWRvdzogLy8gQ1NTMiBwcm9wZXJ0eSwgZHJvcHBlZCBpbiBDU1MyLjEsIGJhY2sgaW4g
Q1NTMywgc28gdHJlYXQgYXMgQ1NTMwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzoKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3Qg
PSBwYXJzZVNoYWRvdygqbV92YWx1ZUxpc3QsIHByb3BJZCk7Ci0gICAgICAgICAgICBpZiAoc2hh
ZG93VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBzaGFk
b3dWYWx1ZUxpc3QucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRJbml0aWFsTGV0dGVyOiB7Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVt
ICE9IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhdXRvIGhlaWdodCA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHBvc2l0aW9uOwotICAgICAgICAgICAgaWYgKG51bSA9PSAyKSB7
Ci0gICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1
bGF0aW9uKCptX3ZhbHVlTGlzdC0+bmV4dCgpKTsKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkYXRlVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIpOwotICAgICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBoZWlnaHQucHRyKCk7Ci0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihw
b3NpdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGhlaWdodCkpLCBpbXBvcnRhbnQpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWZsZWN0KHByb3BJZCwgaW1wb3J0
YW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZs
ZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFsR3Jv
dXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
b3BlcnR5RmlsdGVyOgotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyOgotI2VuZGlmCi0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3VyclZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZUZpbHRlcigqbV92YWx1ZUxpc3QsIGN1cnJWYWx1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKGN1cnJWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5H
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaXhCbGVuZE1vZGU6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlv
bjoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4OiB7Ci0gICAgICAgIFNob3J0aGFuZFNjb3BlIHNj
b3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEdyb3csIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJpbmssIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9y
dGFudCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhCYXNpcywgY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBh
cnNlRmxleCgqbV92YWx1ZUxpc3QsIGltcG9ydGFudCk7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJv
cGVydHlGbGV4QmFzaXM6Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGludHJpbnNpYyBkaW1l
bnNpb25zIHRvby4KLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5RmxleEdyb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhTaHJpbms6Ci0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlP
cmRlcjoKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRklu
dGVnZXIsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICAvLyBXZSByZXN0cmljdCB0aGUg
c21hbGxlc3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVzZSB3ZSB1c2UgaW50IG1pbiBhbmQg
aW50IG1pbiArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBoYXNoIHNldC4KLSAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1heDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWluKCkgKyAyLCBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZToKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0
TWFycXVlZVNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJxdWVlSW5jcmVtZW50OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBp
ZCA9PSBDU1NWYWx1ZUxhcmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQ
ZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1
ZWVSZXBldGl0aW9uOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRl
Z2VyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJxdWVlU3BlZWQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9
PSBDU1NWYWx1ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUgfCBGSW50ZWdlciB8
IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvOgotICAgICAgICByZXR1cm4gcGFyc2VGbG93
VGhyZWFkKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxv
d0Zyb206Ci0gICAgICAgIHJldHVybiBwYXJzZVJlZ2lvblRocmVhZChwcm9wSWQsIGltcG9ydGFu
dCk7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtOgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHRyYW5zZm9y
bVZhbHVlID0gcGFyc2VUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgdHJhbnNmb3JtVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5Y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW5aOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmFsMTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwyOwotICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDM7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElkMSwg
cHJvcElkMiwgcHJvcElkMzsKLSAgICAgICAgaWYgKHBhcnNlVHJhbnNmb3JtT3JpZ2luKHByb3BJ
ZCwgcHJvcElkMSwgcHJvcElkMiwgcHJvcElkMywgdmFsMSwgdmFsMiwgdmFsMykpIHsKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIFdURk1vdmUodmFsMSksIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAodmFsMikKLSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQy
LCBXVEZNb3ZlKHZhbDIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgaWYgKHZhbDMpCi0gICAg
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMywgV1RGTW92ZSh2YWwzKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlOgotICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFjY2VwdGluZyB2YWx1ZWxlc3MgbnVt
YmVycyBpcyBhIHF1aXJrIG9mIHRoZSAtd2Via2l0IHByZWZpeGVkIHZlcnNpb24gb2YgdGhlIHBy
b3BlcnR5LgotICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGVyc3BlY3RpdmVPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2lu
WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5ZOiB7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YWwyOwotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BJZDEsIHByb3BJZDI7Ci0g
ICAgICAgIGlmIChwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKHByb3BJZCwgcHJvcElkMSwgcHJvcElk
MiwgdmFsMSwgdmFsMikpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIFdURk1v
dmUodmFsMSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBpZiAodmFsMikKLSAgICAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCBXVEZNb3ZlKHZhbDIpLCBpbXBvcnRhbnQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9u
RHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkZpbGxNb2RlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlBbmltYXRpb25OYW1lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRp
b25QbGF5U3RhdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2Rl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25UaW1pbmdGdW5jdGlvbjoKLSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxf
MikKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVHJpZ2dlcjoKLSNlbmRpZgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eTogewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKLSAgICAgICAg
QW5pbWF0aW9uUGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgICAgIGlmIChwYXJzZUFuaW1hdGlv
blByb3BlcnR5KHByb3BJZCwgdmFsLCBjb250ZXh0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBXVEZNb3ZlKHZhbCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlKdXN0aWZ5Q29udGVudDoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNv
bnRlbnREaXN0cmlidXRpb25PdmVyZmxvd1Bvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlKdXN0aWZ5U2VsZjoKLSAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBv
c2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUp1c3RpZnlJdGVtczoKLSAgICAgICAgaWYgKHBhcnNlTGVnYWN5UG9zaXRpb24ocHJv
cElkLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG1fdmFs
dWVMaXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUl0ZW1Qb3Np
dGlvbk92ZXJmbG93UG9zaXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwotI2lmIEVOQUJMRShDU1Nf
R1JJRF9MQVlPVVQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvQ29sdW1uczoKLSAgICBj
YXNlIENTU1Byb3BlcnR5R3JpZEF1dG9Sb3dzOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91
dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFs
dWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8pOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlHcmlkVGVtcGxhdGVSb3dzOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUdyaWRUcmFja0xpc3QoR3JpZFRlbXBsYXRlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5R3JpZENvbHVtblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29s
dW1uRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93U3RhcnQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUdyaWRSb3dFbmQ6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
R3JpZFBvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdy
aWRDb2x1bW5HYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3dHYXA6Ci0gICAgICAgIGlm
ICghaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlHcmlkR2FwOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3JpZEdhcFNob3J0
aGFuZChpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW46Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3c6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gcGFyc2VH
cmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKHByb3BJZCwgaW1wb3J0YW50KTsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlHcmlkVGVtcGxhdGU6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gcGFyc2VH
cmlkVGVtcGxhdGVTaG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlH
cmlkOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3JpZFNob3J0aGFuZChpbXBvcnRh
bnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBcmVhOgotICAgICAgICBpZiAoIWlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHBhcnNlR3JpZEFyZWFTaG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhczoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRF
bmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVl
ID0gcGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5R3JpZEF1dG9GbG93OgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZUdyaWRBdXRvRmxvdygqbV92YWx1ZUxpc3QpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAv
KiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5Db2xsYXBzZTogewotICAgICAgICBpZiAobnVtID09IDEpIHsKLSAgICAgICAgICAgIFNo
b3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2Up
OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRo
YW5kKCkucHJvcGVydGllcygpWzBdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGll
cy5sYXN0KCkudmFsdWUoKTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHdlYmtpdE1hcmdpbkNv
bGxhcHNlU2hvcnRoYW5kKCkucHJvcGVydGllcygpWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG51bSA9
PSAyKSB7Ci0gICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hcmdpbkNvbGxhcHNlKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZSh3ZWJr
aXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVswXSwgaW1wb3J0YW50KSB8
fCAhcGFyc2VWYWx1ZSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMo
KVsxXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hXaWR0aDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRl
cmxpbmVXaWR0aDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NW
YWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVRoaW4gfHwKLSAgICAgICAgICAgIGlkID09IENT
U1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2spCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZM
ZW5ndGggfCBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b2x1bW5Db3VudDoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvbHVtbkNvdW50KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5HYXA6IC8vIG5vcm1hbCB8
IDxsZW5ndGg+Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
Tm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkF4aXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgaWQgPT0gQ1NT
VmFsdWVWZXJ0aWNhbCB8fCBpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5Qcm9ncmVzc2lvbjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09
IENTU1ZhbHVlUmV2ZXJzZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblNwYW46IC8vIG5vbmUgfCBh
bGwgfCAxICh3aWxsIGJlIGRyb3BwZWQgaW4gdGhlIHVucHJlZml4ZWQgcHJvcGVydHkpCi0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUFsbCB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpICYmIHBhcnNlZERvdWJs
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikgPT0gMSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDb2x1bW5TcGFuLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNv
bHVtbldpZHRoOiAvLyBhdXRvIHwgPGxlbmd0aD4KLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUNvbHVtbldpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPYmpl
Y3RQb3NpdGlvbjogewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7Ci0g
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMjsKLSAgICAgICAgcGFyc2VGaWxs
UG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWwxLCB2YWwyKTsKLSAgICAgICAgaWYgKHZhbDEpIHsK
LSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5T2JqZWN0UG9zaXRpb24sIGNyZWF0
ZVByaW1pdGl2ZVZhbHVlUGFpcih2YWwxLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUodmFsMikp
LCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgLy8gRW5kIG9mIENTUzMgcHJvcGVydGll
cwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpbGxDaGFuZ2U6IC8vIGF1dG8gfCBbc2Nyb2xsLXBv
c2l0aW9uIHwgY29udGVudHMgfCA8Y3VzdG9tLWlkZW50Pl0jCi0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVdpbGxDaGFuZ2UoaW1wb3J0YW50KTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAvLyBBcHBsZSBzcGVjaWZpYyBwcm9wZXJ0aWVzLiAgVGhlc2Ug
d2lsbCBuZXZlciBiZSBzdGFuZGFyZGl6ZWQgYW5kIGFyZSBwdXJlbHkgdG8KLSAgICAvLyBzdXBw
b3J0IGN1c3RvbSBXZWJLaXQtYmFzZWQgQXBwbGUgYXBwbGljYXRpb25zLgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6Ci0gICAgICAgIC8vIFdoZW4gc3BlY2lmeWluZyBudW1i
ZXIgb2YgbGluZXMsIGRvbid0IGFsbG93IDAgYXMgYSB2YWxpZCB2YWx1ZQotICAgICAgICAvLyBX
aGVuIHNwZWNpZnlpbmcgZWl0aGVyIHR5cGUgb2YgdW5pdCwgcmVxdWlyZSBub24tbmVnYXRpdmUg
aW50ZWdlcnMKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
IHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAmJiB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NR
dWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2l6ZUFkanVzdDoKLSAgICAgICAg
aWYgKCFpc1RleHRBdXRvc2l6aW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlsZW5ndGggY2FzZSB3aGVyZSB3ZSBhbGxv
dyByZWxhdGl2ZSB1bml0cy4KLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRk5vbk5lZywgQ1NT
U3RyaWN0TW9kZSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YTogICAgICAgICAgIC8vIDxsZW5ndGg+
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVuYXRlQ2hhcmFjdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b0xpbWl0IHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBG
Tm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6
Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUobGluZUdyaWRWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRh
bnQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6Ci0g
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9u
OiAvLyA8ZGFzaGJvYXJkLXJlZ2lvbj4gfCA8ZGFzaGJvYXJkLXJlZ2lvbj4KLSAgICAgICAgaWYg
KHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRvdWNoQ2Fs
bG91dDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlRGVmYXVsdCB8fCBpZCA9PSBDU1NWYWx1
ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6Ci0gICAgICAgIGlmIChpc1ZhbGlkU3lzdGVtQ29sb3JW
YWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgICAgICB8fCAoaWQgPj0gQ1NT
VmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiBpZCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBp
blF1aXJrc01vZGUoKSkpIHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2xvcigpOwot
ICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAvLyBFbmQg
QXBwbGUtc3BlY2lmaWMgcHJvcGVydGllcwotCi0gICAgICAgIC8qIHNob3J0aGFuZCBwcm9wZXJ0
aWVzICovCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6IHsKLSAgICAgICAgLy8gUG9z
aXRpb24gbXVzdCBjb21lIGJlZm9yZSBjb2xvciBpbiB0aGlzIGFycmF5IGJlY2F1c2UgYSBwbGFp
biBvbGQgIjAiIGlzIGEgbGVnYWwgY29sb3IKLSAgICAgICAgLy8gaW4gcXVpcmtzIG1vZGUgYnV0
IGl0J3MgdXN1YWxseSB0aGUgWCBjb29yZGluYXRlIG9mIGEgcG9zaXRpb24uCi0gICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5SUQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJ
bWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvbiwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSB9Owot
ICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgV1RG
X0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKSwgaW1wb3J0YW50KTsKLSAgICB9Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2s6IHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tTb3VyY2VUeXBlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCi0gICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3Jp
Z2luLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXpl
IH07Ci0gICAgICAgIHJldHVybiBwYXJzZUZpbGxTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVz
LCBXVEZfQVJSQVlfTEVOR1RIKHByb3BlcnRpZXMpLCBpbXBvcnRhbnQpOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyOgotICAgICAgICAvLyBbICdib3JkZXItd2lkdGgnIHx8ICdi
b3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8IGluaGVyaXQKLSAgICB7Ci0gICAgICAgIGlmIChw
YXJzZVNob3J0aGFuZChwcm9wSWQsIGJvcmRlckFicmlkZ2VkU2hvcnRoYW5kKCksIGltcG9ydGFu
dCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBDU1MzIEJvcmRlcnMgYW5kIEJhY2tncm91bmRzIHNw
ZWNpZmljYXRpb24gc2F5cyB0aGF0IGJvcmRlciBhbHNvIHJlc2V0cyBib3JkZXItaW1hZ2UuIEl0
J3MgYXMKLSAgICAgICAgICAgIC8vIHRob3VnaCBhIHZhbHVlIG9mIG5vbmUgd2FzIHNwZWNpZmll
ZCBmb3IgdGhlIGltYWdlLgotICAgICAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVl
KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wOgotICAgICAgICAvLyBbICdib3JkZXItdG9wLXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxl
JyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChw
cm9wSWQsIGJvcmRlclRvcFNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodDoKLSAgICAgICAgLy8gWyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyB8fCAn
Ym9yZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJz
ZVNob3J0aGFuZChwcm9wSWQsIGJvcmRlclJpZ2h0U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICAgICAgLy8gWyAnYm9yZGVyLWJv
dHRvbS13aWR0aCcgfHwgJ2JvcmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAg
ICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJCb3R0b21TaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICAgICAg
Ly8gWyAnYm9yZGVyLWxlZnQtd2lkdGgnIHx8ICdib3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8
IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgYm9yZGVyTGVm
dFNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJTdGFydDoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0Qm9y
ZGVyU3RhcnRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyRW5kOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCB3ZWJr
aXRCb3JkZXJFbmRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyQmVmb3JlOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElk
LCB3ZWJraXRCb3JkZXJCZWZvcmVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXI6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFu
ZChwcm9wSWQsIHdlYmtpdEJvcmRlckFmdGVyU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6Ci0gICAgICAgIC8vIFsgJ291dGxpbmUtY29sb3InIHx8
ICdvdXRsaW5lLXN0eWxlJyB8fCAnb3V0bGluZS13aWR0aCcgXSB8IGluaGVyaXQKLSAgICAgICAg
cmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgb3V0bGluZVNob3J0aGFuZCgpLCBpbXBvcnRh
bnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjoKLSAgICAgICAgLy8gPGNvbG9y
PnsxLDR9IHwgaW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9y
ZGVyQ29sb3JTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlcldpZHRoOgotICAgICAgICAvLyA8Ym9yZGVyLXdpZHRoPnsxLDR9IHwg
aW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9yZGVyV2lkdGhT
aG9ydGhhbmQoKS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlclN0eWxlOgotICAgICAgICAvLyA8Ym9yZGVyLXN0eWxlPnsxLDR9IHwgaW5oZXJpdAot
ICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9yZGVyU3R5bGVTaG9ydGhhbmQo
KS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjoK
LSAgICAgICAgLy8gPG1hcmdpbi13aWR0aD57MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJu
IHBhcnNlNFZhbHVlcyhwcm9wSWQsIG1hcmdpblNob3J0aGFuZCgpLnByb3BlcnRpZXMoKSwgaW1w
b3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzoKLSAgICAgICAgLy8gPHBhZGRp
bmctd2lkdGg+ezEsNH0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZTRWYWx1ZXMocHJv
cElkLCBwYWRkaW5nU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlGbGV4RmxvdzoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHBy
b3BJZCwgZmxleEZsb3dTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udDoKLSAgICAgICAgLy8gWyBbICdmb250LXN0eWxlJyB8fCAnZm9udC12YXJpYW50JyB8
fCAnZm9udC13ZWlnaHQnIF0/ICdmb250LXNpemUnIFsgLyAnbGluZS1oZWlnaHQnIF0/Ci0gICAg
ICAgIC8vICdmb250LWZhbWlseScgXSB8IGNhcHRpb24gfCBpY29uIHwgbWVudSB8IG1lc3NhZ2Ut
Ym94IHwgc21hbGwtY2FwdGlvbiB8IHN0YXR1cy1iYXIgfCBpbmhlcml0Ci0gICAgICAgIGlmIChu
dW0gPT0gMSAmJiBpZCA+PSBDU1NWYWx1ZUNhcHRpb24gJiYgaWQgPD0gQ1NTVmFsdWVTdGF0dXNC
YXIpIHsKLSAgICAgICAgICAgIHBhcnNlU3lzdGVtRm9udChpbXBvcnRhbnQpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udChpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6Ci0gICAgICAgIHJldHVybiBw
YXJzZVNob3J0aGFuZChwcm9wSWQsIGxpc3RTdHlsZVNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5zOgotICAgICAgICByZXR1cm4gcGFyc2VDb2x1bW5z
U2hvcnRoYW5kKGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGU6Ci0g
ICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIGNvbHVtblJ1bGVTaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAg
ICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0VGV4dFN0cm9rZVNob3J0
aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKLSAgICAgICAgcmV0dXJuIHBhcnNlQW5p
bWF0aW9uU2hvcnRoYW5kKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAg
ICAgcmV0dXJuIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIENTU1Byb3BlcnR5UGFnZToKLSAgICAgICAgcmV0dXJuIHBhcnNlUGFnZShwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0TGluZVRocm91Z2g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGlu
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZToKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUgTGV2ZWwgMzogVmVydGljYWwgd3Jp
dGluZyBzdXBwb3J0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpczoKLSAg
ICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0VGV4dEVtcGhhc2lzU2hv
cnRoYW5kKCksIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVt
cGhhc2lzU3R5bGU6Ci0gICAgICAgIHJldHVybiBwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGltcG9y
dGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246
Ci0gICAgICAgIHJldHVybiBwYXJzZVRleHRFbXBoYXNpc1Bvc2l0aW9uKGltcG9ydGFudCk7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVTaWRld2F5cyB8fCBpZCA9PSBDU1NWYWx1ZVNpZGV3YXlzUmlnaHQgfHwg
aWQgPT0gQ1NTVmFsdWVWZXJ0aWNhbFJpZ2h0IHx8IGlkID09IENTU1ZhbHVlTWl4ZWQgfHwgaWQg
PT0gQ1NTVmFsdWVVcHJpZ2h0KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlIYW5naW5nUHVuY3R1YXRpb246
Ci0gICAgICAgIHJldHVybiBwYXJzZUhhbmdpbmdQdW5jdHVhdGlvbihpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGluZUJveENvbnRhaW4oaW1wb3J0YW50
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGZWF0dXJlU2V0dGlu
Z3M6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNl
Rm9udEZlYXR1cmVTZXR0aW5ncyhpbXBvcnRhbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRW
YXJpYW50TGlnYXR1cmVzKGltcG9ydGFudCwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnROdW1lcmljOgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhp
bXBvcnRhbnQsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFuOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGltcG9ydGFudCwgdHJ1
ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlh
bnQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgU2hv
cnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlGb250VmFyaWFudCk7Ci0gICAgICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCks
IGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50UG9zaXRpb24sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFu
dCwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
TnVtZXJpYywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0
cnVlKTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0
QXNpYW4sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwot
ICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcywg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50KGltcG9ydGFudCk7Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGg6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VDbGlwUGF0aCgpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICBwYXJzZWRWYWx1
ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
IWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJj
ZW50IHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRTaGFwZUltYWdlVGhyZXNob2xkOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlT3JpZW50YXRpb246Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlKTsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUltYWdlUmVzb2x1dGlvbigpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NT
UHJvcGVydHlBbGlnbkNvbnRlbnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb250ZW50
RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5QWxpZ25TZWxmOgotICAgICAgICByZXR1cm4gcGFyc2VJdGVtUG9zaXRpb25P
dmVyZmxvd1Bvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlBbGlnbkl0ZW1zOgotICAgICAgICByZXR1cm4gcGFyc2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bv
c2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQWZ0ZXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVh
a0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUNsZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlM
aXN0U3R5bGVQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5T2JqZWN0Rml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3JhcDoKLSAgICBjYXNlIENTU1By
b3BlcnR5T3ZlcmZsb3dYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJl
YWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5UG9pbnRlckV2ZW50czoKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0TGluZVRocm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFRyYW5zZm9ybToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1v
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5j
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyRW5kU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94QWxpZ246Ci0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFrOgotI2VuZGlmCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94TGluZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b2x1bW5SdWxlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsZXhXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250
S2VybmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5BZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZv
cmVDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFw
c2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2Rl
OgotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZy
YWdtZW50OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246Ci0jaWYgRU5BQkxFKENTUzNf
VEVYVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSNlbmRpZiAv
LyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0jaWYg
RU5BQkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6
Ci0jZW5kaWYgLy8gQ1NTM19URVhUCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1
cml0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyRHJhZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
V3JpdGluZ01vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdvcmRCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5VG91Y2hBY3Rpb246Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRTY3JvbGxTbmFwVHlwZToKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfVFJBSUxJTkdfV09S
RCkKLSAgICBjYXNlIENTU1Byb3BlcnR5QXBwbGVUcmFpbGluZ1dvcmQ6Ci0jZW5kaWYKLSAgICAg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgaW4gaXNWYWxp
ZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKCkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElP
TikKLSAgICAvLyBQcm9wZXJ0aWVzIGJlbGxvdyBhcmUgdmFsaWRhdGVkIGluc2lkZSBwYXJzZVZp
ZXdwb3J0UHJvcGVydHksIGJlY2F1c2Ugd2UKLSAgICAvLyBjaGVjayBmb3IgcGFyc2VyIHN0YXRl
IGluVmlld3BvcnRTY29wZS4gV2UgbmVlZCB0byBpbnZhbGlkYXRlIGlmIHNvbWVvbmUKLSAgICAv
LyBhZGRzIHRoZW0gb3V0c2lkZSBhIEB2aWV3cG9ydCBydWxlLgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXhab29tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5ab29tOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlPcmllbnRhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206Ci0gICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25h
cFBvaW50c1g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBQb2ludHNZOgot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVFbGVtZW50cykgewotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHBhcnNlTm9uRWxlbWVudFNuYXBQb2ludHMocHJvcElkLCBpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwRGVzdGluYXRpb246IC8vIDxsZW5ndGg+
ezJ9Ci0gICAgICAgIHJldHVybiBwYXJzZVNjcm9sbFNuYXBEZXN0aW5hdGlvbihwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBDb29yZGluYXRl
OgotICAgICAgICByZXR1cm4gcGFyc2VTY3JvbGxTbmFwQ29vcmRpbmF0ZShwcm9wSWQsIGltcG9y
dGFudCk7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBwYXJzZVNWR1Zh
bHVlKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWRQcmltaXRpdmUp
IHsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdp
dGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0g
ICAgaWYgKHBhcnNlZFZhbHVlICYmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSB8fCBpblNob3J0
aGFuZCgpKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBhcnNlZFZhbHVlLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVmUHRy
PENTU1ZhbHVlPiYgbHZhbCwgUmVmPENTU1ZhbHVlPiYmIHJ2YWwpCi17Ci0gICAgaWYgKCFsdmFs
KSB7Ci0gICAgICAgIGx2YWwgPSBXVEZNb3ZlKHJ2YWwpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGx2YWwtPmlzQmFzZVZhbHVlTGlzdCgpKSB7Ci0gICAgICAgIGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKmx2YWwpLmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKLSAgICBsaXN0LmdldCgpLmFwcGVuZChsdmFsLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgIGxpc3QuZ2V0KCkuYXBwZW5kKFdURk1vdmUocnZhbCkpOwotICAgIGx2YWwgPSBXVEZN
b3ZlKGxpc3QpOwotfQotCi1zdGF0aWMgYm9vbCBpc0NvbnRlbnREaXN0cmlidXRpb25LZXl3b3Jk
KENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1ZhbHVlU3BhY2VCZXR3ZWVu
IHx8IGlkID09IENTU1ZhbHVlU3BhY2VBcm91bmQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVT
cGFjZUV2ZW5seSB8fCBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2g7Ci19Ci0KLXN0YXRpYyBib29sIGlz
Q29udGVudFBvc2l0aW9uS2V5d29yZChDU1NWYWx1ZUlEIGlkKQotewotICAgIHJldHVybiBpZCA9
PSBDU1NWYWx1ZVN0YXJ0IHx8IGlkID09IENTU1ZhbHVlRW5kIHx8IGlkID09IENTU1ZhbHVlQ2Vu
dGVyCi0gICAgICAgIHx8IGlkID09IENTU1ZhbHVlRmxleFN0YXJ0IHx8IGlkID09IENTU1ZhbHVl
RmxleEVuZAotICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVS
aWdodDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQmFzZWxpbmVQb3NpdGlvbktleXdvcmQo
Q1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBp
ZCA9PSBDU1NWYWx1ZUxhc3RCYXNlbGluZTsKLX0KLQotc3RhdGljIGJvb2wgaXNBbGlnbm1lbnRP
dmVyZmxvd0tleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFs
dWVVbnNhZmUgfHwgaWQgPT0gQ1NTVmFsdWVTYWZlOwotfQotCi1zdGF0aWMgYm9vbCBpc0l0ZW1Q
b3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFs
dWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcgotICAg
ICAgICB8fCBpZCA9PSBDU1NWYWx1ZVNlbGZTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZVNlbGZFbmQg
fHwgaWQgPT0gQ1NTVmFsdWVGbGV4U3RhcnQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVGbGV4
RW5kIHx8IGlkID09IENTU1ZhbHVlTGVmdCB8fCBpZCA9PSBDU1NWYWx1ZVJpZ2h0OwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VMZWdhY3lQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gWyBsZWdhY3kgJiYgWyBsZWZ0IHwgcmlnaHQgfCBj
ZW50ZXIgXQotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlTGVnYWN5KSB7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCAhPSBDU1NWYWx1ZUNlbnRlciAmJiB2YWx1ZS0+aWQg
IT0gQ1NTVmFsdWVMZWZ0ICYmIHZhbHVlLT5pZCAhPSBDU1NWYWx1ZVJpZ2h0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQ2Vu
dGVyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
UmlnaHQpIHsKLSAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCktPmlkICE9IENTU1ZhbHVlTGVnYWN5KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVMZWdhY3kpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLT5pZCkpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiAhbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLX0KLQotUmVmUHRyPENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNvbnRlbnREaXN0cmlidXRpb25PdmVyZmxvd1Bvc2l0aW9uKCkKLXsKLSAgICAvLyBu
b3JtYWwgfCA8YmFzZWxpbmUtcG9zaXRpb24+IHwgPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiB8fCBb
IDxvdmVyZmxvdy1wb3NpdGlvbj4/ICYmIDxjb250ZW50LXBvc2l0aW9uPiBdCi0gICAgLy8gPGJh
c2VsaW5lLXBvc2l0aW9uPiA9IGJhc2VsaW5lIHwgbGFzdC1iYXNlbGluZTsKLSAgICAvLyA8Y29u
dGVudC1kaXN0cmlidXRpb24+ID0gc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCB8IHNwYWNl
LWV2ZW5seSB8IHN0cmV0Y2g7Ci0gICAgLy8gPGNvbnRlbnQtcG9zaXRpb24+ID0gY2VudGVyIHwg
c3RhcnQgfCBlbmQgfCBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBsZWZ0IHwgcmlnaHQ7Ci0gICAg
Ly8gPG92ZXJmbG93LXBvc2l0aW9uPiA9IHVuc2FmZSB8IHNhZmUKLQotICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBhdXRvIHwgPGJhc2VsaW5lLXBvc2l0aW9u
PgotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaXNCYXNlbGluZVBvc2l0
aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIHJldHVybiBDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU6OmNyZWF0ZShDU1NWYWx1
ZUludmFsaWQsIHZhbHVlLT5pZCwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICB9Ci0KLSAgICBDU1NW
YWx1ZUlEIGRpc3RyaWJ1dGlvbiA9IENTU1ZhbHVlSW52YWxpZDsKLSAgICBDU1NWYWx1ZUlEIHBv
c2l0aW9uID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIENTU1ZhbHVlSUQgb3ZlcmZsb3cgPSBDU1NW
YWx1ZUludmFsaWQ7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIGlmIChpc0NvbnRlbnRE
aXN0cmlidXRpb25LZXl3b3JkKHZhbHVlLT5pZCkpIHsKLSAgICAgICAgICAgIGlmIChkaXN0cmli
dXRpb24gIT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgZGlzdHJpYnV0aW9uID0gdmFsdWUtPmlkOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzQ29udGVudFBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgICAgICBp
ZiAocG9zaXRpb24gIT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgcG9zaXRpb24gPSB2YWx1ZS0+aWQ7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNBbGlnbm1lbnRPdmVyZmxvd0tleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICAg
ICAgaWYgKG92ZXJmbG93ICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG92ZXJmbG93ID0gdmFsdWUtPmlkOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGdyYW1tYXIgc3RhdGVzIHRoYXQg
d2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiBvcgotICAgIC8v
IDxjb250ZW50LXBvc2l0aW9uPiAoIDxjb250ZW50LWRpc3RyaWJ1dGlvbj4gfHwgPGNvbnRlbnQt
cG9zaXRpb24+ICkuCi0gICAgaWYgKHBvc2l0aW9uID09IENTU1ZhbHVlSW52YWxpZCAmJiBkaXN0
cmlidXRpb24gPT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIFRoZSBncmFtbWFyIHN0YXRlcyB0aGF0IDxvdmVyZmxvdy1wb3NpdGlvbj4gbXVzdCBi
ZSBhc3NvY2lhdGVkIHRvIDxjb250ZW50LXBvc2l0aW9uPi4KLSAgICBpZiAob3ZlcmZsb3cgIT0g
Q1NTVmFsdWVJbnZhbGlkICYmIHBvc2l0aW9uID09IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVl
OjpjcmVhdGUoZGlzdHJpYnV0aW9uLCBwb3NpdGlvbiwgb3ZlcmZsb3cpOwotfQotCi1ib29sIENT
U1BhcnNlcjo6cGFyc2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bvc2l0aW9uKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBhdXRvIHwgbm9ybWFsIHwgc3RyZXRj
aCB8IDxiYXNlbGluZS1wb3NpdGlvbj4gfCBbPGl0ZW0tcG9zaXRpb24+ICYmIDxvdmVyZmxvdy1w
b3NpdGlvbj4/IF0KLSAgICAvLyA8YmFzZWxpbmUtcG9zaXRpb24+ID0gYmFzZWxpbmUgfCBsYXN0
LWJhc2VsaW5lOwotICAgIC8vIDxpdGVtLXBvc2l0aW9uPiA9IGNlbnRlciB8IHN0YXJ0IHwgZW5k
IHwgc2VsZi1zdGFydCB8IHNlbGYtZW5kIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgbGVmdCB8
IHJpZ2h0OwotICAgIC8vIDxvdmVyZmxvdy1wb3NpdGlvbj4gPSB1bnNhZmUgfCBzYWZlCi0KLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlm
ICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVTdHJldGNoIHx8IGlzQmFzZWxpbmVQb3NpdGlvbktleXdvcmQodmFsdWUtPmlk
KSkgewotICAgICAgICAvLyBhbGlnbi1pdGVtcyBwcm9wZXJ0eSBkb2VzIG5vdCBhbGxvdyB0aGUg
J2F1dG8nIHZhbHVlLgotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlBbGlnbkl0ZW1zKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cG9zaXRpb247Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvdmVyZmxvd0FsaWdubWVu
dEtleXdvcmQ7Ci0gICAgaWYgKGlzSXRlbVBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0g
ICAgICAgIHBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NT
VmFsdWVVbnNhZmUgJiYgdmFsdWUtPmlkICE9IENTU1ZhbHVlU2FmZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpc0FsaWdubWVudE92ZXJmbG93S2V5d29yZCh2
YWx1ZS0+aWQpKSB7Ci0gICAgICAgIG92ZXJmbG93QWxpZ25tZW50S2V5d29yZCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAg
ICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIGlz
SXRlbVBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQocG9zaXRpb24pOwotICAgIGlmIChvdmVy
Zmxvd0FsaWdubWVudEtleXdvcmQpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRl
UHJpbWl0aXZlVmFsdWVQYWlyKHBvc2l0aW9uLnJlbGVhc2VOb25OdWxsKCksIG92ZXJmbG93QWxp
Z25tZW50S2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50KTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUJhY2tn
cm91bmRDbGlwKENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPiYg
Y3NzVmFsdWUpCi17Ci0gICAgaWYgKHBhcnNlclZhbHVlLmlkID09IENTU1ZhbHVlQm9yZGVyQm94
IHx8IHBhcnNlclZhbHVlLmlkID09IENTU1ZhbHVlUGFkZGluZ0JveAotICAgICAgICB8fCBwYXJz
ZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3ggfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NT
VmFsdWVXZWJraXRUZXh0KSB7Ci0gICAgICAgIGNzc1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocGFyc2VyVmFsdWUuaWQpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6dXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZU5vbkVsZW1lbnRTbmFwUG9pbnRzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKLXsKLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbgotICAg
ICAgICAgICAgJiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWx1ZS0+
ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKLSAg
ICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCp2
YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCktPmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAo
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0OjpjcmVhdGUoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpKTsKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0K
LSAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhSZWZQdHI8Q1NTVmFsdWU+
JiBjc3NWYWx1ZVgsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWSkKLXsKLSAgICBjc3NWYWx1
ZVggPSBwYXJzZVBvc2l0aW9uWCgqbV92YWx1ZUxpc3QpOwotICAgIGlmICghY3NzVmFsdWVYKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEb24ndCBhY2NlcHQgb2RkLWxlbmd0aCBs
aXN0cyBvZiBwb3NpdGlvbnMgKG11c3QgYWx3YXlzIGhhdmUgYW4gWCBhbmQgYSBZKToKLSAgICBp
ZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNz
c1ZhbHVlWSA9IHBhcnNlUG9zaXRpb25ZKCptX3ZhbHVlTGlzdCk7Ci0gICAgaWYgKCFjc3NWYWx1
ZVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VTY3JvbGxTbmFwRGVzdGluYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8gcG9zaXRpb24gPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZVgsIGNzc1ZhbHVlWTsKLSAgICBpZiAoIXBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhjc3NWYWx1
ZVgsIGNzc1ZhbHVlWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBvc2l0aW9uLT5h
cHBlbmQoY3NzVmFsdWVYLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHBvc2l0aW9uLT5hcHBlbmQo
Y3NzVmFsdWVZLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShwb3NpdGlvbiksIGltcG9ydGFudCk7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3Jk
aW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8g
cG9zaXRpb25zID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIHdo
aWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWVYLCBjc3NWYWx1ZVk7Ci0gICAgICAgIGlmICghcGFyc2VTY3JvbGxTbmFwUG9zaXRp
b25zKGNzc1ZhbHVlWCwgY3NzVmFsdWVZKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7Ci0g
ICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNzc1ZhbHVlWS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb25zLT5s
ZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocG9zaXRpb25z
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLSNlbmRpZgotCi1jb25zdCBpbnQgY01heEZpbGxQcm9wZXJ0aWVzID0gOTsKLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Y29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wg
aW1wb3J0YW50KQotewotICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzIDw9IGNNYXhGaWxsUHJvcGVy
dGllcyk7Ci0gICAgaWYgKG51bVByb3BlcnRpZXMgPiBjTWF4RmlsbFByb3BlcnRpZXMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJ
ZCk7Ci0KLSAgICBib29sIHBhcnNlZFByb3BlcnR5W2NNYXhGaWxsUHJvcGVydGllc10gPSB7IGZh
bHNlIH07Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbY01heEZpbGxQcm9wZXJ0aWVzXTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNsaXBWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBv
c2l0aW9uWVZhbHVlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVwZWF0WVZhbHVlOwotICAgIGJv
b2wgZm91bmRDbGlwID0gZmFsc2U7Ci0gICAgaW50IGk7Ci0gICAgYm9vbCBmb3VuZFBvc2l0aW9u
Q1NTUHJvcGVydHkgPSBmYWxzZTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsK
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnRWYWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgICAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAv
LyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUg
aW5pdGlhbCB2YWx1ZS4KLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IgJiYgcGFy
c2VkUHJvcGVydHlbaV0pCi0gICAgICAgICAgICAgICAgICAgIC8vIENvbG9yIGlzIG5vdCBhbGxv
d2VkIGV4Y2VwdCBhcyB0aGUgbGFzdCBpdGVtIGluIGEgbGlzdCBmb3IgYmFja2dyb3VuZHMuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFJlamVjdCB0aGUgZW50aXJlIHByb3BlcnR5LgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNl
ZFByb3BlcnR5W2ldICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFs
dWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBw
cm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2wu
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fCBwcm9wZXJ0aWVz
W2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5V2Via2l0TWFza09yaWdpbikgJiYgIXBhcnNlZFByb3BlcnR5W2ldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5kLW9yaWdpbiB3YXNuJ3QgcHJlc2VudCwg
dGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaXplQ1NTUHJvcGVydHlFeHBlY3Rl
ZCA9IGZhbHNlOwotICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihjdXJyZW50VmFs
dWUpICYmIGZvdW5kUG9zaXRpb25DU1NQcm9wZXJ0eSkgewotICAgICAgICAgICAgc2l6ZUNTU1By
b3BlcnR5RXhwZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kUG9zaXRpb25DU1NQcm9wZXJ0eSA9IGZhbHNlOwot
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAm
JiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0KLSAgICAgICAgICAgIGlmIChzaXplQ1NTUHJv
cGVydHlFeHBlY3RlZCAmJiAocHJvcGVydGllc1tpXSAhPSBDU1NQcm9wZXJ0eUJhY2tncm91bmRT
aXplICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXNpemVDU1NQcm9wZXJ0eUV4
cGVjdGVkICYmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUgfHwg
cHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMTsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbDI7Ci0gICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9w
SWQxLCBwcm9wSWQyOwotICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNl
RmlsbFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCB2YWwxLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZh
bHVlKHBvc2l0aW9uWVZhbHVlLCB2YWwyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQg
fHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCB2YWwyLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tPcmlnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGFyc2UgdGhl
IHZhbHVlIGFzIGEgY2xpcCwgYW5kIHNlZSBpZiB3ZSBzdWNjZWVkLgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZENsaXAocGFyc2VyVmFsdWUsIHZhbDEpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIHZhbDEucmVs
ZWFzZU5vbk51bGwoKSk7IC8vIFRoZSBwcm9wZXJ0eSBwYXJzZWQgc3VjY2Vzc2Z1bGx5LgotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpKTsgLy8gU29tZSB2YWx1ZSB3YXMgdXNlZCBmb3Igb3JpZ2luIHRoYXQgaXMgbm90IHN1
cHBvcnRlZCBieSBjbGlwLiBKdXN0IHJlc2V0IGNsaXAgaW5zdGVhZC4KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRN
YXNrQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ2xpcCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgot
ICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAg
ICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBOb3cgYWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3ZSBmb3VuZC4KLSAgICBmb3IgKGkg
PSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0gICAgICAgIGlmICgh
cGFyc2VkUHJvcGVydHlbaV0pIHsKLSAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNbaV0s
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8IHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pCi0gICAgICAgICAg
ICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlW
YWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAg
ICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8
IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVz
ZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNs
aXBWYWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgICAgIC8vIGl0J3MgT0sgdG8gY2FsbCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVl
KSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiBvbmNlCi0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblksIFdU
Rk1vdmUocG9zaXRpb25ZVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pIHsKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgV1RGTW92ZSh2
YWx1ZXNbaV0pLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgLy8gaXQncyBPSyB0byBjYWxsIFdU
Rk1vdmUocG9zaXRpb25ZVmFsdWUpIHNpbmNlIHdlIG9ubHkgc2VlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uIG9uY2UKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWSwgV1RGTW92ZShwb3NpdGlvbllWYWx1ZSksIGltcG9ydGFudCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXQpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZFJl
cGVhdFgsIFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIC8vIGl0
J3MgT0sgdG8gY2FsbCBXVEZNb3ZlKHJlcGVhdFlWYWx1ZSkgc2luY2Ugd2Ugb25seSBzZWUgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gb25jZQotICAgICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwgV1RGTW92ZShyZXBlYXRZVmFsdWUpLCBpbXBv
cnRhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXRYLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7Ci0gICAgICAg
ICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShyZXBlYXRZVmFsdWUpIHNpbmNlIHdlIG9u
bHkgc2VlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIG9uY2UKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIFdURk1vdmUocmVwZWF0WVZh
bHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgfSBlbHNlIGlmICgocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQ2xpcCkgJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAgICAgIC8vIFZhbHVlIGlzIGFs
cmVhZHkgc2V0IHdoaWxlIHVwZGF0aW5nIG9yaWdpbgotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6
ZSAmJiAhcGFyc2VkUHJvcGVydHlbaV0gJiYgdXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhh
bmRCZWhhdmlvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIFdURk1vdmUodmFsdWVzW2ldKSwgaW1w
b3J0YW50KTsKLQotICAgICAgICAvLyBBZGQgaW4gY2xpcCB2YWx1ZXMgd2hlbiB3ZSBoaXQgdGhl
IGNvcnJlc3BvbmRpbmcgb3JpZ2luIHByb3BlcnR5LgotICAgICAgICBpZiAocHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsIFdURk1vdmUoY2xpcFZh
bHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgZWxzZSBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsIFdURk1vdmUoY2xpcFZhbHVlKSwgaW1w
b3J0YW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
OmFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4m
JiBydmFsKQotewotICAgIGlmICghbHZhbCkgewotICAgICAgICBsdmFsID0gV1RGTW92ZShydmFs
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCps
dmFsKSkgewotICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RG
TW92ZShydmFsKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgbGlzdC0+YXBwZW5kKGx2
YWwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgbGlzdC0+YXBwZW5kKFdURk1vdmUocnZhbCkpOwot
ICAgIGx2YWwgPSBXVEZNb3ZlKGxpc3QpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VBbmlt
YXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewot
ICAgIEFTU0VSVChwcm9wSWQgPT0gQ1NTUHJvcGVydHlBbmltYXRpb24gfHwgcHJvcElkID09IENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bVByb3Bl
cnRpZXMgPSA4OwotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9
IGFuaW1hdGlvblNob3J0aGFuZEZvclBhcnNpbmcocHJvcElkKTsKLQotICAgIC8vIFRoZSBsaXN0
IG9mIHByb3BlcnRpZXMgaW4gdGhlIHNob3J0aGFuZCBzaG91bGQgYmUgdGhlIHNhbWUKLSAgICAv
LyBsZW5ndGggYXMgdGhlIGxpc3Qgd2l0aCBhbmltYXRpb24gbmFtZSBpbiBsYXN0IHBvc2l0aW9u
LCBldmVuIHRob3VnaCB0aGV5IGFyZQotICAgIC8vIGluIGEgZGlmZmVyZW50IG9yZGVyLgotICAg
IEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0gICAgQVNTRVJU
KG51bVByb3BlcnRpZXMgPT0gYW5pbWF0aW9uU2hvcnRoYW5kKCkubGVuZ3RoKCkpOwotICAgIEFT
U0VSVChudW1Qcm9wZXJ0aWVzID09IHdlYmtpdEFuaW1hdGlvblNob3J0aGFuZCgpLmxlbmd0aCgp
KTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0KLSAgICBib29s
IHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9OwotICAgIEFuaW1hdGlv
blBhcnNlQ29udGV4dCBjb250ZXh0OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW251bVBy
b3BlcnRpZXNdOwotCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKTsKLSAgICB1bnNpZ25lZCBpOwotICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiB2YWwtPmlWYWx1ZSA9PSAnLCcpIHsKLSAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kLiAg
RmlsbCBpbiBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAg
ICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3Bl
cnR5W2ldKQotICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0s
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY29udGV4dC5jb21taXRGaXJzdEFuaW1hdGlvbigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt
UHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7Ci0gICAgICAgICAgICAgICAg
aWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgdmFs
LCBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVz
W2ldLCB2YWwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhlcmUg
YXJlIG1vcmUgdmFsdWVzIHRvIHByb2Nlc3MgYnV0ICdub25lJyBvciAnYWxsJyB3ZXJlIGFscmVh
ZHkgZGVmaW5lZCBhcyB0aGUgYW5pbWF0aW9uIHByb3BlcnR5LCB0aGUgZGVjbGFyYXRpb24gYmVj
b21lcyBpbnZhbGlkLgotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFuaW1hdGlvblByb3BlcnR5
S2V5d29yZEFsbG93ZWQoKSAmJiBjb250ZXh0Lmhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
aWYgd2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAg
IC8vIGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBp
ZiAoIWZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZp
bGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0g
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICBpZiAoIXBh
cnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ld
LCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgfQotCi0g
ICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCi0gICAgLy8gSW4g
dGhpcyBjYXNlIHdlIGhhdmUgdG8gZXhwbGljaXRseSBzZXQgdGhlIHZhcmlhbnQgZm9ybSBhcyB3
ZWxsLAotICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IGEgc2hvcnRoYW5kIGNsZWFycyBhbGwgZXhp
c3RpbmcgcHJlZml4ZWQgYW5kCi0gICAgLy8gdW5wcmVmaXhlZCB2YWx1ZXMuCi0gICAgZm9yIChp
ID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAgYWRkUHJvcGVydHlXaXRoUHJl
Zml4aW5nVmFyaWFudChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCBXVEZNb3ZlKHZhbHVlc1tp
XSksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
OmFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJl
ZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCi17
Ci0gICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZS5jb3B5UmVmKCksIGltcG9ydGFudCwgaW1w
bGljaXQpOwotCi0gICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJlZml4aW5n
VmFyaWFudEZvclByb3BlcnR5SWQocHJvcElkKTsKLSAgICBpZiAocHJlZml4aW5nVmFyaWFudCA9
PSBwcm9wSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2N1cnJlbnRTaG9ydGhhbmQp
IHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIFNob3J0aGFuZFNjb3BlIGhlcmUgYXMgd2UgY2Fu
IGFscmVhZHkgYmUgaW5zaWRlIG9uZSAoZS5nIHdlIGFyZSBwYXJzaW5nIENTU1RyYW5zaXRpb24p
LgotICAgICAgICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVy
dHlJZChtX2N1cnJlbnRTaG9ydGhhbmQpOwotICAgICAgICBhZGRQcm9wZXJ0eShwcmVmaXhpbmdW
YXJpYW50LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgICAgIG1f
Y3VycmVudFNob3J0aGFuZCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKG1fY3VycmVu
dFNob3J0aGFuZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFByb3BlcnR5KHByZWZpeGluZ1Zh
cmlhbnQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLX0KLQotCi1SZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb2x1bW5XaWR0aCgpCi17Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLmlkOwotICAgIC8vIEFsd2F5cyBwYXJzZSB0aGlzIHByb3BlcnR5IGluIHN0cmljdCBt
b2RlLCBzaW5jZSBpdCB3b3VsZCBiZSBhbWJpZ3VvdXMgb3RoZXJ3aXNlIHdoZW4gdXNlZCBpbiB0
aGUgJ2NvbHVtbnMnIHNob3J0aGFuZCBwcm9wZXJ0eS4KLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVB
dXRvICYmICEodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkgJiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZSA9IHBh
cnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKLX0KLQotUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uQ291bnQoKQotewotICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5p
ZDsKLQotICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmlt
aXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29s
dW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNv
bHVtbldpZHRoOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uQ291bnQ7Ci0gICAgYm9vbCBo
YXNQZW5kaW5nRXhwbGljaXRBdXRvID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHByb3Bl
cnRpZXNQYXJzZWQgPSAwOyBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOyArK3Byb3BlcnRpZXNQYXJzZWQpIHsKLSAgICAgICAgaWYgKHByb3BlcnRpZXNQYXJz
ZWQgPj0gMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVG9vIG1hbnkgdmFsdWVzIGZv
ciB0aGlzIHNob3J0aGFuZC4gSW52YWxpZCBkZWNsYXJhdGlvbi4KLSAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzUGFyc2VkICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAg
IC8vICdhdXRvJyBpcyBhIHZhbGlkIHZhbHVlIGZvciBhbnkgb2YgdGhlIHR3byBsb25naGFuZHMs
IGFuZCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIG9u
ZShzKSBpdCBpcyBtZWFudCBmb3IuIFdlIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB2
YWx1ZXMgZmlyc3QuCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgaGFzUGVuZGluZ0V4cGxpY2l0QXV0byA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbHVtbldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjb2x1bW5X
aWR0aCA9IHBhcnNlQ29sdW1uV2lkdGgoKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb2x1bW5Db3VudCkgewotICAgICAg
ICAgICAgICAgIGlmICgoY29sdW1uQ291bnQgPSBwYXJzZUNvbHVtbkNvdW50KCkpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbiBpbnZhbGlkIHNo
b3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgdW5hc3NpZ25lZCBwcm9wZXJ0eSBh
dCB0aGlzIHBvaW50IHdpbGwgYmVjb21lIGltcGxpY2l0ICdhdXRvJy4KLSAgICBpZiAoY29sdW1u
V2lkdGgpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsIFdURk1v
dmUoY29sdW1uV2lkdGgpLCBpbXBvcnRhbnQpOwotICAgIGVsc2UgewotICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5n
RXhwbGljaXRBdXRvIC8qIGltcGxpY2l0ICovKTsKLSAgICAgICAgaGFzUGVuZGluZ0V4cGxpY2l0
QXV0byA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb2x1bW5Db3VudCkKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgV1RGTW92ZShjb2x1bW5Db3VudCksIGlt
cG9ydGFudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVt
bkNvdW50LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5nRXhwbGljaXRBdXRvIC8qIGltcGxp
Y2l0ICovKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VU
cmFuc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gNDsKLSAgICBjb25zdCBTdHls
ZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9w
SWQpOwotICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0K
LSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotCi0gICAgYm9vbCBwYXJz
ZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsKLSAgICBBbmltYXRpb25QYXJz
ZUNvbnRleHQgY29udGV4dDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9wZXJ0
aWVzXTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCk7Ci0gICAgdW5zaWduZWQgaTsKLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkg
ewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
LSAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFs
LT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZC4gRmlsbCBp
biBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ld
KQotICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBw
YXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY29udGV4dC5jb21taXRGaXJzdEFuaW1hdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8
IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtp
XSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwotICAgICAgICAgICAg
ICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0s
IHZhbCwgY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0g
PSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZh
bHVlc1tpXSwgdmFsLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHZhbHVlcyB0byBwcm9jZXNzIGJ1dCAnbm9u
ZScgb3IgJ2FsbCcgd2VyZSBhbHJlYWR5IGRlZmluZWQgYXMgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0
eSwgdGhlIGRlY2xhcmF0aW9uIGJlY29tZXMgaW52YWxpZC4KLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQuYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpICYmIGNvbnRleHQuaGFz
Q29tbWl0dGVkRmlyc3RBbmltYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgd2UgZGlkbid0
IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAgIC8vIGludmFsaWQg
c2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBpZiAoIWZvdW5kKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0gICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5
W2ldKQotICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgLy8gTm93IGFk
ZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCi0gICAgLy8gSW4gdGhpcyBjYXNlIHdl
IGhhdmUgdG8gZXhwbGljaXRseSBzZXQgdGhlIHZhcmlhbnQgZm9ybSBhcyB3ZWxsLAotICAgIC8v
IHRvIG1ha2Ugc3VyZSB0aGF0IGEgc2hvcnRoYW5kIGNsZWFycyBhbGwgZXhpc3RpbmcgcHJlZml4
ZWQgYW5kCi0gICAgLy8gdW5wcmVmaXhlZCB2YWx1ZXMuCi0gICAgZm9yIChpID0gMDsgaSA8IG51
bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAgYWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFyaWFu
dChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFu
dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRo
YW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBz
aG9ydGhhbmQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIFdlIHRyeSB0byBtYXRjaCBhcyBt
YW55IHByb3BlcnRpZXMgYXMgcG9zc2libGUKLSAgICAvLyBXZSBzZXQgdXAgYW4gYXJyYXkgb2Yg
Ym9vbGVhbnMgdG8gbWFyayB3aGljaCBwcm9wZXJ0eSBoYXMgYmVlbiBmb3VuZCwKLSAgICAvLyBh
bmQgd2UgdHJ5IHRvIHNlYXJjaCBmb3IgcHJvcGVydGllcyB1bnRpbCBpdCBtYWtlcyBubyBsb25n
ZXIgYW55IHNlbnNlLgotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0K
LSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgcHJvcGVydGllc1BhcnNlZCA9
IDA7Ci0gICAgYm9vbCBwcm9wZXJ0eUZvdW5kWzZdPSB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UgfTsgLy8gNiBpcyBlbm91Z2ggc2l6ZS4KLQotICAgIHdoaWxlICht
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgcHJvcEluZGV4ID0gMDsgIWZvdW5kICYmIHByb3BJbmRleCA8IHNob3J0
aGFuZC5sZW5ndGgoKTsgKytwcm9wSW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghcHJvcGVydHlG
b3VuZFtwcm9wSW5kZXhdICYmIHBhcnNlVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtwcm9w
SW5kZXhdLCBpbXBvcnRhbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Rm91bmRb
cHJvcEluZGV4XSA9IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGll
c1BhcnNlZCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgd2Ug
ZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAgIC8vIGlu
dmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBpZiAoIWZv
dW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0
aWVzUGFyc2VkID09IHNob3J0aGFuZC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFs
IHZhbHVlLgotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCk7Ci0gICAgSW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxp
Y2l0KTsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kKiBwcm9wZXJ0aWVzRm9ySW5p
dGlhbGl6YXRpb24gPSBzaG9ydGhhbmQucHJvcGVydGllc0ZvckluaXRpYWxpemF0aW9uKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwcm9wZXJ0eUZvdW5kW2ldKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKHByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgaW5pdFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRm9y
SW5pdGlhbGl6YXRpb25baV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BJbmRleCA9
IDA7IHByb3BJbmRleCA8IGluaXRQcm9wZXJ0aWVzLmxlbmd0aCgpOyArK3Byb3BJbmRleCkKLSAg
ICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShpbml0UHJvcGVydGllcy5wcm9wZXJ0aWVzKClbcHJv
cEluZGV4XSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9y
dGFudCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVl
KCksIGltcG9ydGFudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZTRWYWx1ZXMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3Bl
cnR5SUQgKnByb3BlcnRpZXMsICBib29sIGltcG9ydGFudCkKLXsKLSAgICAvKiBGcm9tIHRoZSBD
U1MgMiBzcGVjcywgOC4zCi0gICAgICogSWYgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUsIGl0IGFw
cGxpZXMgdG8gYWxsIHNpZGVzLiBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcywgdGhlIHRvcCBhbmQK
LSAgICAgKiBib3R0b20gbWFyZ2lucyBhcmUgc2V0IHRvIHRoZSBmaXJzdCB2YWx1ZSBhbmQgdGhl
IHJpZ2h0IGFuZCBsZWZ0IG1hcmdpbnMgYXJlIHNldCB0byB0aGUgc2Vjb25kLgotICAgICAqIElm
IHRoZXJlIGFyZSB0aHJlZSB2YWx1ZXMsIHRoZSB0b3AgaXMgc2V0IHRvIHRoZSBmaXJzdCB2YWx1
ZSwgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZSBzZXQgdG8gdGhlCi0gICAgICogc2Vjb25kLCBhbmQg
dGhlIGJvdHRvbSBpcyBzZXQgdG8gdGhlIHRoaXJkLiBJZiB0aGVyZSBhcmUgZm91ciB2YWx1ZXMs
IHRoZXkgYXBwbHkgdG8gdGhlIHRvcCwKLSAgICAgKiByaWdodCwgYm90dG9tLCBhbmQgbGVmdCwg
cmVzcGVjdGl2ZWx5LgotICAgICAqLwotCi0gICAgdW5zaWduZWQgbnVtID0gaW5TaG9ydGhhbmQo
KSA/IDEgOiBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUo
dGhpcywgcHJvcElkKTsKLQotICAgIC8vIHRoZSBvcmRlciBpcyB0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQKLSAgICBzd2l0Y2ggKG51bSkgewotICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAg
IGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2Vk
UHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2NvcGUgaW1w
bGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wZXJ0aWVzWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BlcnRpZXNbMl0sIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgYWRk
UHJvcGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDI6IHsKLSAgICAgICAgICAgIGlmICghcGFy
c2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbMV0sIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVy
dGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOwotICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBs
aWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKLSAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BlcnRpZXNbMl0sIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgdmFsdWUg
PSBtX3BhcnNlZFByb3BlcnRpZXNbbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDJdLnZhbHVl
KCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0
YW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgMzogewot
ICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMF0sIGltcG9ydGFudCkgfHwg
IXBhcnNlVmFsdWUocHJvcGVydGllc1sxXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShwcm9w
ZXJ0aWVzWzJdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2NvcGUg
aW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgICAgICAgICBhZGRQ
cm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgNDogewotICAgICAgICAgICAgaWYgKCFwYXJz
ZVZhbHVlKHByb3BlcnRpZXNbMF0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGll
c1sxXSwgaW1wb3J0YW50KSB8fAotICAgICAgICAgICAgICAgICFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbMl0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGllc1szXSwgaW1wb3J0YW50
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gYXV0byB8IDxpZGVu
dGlmaWVyPgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlUGFnZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVBhZ2Up
OwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCks
IGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlkID09IDAgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkg
ewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVl
KCp2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIDxsZW5ndGg+ezEsMn0gfCBhdXRvIHwgWyA8cGFnZS1zaXpl
PiB8fCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXSBdCi1ib29sIENTU1BhcnNlcjo6cGFyc2VTaXpl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJv
cElkID09IENTU1Byb3BlcnR5U2l6ZSk7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSA+
IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKCk7Ci0KLSAgICAvLyBGaXJzdCBwYXJhbWV0ZXIuCi0gICAgU2l6ZVBhcmFt
ZXRlclR5cGUgcGFyYW1UeXBlID0gcGFyc2VTaXplUGFyYW1ldGVyKHBhcnNlZFZhbHVlcywgKnZh
bHVlLCBOb25lKTsKLSAgICBpZiAocGFyYW1UeXBlID09IE5vbmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIsIGlmIGFueS4KLSAgICB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHBhcmFtVHlwZSA9
IHBhcnNlU2l6ZVBhcmFtZXRlcihwYXJzZWRWYWx1ZXMsICp2YWx1ZSwgcGFyYW1UeXBlKTsKLSAg
ICAgICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShwYXJzZWRWYWx1ZXMpLCBp
bXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DU1NQYXJzZXI6OlNpemVQYXJhbWV0
ZXJUeXBlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFyYW1ldGVyKENTU1ZhbHVlTGlzdCYgcGFyc2Vk
VmFsdWVzLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFNpemVQYXJhbWV0ZXJUeXBlIHByZXZQYXJh
bVR5cGUpCi17Ci0gICAgc3dpdGNoICh2YWx1ZS5pZCkgewotICAgIGNhc2UgQ1NTVmFsdWVBdXRv
OgotICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25lKSB7Ci0gICAgICAgICAgICBwYXJz
ZWRWYWx1ZXMuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLmlkKSk7Ci0gICAgICAgICAgICByZXR1cm4gQXV0bzsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlTGFuZHNjYXBlOgotICAgIGNh
c2UgQ1NTVmFsdWVQb3J0cmFpdDoKLSAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8
fCBwcmV2UGFyYW1UeXBlID09IFBhZ2VTaXplKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMu
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLmlkKSk7Ci0gICAgICAgICAgICByZXR1cm4gT3JpZW50YXRpb247Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUEzOgotICAgIGNhc2UgQ1NTVmFs
dWVBNDoKLSAgICBjYXNlIENTU1ZhbHVlQTU6Ci0gICAgY2FzZSBDU1NWYWx1ZUI0OgotICAgIGNh
c2UgQ1NTVmFsdWVCNToKLSAgICBjYXNlIENTU1ZhbHVlTGVkZ2VyOgotICAgIGNhc2UgQ1NTVmFs
dWVMZWdhbDoKLSAgICBjYXNlIENTU1ZhbHVlTGV0dGVyOgotICAgICAgICBpZiAocHJldlBhcmFt
VHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gT3JpZW50YXRpb24pIHsKLSAgICAgICAg
ICAgIC8vIE5vcm1hbGl6ZSB0byBQYWdlIFNpemUgdGhlbiBPcmllbnRhdGlvbiBvcmRlciBieSBw
cmVwZW5kaW5nLgotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBD
U1MzIFBhZ2VkIE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5n
IGxhdGVyIChTdHlsZVJlc29sdmVyOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgotICAgICAgICAg
ICAgcGFyc2VkVmFsdWVzLnByZXBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpKTsKLSAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlSW52YWxp
ZDogewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2
YWx1ZSk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGTm9uTmVnKSAmJiAocHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5
cGUgPT0gTGVuZ3RoKSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAg
IHJldHVybiBMZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOb25lOwotICAgIH0KLX0KLQotLy8gWyA8c3Ry
aW5nPiA8c3RyaW5nPiBdKyB8IGluaGVyaXQgfCBub25lCi0vLyBpbmhlcml0IGFuZCBub25lIGFy
ZSBoYW5kbGVkIGluIHBhcnNlVmFsdWUuCi1ib29sIENTU1BhcnNlcjo6cGFyc2VRdW90ZXMoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8gdmFsdWVzID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Ci0gICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7
Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQp
OwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VBbHQoQ1NT
UHJvcGVydHlJRCBwcm9wSUQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIENTU1BhcnNlclZhbHVl
JiBjdXJyZW50VmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlZFZhbHVlOwotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKGN1cnJlbnRWYWx1ZSk7Ci0gICAgZWxzZSBpZiAoY3VycmVudFZh
bHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKSB7Ci0gICAgICAgIENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyA9IGN1cnJlbnRWYWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAg
ICAgICAgaWYgKCFhcmdzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiYXR0cigiKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VBdHRyKCphcmdzKTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKHBhcnNlZFZhbHVlKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5
KHByb3BJRCwgcGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0
eURlY2xhcmF0aW9uKGJvb2wgaW1wb3J0YW50LCBDU1NWYWx1ZUlEIGlkKQotewotICAgIGlmICht
X2N1c3RvbVByb3BlcnR5TmFtZS5pc0VtcHR5KCkgfHwgIW1fdmFsdWVMaXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUluaGVyaXQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVJbml0aWFsKQotICAg
ICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOwot
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlVW5zZXQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFs
dWVQb29sLmNyZWF0ZVVuc2V0VmFsdWUoKTsKLSAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJl
dmVydCkKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlUmV2ZXJ0VmFsdWUoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgaWYgKG1fdmFsdWVM
aXN0LT5jb250YWluc1ZhcmlhYmxlcygpKQotICAgICAgICAgICAgdmFsdWUgPSBDU1NWYXJpYWJs
ZURlcGVuZGVudFZhbHVlOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZUxpc3QpLCBDU1NQcm9wZXJ0eUN1
c3RvbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZSh2YWx1ZUxp
c3QpOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q3VzdG9tLCBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9jdXN0b21Qcm9wZXJ0eU5hbWUsIHZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gWyA8c3RyaW5nPiB8IDx1cmk+IHwgPGNvdW50ZXI+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUg
fCBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVvdGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVy
aXQKLS8vIGluIENTUyAyLjEgdGhpcyBnb3Qgc29tZXdoYXQgcmVkdWNlZDoKLS8vIFsgPHN0cmlu
Zz4gfCBhdHRyKFgpIHwgb3Blbi1xdW90ZSB8IGNsb3NlLXF1b3RlIHwgbm8tb3Blbi1xdW90ZSB8
IG5vLWNsb3NlLXF1b3RlIF0rIHwgaW5oZXJpdAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVu
dChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgYXV0byB2YWx1
ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICB3aGlsZSAo
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgICAgICBpZiAodmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIC8vIHVybAotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwo
dmFsdWUtPnN0cmluZykpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gYXR0cihYKSB8IGNvdW50ZXIo
WCBbLFldKSB8IGNvdW50ZXJzKFgsIFksIFssWl0pIHwgLXdlYmtpdC1ncmFkaWVudCguLi4pCi0g
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLT5mdW5jdGlvbi0+bmFtZSwgImF0dHIoIikpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IHBhcnNlQXR0cigqYXJncyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJjb3VudGVyKCIpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvdW50
ZXJDb250ZW50KCphcmdzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJjb3VudGVycygiKSkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb3Vu
dGVyQ29udGVudCgqYXJncywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1ZSgqdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgewotICAgICAgICAgICAg
ICAgIGlmICghcGFyc2VHZW5lcmF0ZWRJbWFnZSgqbV92YWx1ZUxpc3QsIHBhcnNlZFZhbHVlKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgIC8vIG9w
ZW4tcXVvdGUKLSAgICAgICAgICAgIC8vIGNsb3NlLXF1b3RlCi0gICAgICAgICAgICAvLyBuby1v
cGVuLXF1b3RlCi0gICAgICAgICAgICAvLyBuby1jbG9zZS1xdW90ZQotICAgICAgICAgICAgLy8g
aW5oZXJpdAotICAgICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBub3QgeWV0IGltcGxlbWVu
dGVkIChodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTAzKS4KLSAgICAg
ICAgICAgIC8vIG5vbmUKLSAgICAgICAgICAgIC8vIG5vcm1hbAotICAgICAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b3JtYWw6Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcGFy
c2VkVmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQocGFy
c2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlcyksIGltcG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQXR0
cihDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50
ID0gKmFyZ3MuY3VycmVudCgpOwotCi0gICAgaWYgKGFyZ3VtZW50LnVuaXQgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NF
UlQoYXJndW1lbnQuc3RyaW5nLmxlbmd0aCgpKTsKLQotICAgIC8vIENTUyBhbGxvd3MgaWRlbnRp
ZmllcnMgd2l0aCAiLSIgYXQgdGhlIHN0YXJ0LCBsaWtlICItd2Via2l0LW1hc2staW1hZ2UiLgot
ICAgIC8vIEJ1dCBIVE1MIGF0dHJpYnV0ZSBuYW1lcyBjYW4ndCBoYXZlIHRob3NlIGNoYXJhY3Rl
cnMsIGFuZCB3ZSBzaG91bGQgbm90Ci0gICAgLy8gZXZlbiBwYXJzZSB0aGVtIGluc2lkZSBhdHRy
KCkuCi0gICAgaWYgKGFyZ3VtZW50LnN0cmluZ1swXSA9PSAnLScpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgaWYgKG1fY29udGV4dC5pc0hUTUxEb2N1bWVudCkKLSAgICAgICAgYXJn
dW1lbnQuc3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotCi0gICAgLy8g
RklYTUU6IElzIHRoZXJlIHNvbWUgc21hbGwgYmVuZWZpdCB0byBjcmVhdGluZyBhbiBBdG9taWNT
dHJpbmcgaGVyZSBpbnN0ZWFkIG9mIGEgU3RyaW5nPwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFN0cmluZyhhcmd1bWVudC5zdHJpbmcpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0FUVFIpOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kQ29sb3IoKQotewotICAgIENTU1ZhbHVlSUQgaWQgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRU
ZXh0IHx8IGlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUg
fHwgaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IKLSAgICAgICAgfHwgKGlkID49IENTU1ZhbHVl
R3JleSAmJiBpZCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBpblF1aXJrc01vZGUoKSkpCi0gICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShpZCk7Ci0gICAgcmV0dXJuIHBhcnNlQ29sb3IoKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFs
dWU+JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh2YWx1ZUxpc3QuY3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgIHZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKHZhbHVlTGlzdC5jdXJyZW50KCktPnN0cmluZykpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZUxpc3Qu
Y3VycmVudCgpKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdGVkSW1hZ2UodmFsdWVMaXN0
LCB2YWx1ZSk7Ci0gICAgCi0gICAgaWYgKGlzSW1hZ2VTZXRGdW5jdGlvblZhbHVlKCp2YWx1ZUxp
c3QuY3VycmVudCgpKSkgewotICAgICAgICB2YWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsKLSAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0gICAgaW50IGlk
ID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1ZhbHVlTGVmdCB8
fCBpZCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7Ci0gICAgICAg
IGludCBwZXJjZW50ID0gMDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlUmlnaHQpCi0gICAg
ICAgICAgICBwZXJjZW50ID0gMTAwOwotICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNl
bnRlcikKLSAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVX
aXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkpOwotICAgIGlmICh2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VQb3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0g
ICAgaW50IGlkID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1Zh
bHVlVG9wIHx8IGlkID09IENTU1ZhbHVlQm90dG9tIHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7
Ci0gICAgICAgIGludCBwZXJjZW50ID0gMDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQm90
dG9tKQotICAgICAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgZWxzZSBpZiAoaWQgPT0g
Q1NTVmFsdWVDZW50ZXIpCi0gICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgfQotICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKLSAgICBpZiAo
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCB1bnNpZ25lZCYgY3VtdWxhdGl2ZUZsYWdzLCBGaWxsUG9zaXRpb25G
bGFnJiBpbmRpdmlkdWFsRmxhZywgRmlsbFBvc2l0aW9uUGFyc2luZ01vZGUgcGFyc2luZ01vZGUp
Ci17Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAgIGlm
IChpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVUb3AgfHwgaWQgPT0gQ1NTVmFs
dWVSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcikg
ewotICAgICAgICBpbnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUxl
ZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdodCkgewotICAgICAgICAgICAgaWYgKGN1bXVsYXRpdmVG
bGFncyAmIFhGaWxsUG9zaXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBjdW11bGF0aXZlRmxhZ3MgfD0gWEZpbGxQb3NpdGlvbjsKLSAgICAgICAgICAg
IGluZGl2aWR1YWxGbGFnID0gWEZpbGxQb3NpdGlvbjsKLSAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVJpZ2h0KQotICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVUb3AgfHwgaWQgPT0gQ1NTVmFsdWVCb3R0
b20pIHsKLSAgICAgICAgICAgIGlmIChjdW11bGF0aXZlRmxhZ3MgJiBZRmlsbFBvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgY3VtdWxhdGl2ZUZs
YWdzIHw9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxs
UG9zaXRpb247Ci0gICAgICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCb3R0b20pCi0gICAgICAg
ICAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZUNlbnRlcikgewotICAgICAgICAgICAgLy8gQ2VudGVyIGlzIGFtYmlndW91cywgc28gd2UncmUg
bm90IHN1cmUgd2hpY2ggcG9zaXRpb24gd2UndmUgZm91bmQgeWV0LCBhbiB4IG9yIGEgeS4KLSAg
ICAgICAgICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBB
bWJpZ3VvdXNGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IEFtYmln
dW91c0ZpbGxQb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJzaW5nTW9kZSA9
PSBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKQotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKLQotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgIH0KLSAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7Ci0gICAgaWYg
KCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFjdW11bGF0aXZlRmxhZ3MpIHsK
LSAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFhGaWxsUG9zaXRpb247Ci0gICAgICAgIGluZGl2
aWR1YWxGbGFnID0gWEZpbGxQb3NpdGlvbjsKLSAgICB9IGVsc2UgaWYgKGN1bXVsYXRpdmVGbGFn
cyAmIChYRmlsbFBvc2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBvc2l0aW9uKSkgewotICAgICAgICBj
dW11bGF0aXZlRmxhZ3MgfD0gWUZpbGxQb3NpdGlvbjsKLSAgICAgICAgaW5kaXZpZHVhbEZsYWcg
PSBZRmlsbFBvc2l0aW9uOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKLX0KLQotc3RhdGljIGJvb2wgaXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlu
dCB2YWx1ZTEsIGludCB2YWx1ZTIpCi17Ci0gICAgaWYgKCh2YWx1ZTEgPT0gQ1NTVmFsdWVMZWZ0
IHx8IHZhbHVlMSA9PSBDU1NWYWx1ZVJpZ2h0KSAmJiAodmFsdWUyID09IENTU1ZhbHVlTGVmdCB8
fCB2YWx1ZTIgPT0gQ1NTVmFsdWVSaWdodCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCh2YWx1ZTEgPT0gQ1NTVmFsdWVUb3AgfHwgdmFsdWUxID09IENTU1ZhbHVlQm90dG9tKSAm
JiAodmFsdWUyID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlMiA9PSBDU1NWYWx1ZUJvdHRvbSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9v
bCBpc0ZpbGxQb3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dmFsdWUgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlID09
IENTU1ZhbHVlQm90dG9tIHx8IHZhbHVlID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWUgPT0gQ1NT
VmFsdWVDZW50ZXI7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZTRWYWx1ZXNGaWxsUG9zaXRp
b24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUyLCBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+JiYgcGFyc2VkVmFsdWUxLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcGFy
c2VkVmFsdWUyKQotewotICAgIC8vIFsgbGVmdCB8IHJpZ2h0IF0gWyA8cGVyY2VudGFnZV0gfCA8
bGVuZ3RoPiBdICYmIFsgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBd
Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgNCB2YWx1ZXMgPHBvc2l0aW9uPiByZXF1aXJlcyB0aGUg
c2Vjb25kIHZhbHVlIHRvIGJlIGEgbGVuZ3RoIG9yIGEgcGVyY2VudGFnZS4KLSAgICBpZiAoaXNG
aWxsUG9zaXRpb25LZXl3b3JkKHBhcnNlZFZhbHVlMi0+Z2V0VmFsdWVJRCgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdW5zaWduZWQgY3VtdWxhdGl2ZUZsYWdzID0gMDsKLSAgICBGaWxsUG9z
aXRpb25GbGFnIHZhbHVlM0ZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIGF1dG8gdmFs
dWUzID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxh
Z3MsIHZhbHVlM0ZsYWcsIFJlc29sdmVWYWx1ZXNBc0tleXdvcmQpOwotICAgIGlmICghdmFsdWUz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNlZFZhbHVl
MS0+Z2V0VmFsdWVJRCgpOwotICAgIENTU1ZhbHVlSUQgaWRlbnQzID0gdmFsdWUzLT5nZXRWYWx1
ZUlEKCk7Ci0KLSAgICBpZiAoaWRlbnQxID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDMpIHx8IGlkZW50MyA9
PSBDU1NWYWx1ZUNlbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbmVlZCB0byBj
aGVjayBpZiB0aGUgdmFsdWVzIGFyZSBub3QgY29uZmxpY3RpbmcsIGUuZy4gdGhleSBhcmUgbm90
IG9uIHRoZSBzYW1lIGVkZ2UuIEl0IGlzCi0gICAgLy8gbmVlZGVkIGFzIHRoZSBzZWNvbmQgY2Fs
bCB0byBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCB3YXMgb24gcHVycG9zZSBub3QgY2hlY2tp
bmcgaXQuIEluIHRoZQotICAgIC8vIGNhc2Ugb2YgdHdvIHZhbHVlcyB0b3AgMjBweCBpcyBpbnZh
bGlkIGJ1dCBpbiB0aGUgY2FzZSBvZiA0IHZhbHVlcyBpdCBiZWNvbWVzIHZhbGlkLgotICAgIGlm
IChpc1ZhbHVlQ29uZmxpY3RpbmdXaXRoQ3VycmVudEVkZ2UoaWRlbnQxLCBpZGVudDMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgY3VtdWxhdGl2ZUZs
YWdzID0gMDsKLSAgICBGaWxsUG9zaXRpb25GbGFnIHZhbHVlNEZsYWcgPSBJbnZhbGlkRmlsbFBv
c2l0aW9uOwotICAgIGF1dG8gdmFsdWU0ID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFs
dWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlNEZsYWcsIFJlc29sdmVWYWx1ZXNBc0tleXdv
cmQpOwotICAgIGlmICghdmFsdWU0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyA0dGggdmFs
dWUgbXVzdCBiZSBhIGxlbmd0aCBvciBhIHBlcmNlbnRhZ2UuCi0gICAgaWYgKGlzRmlsbFBvc2l0
aW9uS2V5d29yZCh2YWx1ZTQtPmdldFZhbHVlSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMSks
IFdURk1vdmUocGFyc2VkVmFsdWUyKSk7Ci0gICAgdmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlVmFs
dWVQYWlyKHZhbHVlMy5yZWxlYXNlTm9uTnVsbCgpLCB2YWx1ZTQucmVsZWFzZU5vbk51bGwoKSk7
Ci0KLSAgICBpZiAoaWRlbnQxID09IENTU1ZhbHVlVG9wIHx8IGlkZW50MSA9PSBDU1NWYWx1ZUJv
dHRvbSkKLSAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKLQotICAgIHZhbHVlTGlzdC5uZXh0
KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFy
c2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVl
MSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUyLCBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgcGFyc2VkVmFsdWUxLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcGFyc2VkVmFsdWUy
KQotewotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9u
RmxhZyB2YWx1ZTNGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBhdXRvIHZhbHVlMyA9
IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2
YWx1ZTNGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKTsKLQotICAgIC8vIHZhbHVlMyBpcyBu
b3QgYW4gZXhwZWN0ZWQgdmFsdWUsIHdlIHJldHVybi4KLSAgICBpZiAoIXZhbHVlMykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIGJvb2wgc3dhcE5lZWRl
ZCA9IGZhbHNlOwotICAgIENTU1ZhbHVlSUQgaWRlbnQxID0gcGFyc2VkVmFsdWUxLT5nZXRWYWx1
ZUlEKCk7Ci0gICAgQ1NTVmFsdWVJRCBpZGVudDIgPSBwYXJzZWRWYWx1ZTItPmdldFZhbHVlSUQo
KTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MyA9IHZhbHVlMy0+Z2V0VmFsdWVJRCgpOwotCi0gICAg
Q1NTVmFsdWVJRCBmaXJzdFBvc2l0aW9uS2V5d29yZDsKLSAgICBDU1NWYWx1ZUlEIHNlY29uZFBv
c2l0aW9uS2V5d29yZDsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNlbnRlcikgewotICAgICAg
ICAvLyA8cG9zaXRpb24+IHJlcXVpcmVzIHRoZSBmaXJzdCAnY2VudGVyJyB0byBiZSBmb2xsb3dl
ZCBieSBhIGtleXdvcmQuCi0gICAgICAgIGlmICghaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50
MikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgJ2NlbnRlcicgaXMgdGhl
IGZpcnN0IGtleXdvcmQgdGhlbiB0aGUgbGFzdCBvbmUgbmVlZHMgdG8gYmUgYSBsZW5ndGguCi0g
ICAgICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBmaXJzdFBvc2l0aW9uS2V5d29yZCA9IENTU1ZhbHVlTGVmdDsKLSAg
ICAgICAgaWYgKGlkZW50MiA9PSBDU1NWYWx1ZUxlZnQgfHwgaWRlbnQyID09IENTU1ZhbHVlUmln
aHQpIHsKLSAgICAgICAgICAgIGZpcnN0UG9zaXRpb25LZXl3b3JkID0gQ1NTVmFsdWVUb3A7Ci0g
ICAgICAgICAgICBzd2FwTmVlZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZTEg
PSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShmaXJzdFBvc2l0aW9uS2V5d29yZCksIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSg1MCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSk7Ci0gICAgICAgIHZhbHVlMiA9IGNy
ZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMiksIHZhbHVlMy5jb3B5
UmVmKCkpOwotICAgIH0gZWxzZSBpZiAoaWRlbnQzID09IENTU1ZhbHVlQ2VudGVyKSB7Ci0gICAg
ICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1ZVRvcDsKLSAgICAg
ICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20p
IHsKLSAgICAgICAgICAgIHNlY29uZFBvc2l0aW9uS2V5d29yZCA9IENTU1ZhbHVlTGVmdDsKLSAg
ICAgICAgICAgIHN3YXBOZWVkZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlMSA9
IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMSksIHBhcnNlZFZh
bHVlMi5jb3B5UmVmKCkpOwotICAgICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBh
aXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktleXdv
cmQpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZmlyc3RQb3NpdGlvblZhbHVlOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHNlY29uZFBvc2l0aW9uVmFsdWU7Ci0KLSAgICAgICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5
d29yZChpZGVudDIpKSB7Ci0gICAgICAgICAgICAvLyBUbyBtYXRjaCBDU1MgZ3JhbW1hciwgd2Ug
c2hvdWxkIG9ubHkgYWNjZXB0OiBbIGNlbnRlciB8IGxlZnQgfCByaWdodCB8IGJvdHRvbSB8IHRv
cCBdIFsgbGVmdCB8IHJpZ2h0IHwgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVu
Z3RoPiBdLgotICAgICAgICAgICAgQVNTRVJUKGlkZW50MiAhPSBDU1NWYWx1ZUNlbnRlcik7Ci0K
LSAgICAgICAgICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHNlY29uZFBvc2l0aW9uVmFsdWUgPSB2YWx1
ZTM7Ci0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBpZGVudDI7Ci0gICAgICAg
ICAgICBmaXJzdFBvc2l0aW9uVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFBlciBDU1MsIHdlIHNob3VsZCBvbmx5IGFjY2VwdDogWyByaWdodCB8IGxlZnQg
fCB0b3AgfCBib3R0b20gXSBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0gWyBjZW50ZXIgfCBs
ZWZ0IHwgcmlnaHQgfCBib3R0b20gfCB0b3AgXS4KLSAgICAgICAgICAgIGlmICghaXNGaWxsUG9z
aXRpb25LZXl3b3JkKGlkZW50MykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBmaXJzdFBvc2l0aW9uVmFsdWUgPSBwYXJzZWRWYWx1ZTIucHRyKCk7Ci0gICAgICAgICAg
ICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBpZGVudDM7Ci0gICAgICAgICAgICBzZWNvbmRQb3Np
dGlvblZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWYWx1ZUNvbmZs
aWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlkZW50MSwgc2Vjb25kUG9zaXRpb25LZXl3b3JkKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1
ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEpLCBmaXJzdFBvc2l0aW9uVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgICAgIHZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHNlY29uZFBvc2l0aW9uS2V5d29yZCksIHNl
Y29uZFBvc2l0aW9uVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgaWYgKGlk
ZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20gfHwgc3dhcE5l
ZWRlZCkKLSAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKLQotI2lmbmRlZiBOREVCVUcKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSAqdmFsdWUxOwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBzZWNvbmQgPSAqdmFsdWUyOwotICAgIGlkZW50MSA9IGZpcnN0LmdldFBhaXJWYWx1ZSgp
LT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgaWRlbnQyID0gc2Vjb25kLmdldFBhaXJWYWx1
ZSgpLT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgQVNTRVJUKGlkZW50MSA9PSBDU1NWYWx1
ZUxlZnQgfHwgaWRlbnQxID09IENTU1ZhbHVlUmlnaHQpOwotICAgIEFTU0VSVChpZGVudDIgPT0g
Q1NTVmFsdWVCb3R0b20gfHwgaWRlbnQyID09IENTU1ZhbHVlVG9wKTsKLSNlbmRpZgotfQotCi1p
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OmlzUG90ZW50aWFsUG9zaXRpb25WYWx1ZShDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1ZS5pZCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUy
KQotewotICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2YWx1ZUxpc3QuY3VycmVudEluZGV4KCk7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2ks
ICsrbnVtYmVyT2ZWYWx1ZXMpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnQgPSB2
YWx1ZUxpc3QudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKCFjdXJyZW50IHx8IGlzQ29tbWEoY3Vy
cmVudCkgfHwgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqY3VycmVudCkgfHwgIWlzUG90ZW50aWFs
UG9zaXRpb25WYWx1ZSgqY3VycmVudCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBpZiAobnVtYmVyT2ZWYWx1ZXMgPiA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3
ZSBhcmUgcGFyc2luZyB0d28gdmFsdWVzLCB3ZSBjYW4gc2FmZWx5IGNhbGwgdGhlIENTUyAyLjEg
cGFyc2luZyBmdW5jdGlvbiBhbmQgcmV0dXJuLgotICAgIGlmIChudW1iZXJPZlZhbHVlcyA8PSAy
KSB7Ci0gICAgICAgIHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbih2YWx1ZUxpc3QsIHZhbHVlMSwg
dmFsdWUyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChudW1iZXJPZlZh
bHVlcyA+IDIgJiYgbnVtYmVyT2ZWYWx1ZXMgPD0gNCk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpOwotCi0gICAgLy8gPHBvc2l0aW9uPiByZXF1aXJl
cyB0aGUgZmlyc3QgdmFsdWUgdG8gYmUgYSBiYWNrZ3JvdW5kIGtleXdvcmQuCi0gICAgaWYgKCFp
c0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gUGFyc2UgdGhlIGZpcnN0IHZhbHVlLiBXZSdyZSBqdXN0IG1ha2luZyBzdXJlIHRoYXQgaXQg
aXMgb25lIG9mIHRoZSB2YWxpZCBrZXl3b3JkcyBvciBhIHBlcmNlbnRhZ2UvbGVuZ3RoLgotICAg
IHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1
ZTFGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBGaWxsUG9zaXRpb25GbGFnIHZhbHVl
MkZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIHZhbHVlMSA9IHBhcnNlRmlsbFBvc2l0
aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTFGbGFnLCBSZXNv
bHZlVmFsdWVzQXNLZXl3b3JkKTsKLSAgICBpZiAoIXZhbHVlMSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgLy8gSW4gY2FzZSB3ZSBhcmUg
cGFyc2luZyBtb3JlIHRoYW4gdHdvIHZhbHVlcywgcmVsYXggdGhlIGNoZWNrIGluc2lkZSBvZiBw
YXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudC4gdG9wIDIwcHggaXMKLSAgICAvLyBhIHZhbGlkIHN0
YXJ0IGZvciA8cG9zaXRpb24+LgotICAgIGN1bXVsYXRpdmVGbGFncyA9IEFtYmlndW91c0ZpbGxQ
b3NpdGlvbjsKLSAgICB2YWx1ZTIgPSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxp
c3QsIGN1bXVsYXRpdmVGbGFncywgdmFsdWUyRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7
Ci0gICAgaWYgKHZhbHVlMikKLSAgICAgICAgdmFsdWVMaXN0Lm5leHQoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8gcGFyc2VkVmFsdWUxID0gdmFsdWUxLnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgYXV0byBw
YXJzZWRWYWx1ZTIgPSB2YWx1ZTIucmVsZWFzZU5vbk51bGwoKTsKLQotICAgIC8vIFBlciBDU1Mz
IHN5bnRheCwgPHBvc2l0aW9uPiBjYW4ndCBoYXZlICdjZW50ZXInIGFzIGl0cyBzZWNvbmQga2V5
d29yZCBhcyB3ZSBoYXZlIG1vcmUgYXJndW1lbnRzIHRvIGZvbGxvdy4KLSAgICBpZiAocGFyc2Vk
VmFsdWUyLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChudW1iZXJPZlZhbHVlcyA9PSAzKQotICAgICAgICBwYXJzZTNWYWx1ZXNGaWxs
UG9zaXRpb24odmFsdWVMaXN0LCB2YWx1ZTEsIHZhbHVlMiwgV1RGTW92ZShwYXJzZWRWYWx1ZTEp
LCBXVEZNb3ZlKHBhcnNlZFZhbHVlMikpOwotICAgIGVsc2UKLSAgICAgICAgcGFyc2U0VmFsdWVz
RmlsbFBvc2l0aW9uKHZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIsIFdURk1vdmUocGFyc2VkVmFs
dWUxKSwgV1RGTW92ZShwYXJzZWRWYWx1ZTIpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNl
MlZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2
YWx1ZTIpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQo
KTsKLQotICAgIC8vIFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gIFdlJ3JlIGp1c3QgbWFraW5nIHN1
cmUgdGhhdCBpdCBpcyBvbmUgb2YgdGhlIHZhbGlkIGtleXdvcmRzIG9yIGEgcGVyY2VudGFnZS9s
ZW5ndGguCi0gICAgdW5zaWduZWQgY3VtdWxhdGl2ZUZsYWdzID0gMDsKLSAgICBGaWxsUG9zaXRp
b25GbGFnIHZhbHVlMUZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIEZpbGxQb3NpdGlv
bkZsYWcgdmFsdWUyRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0gICAgdmFsdWUxID0gcGFy
c2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVl
MUZsYWcpOwotICAgIGlmICghdmFsdWUxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJdCBv
bmx5IHRha2VzIG9uZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1wb3NpdGlvbiB0byBiZSBjb3JyZWN0
bHkgcGFyc2VkIGlmIGl0IHdhcyBzcGVjaWZpZWQgaW4gYSBzaG9ydGhhbmQgKHNpbmNlIHdlCi0g
ICAgLy8gY2FuIGFzc3VtZSB0aGF0IGFueSBvdGhlciB2YWx1ZXMgYmVsb25nIHRvIHRoZSByZXN0
IG9mIHRoZSBzaG9ydGhhbmQpLiAgSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQsIHRo
b3VnaCwgdGhlCi0gICAgLy8gdmFsdWUgd2FzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGZvciBvdXIg
cHJvcGVydHkuCi0gICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgLy8gRmlyc3Qg
Y2hlY2sgZm9yIHRoZSBjb21tYS4gIElmIHNvLCB3ZSBhcmUgZmluaXNoZWQgcGFyc2luZyB0aGlz
IHZhbHVlIG9yIHZhbHVlIHBhaXIuCi0gICAgaWYgKGlzQ29tbWEodmFsdWUpKQotICAgICAgICB2
YWx1ZSA9IG51bGxwdHI7Ci0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgdmFsdWUyID0gcGFy
c2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVl
MkZsYWcpOwotICAgICAgICBpZiAodmFsdWUyKQotICAgICAgICAgICAgdmFsdWVMaXN0Lm5leHQo
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWluU2hvcnRoYW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZTEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghdmFsdWUyKQotICAg
ICAgICAvLyBPbmx5IG9uZSB2YWx1ZSB3YXMgc3BlY2lmaWVkLiBJZiB0aGF0IHZhbHVlIHdhcyBu
b3QgYSBrZXl3b3JkLCB0aGVuIGl0IHNldHMgdGhlIHggcG9zaXRpb24sIGFuZCB0aGUgeSBwb3Np
dGlvbgotICAgICAgICAvLyBpcyBzaW1wbHkgNTAlLiBUaGlzIGlzIG91ciBkZWZhdWx0LgotICAg
ICAgICAvLyBGb3Iga2V5d29yZHMsIHRoZSBrZXl3b3JkIHdhcyBlaXRoZXIgYW4geC1rZXl3b3Jk
IChsZWZ0L3JpZ2h0KSwgYSB5LWtleXdvcmQgKHRvcC9ib3R0b20pLCBvciBhbiBhbWJpZ3VvdXMg
a2V5d29yZCAoY2VudGVyKS4KLSAgICAgICAgLy8gRm9yIGxlZnQvcmlnaHQvY2VudGVyLCB0aGUg
ZGVmYXVsdCBvZiA1MCUgaW4gdGhlIHkgaXMgc3RpbGwgY29ycmVjdC4KLSAgICAgICAgdmFsdWUy
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLQotICAgIGlmICh2YWx1ZTFGbGFnID09IFlGaWxsUG9z
aXRpb24gfHwgdmFsdWUyRmxhZyA9PSBYRmlsbFBvc2l0aW9uKQotICAgICAgICB2YWx1ZTEuc3dh
cCh2YWx1ZTIpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxD
U1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQotewotICAgIENTU1Zh
bHVlSUQgaWQgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKLSAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVSZXBlYXRYKSB7Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAg
ICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVJlcGVhdCk7Ci0gICAgICAgIHZhbHVlMiA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwotICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZVJlcGVhdFkpIHsKLSAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRy
dWU7Ci0gICAgICAgIHZhbHVlMSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwotICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdCk7
Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwg
aWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKQotICAgICAgICB2YWx1
ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlMSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotCi0gICAgLy8gUGFyc2UgdGhlIHNlY29uZCB2YWx1ZSBpZiBvbmUgaXMgYXZhaWxhYmxlCi0g
ICAgaWYgKHZhbHVlICYmICFpc0NvbW1hKHZhbHVlKSkgewotICAgICAgICBpZCA9IHZhbHVlLT5p
ZDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9S
ZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKSB7Ci0g
ICAgICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShpZCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgb25seSBvbmUgdmFs
dWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlzIHRoZSBzYW1lIGFzIHZhbHVlMS4KLSAgICBtX2lt
cGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93
Q29tbWEpCi17Ci0gICAgYWxsb3dDb21tYSA9IHRydWU7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb250YWluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvdmVyKQotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKTsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxOwotCi0g
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHBhcnNlZFZhbHVlMSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7Ci0gICAgaWYgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCkpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICBhbGxvd0NvbW1hID0gZmFs
c2U7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5pZCAhPSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdCBpcyBhZHZh
bmNlZCB3ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5wcmV2aW91cygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSkgewotICAgICAgICAvLyBG
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhl
IGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCi0gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBkbyB0
aGlzIGZvciAtd2Via2l0LWJhY2tncm91bmQtc2l6ZS4gSXQgc2hvdWxkIGJlIHNhZmUgdG8gbGV0
IG1hc2tzIG1hdGNoCi0gICAgICAgIC8vIHRoZSByZWFsIHByb3BlcnR5LgotICAgICAgICBwYXJz
ZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZWRWYWx1ZTIp
Ci0gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZTE7Ci0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZVZhbHVlUGFpcihwYXJzZWRWYWx1ZTEucmVsZWFzZU5vbk51bGwoKSwgcGFyc2VkVmFsdWUyLnJl
bGVhc2VOb25OdWxsKCksIHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXpl
ID8gUGFpcjo6SWRlbnRpY2FsVmFsdWVFbmNvZGluZzo6Q29hbGVzY2UgOiBQYWlyOjpJZGVudGlj
YWxWYWx1ZUVuY29kaW5nOjpEb05vdENvYWxlc2NlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9w
SWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgcmV0
VmFsdWUyKQotewotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiB2YWx1ZXMyOwotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWU7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
MjsKLQotICAgIGJvb2wgYWxsb3dDb21tYSA9IGZhbHNlOwotCi0gICAgcmV0VmFsdWUxID0gcmV0
VmFsdWUyID0gbnVsbHB0cjsKLSAgICBwcm9wSWQxID0gcHJvcElkOwotICAgIHByb3BJZDIgPSBw
cm9wSWQ7Ci0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikg
ewotICAgICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOwotICAg
ICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOwotICAgIH0gZWxz
ZSBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKSB7Ci0gICAgICAg
IHByb3BJZDEgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg7Ci0gICAgICAgIHByb3BJ
ZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk7Ci0gICAgfSBlbHNlIGlmIChwcm9w
SWQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0KSB7Ci0gICAgICAgIHByb3BJZDEgPSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYOwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0WTsKLSAgICB9IGVsc2UgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXQpIHsKLSAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdFg7Ci0gICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBl
YXRZOwotICAgIH0KLQotICAgIHdoaWxlICgoY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7Ci0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlMjsKLQotICAgICAgICBpZiAoYWxsb3dDb21tYSkg
ewotICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAg
ICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGFsbG93Q29tbWEgPSB0cnVlOwotICAgICAgICAgICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCBjdXJyZW50VmFsdWUt
PmlkID09IENTU1ZhbHVlRml4ZWQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlOgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VGaWxsSW1h
Z2UoKm1fdmFsdWVMaXN0LCBjdXJyVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKLSAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IHRocmVlIHZhbHVlcyBoZXJlIGFyZSBkZXByZWNhdGVkIGFuZCBkbyBub3QgYXBwbHkg
dG8gdGhlIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHRoYXQgaGFzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSAtd2Via2l0LSBwcmVmaXggcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXIgfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZVBhZGRpbmcgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRl
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVCb3JkZXJCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwg
Y3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHx8ICgocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgfHwg
cHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVRleHQgfHwgY3VycmVudFZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZENsaXAoKmN1cnJlbnRWYWx1ZSwg
Y3VyclZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlUGFkZGluZ0JveCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGVudEJveCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjogewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZhbHVlMTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2YWx1ZTI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0
aW9uKCptX3ZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIpOwotICAgICAgICAgICAgICAgICAgICBj
dXJyVmFsdWUgPSBXVEZNb3ZlKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1
ZTIgPSBXVEZNb3ZlKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlRmlsbFBv
c2l0aW9uIGFkdmFuY2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyLgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6IHsKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVl
ID0gcGFyc2VQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWTogewotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVBvc2l0aW9uWSgqbV92YWx1ZUxpc3QpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5k
Q29tcG9zaXRlOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29t
cG9zaXRlOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLT5pZCA+PSBDU1NW
YWx1ZUNsZWFyICYmIGN1cnJlbnRWYWx1ZS0+aWQgPD0gQ1NTVmFsdWVQbHVzTGlnaHRlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQmxlbmRNb2RlOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlTXVsdGlwbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVTY3JlZW4gfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZU92ZXJsYXkg
fHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURhcmtlbgotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpZ2h0ZW4gfHwgIGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb2xvckRvZGdlIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb2xvckJ1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+
aWQgPT0gQ1NTVmFsdWVIYXJkTGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNv
ZnRMaWdodCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlRGlmZmVyZW5jZQotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUV4Y2x1c2lv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgICAgICAgICAgICAgICAgICBwYXJzZUZpbGxSZXBl
YXQoY3VyclZhbHVlLCBjdXJyVmFsdWUyKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VG
aWxsUmVwZWF0IGFkdmFuY2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
U2l6ZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNp
emU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRmlsbFNpemUocHJvcElkLCBhbGxv
d0NvbW1hKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1NvdXJjZVR5cGU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVB
bHBoYSB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTHVtaW5hbmNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewotICAgICAgICAgICAgICAgIHZhbHVlcyA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgICAgICB2
YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHZhbHVlMiAmJiAhdmFsdWVzMikgewotICAgICAgICAgICAgICAgIHZh
bHVlczIgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAg
ICAgICAgdmFsdWVzMi0+YXBwZW5kKHZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgdmFsdWUgPSBXVEZNb3ZlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoY3VyclZhbHVlMikgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMyKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMyLT5hcHBlbmQoY3VyclZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlMiA9IFdURk1v
dmUoY3VyclZhbHVlMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
aGVuIHBhcnNpbmcgYW55IGZpbGwgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxl
IGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCi0gICAgICAgIC8vIHByb3BlcnRpZXMuCi0g
ICAgICAgIGlmIChpblNob3J0aGFuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJldFZhbHVlMSA9
IFdURk1vdmUodmFsdWVzKTsKLSAgICAgICAgaWYgKHZhbHVlczIgJiYgdmFsdWVzMi0+bGVuZ3Ro
KCkpCi0gICAgICAgICAgICByZXRWYWx1ZTIgPSBXVEZNb3ZlKHZhbHVlczIpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHJldFZhbHVlMSA9
IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXRWYWx1ZTIgPSBXVEZNb3ZlKHZhbHVlMik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRlbGF5KCkKLXsK
LSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRlRpbWUpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKLXsK
LSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
QWx0ZXJuYXRlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJldmVyc2UgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUFuaW1hdGlvbkR1cmF0aW9uKCkKLXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkZpbGxNb2RlKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZvcndhcmRzIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUJhY2t3YXJkcyB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3RoKQotICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQotewotICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2
YWx1ZS5pZCA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAodmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25OYW1lKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlTm9u
ZSB8fCAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyAmJiBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIm5vbmUiKSkpIHsKLSAgICAgICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVT
dHJpbmdWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25QbGF5U3RhdGUo
KQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
OwotICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZVJ1bm5pbmcgfHwgdmFsdWUuaWQgPT0gQ1NT
VmFsdWVQYXVzZWQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUFuaW1hdGlvblRyaWdnZXIoKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9u
LT5uYW1lLCAiY29udGFpbmVyLXNjcm9sbCgiKSkgewotICAgICAgICBpZiAoIWFyZ3MgfHwgKGFy
Z3MtPnNpemUoKSAhPSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1
cnJlbnQoKTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhD
YWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChmaXJzdEFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIGF1dG8gc3RhcnRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoc3RhcnRW
YWx1ZSkpOwotCi0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gc2Vjb25kQXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFy
Z3VtZW50KTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoc2Vjb25kQXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgYXV0byBlbmRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShzZWNvbmRBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIENTU0FuaW1hdGlvblRyaWdn
ZXJTY3JvbGxWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoc3RhcnRWYWx1ZSksIFdURk1vdmUoZW5kVmFs
dWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShBbmlt
YXRpb25QYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NT
UHJvcGVydHlJRCByZXN1bHQgPSBjc3NQcm9wZXJ0eUlEKHZhbHVlLnN0cmluZyk7Ci0gICAgaWYg
KHJlc3VsdCAmJiByZXN1bHQgIT0gQ1NTUHJvcGVydHlBbGwpIC8vICJhbGwiIHZhbHVlIGluIGFu
aW1hdGlvbiBpcyBub3QgZXF1aXZhbGVudCB0byB0aGUgYWxsIHByb3BlcnR5LgotICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVz
dWx0KTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhbGwi
KSkgewotICAgICAgICBjb250ZXh0LnNhd0FuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpOwotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBbGwpOwotICAgIH0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UodmFsdWUsICJub25lIikpIHsKLSAgICAgICAgY29udGV4dC5jb21taXRBbmltYXRpb25Q
cm9wZXJ0eUtleXdvcmQoKTsKLSAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0eUtl
eXdvcmQoKTsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRy
OwotfQotCi0vKiBzdGF0aWMgKi8KLVZlY3Rvcjxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VLZXlm
cmFtZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpIHsKLSAgICBWZWN0b3I8ZG91Ymxl
PiBrZXlzOwotICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7Ci0gICAgc2VsZWN0b3Iuc3BsaXQo
JywnLCBzdHJpbmdzKTsKLQotICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdHJpbmdz
LnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGRvdWJsZSBrZXkgPSAtMTsKLSAgICAgICAgU3RyaW5nIGN1ciA9IHN0cmlu
Z3NbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICAgICAgLy8gRm9yIG5vdyB0aGUgc3ludGF4
IE1VU1QgYmUgJ3h4eCUnIG9yICdmcm9tJyBvciAndG8nLCB3aGVyZSB4eHggaXMgYSBsZWdhbCBm
bG9hdGluZyBwb2ludCBudW1iZXIKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGN1ciwgImZyb20iKSkKLSAgICAgICAgICAgIGtleSA9IDA7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGN1ciwgInRvIikpCi0gICAgICAgICAg
ICBrZXkgPSAxOwotICAgICAgICBlbHNlIGlmIChjdXIuZW5kc1dpdGgoJyUnKSkgewotICAgICAg
ICAgICAgZG91YmxlIGsgPSBjdXIuc3Vic3RyaW5nKDAsIGN1ci5sZW5ndGgoKSAtIDEpLnRvRG91
YmxlKCk7Ci0gICAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPD0gMTAwKQotICAgICAgICAgICAg
ICAgIGtleSA9IGsgLyAxMDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleSA8IDApIHsKLSAg
ICAgICAgICAgIGtleXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGtleSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGtl
eXM7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlMiwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUzKQotewotICAgIHBhcnNlMlZhbHVl
c0ZpbGxQb3NpdGlvbigqbV92YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyKTsKLQotICAgIC8vIG5v
dyBnZXQgegotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICB2YWx1ZTMgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjppc1NwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29udGV4dC5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQ7Ci19Ci0KLU9wdGlvbmFs
PGRvdWJsZT4gQ1NTUGFyc2VyOjpwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShD
U1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcikpCi0gICAgICAgIHJldHVybiBO
dWxsb3B0OwotICAgIE9wdGlvbmFsPGRvdWJsZT4gcmVzdWx0ID0gcGFyc2VkRG91YmxlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dFZhbHVlID0gYXJn
cy5uZXh0KCk7Ci0gICAgaWYgKCFuZXh0VmFsdWUpIHsKLSAgICAgICAgLy8gVGhlIGxhc3QgbnVt
YmVyIGluIHRoZSBmdW5jdGlvbiBoYXMgbm8gY29tbWEgYWZ0ZXIgaXQsIHNvIHdlJ3JlIGRvbmUu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmICghaXNDb21tYShuZXh0VmFs
dWUpKQotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICBhcmdzLm5leHQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1PcHRpb25hbDxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VTcHJpbmdU
aW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkp
OwotICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
KSkKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiByZXN1bHQg
PSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgIGFyZ3MubmV4dCgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFs
dWVFYXNlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLmlkID09IENTU1Zh
bHVlRWFzZUluIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRWFzZU91dAotICAgICAgICB8fCB2YWx1
ZS5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBTdGFy
dCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBFbmQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0KLSAg
ICAvLyBXZSBtdXN0IGJlIGEgZnVuY3Rpb24uCi0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAi
c3RlcHMoIikpIHsKLSAgICAgICAgLy8gRm9yIHN0ZXBzLCAxIG9yIDIgcGFyYW1zIG11c3QgYmUg
c3BlY2lmaWVkIChjb21tYS1zZXBhcmF0ZWQpCi0gICAgICAgIGlmICghYXJncyB8fCAoYXJncy0+
c2l6ZSgpICE9IDEgJiYgYXJncy0+c2l6ZSgpICE9IDMpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byB2YWx1ZXMuCi0gICAgICAgIGludCBu
dW1TdGVwczsKLSAgICAgICAgYm9vbCBzdGVwQXRTdGFydCA9IGZhbHNlOwotCi0gICAgICAgIENT
U1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyKSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9J
bnRlZ2VyKHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICBp
ZiAobnVtU3RlcHMgPCAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwotCi0gICAgICAgIGlmIChhcmd1bWVudCkgewotICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQg
dmFsdWUKLSAgICAgICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgICAgIGlmIChhcmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVTdGFydCAmJiBhcmd1bWVu
dC0+aWQgIT0gQ1NTVmFsdWVFbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBzdGVwQXRTdGFydCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZVN0YXJ0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6
Y3JlYXRlKG51bVN0ZXBzLCBzdGVwQXRTdGFydCk7Ci0gICAgfQotCi0gICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3ViaWMtYmV6aWVy
KCIpKSB7Ci0gICAgICAgIC8vIEZvciBjdWJpYyBiZXppZXIsIDQgdmFsdWVzIG11c3QgYmUgc3Bl
Y2lmaWVkIChjb21tYS1zZXBhcmF0ZWQpLgotICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6
ZSgpICE9IDcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGVy
ZSBhcmUgdHdvIHBvaW50cyBzcGVjaWZpZWQuIFRoZSB4IHZhbHVlcyBtdXN0IGJlIGJldHdlZW4g
MCBhbmQgMSBidXQgdGhlIHkgdmFsdWVzIGNhbiBleGNlZWQgdGhpcyByYW5nZS4KLQotICAgICAg
ICBhdXRvIHgxID0gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwot
ICAgICAgICBpZiAoIXgxIHx8IHgxLnZhbHVlKCkgPCAwIHx8IHgxLnZhbHVlKCkgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byB5MSA9IHBhcnNlQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCF5MSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1dG8geDIgPSBwYXJzZUN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICgheDIgfHwgeDIudmFs
dWUoKSA8IDAgfHwgeDIudmFsdWUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBhdXRvIHkyID0gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUo
KmFyZ3MpOwotICAgICAgICBpZiAoIXkyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgcmV0dXJuIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRl
KHgxLnZhbHVlKCksIHkxLnZhbHVlKCksIHgyLnZhbHVlKCksIHkyLnZhbHVlKCkpOwotICAgIH0K
LQotICAgIGlmIChpc1NwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpICYmIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAic3ByaW5nKCIpKSB7Ci0g
ICAgICAgIC8vIEZvciBhIHNwcmluZywgNCB2YWx1ZXMgbXVzdCBiZSBzcGVjaWZpZWQgKHNwYWNl
LXNlcGFyYXRlZCkuCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBhcmd1bWVudHMgYWxsIG9w
dGlvbmFsLgotICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDQpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIC8vIE1hc3MgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMC4KLSAgICAgICAgYXV0byBtYXNzID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5j
dGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFtYXNzIHx8IG1hc3MudmFsdWUoKSA8PSAw
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgLy8gU3RpZmZuZXNzIG11
c3QgYmUgZ3JlYXRlciB0aGFuIDAuCi0gICAgICAgIGF1dG8gc3RpZmZuZXNzID0gcGFyc2VTcHJp
bmdUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFzdGlmZm5lc3MgfHwg
c3RpZmZuZXNzLnZhbHVlKCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIC8vIERhbXBpbmcgY29lZmZpY2llbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gMC4KLSAgICAgICAgYXV0byBkYW1waW5nID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5jdGlv
blZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFkYW1waW5nIHx8IGRhbXBpbmcudmFsdWUoKSA8
IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBJbml0aWFsIHZl
bG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KLSAgICAgICAgYXV0byBpbml0aWFsVmVsb2NpdHkg
PSBwYXJzZVNwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwotICAgICAgICBpZiAoIWlu
aXRpYWxWZWxvY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJl
dHVybiBDU1NTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUobWFzcy52YWx1ZSgpLCBz
dGlmZm5lc3MudmFsdWUoKSwgZGFtcGluZy52YWx1ZSgpLCBpbml0aWFsVmVsb2NpdHkudmFsdWUo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFs
dWU+JiByZXN1bHQsIEFuaW1hdGlvblBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbDsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGJvb2wgYWxsb3dDb21tYSA9IGZhbHNlOwotCi0g
ICAgcmVzdWx0ID0gbnVsbHB0cjsKLQotICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7Ci0gICAgICAg
IGlmIChhbGxvd0NvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgYWxsb3dDb21tYSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlBbmltYXRpb25EZWxheToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
RGVsYXk6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5
OgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGVsYXkoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0g
cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVl
KQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkR1cmF0aW9u
OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgot
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25EdXJhdGlvbigpOwotICAgICAgICAgICAg
ICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QW5pbWF0aW9uRmlsbE1vZGU6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRmlsbE1vZGU6Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRp
b25GaWxsTW9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0g
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgp
OwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25OYW1lOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNl
QW5pbWF0aW9uTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uUGxheVN0YXRlOgotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKLSAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOwotICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNpdGlvblByb3BlcnR5OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFu
aW1hdGlvblByb3BlcnR5KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAh
Y29udGV4dC5hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxvd2VkKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0
aW9uOgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25UaW1pbmdGdW5jdGlv
bjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVu
Y3Rpb246Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25UaW1pbmdG
dW5jdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWYg
RU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVHJpZ2dlcjoKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBw
YXJzZUFuaW1hdGlvblRyaWdnZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewotICAg
ICAgICAgICAgICAgIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQo
KTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBXVEZNb3ZlKGN1cnJWYWx1ZSk7Ci0K
LSAgICAgICAgICAgIGFsbG93Q29tbWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
V2hlbiBwYXJzaW5nIHRoZSAndHJhbnNpdGlvbicgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQg
aXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCi0gICAgICAgIC8vIHByb3Bl
cnRpZXMuCi0gICAgICAgIGlmIChpblNob3J0aGFuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJl
c3VsdCA9IFdURk1vdmUodmFsdWVzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGlmICh2YWx1ZSkgewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRQb3NpdGlvbkN1
c3RvbUlkZW50KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UICYmIHZhbHVlLmlkICE9IENT
U1ZhbHVlU3BhbiAmJiB2YWx1ZS5pZCAhPSBDU1NWYWx1ZUF1dG87Ci19Ci0KLS8vIFRoZSBmdW5j
dGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBpbiA8Z3JpZC1saW5l
PiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9yIHdpdGggJ3NwYW4nKS4KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
IGdyaWRMaW5lTmFtZSkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsK
LQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKLSAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpIHsK
LSAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgaXNWYWxpZEdyaWRQ
b3NpdGlvbkN1c3RvbUlkZW50KCpuZXh0VmFsdWUpKSB7Ci0gICAgICAgICAgICBncmlkTGluZU5h
bWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbmV4dFZhbHVlKTsKLSAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKGlzVmFsaWRHcmlkUG9zaXRpb25DdXN0b21JZGVudCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbikpIHsKLSAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBpZiAoQ1NTUGFyc2VyVmFs
dWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbmV4dFZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50
ZWdlcikgJiYgbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5l
eHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUdyaWRQb3NpdGlvbigpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgIH0KLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbnVtZXJpY1ZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZ3JpZExpbmVOYW1lOwotICAgIGJvb2wgaGFzU2VlblNwYW5LZXl3b3JkID0gZmFs
c2U7Ci0KLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlU3BhbikgewotICAgICAgICBoYXNT
ZWVuU3BhbktleXdvcmQgPSB0cnVlOwotICAgICAgICBpZiAoYXV0byogbmV4dFZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJh
dG9yKCpuZXh0VmFsdWUpICYmICFwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3Np
dGlvbihudW1lcmljVmFsdWUsIGdyaWRMaW5lTmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHBhcnNlSW50ZWdlck9yQ3VzdG9t
SWRlbnRGcm9tR3JpZFBvc2l0aW9uKG51bWVyaWNWYWx1ZSwgZ3JpZExpbmVOYW1lKSkgewotICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTcGFuKSB7Ci0gICAgICAgICAgICBoYXNTZWVuU3Bhbktl
eXdvcmQgPSB0cnVlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBjb25zdW1lZCBhbGwgdGhlIHZh
bHVlIGxpc3QuIEZvciBzaG9ydGhhbmRzLCB0aGUgcGFyc2VyIHdpbGwgcGFzcwotICAgIC8vIHRo
ZSB3aG9sZSB2YWx1ZSBsaXN0IChpbmNsdWRpbmcgdGhlIG9wcG9zaXRlIHBvc2l0aW9uKS4KLSAg
ICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiAhaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gSWYgd2UgZGlkbid0IHBhcnNlIGFueXRoaW5nLCB0aGlzIGlzIG5vdCBhIHZhbGlkIGdyaWQg
cG9zaXRpb24uCi0gICAgaWYgKCFoYXNTZWVuU3BhbktleXdvcmQgJiYgIWdyaWRMaW5lTmFtZSAm
JiAhbnVtZXJpY1ZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIElmIHdl
IGhhdmUgInNwYW4iIGtleXdvcmQgYWxvbmUgaXMgaW52YWxpZC4KLSAgICBpZiAoaGFzU2VlblNw
YW5LZXl3b3JkICYmICFncmlkTGluZU5hbWUgJiYgIW51bWVyaWNWYWx1ZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBOZWdhdGl2ZSBudW1iZXJzIGFyZSBub3QgYWxsb3dlZCBm
b3Igc3BhbiAoYnV0IGFyZSBmb3IgPGludGVnZXI+KS4KLSAgICBpZiAoaGFzU2VlblNwYW5LZXl3
b3JkICYmIG51bWVyaWNWYWx1ZSAmJiBudW1lcmljVmFsdWUtPmdldEludFZhbHVlKCkgPCAwKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEZvciB0aGUgPGN1c3RvbS1pZGVudD4g
Y2FzZS4KLSAgICBpZiAoZ3JpZExpbmVOYW1lICYmICFudW1lcmljVmFsdWUgJiYgIWhhc1NlZW5T
cGFuS2V5d29yZCkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoZ3JpZExpbmVOYW1lLT5nZXRTdHJpbmdWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBpZiAoaGFzU2VlblNwYW5LZXl3b3JkKQotICAgICAgICB2
YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVNwYW4pKTsKLSAgICBpZiAobnVtZXJpY1ZhbHVlKQotICAgICAgICB2YWx1
ZXMtPmFwcGVuZChudW1lcmljVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgaWYgKGdyaWRM
aW5lTmFtZSkKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoZ3JpZExpbmVOYW1lLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIEFTU0VSVCh2YWx1ZXMtPmxlbmd0aCgpKTsKLSAgICByZXR1cm4gV1RGTW92
ZSh2YWx1ZXMpOwotfQotCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBncmlkTWlzc2luZ0dyaWRQb3Np
dGlvblZhbHVlKENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQg
c2hvcnRoYW5kSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgc2hvcnRoYW5k
SWQpOwotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0
aGFuZEZvclByb3BlcnR5KHNob3J0aGFuZElkKTsKLSAgICBBU1NFUlQoc2hvcnRoYW5kLmxlbmd0
aCgpID09IDIpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBzdGFydFZhbHVlID0gcGFyc2VHcmlk
UG9zaXRpb24oKTsKLSAgICBpZiAoIXN0YXJ0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZW5kVmFsdWU7Ci0gICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgZW5kVmFsdWUgPSBwYXJzZUdyaWRQb3NpdGlvbigpOwotICAgICAgICBpZiAoIWVuZFZh
bHVlIHx8IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25W
YWx1ZSgqc3RhcnRWYWx1ZSk7Ci0KLSAgICBhZGRQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGll
cygpWzBdLCBzdGFydFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgYWRk
UHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVsxXSwgZW5kVmFsdWUucmVsZWFzZU5vbk51
bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZEdhcFNob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IENTU1Byb3BlcnR5R3JpZEdhcCk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZEdhcCkubGVuZ3RoKCkgPT0gMik7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHJvd1ZhbHVlV2l0aENh
bGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaXQocm93VmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byByb3dHYXAgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUocm93VmFsdWVXaXRo
Q2FsY3VsYXRpb24pOwotCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGlm
ICghdmFsdWUpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2Fw
LCByb3dHYXAuY29weVJlZigpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUdyaWRSb3dHYXAsIFdURk1vdmUocm93R2FwKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gY29sdW1uVmFs
dWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdChjb2x1bW5W
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBjb2x1bW5HYXAgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
Y29sdW1uVmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlHcmlkUm93R2FwLCBXVEZNb3ZlKHJvd0dhcCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwLCBXVEZNb3ZlKGNvbHVtbkdhcCksIGltcG9ydGFu
dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRlbXBsYXRlQ29sdW1ucyhUcmFja0xpc3RUeXBlIHRyYWNrTGlzdFR5cGUpCi17
Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAoIShtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpICYmIGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpICYmIG1fdmFsdWVMaXN0LT5uZXh0KCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBpZiAoYXV0byBjb2x1bW5zVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QodHJh
Y2tMaXN0VHlwZSkpIHsKLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNvbHVtbnNWYWx1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3Jp
ZFRlbXBsYXRlUm93c0FuZEFyZWFzQW5kQ29sdW1ucyhib29sIGltcG9ydGFudCkKLXsKLSAgICBB
U1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIC8vIEF0IGxlYXN0IHRlbXBs
YXRlLWFyZWFzIHN0cmluZ3MgbXVzdCBiZSBkZWZpbmVkLgotICAgIGlmICghbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSB8fCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTmFtZWRHcmlkQXJlYU1hcCBncmlk
QXJlYU1hcDsKLSAgICB1bnNpZ25lZCByb3dDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29sdW1u
Q291bnQgPSAwOwotICAgIGJvb2wgdHJhaWxpbmdJZGVudFdhc0FkZGVkID0gZmFsc2U7Ci0gICAg
YXV0byB0ZW1wbGF0ZVJvd3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
Ci0KLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiAhaXNGb3J3YXJkU2xhc2hP
cGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgLy8gSGFuZGxlIGxl
YWRpbmcgPGN1c3RvbS1pZGVudD4qLgotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICBpZiAo
dHJhaWxpbmdJZGVudFdhc0FkZGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSByb3cncyB0cmFp
bGluZyBpZGVudCBtdXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBuZXh0IHJvdydzIGxlYWRp
bmcgb25lLgotICAgICAgICAgICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3Qs
IHRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPih0ZW1wbGF0ZVJv
d3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCB0ZW1w
bGF0ZVJvd3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIGEgdGVtcGxhdGUtYXJl
YSdzIHJvdy4KLSAgICAgICAgaWYgKCFwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KGdyaWRBcmVh
TWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICArK3Jvd0NvdW50OwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZW1wbGF0ZS1yb3dzJ3Mg
dHJhY2stc2l6ZS4KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0ICYm
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwYXJzZUdyaWRU
cmFja1NpemUoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdGVtcGxhdGVSb3dzLT5hcHBlbmQo
dmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGVt
cGxhdGVSb3dzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSk7Ci0KLSAgICAgICAgLy8gVGhpcyB3aWxsIGhhbmRsZSB0
aGUgdHJhaWxpbmcvbGVhZGluZyA8Y3VzdG9tLWlkZW50PiogaW4gdGhlIGdyYW1tYXIuCi0gICAg
ICAgIHRyYWlsaW5nSWRlbnRXYXNBZGRlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ID09IENTU1BhcnNl
clZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgICAgICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBw
YXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCB0ZW1wbGF0ZVJvd3MpOwotICAgIH0KLQot
ICAgIC8vIFsvIDxleHBsaWNpdC10cmFjay1saXN0PiBdPwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dGVtcGxhdGVDb2x1bW5zOwotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAg
ICAgIEFTU0VSVChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSk7Ci0gICAgICAgIHRlbXBsYXRlQ29sdW1ucyA9IHBhcnNlR3JpZFRlbXBsYXRlQ29sdW1ucyhH
cmlkVGVtcGxhdGVOb1JlcGVhdCk7Ci0gICAgICAgIGlmICghdGVtcGxhdGVDb2x1bW5zKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBUaGUgdGVtcGxhdGUtY29sdW1ucyA8
dHJhY2stbGlzdD4gY2FuJ3QgYmUgJ25vbmUnLgotICAgICAgICBpZiAodGVtcGxhdGVDb2x1bW5z
LT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0ZW1w
bGF0ZUNvbHVtbnMpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVt
cGxhdGVSb3dzLCBXVEZNb3ZlKHRlbXBsYXRlUm93cyksIGltcG9ydGFudCk7Ci0gICAgaWYgKHRl
bXBsYXRlQ29sdW1ucykKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxh
dGVDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29s
dW1ucywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRU
ZW1wbGF0ZUFyZWFzLCBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlOjpjcmVhdGUoZ3JpZEFyZWFN
YXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGJvb2wg
aW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0g
ICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGUpOwot
ICAgIEFTU0VSVChzaG9ydGhhbmRGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZSku
bGVuZ3RoKCkgPT0gMyk7Ci0KLSAgICAvLyBBdCBsZWFzdCAibm9uZSIgbXVzdCBiZSBkZWZpbmVk
LgotICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYm9vbCBmaXJzdFZhbHVlSXNOb25lID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
aWQgPT0gQ1NTVmFsdWVOb25lOwotCi0gICAgLy8gMS0gJ25vbmUnIGNhc2UuCi0gICAgaWYgKGZp
cnN0VmFsdWVJc05vbmUgJiYgIW1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGlt
cG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQXJl
YXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IC8vIDItIDxncmlkLXRlbXBsYXRlLXJvd3M+IC8gPGdyaWQtdGVtcGxhdGUtY29sdW1ucz4gc3lu
dGF4LgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcm93c1ZhbHVlOwotICAgIGlmIChmaXJzdFZhbHVl
SXNOb25lKQotICAgICAgICByb3dzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIGVsc2UKLSAgICAgICAgcm93
c1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRUZW1wbGF0ZSk7Ci0KLSAgICBpZiAocm93
c1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gY29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVGVtcGxhdGVD
b2x1bW5zKCk7Ci0gICAgICAgIGlmICghY29sdW1uc1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29s
dW1ucywgY29sdW1uc1ZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlUm93cywgcm93c1ZhbHVlLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
R3JpZFRlbXBsYXRlQXJlYXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotCi0gICAgLy8gMy0gWzxsaW5lLW5hbWVzPj8gPHN0cmluZz4gPHRyYWNrLXNp
emU+PyA8bGluZS1uYW1lcz4/IF0rIHN5bnRheC4KLSAgICAvLyBJdCByZXF1aXJlcyB0byByZXdp
bmQgcGFyc2luZyBkdWUgdG8gcHJldmlvdXMgc3ludGF4IGZhaWx1cmVzLgotICAgIG1fdmFsdWVM
aXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgcmV0dXJuIHBhcnNlR3JpZFRlbXBsYXRlUm93
c0FuZEFyZWFzQW5kQ29sdW1ucyhpbXBvcnRhbnQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRM
YXlvdXRFbmFibGVkKCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJv
cGVydHlHcmlkKTsKLSAgICBBU1NFUlQoc2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlH
cmlkKS5sZW5ndGgoKSA9PSA4KTsKLQotICAgIC8vIDEtIDxncmlkLXRlbXBsYXRlPgotICAgIGlm
IChwYXJzZUdyaWRUZW1wbGF0ZVNob3J0aGFuZChpbXBvcnRhbnQpKSB7Ci0gICAgICAgIC8vIEl0
IGNhbiBvbmx5IGJlIHNwZWNpZmllZCB0aGUgZXhwbGljaXQgb3IgdGhlIGltcGxpY2l0IGdyaWQg
cHJvcGVydGllcyBpbiBhIHNpbmdsZSBncmlkIGRlY2xhcmF0aW9uLgotICAgICAgICAvLyBUaGUg
c3ViLXByb3BlcnRpZXMgbm90IHNwZWNpZmllZCBhcmUgc2V0IHRvIHRoZWlyIGluaXRpYWwgdmFs
dWUsIGFzIG5vcm1hbCBmb3Igc2hvcnRoYW5kcy4KLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkQXV0b0Zsb3csIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkQXV0b0NvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlHcmlkQXV0b1Jvd3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlHcmlkQ29sdW1uR2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlt
cGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZFJvd0dhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBOZWVkIHRvIHJld2luZCBwYXJzaW5nIHRvIGV4cGxvcmUgdGhlIGFsdGVy
bmF0aXZlIHN5bnRheCBvZiB0aGlzIHNob3J0aGFuZC4KLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3Vy
cmVudEluZGV4KDApOwotCi0gICAgLy8gMi0gPGdyaWQtYXV0by1mbG93PiBbIDxncmlkLWF1dG8t
Y29sdW1ucz4gWyAvIDxncmlkLWF1dG8tcm93cz4gXT8gXQotICAgIGlmICghcGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUdyaWRBdXRvRmxvdywgaW1wb3J0YW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBhdXRvQ29sdW1uc1ZhbHVlOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gYXV0b1Jvd3NWYWx1ZTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSB7Ci0gICAgICAgIGF1dG9Sb3dzVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8p
OwotICAgICAgICBpZiAoIWF1dG9Sb3dzVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHx8ICFtX3Zh
bHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGF1dG9Db2x1bW5zVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8pOwotICAg
ICAgICAgICAgaWYgKCFhdXRvQ29sdW1uc1ZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBPdGhlciBv
bWl0dGVkIHZhbHVlcyBhcmUgc2V0IHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBh
dXRvQ29sdW1uc1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpOwotICAgICAgICBhdXRvUm93c1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIH0KLQotICAgIC8v
IGlmIDxncmlkLWF1dG8tcm93cz4gdmFsdWUgaXMgb21pdHRlZCwgaXQgaXMgc2V0IHRvIHRoZSB2
YWx1ZSBzcGVjaWZpZWQgZm9yIGdyaWQtYXV0by1jb2x1bW5zLgotICAgIGlmICghYXV0b0NvbHVt
bnNWYWx1ZSkKLSAgICAgICAgYXV0b0NvbHVtbnNWYWx1ZSA9IGF1dG9Sb3dzVmFsdWU7Ci0KLSAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRBdXRvQ29sdW1ucywgYXV0b0NvbHVtbnNWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZEF1dG9Sb3dzLCBhdXRvUm93c1ZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFu
dCk7Ci0KLSAgICAvLyBJdCBjYW4gb25seSBiZSBzcGVjaWZpZWQgdGhlIGV4cGxpY2l0IG9yIHRo
ZSBpbXBsaWNpdCBncmlkIHByb3BlcnRpZXMgaW4gYSBzaW5nbGUgZ3JpZCBkZWNsYXJhdGlvbi4K
LSAgICAvLyBUaGUgc3ViLXByb3BlcnRpZXMgbm90IHNwZWNpZmllZCBhcmUgc2V0IHRvIHRoZWly
IGluaXRpYWwgdmFsdWUsIGFzIG5vcm1hbCBmb3Igc2hvcnRoYW5kcy4KLSAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUNvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkUm93R2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEFyZWFTaG9ydGhhbmQoYm9vbCBpbXBvcnRh
bnQpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBTaG9y
dGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUdyaWRBcmVhKTsKLSAgICBBU1NFUlQo
c2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQXJlYSkubGVuZ3RoKCkgPT0gNCk7
Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd1N0YXJ0VmFsdWUgPSBwYXJzZUdyaWRQb3NpdGlv
bigpOwotICAgIGlmICghcm93U3RhcnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUmVmUHRyPENTU1ZhbHVlPiBjb2x1bW5TdGFydFZhbHVlOwotICAgIGlmICghcGFyc2VTaW5n
bGVHcmlkQXJlYUxvbmdoYW5kKGNvbHVtblN0YXJ0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd0VuZFZhbHVlOwotICAgIGlmICghcGFyc2VT
aW5nbGVHcmlkQXJlYUxvbmdoYW5kKHJvd0VuZFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBjb2x1bW5FbmRWYWx1ZTsKLSAgICBpZiAoIXBhcnNl
U2luZ2xlR3JpZEFyZWFMb25naGFuZChjb2x1bW5FbmRWYWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghY29sdW1uU3RhcnRWYWx1ZSkKLSAgICAgICAgY29sdW1uU3RhcnRW
YWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoKnJvd1N0YXJ0VmFsdWUpOwotCi0g
ICAgaWYgKCFyb3dFbmRWYWx1ZSkKLSAgICAgICAgcm93RW5kVmFsdWUgPSBncmlkTWlzc2luZ0dy
aWRQb3NpdGlvblZhbHVlKCpyb3dTdGFydFZhbHVlKTsKLQotICAgIGlmICghY29sdW1uRW5kVmFs
dWUpCi0gICAgICAgIGNvbHVtbkVuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1
ZSgqY29sdW1uU3RhcnRWYWx1ZSk7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRS
b3dTdGFydCwgcm93U3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtblN0YXJ0LCBjb2x1bW5TdGFydFZhbHVl
LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlHcmlkUm93RW5kLCByb3dFbmRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwot
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkVuZCwgY29sdW1uRW5kVmFsdWUu
cmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChSZWZQdHI8Q1NTVmFsdWU+
JiBwcm9wZXJ0eSkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQot
ICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHByb3BlcnR5ID0gcGFyc2VHcmlkUG9zaXRp
b24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZExp
bmVOYW1lcyhDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdCwgQ1NTVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSogcHJldmlvdXNOYW1lZEFyZWFUcmFpbGluZ0xp
bmVOYW1lcykKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLSAgICBB
U1NFUlQoaW5wdXRMaXN0LmN1cnJlbnQoKSAmJiBpbnB1dExpc3QuY3VycmVudCgpLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0JiBp
ZGVudExpc3QgPSAqaW5wdXRMaXN0LmN1cnJlbnQoKS0+dmFsdWVMaXN0OwotICAgIGlmICghaWRl
bnRMaXN0LnNpemUoKSkgewotICAgICAgICBpbnB1dExpc3QubmV4dCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIGlkZW50TGlzdCBp
cyBhdCB0aGUgaGVhZGluZyBpbmRleCwgc2luY2UgdGhlIHBhcnNlckxpc3QgbWlnaHQgaGF2ZSBi
ZWVuIHJld291bmQuCi0gICAgaWRlbnRMaXN0LnNldEN1cnJlbnRJbmRleCgwKTsKLSAgICBSZWY8
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPiBsaW5lTmFtZXMgPSBwcmV2aW91c05hbWVkQXJlYVRyYWls
aW5nTGluZU5hbWVzID8gUmVmPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oKnByZXZpb3VzTmFtZWRB
cmVhVHJhaWxpbmdMaW5lTmFtZXMpIDogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlOjpjcmVhdGUoKTsK
LSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGlkZW50VmFsdWUgPSBpZGVudExpc3QuY3VycmVu
dCgpKSB7Ci0gICAgICAgIEFTU0VSVChpZGVudFZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpOwotICAgICAgICBsaW5lTmFtZXMtPmFwcGVuZChjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSgqaWRlbnRWYWx1ZSkpOwotICAgICAgICBpZGVudExpc3QubmV4dCgpOwot
ICAgIH0KLSAgICBpZiAoIXByZXZpb3VzTmFtZWRBcmVhVHJhaWxpbmdMaW5lTmFtZXMpCi0gICAg
ICAgIHZhbHVlTGlzdC5hcHBlbmQoV1RGTW92ZShsaW5lTmFtZXMpKTsKLQotICAgIGlucHV0TGlz
dC5uZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGlzR3JpZFRyYWNr
Rml4ZWRTaXplZChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQ1NTVmFs
dWVJRCB2YWx1ZUlEID0gdmFsdWUuZ2V0VmFsdWVJRCgpOwotICAgIGlmICh2YWx1ZUlEID09IENT
U1ZhbHVlV2Via2l0TWluQ29udGVudCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0TWF4Q29u
dGVudCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS5pc0ZsZXgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHZhbHVlLmlzTGVuZ3RoKCkgfHwgdmFsdWUu
aXNQZXJjZW50YWdlKCkgfHwgdmFsdWUuaXNDYWxjdWxhdGVkKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgYm9vbCBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSk7Ci0KLSAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvblZhbHVlKCkpOwotICAgIEFTU0VS
VChkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCkpOwotICAgIEFT
U0VSVChkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCktPmxlbmd0
aCgpID09IDIpOwotCi0gICAgYXV0byYgbWluID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCpkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCktPml0ZW0oMCkp
OwotICAgIGF1dG8mIG1heCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZG93bmNhc3Q8
Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygpLT5pdGVtKDEpKTsKLSAgICByZXR1
cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKG1pbikgfHwgaXNHcmlkVHJhY2tGaXhlZFNpemVkKG1h
eCk7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3Qo
VHJhY2tMaXN0VHlwZSB0cmFja0xpc3RUeXBlKQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAg
ICBpZiAodHJhY2tMaXN0VHlwZSA9PSBHcmlkQXV0bykKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
LSAgICB9Ci0KLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICAvLyBIYW5kbGUgbGVhZGluZyAgPGN1c3RvbS1pZGVudD4qLgotICAgIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBib29sIGFsbG93R3JpZExpbmVOYW1l
cyA9IHRyYWNrTGlzdFR5cGUgIT0gR3JpZEF1dG87Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT51
bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpIHsKLSAgICAgICAgaWYgKCFhbGxvd0dy
aWRMaW5lTmFtZXMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcGFyc2VH
cmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdmFsdWVzKTsKLSAgICB9Ci0KLSAgICBib29sIHNl
ZW5UcmFja1NpemVPclJlcGVhdEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgYm9vbCBzZWVuQXV0b1Jl
cGVhdCA9IGZhbHNlOwotICAgIGJvb2wgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCA9IHRydWU7Ci0g
ICAgYm9vbCByZXBlYXRBbGxvd2VkID0gdHJhY2tMaXN0VHlwZSA9PSBHcmlkVGVtcGxhdGU7Ci0g
ICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKSB7Ci0gICAgICAgIGlmIChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCpjdXJyZW50VmFs
dWUpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGN1cnJlbnRWYWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKLSAgICAgICAg
ICAgIGlmICghcmVwZWF0QWxsb3dlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIGJvb2wgaXNBdXRvUmVwZWF0OwotICAgICAgICAgICAgaWYgKCFwYXJzZUdy
aWRUcmFja1JlcGVhdEZ1bmN0aW9uKHZhbHVlcywgaXNBdXRvUmVwZWF0LCBhbGxUcmFja3NBcmVG
aXhlZFNpemVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmIChpc0F1dG9SZXBlYXQgJiYgc2VlbkF1dG9SZXBlYXQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBzZWVuQXV0b1JlcGVhdCA9IHNlZW5BdXRvUmVwZWF0
IHx8IGlzQXV0b1JlcGVhdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBwYXJzZUdyaWRUcmFja1NpemUoKm1fdmFsdWVMaXN0KTsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgICAgIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQgPSBhbGxUcmFja3NBcmVGaXhlZFNpemVk
ICYmIGlzR3JpZFRyYWNrRml4ZWRTaXplZCgqdmFsdWUpOwotICAgICAgICAgICAgdmFsdWVzLT5h
cHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VlblRy
YWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24gPSB0cnVlOwotCi0gICAgICAgIGlmIChzZWVuQXV0b1Jl
cGVhdCAmJiAhYWxsVHJhY2tzQXJlRml4ZWRTaXplZCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBoYW5kbGUgdGhlIHRyYWlsaW5nIDxjdXN0b20t
aWRlbnQ+KiBpbiB0aGUgZ3JhbW1hci4KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OlZhbHVlTGlzdCkgewotICAgICAgICAgICAgaWYgKCFhbGxvd0dyaWRMaW5lTmFtZXMpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBwYXJzZUdyaWRMaW5l
TmFtZXMoKm1fdmFsdWVMaXN0LCB2YWx1ZXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFzZWVuVHJhY2tTaXplT3JSZXBlYXRGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gV1RGTW92ZSh2YWx1ZXMpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmIGxpc3QsIGJvb2wmIGlzQXV0
b1JlcGVhdCwgYm9vbCYgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1l
bnRzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
aWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5zaXplKCkgPCAzIHx8ICFpc0NvbW1hKGFyZ3Vt
ZW50cy0+dmFsdWVBdCgxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50cy0+dmFsdWVB
dCgwKSk7Ci0gICAgQ1NTVmFsdWVJRCBmaXJzdFZhbHVlSUQgPSBmaXJzdFZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgaXNBdXRvUmVwZWF0ID0gZmlyc3RWYWx1ZUlEID09IENT
U1ZhbHVlQXV0b0ZpbGwgfHwgZmlyc3RWYWx1ZUlEID09IENTU1ZhbHVlQXV0b0ZpdDsKLSAgICBp
ZiAoIWlzQXV0b1JlcGVhdCAmJiAhdmFsaWRhdGVVbml0KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZQb3NpdGl2ZUludGVnZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJ
ZiBhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSA+IFNJWkVfTUFYIHRoZW4gcmVwZXRpdGlv
bnMgYmVjb21lcyAwIGR1cmluZyB0aGUgdHlwZSBjYXN0aW5nLCB0aGF0J3Mgd2h5IHdlCi0gICAg
Ly8gY2xhbXAgaXQgZG93biB0byBrR3JpZE1heFRyYWNrcyBiZWZvcmUgdGhlIHR5cGUgY2FzdGlu
Zy4KLSAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIGZvciA8YXV0by1yZXBlYXQ+IGlz
IG5vdCBpbXBvcnRhbnQgYXQgcGFyc2luZyBsZXZlbAotICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBi
ZSBjb21wdXRlZCBsYXRlciwgbGV0J3Mgc2V0IGl0IHRvIDEuCi0gICAgdW5zaWduZWQgcmVwZXRp
dGlvbnMgPSBpc0F1dG9SZXBlYXQgPyAxIDogY2xhbXBUbzx1bnNpZ25lZD4ocGFyc2VkRG91Ymxl
KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24pLCAwLCBrR3JpZE1heFRyYWNrcyk7Ci0KLSAgICBS
ZWY8Q1NTVmFsdWVMaXN0PiByZXBlYXRlZFZhbHVlcyA9IGlzQXV0b1JlcGVhdCA/IFJlZjxDU1NW
YWx1ZUxpc3Q+KENTU0dyaWRBdXRvUmVwZWF0VmFsdWU6OmNyZWF0ZShmaXJzdFZhbHVlSUQpKSA6
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBhcmd1bWVudHMtPm5l
eHQoKTsgLy8gU2tpcCB0aGUgcmVwZXRpdGlvbiBjb3VudC4KLSAgICBhcmd1bWVudHMtPm5leHQo
KTsgLy8gU2tpcCB0aGUgY29tbWEuCi0KLSAgICAvLyBIYW5kbGUgbGVhZGluZyA8Y3VzdG9tLWlk
ZW50PiouCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50cy0+Y3Vy
cmVudCgpOwotICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqYXJn
dW1lbnRzLCByZXBlYXRlZFZhbHVlcyk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlRyYWNrcyA9
IDA7Ci0gICAgd2hpbGUgKGFyZ3VtZW50cy0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdHJhY2tTaXplID0gcGFyc2VHcmlkVHJhY2tTaXplKCphcmd1bWVudHMpOwotICAg
ICAgICBpZiAoIXRyYWNrU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhbGxUcmFja3NBcmVGaXhlZFNpemVkID0gYWxsVHJhY2tzQXJlRml4ZWRTaXplZCAmJiBpc0dy
aWRUcmFja0ZpeGVkU2l6ZWQoKnRyYWNrU2l6ZSk7Ci0gICAgICAgIHJlcGVhdGVkVmFsdWVzLT5h
cHBlbmQodHJhY2tTaXplLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICArK251bWJlck9mVHJh
Y2tzOwotCi0gICAgICAgIC8vIFRoaXMgdGFrZXMgY2FyZSBvZiBhbnkgdHJhaWxpbmcgPGN1c3Rv
bS1pZGVudD4qIGluIHRoZSBncmFtbWFyLgotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmd1bWVu
dHMtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkKLSAgICAgICAgICAgIHBhcnNlR3Jp
ZExpbmVOYW1lcygqYXJndW1lbnRzLCByZXBlYXRlZFZhbHVlcyk7Ci0gICAgfQotCi0gICAgLy8g
V2Ugc2hvdWxkIGhhdmUgZm91bmQgYXQgbGVhc3Qgb25lIDx0cmFjay1zaXplPiwgb3RoZXJ3aXNl
IHRoZSBkZWNsYXJhdGlvbiBpcyBpbnZhbGlkLgotICAgIGlmICghbnVtYmVyT2ZUcmFja3MpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGNsYW1wIHRoZSBudW1iZXIgb2YgcmVw
ZXRpdGlvbnMgdG8gYSBtdWx0aXBsZSBvZiB0aGUgcmVwZWF0KCkgdHJhY2sgbGlzdCdzIHNpemUs
IHdoaWxlIHN0YXlpbmcgYmVsb3cgdGhlIG1heAotICAgIC8vIGdyaWQgc2l6ZS4KLSAgICByZXBl
dGl0aW9ucyA9IHN0ZDo6bWluKHJlcGV0aXRpb25zLCBrR3JpZE1heFRyYWNrcyAvIG51bWJlck9m
VHJhY2tzKTsKLQotICAgIGlmIChpc0F1dG9SZXBlYXQpCi0gICAgICAgIGxpc3QuYXBwZW5kKFdU
Rk1vdmUocmVwZWF0ZWRWYWx1ZXMpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlcGV0aXRpb25zOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCByZXBlYXRlZFZhbHVlcy0+bGVuZ3RoKCk7ICsraikKLSAgICAgICAgICAg
ICAgICBsaXN0LmFwcGVuZCgqcmVwZWF0ZWRWYWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZFRy
YWNrU2l6ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFs
dWUgPSAqaW5wdXRMaXN0LmN1cnJlbnQoKTsKLSAgICBpbnB1dExpc3QubmV4dCgpOwotCi0gICAg
aWYgKGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXJyZW50VmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJtaW5tYXgoIikpIHsKLSAgICAgICAgLy8gVGhlIHNwZWMgZGVmaW5lcyB0aGUgZm9s
bG93aW5nIGdyYW1tYXI6IG1pbm1heCggPHRyYWNrLWJyZWFkdGg+ICwgPHRyYWNrLWJyZWFkdGg+
ICkKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBjdXJyZW50VmFsdWUu
ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50
cy0+c2l6ZSgpICE9IDMgfHwgIWlzQ29tbWEoYXJndW1lbnRzLT52YWx1ZUF0KDEpKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbWluVHJhY2tCcmVhZHRoID0gcGFyc2VHcmlkQnJlYWR0aCgqYXJndW1lbnRzLT52YWx1ZUF0
KDApKTsKLSAgICAgICAgaWYgKCFtaW5UcmFja0JyZWFkdGggfHwgbWluVHJhY2tCcmVhZHRoLT5p
c0ZsZXgoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbWF4VHJhY2tCcmVhZHRoID0gcGFyc2VHcmlkQnJlYWR0aCgqYXJn
dW1lbnRzLT52YWx1ZUF0KDIpKTsKLSAgICAgICAgaWYgKCFtYXhUcmFja0JyZWFkdGgpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHBhcnNlZEFyZ3VtZW50cyA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICAgICAgcGFyc2VkQXJn
dW1lbnRzLT5hcHBlbmQobWluVHJhY2tCcmVhZHRoLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAg
ICBwYXJzZWRBcmd1bWVudHMtPmFwcGVuZChtYXhUcmFja0JyZWFkdGgucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgICAgIHJldHVybiBDU1NGdW5jdGlvblZhbHVlOjpjcmVhdGUoIm1pbm1heCgiLCBX
VEZNb3ZlKHBhcnNlZEFyZ3VtZW50cykpOwotICAgIH0KLQotICAgIHJldHVybiBwYXJzZUdyaWRC
cmVhZHRoKGN1cnJlbnRWYWx1ZSk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIGlmICh2YWx1ZS5pZCA9PSBD
U1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhD
b250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLQot
ICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIpIHsKLSAgICAg
ICAgZG91YmxlIGZsZXhWYWx1ZSA9IHZhbHVlLmZWYWx1ZTsKLQotICAgICAgICAvLyBGcmFjdGlv
bmFsIHVuaXQgaXMgYSBub24tbmVnYXRpdmUgZGltZW5zaW9uLgotICAgICAgICBpZiAoZmxleFZh
bHVlIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShmbGV4VmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRlIpOwotICAgIH0KLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkR3Jp
ZEF1dG9GbG93SWQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gKGlkID09IENTU1ZhbHVl
Um93IHx8IGlkID09IENTU1ZhbHVlQ29sdW1uIHx8IGlkID09IENTU1ZhbHVlRGVuc2UpOwotfQot
Ci1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQXV0b0Zsb3coQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBpbnB1dExpc3QpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSk7Ci0KLSAgICAvLyBbIHJvdyB8IGNvbHVtbiBdIHx8IGRlbnNlCi0gICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gaW5wdXRMaXN0LmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWVzID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotCi0gICAgLy8gRmlyc3QgcGFyYW1ldGVyLgot
ICAgIENTU1ZhbHVlSUQgZmlyc3RJZCA9IHZhbHVlLT5pZDsKLSAgICBpZiAoIWlzVmFsaWRHcmlk
QXV0b0Zsb3dJZChmaXJzdElkKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBT
ZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnkuCi0gICAgLy8gSWYgc2Vjb25kIHBhcmFtZXRlciBpcyBu
b3QgdmFsaWQgd2Ugc2hvdWxkIHByb2Nlc3MgYW55d2F5IHRoZSBmaXJzdCBvbmUgYXMgd2UgY2Fu
IGJlIGluc2lkZSB0aGUgImdyaWQiIHNob3J0aGFuZC4KLSAgICB2YWx1ZSA9IGlucHV0TGlzdC5u
ZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhaXNWYWxpZEdyaWRBdXRvRmxvd0lkKHZhbHVlLT5p
ZCkpIHsKLSAgICAgICAgaWYgKGZpcnN0SWQgPT0gQ1NTVmFsdWVEZW5zZSkKLSAgICAgICAgICAg
IHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlUm93KSk7Ci0KLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJ
ZCkpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShwYXJzZWRWYWx1ZXMpOwotICAgIH0KLQotICAg
IHN3aXRjaCAoZmlyc3RJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVSb3c6Ci0gICAgY2FzZSBDU1NW
YWx1ZUNvbHVtbjoKLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwotICAgICAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlRGVuc2UpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCkpOwotICAgICAgICAgICAgaW5wdXRMaXN0Lm5leHQoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlRGVuc2U6Ci0gICAgICAgIGlmICh2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVSb3cgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29sdW1uKSB7Ci0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAgICAgIGlucHV0TGlzdC5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUocGFyc2VkVmFsdWVzKTsK
LX0KLSNlbmRpZiAvKiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwotCi0jaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQotCi1zdGF0aWMgY29uc3QgaW50IGRhc2hib2FyZFJlZ2lvblBhcmFt
ZXRlckNvdW50ID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJh
bWV0ZXJDb3VudCA9IDI7Ci0KLXN0YXRpYyBDU1NQYXJzZXJWYWx1ZSogc2tpcENvbW1hSW5EYXNo
Ym9hcmRSZWdpb24oQ1NTUGFyc2VyVmFsdWVMaXN0ICphcmdzKQotewotICAgIGlmIChhcmdzLT5z
aXplKCkgPT0gKGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50ICogMiAtIDEpIHx8IGFyZ3Mt
PnNpemUoKSA9PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3VudCAqIDIgLSAxKSkg
ewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgY3VycmVudCA9ICphcmdzLT5jdXJyZW50KCk7Ci0g
ICAgICAgIGlmIChjdXJyZW50LnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1
cnJlbnQuaVZhbHVlID09ICcsJykKLSAgICAgICAgICAgIHJldHVybiBhcmdzLT5uZXh0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBhcmdzLT5jdXJyZW50KCk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQotewotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7
Ci0gICAgICAgIHJldHVybiB2YWxpZDsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmVnaW9uID0g
RGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUoKTsKLSAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9
IG51bGxwdHI7Ci0KLSAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgaWYgKCFyZWdpb24pIHsK
LSAgICAgICAgICAgIHJlZ2lvbiA9IGZpcnN0UmVnaW9uLnB0cigpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgYXV0byBuZXh0UmVnaW9uID0gRGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUo
KTsKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9uZXh0ID0gbmV4dFJlZ2lvbi5jb3B5UmVmKCk7Ci0g
ICAgICAgICAgICByZWdpb24gPSBuZXh0UmVnaW9uLnB0cigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tbWFzIGNvdW50IGFzIHZhbHVlcywgc28gYWxsb3cgKGZ1bmN0aW9uIG5hbWUg
aXMgZGFzaGJvYXJkLXJlZ2lvbiBmb3IgREFTSEJPQVJEX1NVUFBPUlQgZmVhdHVyZSk6Ci0gICAg
ICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUsIHQsIHIsIGIsIGwpIG9yIGRhc2hi
b2FyZC1yZWdpb24obGFiZWwgdHlwZSB0IHIgYiBsKQotICAgICAgICAvLyBkYXNoYm9hcmQtcmVn
aW9uKGxhYmVsLCB0eXBlLCB0LCByLCBiLCBsKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5
cGUgdCByIGIgbCkKLSAgICAgICAgLy8gYWxzbyBhbGxvdwotICAgICAgICAvLyBkYXNoYm9hcmQt
cmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUpCi0gICAg
ICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUpIG9yIGRhc2hib2FyZC1yZWdpb24o
bGFiZWwgdHlwZSkKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwotICAgICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImRhc2hib2FyZC1yZWdpb24oIikgfHwgIWFy
Z3MpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGludCBudW1BcmdzID0gYXJncy0+c2l6ZSgpOwotICAgICAgICBp
ZiAoKG51bUFyZ3MgIT0gZGFzaGJvYXJkUmVnaW9uUGFyYW1ldGVyQ291bnQgJiYgbnVtQXJncyAh
PSAoZGFzaGJvYXJkUmVnaW9uUGFyYW1ldGVyQ291bnQqMi0xKSkKLSAgICAgICAgICAgICYmIChu
dW1BcmdzICE9IGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQgJiYgbnVtQXJncyAh
PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3VudCoyLTEpKSkgewotICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gRmlyc3QgYXJnIGlzIGEgbGFiZWwuCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmcg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnaW9uLT5tX2xhYmVsID0gYXJnLT5z
dHJpbmc7Ci0KLSAgICAgICAgLy8gU2Vjb25kIGFyZyBpcyBhIHR5cGUuCi0gICAgICAgIGFyZyA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgYXJnID0gc2tpcENvbW1hSW5EYXNoYm9hcmRSZWdpb24o
YXJncyk7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
REVOVCkgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCph
cmcsICJjaXJjbGUiKSkKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmcsICJyZWN0
YW5nbGUiKSkKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnaW9uLT5tX2dlb21ldHJ5VHlwZSA9IGFyZy0+c3Ry
aW5nOwotCi0gICAgICAgIGlmIChudW1BcmdzID09IGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1l
dGVyQ291bnQgfHwgbnVtQXJncyA9PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3Vu
dCoyLTEpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG9yaWdpbmFsbHkgdXNlZCBDU1NWYWx1ZUlu
dmFsaWQgYnkgYWNjaWRlbnQuIEl0IG1pZ2h0IGJlIG1vcmUgbG9naWNhbCB0byB1c2Ugc29tZXRo
aW5nIGVsc2UuCi0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
SW52YWxpZCk7Ci0KLSAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKGFtb3VudC5jb3B5UmVmKCkp
OwotICAgICAgICAgICAgcmVnaW9uLT5zZXRSaWdodChhbW91bnQuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKGFtb3VudC5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
cmVnaW9uLT5zZXRMZWZ0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBOZXh0IGZvdXIgYXJndW1lbnRzIG11c3QgYmUgb2Zmc2V0IG51bWJlcnMKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
YXJnID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGFyZyA9IHNraXBDb21tYUluRGFz
aGJvYXJkUmVnaW9uKGFyZ3MpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJnV2l0aENhbGN1bGF0aW9uKCphcmcpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gYXJn
LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KGFyZ1dpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFt
b3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShhcmdXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgICAgICAgICAgaWYgKGkg
PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoV1RGTW92ZShhbW91bnQp
KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDEpCi0gICAgICAgICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0UmlnaHQoV1RGTW92ZShhbW91bnQpKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKFdURk1v
dmUoYW1vdW50KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBy
ZWdpb24tPnNldExlZnQoV1RGTW92ZShhbW91bnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChhcmdzLT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlm
ICh2YWxpZCkKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+KFdURk1vdmUoZmlyc3RS
ZWdpb24pKSksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdmFsaWQ7Ci19Ci0KLSNlbmRpZiAv
KiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpICovCi0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQotc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNDb2x1bW5O
YW1lcyhjb25zdCBTdHJpbmcmIGdyaWRSb3dOYW1lcykKLXsKLSAgICBBU1NFUlQoIWdyaWRSb3dO
YW1lcy5pc0VtcHR5KCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbk5hbWVzOwotICAgIC8v
IFVzaW5nIFN0cmluZ0ltcGwgdG8gYXZvaWQgY2hlY2tzIGFuZCBpbmRpcmVjdGlvbiBpbiBldmVy
eSBjYWxsIHRvIFN0cmluZzo6b3BlcmF0b3JbXS4KLSAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKmdy
aWRSb3dOYW1lcy5pbXBsKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
LSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0g
ICAgICAgIGlmICh0ZXh0W2luZGV4XSAhPSAnICcgJiYgdGV4dFtpbmRleF0gIT0gJy4nKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBncmlkQXJlYVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgdGV4dFtpbmRleF0gIT0gJyAnICYmIHRleHRbaW5kZXhd
ICE9ICcuJykKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgY29sdW1uTmFt
ZXMuYXBwZW5kKHRleHQuc3Vic3RyaW5nKGdyaWRBcmVhU3RhcnQsIGluZGV4IC0gZ3JpZEFyZWFT
dGFydCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dGV4dFtpbmRleF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgg
JiYgdGV4dFtpbmRleF0gPT0gJy4nKQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICBjb2x1bW5OYW1lcy5hcHBlbmQoIi4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uTmFt
ZXM7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KE5hbWVk
R3JpZEFyZWFNYXAmIGdyaWRBcmVhTWFwLCBjb25zdCB1bnNpZ25lZCByb3dDb3VudCwgdW5zaWdu
ZWQmIGNvbHVtbkNvdW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkp
OwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlLT51bml0ICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBTdHJpbmcgZ3JpZFJvd05hbWVzID0gY3VycmVudFZhbHVlLT5zdHJpbmc7Ci0gICAgaWYgKGdy
aWRSb3dOYW1lcy5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbk5hbWVzID0gcGFyc2VHcmlkVGVtcGxhdGVB
cmVhc0NvbHVtbk5hbWVzKGdyaWRSb3dOYW1lcyk7Ci0gICAgaWYgKCFjb2x1bW5Db3VudCkgewot
ICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHVtbk5hbWVzLnNpemUoKTsKLSAgICAgICAgQVNTRVJU
KGNvbHVtbkNvdW50KTsKLSAgICB9IGVsc2UgaWYgKGNvbHVtbkNvdW50ICE9IGNvbHVtbk5hbWVz
LnNpemUoKSkgewotICAgICAgICAvLyBUaGUgZGVjbGFyYXRpb24gaXMgaW52YWxpZCBpcyBhbGwg
dGhlIHJvd3MgZG9uJ3QgaGF2ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRDb2x1bW4gPSAwOyBj
dXJyZW50Q29sdW1uIDwgY29sdW1uQ291bnQ7ICsrY3VycmVudENvbHVtbikgewotICAgICAgICBj
b25zdCBTdHJpbmcmIGdyaWRBcmVhTmFtZSA9IGNvbHVtbk5hbWVzW2N1cnJlbnRDb2x1bW5dOwot
Ci0gICAgICAgIC8vIFVuYW1lZCBhcmVhcyBhcmUgYWx3YXlzIHZhbGlkICh3ZSBjb25zaWRlciB0
aGVtIHRvIGJlIDF4MSkuCi0gICAgICAgIGlmIChncmlkQXJlYU5hbWUgPT0gIi4iKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2UgaGFuZGxlIHNldmVyYWwgZ3JpZCBhcmVh
cyB3aXRoIHRoZSBzYW1lIG5hbWUgYXQgb25jZSB0byBzaW1wbGlmeSB0aGUgdmFsaWRhdGlvbiBj
b2RlLgotICAgICAgICB1bnNpZ25lZCBsb29rQWhlYWRDb2x1bW47Ci0gICAgICAgIGZvciAobG9v
a0FoZWFkQ29sdW1uID0gY3VycmVudENvbHVtbiArIDE7IGxvb2tBaGVhZENvbHVtbiA8IGNvbHVt
bkNvdW50OyArK2xvb2tBaGVhZENvbHVtbikgewotICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWVz
W2xvb2tBaGVhZENvbHVtbl0gIT0gZ3JpZEFyZWFOYW1lKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBncmlkQXJlYUl0ZXJhdG9yID0gZ3JpZEFyZWFN
YXAuZmluZChncmlkQXJlYU5hbWUpOwotICAgICAgICBpZiAoZ3JpZEFyZWFJdGVyYXRvciA9PSBn
cmlkQXJlYU1hcC5lbmQoKSkKLSAgICAgICAgICAgIGdyaWRBcmVhTWFwLmFkZChncmlkQXJlYU5h
bWUsIEdyaWRBcmVhKEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3Bhbihyb3dDb3Vu
dCwgcm93Q291bnQgKyAxKSwgR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKGN1
cnJlbnRDb2x1bW4sIGxvb2tBaGVhZENvbHVtbikpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBHcmlkQXJlYSYgZ3JpZEFyZWEgPSBncmlkQXJlYUl0ZXJhdG9yLT52YWx1ZTsKLQotICAg
ICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVja3MgdGVzdCB0aGF0IHRoZSBncmlkIGFyZWEg
aXMgYSBzaW5nbGUgZmlsbGVkLWluIHJlY3RhbmdsZS4KLSAgICAgICAgICAgIC8vIDEuIFRoZSBu
ZXcgcm93IGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91c2x5IHBhcnNlZCByb3cuCi0gICAgICAg
ICAgICBpZiAocm93Q291bnQgIT0gZ3JpZEFyZWEucm93cy5lbmRMaW5lKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyAyLiBUaGUgbmV3IGFyZWEgc3Rh
cnRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5IHBhcnNlZCBhcmVhLgot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZEFyZWEuY29sdW1ucy5zdGFydExp
bmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIDMu
IFRoZSBuZXcgYXJlYSBlbmRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5
IHBhcnNlZCBhcmVhLgotICAgICAgICAgICAgaWYgKGxvb2tBaGVhZENvbHVtbiAhPSBncmlkQXJl
YS5jb2x1bW5zLmVuZExpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGdyaWRBcmVhLnJvd3MgPSBHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3Jp
ZFNwYW4oZ3JpZEFyZWEucm93cy5zdGFydExpbmUoKSwgZ3JpZEFyZWEucm93cy5lbmRMaW5lKCkg
KyAxKTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50Q29sdW1uID0gbG9va0FoZWFkQ29sdW1u
IC0gMTsKLSAgICB9Ci0KLSAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVh
cygpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAo
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBD
U1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7Ci0gICAgfQotCi0gICAgTmFtZWRHcmlkQXJlYU1hcCBncmlkQXJlYU1hcDsKLSAg
ICB1bnNpZ25lZCByb3dDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29sdW1uQ291bnQgPSAwOwot
Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKCFwYXJz
ZUdyaWRUZW1wbGF0ZUFyZWFzUm93KGdyaWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICsrcm93Q291bnQ7Ci0gICAg
fQotCi0gICAgaWYgKCFyb3dDb3VudCB8fCAhY29sdW1uQ291bnQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWU6OmNyZWF0ZShn
cmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KTsKLX0KLSNlbmRpZiAvKiBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKSAqLwotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VDb3VudGVyQ29udGVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgY291
bnRlcnMpCi17Ci0gICAgdW5zaWduZWQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmIChj
b3VudGVycyAmJiBudW1BcmdzICE9IDMgJiYgbnVtQXJncyAhPSA1KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoIWNvdW50ZXJzICYmIG51bUFyZ3MgIT0gMSAmJiBudW1BcmdzICE9
IDMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8g
aWRlbnRpZmllciA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCphcmd1bWVudCk7Ci0KLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsKLSAgICBpZiAoIWNvdW50ZXJz
KQotICAgICAgICBzZXBhcmF0b3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKFN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+
dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAn
LCcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFy
Z3MubmV4dCgpOwotICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBz
ZXBhcmF0b3IgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqYXJndW1lbnQpOwotICAgIH0K
LQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlzdFN0eWxlOwotICAgIGFyZ3VtZW50
ID0gYXJncy5uZXh0KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkgLy8gTWFrZSB0aGUgbGlzdCBzdHls
ZSBkZWZhdWx0IGRlY2ltYWwKLSAgICAgICAgbGlzdFN0eWxlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEZWNpbWFsKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciB8fCBhcmd1bWVudC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmd1bWVu
dC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgQ1NTVmFsdWVJRCBsaXN0U3R5bGVJRCA9IENTU1ZhbHVl
SW52YWxpZDsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKGFy
Z3VtZW50LT5pZCA+PSBDU1NWYWx1ZURpc2MgJiYgYXJndW1lbnQtPmlkIDw9IENTU1ZhbHVlS2F0
YWthbmFJcm9oYSkpCi0gICAgICAgICAgICBsaXN0U3R5bGVJRCA9IGFyZ3VtZW50LT5pZDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbGlzdFN0
eWxlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUobGlz
dFN0eWxlSUQpOwotICAgIH0KLQotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKENvdW50ZXI6OmNyZWF0ZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBsaXN0U3R5
bGUucmVsZWFzZU5vbk51bGwoKSwgc2VwYXJhdG9yLnJlbGVhc2VOb25OdWxsKCkpKTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlv
bi0+YXJncy5nZXQoKTsKLQotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZWN0KCIpIHx8ICFhcmdzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyByZWN0KHQsIHIsIGIsIGwpIHx8IHJlY3QodCByIGIgbCkKLSAgICBp
ZiAoYXJncy0+c2l6ZSgpICE9IDQgJiYgYXJncy0+c2l6ZSgpICE9IDcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBhdXRvIHJlY3QgPSBSZWN0OjpjcmVhdGUoKTsKLSAgICBib29sIHZhbGlk
ID0gdHJ1ZTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0g
YXJncy0+Y3VycmVudCgpOwotICAgIHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAg
ICB2YWxpZCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgaWYgKCF2YWxpZCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9
IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgaWYgKGkgPT0gMCkK
LSAgICAgICAgICAgIHJlY3QtPnNldFRvcChXVEZNb3ZlKGxlbmd0aCkpOwotICAgICAgICBlbHNl
IGlmIChpID09IDEpCi0gICAgICAgICAgICByZWN0LT5zZXRSaWdodChXVEZNb3ZlKGxlbmd0aCkp
OwotICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICByZWN0LT5zZXRCb3R0b20o
V1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdC0+c2V0TGVm
dChXVEZNb3ZlKGxlbmd0aCkpOwotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKGFyZ3VtZW50ICYmIGFyZ3MtPnNpemUoKSA9PSA3KSB7Ci0gICAgICAgICAgICBp
ZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGFyZ3VtZW50
LT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaSsrOwotICAgIH0KLSAgICBpZiAodmFsaWQpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocmVjdCkp
LCBpbXBvcnRhbnQpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBjb21w
bGV0ZUJvcmRlclJhZGlpKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaWlbNF0pCi17Ci0g
ICAgaWYgKHJhZGlpWzNdKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFyYWRpaVsyXSkgewot
ICAgICAgICBpZiAoIXJhZGlpWzFdKQotICAgICAgICAgICAgcmFkaWlbMV0gPSByYWRpaVswXTsK
LSAgICAgICAgcmFkaWlbMl0gPSByYWRpaVswXTsKLSAgICB9Ci0gICAgcmFkaWlbM10gPSByYWRp
aVsxXTsKLX0KLQotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgd2l0aCBDU1NQ
YXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzLgotLy8gQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1
cyBjb250YWlucyBzdXBwb3J0IGZvciBzb21lIGxlZ2FjeSByYWRpdXMgY29uc3RydWN0aW9uLgot
UmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4gQ1NTUGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENv
cm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4mJiBzaGFwZSwgQ1NTUGFyc2VyVmFsdWVMaXN0
JiBhcmdzKQotewotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwot
Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0
b3I8Q1NTUGFyc2VyVmFsdWUqPiByYWRpdXNBcmd1bWVudHM7Ci0gICAgd2hpbGUgKGFyZ3VtZW50
KSB7Ci0gICAgICAgIHJhZGl1c0FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwotICAgICAgICBh
cmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bSA9IHJhZGl1
c0FyZ3VtZW50cy5zaXplKCk7Ci0gICAgaWYgKCFudW0gfHwgbnVtID4gOSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGlpWzJdWzRd
OwotCi0gICAgdW5zaWduZWQgaW5kZXhBZnRlclNsYXNoID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0g
KnJhZGl1c0FyZ3VtZW50cy5hdChpKTsKLSAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaVZhbHVlICE9ICcv
JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgaWYgKCFp
IHx8IGluZGV4QWZ0ZXJTbGFzaCB8fCBpICsgMSA9PSBudW0gfHwgbnVtID4gaSArIDUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGluZGV4QWZ0ZXJTbGFz
aCA9IGkgKyAxOwotICAgICAgICAgICAgY29tcGxldGVCb3JkZXJSYWRpaShyYWRpaVswXSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpIC0gaW5kZXhB
ZnRlclNsYXNoID49IDQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgICAg
IGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1
dG8gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKLQotICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkKLSAgICAgICAgICAgIHJhZGlp
WzBdW2ldID0gV1RGTW92ZShyYWRpdXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRp
aVsxXVtpIC0gaW5kZXhBZnRlclNsYXNoXSA9IFdURk1vdmUocmFkaXVzKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewotICAgICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJh
ZGlpWzBdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAg
ICAgICAgIHJhZGlpWzFdW2ldID0gcmFkaWlbMF1baV07Ci0gICAgfSBlbHNlCi0gICAgICAgIGNv
bXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMV0pOwotCi0gICAgc2hhcGUtPnNldFRvcExlZnRSYWRp
dXMoY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMF0pLCBXVEZNb3Zl
KHJhZGlpWzFdWzBdKSkpOwotICAgIHNoYXBlLT5zZXRUb3BSaWdodFJhZGl1cyhjcmVhdGVQcmlt
aXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShyYWRpaVswXVsxXSksIFdURk1vdmUocmFkaWlbMV1bMV0p
KSk7Ci0gICAgc2hhcGUtPnNldEJvdHRvbVJpZ2h0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZVZhbHVl
UGFpcihXVEZNb3ZlKHJhZGlpWzBdWzJdKSwgV1RGTW92ZShyYWRpaVsxXVsyXSkpKTsKLSAgICBz
aGFwZS0+c2V0Qm90dG9tTGVmdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92
ZShyYWRpaVswXVszXSksIFdURk1vdmUocmFkaWlbMV1bM10pKSk7Ci0KLSAgICByZXR1cm4gV1RG
TW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IENTU1BhcnNlcjo6
cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIGF1
dG8gc2hhcGUgPSBDU1NCYXNpY1NoYXBlSW5zZXQ6OmNyZWF0ZSgpOwotCi0gICAgQ1NTUGFyc2Vy
VmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgVmVjdG9yPFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gPiB3aWR0aEFyZ3VtZW50czsKLSAgICBib29sIGhhc1JvdW5kZWRJbnNldCA9
IGZhbHNlOwotICAgIHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICBpZiAoYXJndW1lbnQtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShhcmd1bWVudC0+c3RyaW5nLCAicm91bmQiKSkgewotICAgICAgICAgICAgaGFz
Um91bmRlZEluc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgVW5pdHMgdW5pdEZsYWdzID0gRkxlbmd0aCB8IEZQZXJjZW50OwotICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAg
ICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdz
KSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICBhcmd1bWVudCA9IGFy
Z3MubmV4dCgpOwotICAgIH0KLQotICAgIHN3aXRjaCAod2lkdGhBcmd1bWVudHMuc2l6ZSgpKSB7
Ci0gICAgY2FzZSAxOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemUxVmFsdWUoV1RG
TW92ZSh3aWR0aEFyZ3VtZW50c1swXSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSAyOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemUyVmFsdWVzKFdURk1vdmUod2lk
dGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzFdKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgY2FzZSAzOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFw
ZVNpemUzVmFsdWVzKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJn
dW1lbnRzWzFdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1syXSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSA0OiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemU0VmFs
dWVzKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzFd
KSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1syXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbM10p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmIChoYXNSb3VuZGVkSW5zZXQpCi0gICAgICAgIHJldHVy
biBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoV1RGTW92ZShzaGFwZSksIGFyZ3MpOwotICAgIHJl
dHVybiBXVEZNb3ZlKHNoYXBlKTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVl
RmFydGhlc3RTaWRlKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwotICAgIGlmICghdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLX0KLQotUmVmUHRyPENTU0Jhc2ljU2hhcGVDaXJj
bGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYg
YXJncykKLXsKLSAgICAvLyBjaXJjbGUocmFkaXVzKQotICAgIC8vIGNpcmNsZShyYWRpdXMgYXQg
PHBvc2l0aW9uPikKLSAgICAvLyBjaXJjbGUoYXQgPHBvc2l0aW9uPikKLSAgICAvLyB3aGVyZSBw
b3NpdGlvbiBkZWZpbmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBvc2l0aW9u
PiBkYXRhIHR5cGUuCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVDaXJjbGU6OmNyZWF0
ZSgpOwotCi0gICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQo
KTsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJncy5uZXh0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNh
bGwgdG8gcGFyc2VGaWxsUG9zaXRpb24gYmVsb3cgc2hvdWxkIGNvbnN1bWUgYWxsIG9mIHRoZQot
ICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0d28uIFRodXMsIGFuZCBpbmRl
eCBncmVhdGVyIHRoYW4gb25lCi0gICAgICAgIC8vIGluZGljYXRlcyBhbiBpbnZhbGlkIHByb2R1
Y3Rpb24uCi0gICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgpID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmICghYXJncy5jdXJyZW50SW5kZXgoKSAmJiBh
cmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cygqYXJndW1lbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1cyhyYWRpdXMucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9
PSBDU1NWYWx1ZUF0ICYmIGFyZ3MubmV4dCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNlbnRlclk7Ci0gICAgICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbihhcmdzLCBjZW50ZXJY
LCBjZW50ZXJZKTsKLSAgICAgICAgICAgIGlmIChjZW50ZXJYICYmIGNlbnRlclkgJiYgIWFyZ3Mu
Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgoY2VudGVyWC5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShjZW50
ZXJZLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8
Q1NTQmFzaWNTaGFwZUVsbGlwc2U+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZShD
U1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgLy8gZWxsaXBzZShyYWRpdXNYKQotICAg
IC8vIGVsbGlwc2UocmFkaXVzWCBhdCA8cG9zaXRpb24+KQotICAgIC8vIGVsbGlwc2UocmFkaXVz
WCByYWRpdXNZKQotICAgIC8vIGVsbGlwc2UocmFkaXVzWCByYWRpdXNZIGF0IDxwb3NpdGlvbj4p
Ci0gICAgLy8gZWxsaXBzZShhdCA8cG9zaXRpb24+KQotICAgIC8vIHdoZXJlIHBvc2l0aW9uIGRl
ZmluZXMgY2VudGVyWCBhbmQgY2VudGVyWSB1c2luZyBhIENTUyA8cG9zaXRpb24+IGRhdGEgdHlw
ZS4KLSAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwotCi0g
ICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKTsgYXJndW1l
bnQ7IGFyZ3VtZW50ID0gYXJncy5uZXh0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNhbGwgdG8gcGFy
c2VGaWxsUG9zaXRpb24gYmVsb3cgc2hvdWxkIGNvbnN1bWUgYWxsIG9mIHRoZQotICAgICAgICAv
LyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4gVGh1cywgYW4gaW5kZXggZ3JlYXRl
ciB0aGFuIHR3bwotICAgICAgICAvLyBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgot
ICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA+IDIpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1l
bnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoKmFyZ3VtZW50KSkgewotICAgICAg
ICAgICAgICAgIGlmICghc2hhcGUtPnJhZGl1c1goKSkKLSAgICAgICAgICAgICAgICAgICAgc2hh
cGUtPnNldFJhZGl1c1gocmFkaXVzLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1c1kocmFkaXVzLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
cmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCB8fCAhYXJncy5uZXh0KCkpIC8vIGV4cGVjdGluZyBl
bGxpcHNlKC4uIGF0IDxwb3NpdGlvbj4pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWTsKLSAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24o
YXJncywgY2VudGVyWCwgY2VudGVyWSk7Ci0gICAgICAgIGlmICghY2VudGVyWCB8fCAhY2VudGVy
WSB8fCBhcmdzLmN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIHNoYXBlLT5zZXRDZW50ZXJYKGNlbnRlclgucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IHNoYXBlLT5zZXRDZW50ZXJZKGNlbnRlclkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZVBvbHln
b24+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
IGFyZ3MpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmICghc2l6
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNT
aGFwZVBvbHlnb246OmNyZWF0ZSgpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0g
YXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQg
fHwgYXJndW1lbnQtPmlkID09IENTU1ZhbHVlTm9uemVybykgewotICAgICAgICBzaGFwZS0+c2V0
V2luZFJ1bGUoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlRXZlbm9kZCA/IFJVTEVfRVZFTk9ERCA6
IFJVTEVfTk9OWkVSTyk7Ci0KLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3MubmV4dCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0
KCk7Ci0gICAgICAgIHNpemUgLT0gMjsKLSAgICB9Ci0KLSAgICAvLyA8bGVuZ3RoPiA8bGVuZ3Ro
PiwgLi4uIDxsZW5ndGg+IDxsZW5ndGg+IC0+IGVhY2ggcGFpciBoYXMgMyBlbGVtZW50cyBleGNl
cHQgdGhlIGxhc3Qgb25lCi0gICAgaWYgKCFzaXplIHx8IChzaXplICUgMykgLSAyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFggPSBhcmd1
bWVudDsKLSAgICB3aGlsZSAoYXJndW1lbnRYKSB7Ci0KLSAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFgpOwotICAgICAgICBpZiAo
IXZhbGlkYXRlVW5pdChhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byB4TGVuZ3RoID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbik7Ci0K
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WSA9IGFyZ3MubmV4dCgpOwotICAgICAg
ICBpZiAoIWFyZ3VtZW50WSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFlXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50WSk7
Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50WVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBh
dXRvIHlMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0aENh
bGN1bGF0aW9uKTsKLQotICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoV1RGTW92ZSh4TGVuZ3Ro
KSwgV1RGTW92ZSh5TGVuZ3RoKSk7Ci0KLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGNvbW1hT3JO
dWxsID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmICghY29tbWFPck51bGwpCi0gICAgICAgICAg
ICBhcmd1bWVudFggPSBudWxscHRyOwotICAgICAgICBlbHNlIGlmICghaXNDb21tYShjb21tYU9y
TnVsbCkpIAotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGVsc2UgCi0gICAg
ICAgICAgICBhcmd1bWVudFggPSBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RG
TW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NCYXNpY1NoYXBlUGF0aD4gQ1NTUGFyc2VyOjpw
YXJzZUJhc2ljU2hhcGVQYXRoKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICB1bnNp
Z25lZCBzaXplID0gYXJncy5zaXplKCk7Ci0gICAgaWYgKHNpemUgIT0gMSAmJiBzaXplICE9IDMp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgV2luZFJ1bGUgd2luZFJ1bGUgPSBSVUxF
X05PTlpFUk87Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQo
KTsKLSAgICBpZiAoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlRXZlbm9kZCB8fCBhcmd1bWVudC0+
aWQgPT0gQ1NTVmFsdWVOb256ZXJvKSB7Ci0gICAgICAgIHdpbmRSdWxlID0gYXJndW1lbnQtPmlk
ID09IENTU1ZhbHVlRXZlbm9kZCA/IFJVTEVfRVZFTk9ERCA6IFJVTEVfTk9OWkVSTzsKLQotICAg
ICAgICBpZiAoIWlzQ29tbWEoYXJncy5uZXh0KCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGFy
Z3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gYnl0ZVN0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8
U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7Ci0gICAgaWYgKCFidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJv
bVN0cmluZyhhcmd1bWVudC0+c3RyaW5nLCAqYnl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZykp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hh
cGVQYXRoOjpjcmVhdGUoV1RGTW92ZShieXRlU3RyZWFtKSk7Ci0gICAgc2hhcGUtPnNldFdpbmRS
dWxlKHdpbmRSdWxlKTsKLQotICAgIGFyZ3MubmV4dCgpOwotICAgIHJldHVybiBXVEZNb3ZlKHNo
YXBlKTsKLX0KLQotc3RhdGljIGJvb2wgaXNCb3hWYWx1ZShDU1NWYWx1ZUlEIHZhbHVlSWQsIENT
U1Byb3BlcnR5SUQgcHJvcElkKQotewotICAgIHN3aXRjaCAodmFsdWVJZCkgewotICAgIGNhc2Ug
Q1NTVmFsdWVDb250ZW50Qm94OgotICAgIGNhc2UgQ1NTVmFsdWVQYWRkaW5nQm94OgotICAgIGNh
c2UgQ1NTVmFsdWVCb3JkZXJCb3g6Ci0gICAgY2FzZSBDU1NWYWx1ZU1hcmdpbkJveDoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NWYWx1ZUZpbGw6Ci0gICAgY2FzZSBDU1NWYWx1
ZVN0cm9rZToKLSAgICBjYXNlIENTU1ZhbHVlVmlld0JveDoKLSAgICAgICAgcmV0dXJuIHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAg
Ym9vbCBzaGFwZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBib3hGb3VuZCA9IGZhbHNlOwotICAg
IENTU1ZhbHVlSUQgdmFsdWVJZDsKLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmFs
dWVJZCA9IHZhbHVlLT5pZDsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbiAmJiAhc2hhcGVGb3VuZCkgewotICAgICAgICAgICAgLy8gcGFyc2VCYXNp
Y1NoYXBlIGFscmVhZHkgYXNrcyBmb3IgdGhlIG5leHQgdmFsdWUgbGlzdCBpdGVtLgotICAgICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZVZhbHVlID0gcGFyc2VCYXNpY1No
YXBlKCk7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoc2hhcGVWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHNoYXBlRm91bmQgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGlzQm94VmFsdWUodmFsdWVJZCwgcHJvcElkKSAmJiAhYm94Rm91bmQpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKLSAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
ICAgIGJveEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdURk1vdmUo
bGlzdCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZVNoYXBlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQpCi17Ci0gICAg
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NT
VmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUuaWQ7Ci0KLSAgICBpZiAodmFsdWVJZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOwot
ICAgIH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2VWYWx1ZTsKLSAgICBpZiAodmFsdWVJ
ZCAhPSBDU1NWYWx1ZU5vbmUgJiYgcGFyc2VGaWxsSW1hZ2UoKm1fdmFsdWVMaXN0LCBpbWFnZVZh
bHVlKSkgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gaW1h
Z2VWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VCYXNpY1NoYXBlQW5kT3JCb3gocHJv
cElkKTsKLX0KLSNlbmRpZgotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDbGlw
UGF0aCgpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUuaWQ7Ci0KLSAgICBpZiAodmFs
dWVJZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlSWQpOwotICAgIH0KLSAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5zdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VCYXNpY1NoYXBlQW5k
T3JCb3goQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aCk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQotewotICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIEFTU0VSVCh2YWx1ZS51
bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbik7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0
KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0KLSAgICBpZiAoIWFyZ3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHNoYXBl
OwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+
bmFtZSwgImNpcmNsZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVDaXJjbGUo
KmFyZ3MpOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAiZWxsaXBzZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2lj
U2hhcGVFbGxpcHNlKCphcmdzKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInBvbHlnb24oIikpCi0gICAgICAgIHNoYXBl
ID0gcGFyc2VCYXNpY1NoYXBlUG9seWdvbigqYXJncyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwYXRoKCIpKQotICAg
ICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZVBhdGgoKmFyZ3MpOwotICAgIGVsc2UgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiaW5zZXQo
IikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlSW5zZXQoKmFyZ3MpOwotCi0gICAg
aWYgKCFzaGFwZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi0vLyBbICdmb250LXN0eWxlJyB8fCAnZm9u
dC12YXJpYW50JyB8fCAnZm9udC13ZWlnaHQnIF0/ICdmb250LXNpemUnIFsgLyAnbGluZS1oZWln
aHQnIF0/ICdmb250LWZhbWlseScKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnQoYm9vbCBpbXBv
cnRhbnQpCi17Ci0gICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBp
bml0aWFsIHNvbWV3aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3ZhbHVlTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmFsdWVM
aXN0LT52YWx1ZUF0KGkpLT5pZCA9PSBDU1NWYWx1ZUluaGVyaXQgfHwgbV92YWx1ZUxpc3QtPnZh
bHVlQXQoaSktPmlkID09IENTU1ZhbHVlSW5pdGlhbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZv
bnQpOwotICAgIC8vIE9wdGlvbmFsIGZvbnQtc3R5bGUsIGZvbnQtdmFyaWFudCBhbmQgZm9udC13
ZWlnaHQuCi0gICAgYm9vbCBmb250U3R5bGVQYXJzZWQgPSBmYWxzZTsKLSAgICBib29sIGZvbnRW
YXJpYW50UGFyc2VkID0gZmFsc2U7Ci0gICAgYm9vbCBmb250V2VpZ2h0UGFyc2VkID0gZmFsc2U7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwotICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKSkgewotICAgICAgICBpZiAoIWZvbnRTdHlsZVBhcnNlZCAmJiBpc1Zh
bGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHZhbHVlLT5p
ZCwgbV9jb250ZXh0LCBtX3N0eWxlU2hlZXQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGZvbnRTdHls
ZVBhcnNlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvbnRWYXJpYW50UGFyc2VkICYm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU21h
bGxDYXBzKSkgewotICAgICAgICAgICAgLy8gRm9udCB2YXJpYW50IGluIHRoZSBzaG9ydGhhbmQg
aXMgcGFydGljdWxhciwgaXQgb25seSBhY2NlcHRzIG5vcm1hbCBvciBzbWFsbC1jYXBzLgotICAg
ICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9y
dGFudCk7Ci0gICAgICAgICAgICBmb250VmFyaWFudFBhcnNlZCA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWZvbnRXZWlnaHRQYXJzZWQgJiYgcGFyc2VGb250V2VpZ2h0KGltcG9ydGFudCkp
Ci0gICAgICAgICAgICBmb250V2VpZ2h0UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0g
ICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFmb250U3R5
bGVQYXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgaWYgKCFmb250VmFyaWFudFBhcnNlZCkKLSAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0
YW50LCB0cnVlKTsKLSAgICBpZiAoIWZvbnRXZWlnaHRQYXJzZWQpCi0gICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotCi0g
ICAgLy8gTm93IGEgZm9udCBzaXplIF9tdXN0XyBjb21lLgotICAgIC8vIDxhYnNvbHV0ZS1zaXpl
PiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAot
ICAgIGlmICghcGFyc2VGb250U2l6ZShpbXBvcnRhbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3Io
KnZhbHVlKSkgewotICAgICAgICAvLyBUaGUgbGluZS1oZWlnaHQgcHJvcGVydHkuCi0gICAgICAg
IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUxpbmVIZWlnaHQoaW1wb3J0
YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7
Ci0KLSAgICAvLyBGb250IGZhbWlseSBtdXN0IGNvbWUgbm93LgotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VkRmFtaWx5VmFsdWUgPSBwYXJzZUZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIXBhcnNl
ZEZhbWlseVZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZEZhbWlseVZhbHVlLnJlbGVhc2VOb25OdWxsKCks
IGltcG9ydGFudCk7Ci0KLSAgICAvLyBGSVhNRTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1jc3MzLWZvbnRzLTIwMTEwMzI0LyNmb250LXByb3AgcmVxdWlyZXMgdGhhdAotICAgIC8vICJm
b250LXN0cmV0Y2giLCAiZm9udC1zaXplLWFkanVzdCIsIGFuZCAiZm9udC1rZXJuaW5nIiBiZSBy
ZXNldCB0byB0aGVpciBpbml0aWFsIHZhbHVlcwotICAgIC8vIGJ1dCB3ZSBkb24ndCBzZWVtIHRv
IHN1cHBvcnQgdGhlbSBhdCB0aGUgbW9tZW50LiBUaGV5IHNob3VsZCBhbHNvIGJlIGFkZGVkIGhl
cmUgb25jZSBpbXBsZW1lbnRlZC4KLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTUGFy
c2VyOjpwYXJzZVN5c3RlbUZvbnQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKG1fdmFs
dWVMaXN0LT5zaXplKCkgPT0gMSk7Ci0gICAgQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQgPSBtX3Zh
bHVlTGlzdC0+dmFsdWVBdCgwKS0+aWQ7Ci0gICAgQVNTRVJUKHN5c3RlbUZvbnRJRCA+PSBDU1NW
YWx1ZUNhcHRpb24gJiYgc3lzdGVtRm9udElEIDw9IENTU1ZhbHVlU3RhdHVzQmFyKTsKLSAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotCi0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHN5
c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKLSAgICBpZiAoIWZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBtdXN0IHNldCBm
b250J3MgY29uc3RpdHVlbnQgcHJvcGVydGllcywgZXZlbiBmb3Igc3lzdGVtIGZvbnRzLCBzbyB0
aGUgY2FzY2FkZSBmdW5jdGlvbnMgY29ycmVjdGx5LgotICAgIFNob3J0aGFuZFNjb3BlIHNjb3Bl
KHRoaXMsIENTU1Byb3BlcnR5Rm9udCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZv
bnREZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24gPyBDU1NWYWx1ZUl0YWxpYyA6
IENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoZm9udERl
c2NyaXB0aW9uLndlaWdodCgpKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGZvbnRE
ZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLCBp
bXBvcnRhbnQpOwotICAgIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlMaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIGZvbnRGYW1pbHlMaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KDApLCBGcm9tU3lzdGVtRm9udElEOjpZZXMpKTsKLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIFdURk1vdmUoZm9udEZhbWlseUxpc3QpLCBp
bXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
cm1hbCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCksIGltcG9ydGFudCk7Ci19Ci0KLWNsYXNzIEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIg
ewotcHVibGljOgotICAgIEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIoQ1NTVmFsdWVMaXN0JiBsaXN0
KQotICAgICAgICA6IG1fbGlzdChsaXN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZChj
b25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmICghbV9idWls
ZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9idWlsZGVyLmFwcGVuZChzdHJpbmcuY2hhcmFj
dGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXQoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVGb250RmFtaWx5VmFsdWUobV9idWlsZGVyLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgbV9idWls
ZGVyLmNsZWFyKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFN0cmluZ0J1aWxkZXIgbV9idWls
ZGVyOwotICAgIENTU1ZhbHVlTGlzdCYgbV9saXN0OwotfTsKLQotc3RhdGljIGJvb2wgdmFsdWVJ
c0NTU0tleXdvcmQoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGFkZCAidW5zZXQiLCB3ZSBzaG91bGQgaGFuZGxlIGl0IGhlcmUuCi0gICAgcmV0
dXJuIHZhbHVlLmlkID09IENTU1ZhbHVlSW5pdGlhbCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUlu
aGVyaXQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVEZWZhdWx0OwotfQotCi1SZWZQdHI8Q1NTVmFs
dWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCi17Ci0gICAgYXV0byBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBGb250RmFtaWx5VmFsdWVC
dWlsZGVyIGZhbWlseUJ1aWxkZXIobGlzdCk7Ci0gICAgYm9vbCBpbkZhbWlseSA9IGZhbHNlOwot
Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBib29sIG5leHRWYWxCcmVha3NGb250ID0g
IW5leHRWYWx1ZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRWYWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbmV4dFZhbHVlLT5pVmFsdWUg
PT0gJywnKTsKLSAgICAgICAgYm9vbCBuZXh0VmFsSXNGb250TmFtZSA9IG5leHRWYWx1ZSAmJgot
ICAgICAgICAgICAgKChuZXh0VmFsdWUtPmlkID49IENTU1ZhbHVlU2VyaWYgJiYgbmV4dFZhbHVl
LT5pZCA8PSBDU1NWYWx1ZVdlYmtpdEJvZHkpIHx8Ci0gICAgICAgICAgICAobmV4dFZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IG5leHRWYWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSk7Ci0KLSAgICAgICAgYm9vbCB2YWx1ZUlz
S2V5d29yZCA9IHZhbHVlSXNDU1NLZXl3b3JkKCp2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZUlz
S2V5d29yZCAmJiAhaW5GYW1pbHkpIHsKLSAgICAgICAgICAgIGlmIChuZXh0VmFsQnJlYWtzRm9u
dCkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IG5leHRWYWx1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZVNlcmlmICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdl
YmtpdEJvZHkpIHsKLSAgICAgICAgICAgIGlmIChpbkZhbWlseSkKLSAgICAgICAgICAgICAgICBm
YW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5l
eHRWYWxCcmVha3NGb250IHx8ICFuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmYW1p
bHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZh
bHVlLT5zdHJpbmcpOwotICAgICAgICAgICAgICAgIGluRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykgewotICAgICAgICAgICAgLy8gU3RyaW5ncyBuZXZlciBzaGFyZSBpbiBh
IGZhbWlseSBuYW1lLgotICAgICAgICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykp
OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQpIHsKLSAgICAgICAgICAgIGlmIChpbkZhbWlseSkKLSAgICAgICAgICAgICAgICBm
YW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5l
eHRWYWxCcmVha3NGb250IHx8ICFuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFs
dWUodmFsdWUtPnN0cmluZykpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5QnVpbGRlci5jb21taXQoKTsKLSAgICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmFk
ZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpbkZhbWlseSA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghbmV4dFZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgaWYgKG5leHRWYWxCcmVha3NGb250KSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAg
ICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXh0
VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgIHZhbHVlID0gbmV4dFZhbHVlOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZmFtaWx5QnVpbGRlci5jb21taXQo
KTsKLQotICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5l
SGVpZ2h0KGJvb2wgaW1wb3J0YW50KQotewotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVl
V2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLSAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKLSAgICBib29sIHZhbGlkUHJp
bWl0aXZlID0gZmFsc2U7Ci0gICAgLy8gbm9ybWFsIHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8IDxw
ZXJjZW50YWdlPiB8IGluaGVyaXQKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIg
fCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgaWYgKHZhbGlkUHJpbWl0aXZl
ICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2
YWx1ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHZhbGlkUHJpbWl0
aXZlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250U2l6ZShib29sIGltcG9ydGFudCkK
LXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuaWQ7Ci0gICAgYm9vbCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwotICAgIC8v
IDxhYnNvbHV0ZS1zaXplPiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRh
Z2U+IHwgaW5oZXJpdAotICAgIGlmIChpZCA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWQgPD0gQ1NT
VmFsdWVMYXJnZXIpCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICBlbHNlCi0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKLSAgICBpZiAodmFsaWRQcmltaXRpdmUg
JiYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IGluU2hvcnRoYW5kKCkpKQotICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1
ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZl
OwotfQotCi1zdGF0aWMgQ1NTVmFsdWVJRCBjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKGlu
dCB3ZWlnaHQpCi17Ci0gICAgQVNTRVJUKCEod2VpZ2h0ICUgMTAwKSAmJiB3ZWlnaHQgPj0gMTAw
ICYmIHdlaWdodCA8PSA5MDApOwotICAgIENTU1ZhbHVlSUQgdmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUlEPihDU1NWYWx1ZTEwMCArIHdlaWdodCAvIDEwMCAtIDEpOwotICAgIEFTU0VSVCh2
YWx1ZSA+PSBDU1NWYWx1ZTEwMCAmJiB2YWx1ZSA8PSBDU1NWYWx1ZTkwMCk7Ci0gICAgcmV0dXJu
IHZhbHVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wb3J0
YW50KQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICgodmFsdWUuaWQgPj0gQ1NTVmFsdWVOb3JtYWwpICYmICh2YWx1ZS5pZCA8
PSBDU1NWYWx1ZTkwMCkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2Vp
Z2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgaWYgKHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NR
dWlya3NNb2RlKSkgewotICAgICAgICBpbnQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJz
ZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgaWYgKCEod2VpZ2h0ICUg
MTAwKSAmJiB3ZWlnaHQgPj0gMTAwICYmIHdlaWdodCA8PSA5MDApIHsKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZCh3ZWln
aHQpKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFN5
bnRoZXNpcyhib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBub25lIHwgWyB3ZWlnaHQgfHwgc3R5
bGUgXQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3ludGhlc2lzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwot
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBib29sIGVuY291bnRlcmVkV2VpZ2h0ID0gZmFsc2U7Ci0gICAgYm9vbCBlbmNvdW50
ZXJlZFN0eWxlID0gZmFsc2U7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAo
dmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWlnaHQ6Ci0gICAgICAgICAgICBl
bmNvdW50ZXJlZFdlaWdodCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVN0eWxlOgotICAgICAgICAgICAgZW5jb3VudGVyZWRTdHlsZSA9IHRydWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgfQotCi0gICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwotICAgIGlmIChlbmNvdW50ZXJlZFdlaWdodCkKLSAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2Vp
Z2h0KSk7Ci0gICAgaWYgKGVuY291bnRlcmVkU3R5bGUpCi0gICAgICAgIGxpc3QtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0
eWxlKSk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3ludGhlc2lzLCBXVEZNb3Zl
KGxpc3QpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKLXsKLSAgICBh
dXRvIHVyaVZhbHVlID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPnN0cmluZykpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIHZh
bHVlTGlzdC5hcHBlbmQoV1RGTW92ZSh1cmlWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiB2YWx1ZS0+aVZhbHVlID09ICcsJykgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUodXJpVmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbiB8fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAiZm9ybWF0KCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
SVhNRTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyBz
YXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJp
bmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFjZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBmb3Jt
YXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9yIG5vdy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8IGFy
Z3MtPnNpemUoKSAhPSAxIHx8IChhcmdzLT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcgJiYgYXJncy0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdXJpVmFsdWUt
PnNldEZvcm1hdChhcmdzLT5jdXJyZW50KCktPnN0cmluZyk7Ci0gICAgdmFsdWVMaXN0LmFwcGVu
ZChXVEZNb3ZlKHVyaVZhbHVlKSk7Ci0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
JiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjTG9j
YWwoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
aWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhcmdzLT5zaXplKCkgPT0gMSAmJiBhcmdzLT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHZhbHVlTGlzdC5hcHBlbmQoQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoYXJncy0+Y3VycmVudCgpLT5zdHJpbmcpKTsKLSAg
ICBlbHNlIGlmIChhcmdzLT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGZvciAo
Q1NTUGFyc2VyVmFsdWUqIGxvY2FsVmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7IGxvY2FsVmFsdWU7
IGxvY2FsVmFsdWUgPSBhcmdzLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChsb2NhbFZhbHVl
LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQobG9jYWxWYWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZUxpc3QuYXBw
ZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGJ1aWxkZXIudG9TdHJpbmcoKSkp
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywn
KQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKLXsKLSAgICBhdXRv
IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIHdo
aWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewot
ICAgICAgICAgICAgaWYgKCFwYXJzZUZvbnRGYWNlU3JjVVJJKHZhbHVlcykpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2
YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJsb2NhbCgiKSkgewotICAgICAgICAgICAgaWYgKCFwYXJz
ZUZvbnRGYWNlU3JjTG9jYWwodmFsdWVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5U3JjLCBXVEZNb3ZlKHZhbHVlcyksIG1faW1wb3J0YW50KTsKLSAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1Bh
cnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgYm9vbCBmYWlsZWQgPSBm
YWxzZTsKLSAgICBib29sIG9wZXJhdG9yRXhwZWN0ZWQgPSBmYWxzZTsKLSAgICBmb3IgKDsgbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsgbV92YWx1ZUxpc3QtPm5leHQoKSwgb3BlcmF0b3JFeHBlY3Rl
ZCA9ICFvcGVyYXRvckV4cGVjdGVkKSB7Ci0gICAgICAgIGlmIChvcGVyYXRvckV4cGVjdGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aVZhbHVlID09ICcs
JykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOSUNPREVfUkFOR0Up
IHsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIFN0cmluZyByYW5nZVN0cmluZyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCktPnN0cmluZzsKLSAgICAgICAgVUNoYXIzMiBmcm9tID0gMDsKLSAgICAgICAgVUNoYXIzMiB0
byA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHJhbmdlU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgICAgIGlmIChsZW5ndGggPCAzKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBpID0gMjsK
LSAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSByYW5n
ZVN0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmIChjID09ICctJyB8fCBjID09ICc/JykKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZyb20gKj0gMTY7Ci0gICAgICAgICAgICBp
ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgZnJvbSArPSBjIC0gJzAn
OwotICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCi0gICAgICAgICAg
ICAgICAgZnJvbSArPSAxMCArIGMgLSAnQSc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjID49ICdh
JyAmJiBjIDw9ICdmJykKLSAgICAgICAgICAgICAgICBmcm9tICs9IDEwICsgYyAtICdhJzsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlm
IChpID09IGxlbmd0aCkKLSAgICAgICAgICAgIHRvID0gZnJvbTsKLSAgICAgICAgZWxzZSBpZiAo
cmFuZ2VTdHJpbmdbaV0gPT0gJz8nKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcGFuID0gMTsK
LSAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoICYmIHJhbmdlU3RyaW5nW2ldID09ICc/Jykg
ewotICAgICAgICAgICAgICAgIHNwYW4gKj0gMTY7Ci0gICAgICAgICAgICAgICAgZnJvbSAqPSAx
NjsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aSA8IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAg
dG8gPSBmcm9tICsgc3BhbiAtIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
bGVuZ3RoIDwgaSArIDIpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSsrOwotICAgICAg
ICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjID0gcmFu
Z2VTdHJpbmdbaV07Ci0gICAgICAgICAgICAgICAgdG8gKj0gMTY7Ci0gICAgICAgICAgICAgICAg
aWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB0byArPSBjIC0g
JzAnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQotICAg
ICAgICAgICAgICAgICAgICB0byArPSAxMCArIGMgLSAnQSc7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0gICAgICAgICAgICAgICAgICAgIHRvICs9IDEw
ICsgYyAtICdhJzsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChmYWlsZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGZyb20gPD0gdG8pCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NVbmljb2RlUmFuZ2VW
YWx1ZTo6Y3JlYXRlKGZyb20sIHRvKSk7Ci0gICAgfQotICAgIGlmIChmYWlsZWQgfHwgIXZhbHVl
cy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVVuaWNvZGVSYW5nZSwgV1RGTW92ZSh2YWx1ZXMpLCBtX2ltcG9ydGFudCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdo
aWNoIGZvcm0gYSB2YWxpZCBkb3VibGUKLS8vIGFuZCBhcmUgdGVybWluYXRlZCBieSB0aGUgZ2l2
ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGludCBjaGVja0ZvclZhbGlkRG91YmxlKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IpCi17
Ci0gICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKLSAgICBpZiAobGVuZ3RoIDwgMSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIGRlY2ltYWxNYXJrU2VlbiA9IGZhbHNlOwotICAg
IGludCBwcm9jZXNzZWRMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoc3RyaW5nW2ldID09IHRlcm1pbmF0b3IpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3NlZExlbmd0aCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBp
ZiAoIWRlY2ltYWxNYXJrU2VlbiAmJiBzdHJpbmdbaV0gPT0gJy4nKQotICAgICAgICAgICAgICAg
IGRlY2ltYWxNYXJrU2VlbiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVjaW1hbE1hcmtTZWVu
ICYmIHByb2Nlc3NlZExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBwcm9jZXNzZWRMZW5ndGg7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGNvbnN1bWVkIGZvciBwYXJzaW5nIGEgdmFsaWQgZG91YmxlCi0vLyB0ZXJtaW5hdGVkIGJ5
IHRoZSBnaXZlbiB0ZXJtaW5hdG9yIGNoYXJhY3RlcgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgaW50IHBhcnNlRG91YmxlKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGRv
dWJsZSYgdmFsdWUpCi17Ci0gICAgaW50IGxlbmd0aCA9IGNoZWNrRm9yVmFsaWREb3VibGUoc3Ry
aW5nLCBlbmQsIHRlcm1pbmF0b3IpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGludCBwb3NpdGlvbiA9IDA7Ci0gICAgZG91YmxlIGxvY2FsVmFsdWUgPSAwOwot
Ci0gICAgLy8gVGhlIGNvbnN1bWVkIGNoYXJhY3RlcnMgaGVyZSBhcmUgZ3VhcmFudGVlZCB0byBi
ZQotICAgIC8vIEFTQ0lJIGRpZ2l0cyB3aXRoIG9yIHdpdGhvdXQgYSBkZWNpbWFsIG1hcmsKLSAg
ICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKHN0
cmluZ1twb3NpdGlvbl0gPT0gJy4nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGxvY2Fs
VmFsdWUgPSBsb2NhbFZhbHVlICogMTAgKyBzdHJpbmdbcG9zaXRpb25dIC0gJzAnOwotICAgIH0K
LQotICAgIGlmICgrK3Bvc2l0aW9uID09IGxlbmd0aCkgewotICAgICAgICB2YWx1ZSA9IGxvY2Fs
VmFsdWU7Ci0gICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAgfQotCi0gICAgZG91YmxlIGZyYWN0
aW9uID0gMDsKLSAgICBkb3VibGUgc2NhbGUgPSAxOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwg
bGVuZ3RoICYmIHNjYWxlIDwgTUFYX1NDQUxFKSB7Ci0gICAgICAgIGZyYWN0aW9uID0gZnJhY3Rp
b24gKiAxMCArIHN0cmluZ1twb3NpdGlvbisrXSAtICcwJzsKLSAgICAgICAgc2NhbGUgKj0gMTA7
Ci0gICAgfQotCi0gICAgdmFsdWUgPSBsb2NhbFZhbHVlICsgZnJhY3Rpb24gLyBzY2FsZTsKLSAg
ICByZXR1cm4gbGVuZ3RoOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBib29sIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHN0cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0
b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1ZSkKLXsK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gc3RyaW5nOwotICAgIGRvdWJsZSBs
b2NhbFZhbHVlID0gMDsKLSAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1
cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKLSAgICAgICAgY3VycmVudCsr
OwotICAgIGlmIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA9PSAnLScpIHsKLSAgICAgICAg
bmVnYXRpdmUgPSB0cnVlOwotICAgICAgICBjdXJyZW50Kys7Ci0gICAgfQotICAgIGlmIChjdXJy
ZW50ID09IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQp
KSB7Ci0gICAgICAgIGRvdWJsZSBuZXdWYWx1ZSA9IGxvY2FsVmFsdWUgKiAxMCArICpjdXJyZW50
KysgLSAnMCc7Ci0gICAgICAgIGlmIChuZXdWYWx1ZSA+PSAyNTUpIHsKLSAgICAgICAgICAgIC8v
IENsYW1wIHZhbHVlcyBhdCAyNTUuCi0gICAgICAgICAgICBsb2NhbFZhbHVlID0gMjU1OwotICAg
ICAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYmIGlzQVNDSUlEaWdpdCgqY3VycmVudCkp
Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgbG9jYWxWYWx1ZSA9IG5ld1ZhbHVlOwotICAgIH0KLQotICAgIGlmIChjdXJy
ZW50ID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGV4cGVjdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiAoKmN1cnJlbnQgPT0gJy4nIHx8ICpjdXJy
ZW50ID09ICclJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgqY3VycmVudCA9
PSAnLicpIHsKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBwYXJzZWQgdGhlIGludGVncmFsIHBhcnQs
IHRyeSB0byBwYXJzZQotICAgICAgICAvLyB0aGUgZnJhY3Rpb24gcGFydCBvZiB0aGUgcGVyY2Vu
dGFnZSB2YWx1ZS4KLSAgICAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAwOwotICAgICAgICBpbnQg
bnVtQ2hhcmFjdGVyc1BhcnNlZCA9IHBhcnNlRG91YmxlKGN1cnJlbnQsIGVuZCwgJyUnLCBwZXJj
ZW50YWdlKTsKLSAgICAgICAgaWYgKCFudW1DaGFyYWN0ZXJzUGFyc2VkKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50ICs9IG51bUNoYXJhY3RlcnNQYXJzZWQ7Ci0g
ICAgICAgIGlmICgqY3VycmVudCAhPSAnJScpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGxvY2FsVmFsdWUgKz0gcGVyY2VudGFnZTsKLSAgICB9Ci0KLSAgICBpZiAoZXhwZWN0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiAqY3VycmVudCAhPSAnJScp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgqY3VycmVudCA9PSAnJScpIHsKLSAg
ICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOwotICAgICAg
ICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1ZSAvIDEwMC4wICogMjU2LjA7Ci0gICAgICAgIC8vIENs
YW1wIHZhbHVlcyBhdCAyNTUgZm9yIHBlcmNlbnRhZ2VzIG92ZXIgMTAwJQotICAgICAgICBpZiAo
bG9jYWxWYWx1ZSA+IDI1NSkKLSAgICAgICAgICAgIGxvY2FsVmFsdWUgPSAyNTU7Ci0gICAgICAg
IGN1cnJlbnQrKzsKLSAgICB9IGVsc2UKLSAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVI7Ci0KLSAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3Bh
Y2UoKmN1cnJlbnQpKQotICAgICAgICBjdXJyZW50Kys7Ci0gICAgaWYgKGN1cnJlbnQgPT0gZW5k
IHx8ICpjdXJyZW50KysgIT0gdGVybWluYXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IC8vIENsYW1wIG5lZ2F0aXZlIHZhbHVlcyBhdCB6ZXJvLgotICAgIHZhbHVlID0gbmVnYXRpdmUg
PyAwIDogc3RhdGljX2Nhc3Q8aW50Pihsb2NhbFZhbHVlKTsKLSAgICBzdHJpbmcgPSBjdXJyZW50
OwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3RyaW5nLCBjb25zdCBpbnQgbGVuZ3RoKQotewotICAgIC8vICIwLlgiCi0gICAgaWYgKGxlbmd0
aCA9PSAzICYmIHN0cmluZ1swXSA9PSAnMCcgJiYgc3RyaW5nWzFdID09ICcuJyAmJiBpc0FTQ0lJ
RGlnaXQoc3RyaW5nWzJdKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyAiLlgiCi0g
ICAgaWYgKGxlbmd0aCA9PSAyICYmIHN0cmluZ1swXSA9PSAnLicgJiYgaXNBU0NJSURpZ2l0KHN0
cmluZ1sxXSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBw
YXJzZUFscGhhVmFsdWUoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHN0cmluZywgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCi17Ci0gICAg
d2hpbGUgKHN0cmluZyAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKnN0cmluZykpCi0gICAgICAgICsr
c3RyaW5nOwotCi0gICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwotCi0gICAgaWYgKHN0cmluZyAh
PSBlbmQgJiYgKnN0cmluZyA9PSAnLScpIHsKLSAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwotICAg
ICAgICArK3N0cmluZzsKLSAgICB9Ci0KLSAgICB2YWx1ZSA9IDA7Ci0KLSAgICBpbnQgbGVuZ3Ro
ID0gZW5kIC0gc3RyaW5nOwotICAgIGlmIChsZW5ndGggPCAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoc3RyaW5nW2xlbmd0aCAtIDFdICE9IHRlcm1pbmF0b3IgfHwgIWlzQVND
SUlEaWdpdChzdHJpbmdbbGVuZ3RoIC0gMl0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoc3RyaW5nWzBdICE9ICcwJyAmJiBzdHJpbmdbMF0gIT0gJzEnICYmIHN0cmluZ1swXSAh
PSAnLicpIHsKLSAgICAgICAgaWYgKGNoZWNrRm9yVmFsaWREb3VibGUoc3RyaW5nLCBlbmQsIHRl
cm1pbmF0b3IpKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IDI1NTsKLSAg
ICAgICAgICAgIHN0cmluZyA9IGVuZDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoID09IDIg
JiYgc3RyaW5nWzBdICE9ICcuJykgewotICAgICAgICB2YWx1ZSA9ICFuZWdhdGl2ZSAmJiBzdHJp
bmdbMF0gPT0gJzEnID8gMjU1IDogMDsKLSAgICAgICAgc3RyaW5nID0gZW5kOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNUZW50aEFscGhhKHN0cmluZywgbGVuZ3Ro
IC0gMSkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCB0ZW50aEFscGhhVmFsdWVzW10gPSB7
IDAsIDI1LCA1MSwgNzYsIDEwMiwgMTI3LCAxNTMsIDE3OSwgMjA0LCAyMzAgfTsKLSAgICAgICAg
dmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiB0ZW50aEFscGhhVmFsdWVzW3N0cmluZ1tsZW5ndGggLSAy
XSAtICcwJ107Ci0gICAgICAgIHN0cmluZyA9IGVuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgZG91YmxlIGFscGhhID0gMDsKLSAgICBpZiAoIXBhcnNlRG91YmxlKHN0cmlu
ZywgZW5kLCB0ZXJtaW5hdG9yLCBhbHBoYSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oYWxwaGEgKiBuZXh0YWZ0ZXIo
MjU2LjAsIDAuMCkpOwotICAgIHN0cmluZyA9IGVuZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgbWln
aHRCZVJHQkEoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIGlmIChsZW5ndGggPCA1KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIGNoYXJhY3RlcnNbNF0gPT0gJygnCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwoY2hhcmFjdGVyc1swXSwgJ3InKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKGNoYXJhY3RlcnNbMV0sICdnJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwoY2hhcmFjdGVyc1szXSwgJ2EnKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCA8
IDQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAn
KCcKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAn
cicpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwg
J2cnKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0s
ICdiJyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlu
bGluZSBib29sIGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoUkdCQTMyJiByZ2IsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCAsIGJvb2wgc3RyaWN0KQotewot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VTktOT1dOOwotICAgIAotICAgIGlmICghc3RyaWN0ICYmIGxlbmd0aCA+PSAzKSB7
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzWzBdID09ICcjJykgewotICAgICAgICAgICAgaWYgKENv
bG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKENvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCwgcmdiKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSBy
Z2JhKCkgc3ludGF4LgotICAgIGlmIChtaWdodEJlUkdCQShjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7
Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBjaGFyYWN0ZXJzICsgNTsK
LSAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsK
LSAgICAgICAgaW50IHJlZDsKLSAgICAgICAgaW50IGdyZWVuOwotICAgICAgICBpbnQgYmx1ZTsK
LSAgICAgICAgaW50IGFscGhhOwotICAgICAgICAKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50
T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIHJlZCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShj
dXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQs
ICcsJywgZXhwZWN0LCBibHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFwYXJzZUFscGhhVmFsdWUoY3VycmVudCwgZW5kLCAnKScsIGFscGhhKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZ2IgPSBtYWtlUkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFRyeSByZ2Io
KSBzeW50YXguCi0gICAgaWYgKG1pZ2h0QmVSR0IoY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAg
ICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gY2hhcmFjdGVycyArIDQ7Ci0gICAg
ICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAg
ICAgIGludCByZWQ7Ci0gICAgICAgIGludCBncmVlbjsKLSAgICAgICAgaW50IGJsdWU7Ci0gICAg
ICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhw
ZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNl
Q29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBl
cmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmdiID0gbWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotYm9vbCBDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9y
KFJHQkEzMiYgcmdiLCBjb25zdCBTdHJpbmdUeXBlJiBuYW1lLCBib29sIHN0cmljdCkKLXsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAgIGJvb2wgcGFyc2VSZXN1bHQ7
Ci0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5h
bWUuaXM4Qml0KCkpCi0gICAgICAgIHBhcnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChyZ2IsIG5hbWUuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBzdHJpY3QpOwotICAgIGVsc2UKLSAg
ICAgICAgcGFyc2VSZXN1bHQgPSBmYXN0UGFyc2VDb2xvckludGVybmFsKHJnYiwgbmFtZS5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBzdHJpY3QpOwotCi0gICAgaWYgKHBhcnNlUmVzdWx0KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRyeSBuYW1lZCBjb2xvcnMuCi0gICAgQ29sb3Ig
dGM7Ci0gICAgdGMuc2V0TmFtZWRDb2xvcihuYW1lKTsKLSAgICBpZiAodGMuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIHJnYiA9IHRjLnJnYigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotaW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNl
ZERvdWJsZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi17Ci0g
ICAgcmV0dXJuIHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkgPyB2YWx1ZVdpdGhD
YWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgJiYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY2FsYygiKQotICAgICAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0
LWNhbGMoIikpOwotfQotCi1pbmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUo
VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotewotICAgIGJvb2wg
aXNQZXJjZW50OwotICAgIAotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpKQotICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OwotICAgIGVsc2UKLSAgICAgICAgaXNQZXJj
ZW50ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRTsKLQotICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBh
cnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgCi0gICAgaWYgKGRvdWJsZVZh
bHVlIDw9IDAuMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNQZXJjZW50KSB7Ci0g
ICAgICAgIGlmIChkb3VibGVWYWx1ZSA+PSAxMDAuMCkKLSAgICAgICAgICAgIHJldHVybiAyNTU7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGRvdWJsZVZhbHVlICogMjU2LjAgLyAx
MDAuMCk7Ci0gICAgfQotCi0gICAgaWYgKGRvdWJsZVZhbHVlID49IDI1NS4wKQotICAgICAgICBy
ZXR1cm4gMjU1OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZG91YmxlVmFsdWUpOwot
fQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlLCBpbnQqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKLXsKLSAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5jdXJy
ZW50KCkpOwotICAgIFVuaXRzIHVuaXRUeXBlID0gRlVua25vd247Ci0gICAgLy8gR2V0IHRoZSBm
aXJzdCB2YWx1ZSBhbmQgaXRzIHR5cGUKLSAgICBpZiAodmFsaWRhdGVVbml0KGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgdW5p
dFR5cGUgPSBGSW50ZWdlcjsKLSAgICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQotICAgICAgICB1bml0
VHlwZSA9IEZQZXJjZW50OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGNvbG9yQXJyYXlbMF0gPSBjb2xvckludEZyb21WYWx1ZShmaXJzdEFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKykgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Ci0gICAgICAg
IGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZyb21WYWx1ZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotICAgIGlmIChwYXJzZUFscGhhKSB7Ci0gICAgICAg
IENTU1BhcnNlclZhbHVlJiBvcGVyYXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
JiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bigqYXJncy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2lu
dGVyIG51bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwK
LSAgICAgICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRpb24gYWNyb3NzIGFsbCAyNTYgdmFs
dWVzLgotICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1heDxk
b3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91YmxlVmFsdWUpKSAqIG5leHRhZnRlcigy
NTYuMCwgMC4wKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgQ1NTMyBz
cGVjaWZpY2F0aW9uIGRlZmluZXMgdGhlIGZvcm1hdCBvZiBhIEhTTCBjb2xvciBhcwotLy8gaHNs
KDxudW1iZXI+LCA8cGVyY2VudD4sIDxwZXJjZW50PikKLS8vIGFuZCB3aXRoIGFscGhhLCB0aGUg
Zm9ybWF0IGlzCi0vLyBoc2xhKDxudW1iZXI+LCA8cGVyY2VudD4sIDxwZXJjZW50PiwgPG51bWJl
cj4pCi0vLyBUaGUgZmlyc3QgdmFsdWUsIEhVRSwgaXMgaW4gYW4gYW5nbGUgd2l0aCBhIHZhbHVl
IGJldHdlZW4gMCBhbmQgMzYwCi1ib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEp
Ci17Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxh
dGlvbigqYXJncy0+Y3VycmVudCgpKTsKLSAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlCi0gICAg
aWYgKCF2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBub3JtYWxpemUg
dGhlIEh1ZSB2YWx1ZSBhbmQgY2hhbmdlIGl0IHRvIGJlIGJldHdlZW4gMCBhbmQgMS4wCi0gICAg
Y29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24pKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOwotICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBv
cGVyYXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKG9wZXJhdG9yQXJn
dW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVu
dC5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsK
LSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJj
ZW50LCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y29sb3JBcnJheVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAs
IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSAvIDEwMC4wOyAvLyBuZWVk
cyB0byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAotICAgIH0KLSAgICBpZiAocGFyc2VBbHBo
YSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5u
ZXh0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3JBcnJheVszXSA9IHN0ZDo6bWF4PGRv
dWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24pKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb2xvcihDU1NQYXJzZXJWYWx1ZSogdmFsdWUp
Ci17Ci0gICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgaWYgKCFwYXJzZUNv
bG9yRnJvbVZhbHVlKHZhbHVlID8gKnZhbHVlIDogKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKGMpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VD
b2xvckZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJHQkEzMiYgYykKLXsKLSAgICBp
ZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUgotICAgICAgICAmJiB2YWx1ZS5mVmFsdWUgPj0gMC4gJiYgdmFsdWUuZlZhbHVlIDwg
MTAwMDAwMC4pIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZzo6Zm9ybWF0KCIlMDZkIiwg
c3RhdGljX2Nhc3Q8aW50PigodmFsdWUuZlZhbHVlKy41KSkpOwotICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgc3RyaWN0IHBhcnNpbmcgZm9yIFNWRyBhcyB3ZWxsLgotICAgICAgICBp
ZiAoIWZhc3RQYXJzZUNvbG9yKGMsIHN0ciwgaW5TdHJpY3RNb2RlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUgotICAgICAgICB8fCB2YWx1ZS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQKLSAgICAgICAgfHwgKGluUXVpcmtzTW9kZSgpICYmIHZh
bHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKSB7Ci0gICAgICAg
IGlmICghZmFzdFBhcnNlQ29sb3IoYywgdmFsdWUuc3RyaW5nLCBpblN0cmljdE1vZGUoKSAmJiB2
YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24KLSAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAgICAgICAgJiYg
dmFsdWUuZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8K
LSAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJyZ2IoIikpIHsKLSAgICAgICAgaW50IGNvbG9yVmFsdWVzWzNdOwotICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgZmFsc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjID0gbWFrZVJHQihjb2xvclZhbHVlc1sw
XSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAg
ICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+
YXJncy0+c2l6ZSgpID09IDcgLyogcmdiYSArIHRocmVlIGNvbW1hcyAqLwotICAgICAgICAgICAg
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJy
Z2JhKCIpKSB7Ci0gICAgICAgICAgICBpbnQgY29sb3JWYWx1ZXNbNF07Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgdHJ1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYyA9IG1ha2VSR0JBKGNvbG9y
VmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNd
KTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbgotICAgICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAgICAgICAgICAgICYm
IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiBoc2wgKyB0d28gY29tbWFzICov
Ci0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5j
dGlvbi0+bmFtZSwgImhzbCgiKSkgewotICAgICAgICAgICAgZG91YmxlIGNvbG9yVmFsdWVzWzNd
OwotICAgICAgICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVz
LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYyA9
IG1ha2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZh
bHVlc1syXSwgMS4wKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbgotICAgICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAg
ICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiBoc2xhICsg
dGhyZWUgY29tbWFzICovCi0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImhzbGEoIikpIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBjb2xvclZhbHVlc1s0XTsKLSAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0ZXJzKHZh
bHVlLCBjb2xvclZhbHVlcywgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYyA9IG1ha2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFs
dWVzWzFdLCBjb2xvclZhbHVlc1syXSwgY29sb3JWYWx1ZXNbM10pOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhpcyBjbGFzcyB0cmFja3MgcGFyc2luZyBzdGF0ZSBmb3Igc2hhZG93IHZhbHVlcy4g
IElmIGl0IGdvZXMgb3V0IG9mIHNjb3BlIChlLmcuLCBkdWUgdG8gYW4gZWFybHkgcmV0dXJuKQot
Ly8gd2l0aG91dCB0aGUgYWxsb3dCcmVhayBiaXQgYmVpbmcgc2V0LCB0aGVuIGl0IHdpbGwgY2xl
YW4gdXAgYWxsIG9mIHRoZSBvYmplY3RzIGFuZCBkZXN0cm95IHRoZW0uCi1zdHJ1Y3QgU2hhZG93
UGFyc2VDb250ZXh0IHsKLSAgICBTaGFkb3dQYXJzZUNvbnRleHQoQ1NTUHJvcGVydHlJRCBwcm9w
LCBDU1NQYXJzZXImIHBhcnNlcikKLSAgICAgICAgOiBwcm9wZXJ0eShwcm9wKQotICAgICAgICAs
IG1fcGFyc2VyKHBhcnNlcikKLSAgICAgICAgLCBhbGxvd1godHJ1ZSkKLSAgICAgICAgLCBhbGxv
d1koZmFsc2UpCi0gICAgICAgICwgYWxsb3dCbHVyKGZhbHNlKQotICAgICAgICAsIGFsbG93U3By
ZWFkKGZhbHNlKQotICAgICAgICAsIGFsbG93Q29sb3IodHJ1ZSkKLSAgICAgICAgLCBhbGxvd1N0
eWxlKHByb3AgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcCA9PSBDU1NQcm9w
ZXJ0eUJveFNoYWRvdykKLSAgICAgICAgLCBhbGxvd0JyZWFrKHRydWUpCi0gICAgewotICAgIH0K
LQotICAgIGJvb2wgYWxsb3dMZW5ndGgoKSB7IHJldHVybiBhbGxvd1ggfHwgYWxsb3dZIHx8IGFs
bG93Qmx1ciB8fCBhbGxvd1NwcmVhZDsgfQotCi0gICAgdm9pZCBjb21taXRWYWx1ZSgpCi0gICAg
ewotICAgICAgICAvLyBIYW5kbGUgdGhlICwsIGNhc2UgZ3JhY2VmdWxseSBieSBkb2luZyBub3Ro
aW5nLgotICAgICAgICBpZiAoeCB8fCB5IHx8IGJsdXIgfHwgc3ByZWFkIHx8IGNvbG9yIHx8IHN0
eWxlKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlcykKLSAgICAgICAgICAgICAgICB2YWx1ZXMg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICAgICAgICAgIC8v
IENvbnN0cnVjdCB0aGUgY3VycmVudCBzaGFkb3cgdmFsdWUgYW5kIGFkZCBpdCB0byB0aGUgbGlz
dC4KLSAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RG
TW92ZSh4KSwgV1RGTW92ZSh5KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShzcHJlYWQpLCBXVEZN
b3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
dyByZXNldCBmb3IgdGhlIG5leHQgc2hhZG93IHZhbHVlLgotICAgICAgICB4ID0gbnVsbHB0cjsK
LSAgICAgICAgeSA9IG51bGxwdHI7Ci0gICAgICAgIGJsdXIgPSBudWxscHRyOwotICAgICAgICBz
cHJlYWQgPSBudWxscHRyOwotICAgICAgICBzdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGNvbG9y
ID0gbnVsbHB0cjsKLQotICAgICAgICBhbGxvd1ggPSB0cnVlOwotICAgICAgICBhbGxvd0NvbG9y
ID0gdHJ1ZTsKLSAgICAgICAgYWxsb3dCcmVhayA9IHRydWU7Ci0gICAgICAgIGFsbG93WSA9IGZh
bHNlOwotICAgICAgICBhbGxvd0JsdXIgPSBmYWxzZTsKLSAgICAgICAgYWxsb3dTcHJlYWQgPSBm
YWxzZTsKLSAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OwotICAgIH0KLQot
ICAgIHZvaWQgY29tbWl0TGVuZ3RoKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZh
bHVlV2l0aENhbGN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9
IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0KLSAgICAgICAgaWYgKGFsbG93WCkgewotICAgICAgICAgICAgeCA9IFdURk1vdmUocHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dYID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd1kgPSB0cnVlOwotICAgICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwotICAgICAgICAg
ICAgYWxsb3dTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwot
ICAgICAgICB9IGVsc2UgaWYgKGFsbG93WSkgewotICAgICAgICAgICAgeSA9IFdURk1vdmUocHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dZID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd0JsdXIgPSB0cnVlOwotICAgICAgICAgICAgYWxsb3dDb2xvciA9IHRydWU7Ci0gICAgICAg
ICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cg
fHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7Ci0gICAgICAgICAgICBhbGxvd0Jy
ZWFrID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvd0JsdXIpIHsKLSAgICAgICAgICAg
IGJsdXIgPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9
IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNoYWRvdzsKLSAg
ICAgICAgfSBlbHNlIGlmIChhbGxvd1NwcmVhZCkgewotICAgICAgICAgICAgc3ByZWFkID0gV1RG
TW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICBhbGxvd1NwcmVhZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRDb2xvcihSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiYgdmFsKQotICAgIHsKLSAgICAgICAgY29sb3IgPSB2YWw7Ci0gICAgICAgIGFs
bG93Q29sb3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKGFsbG93WCkgewotICAgICAgICAgICAgYWxs
b3dTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYWxsb3dCbHVyID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd1NwcmVhZCA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94
U2hhZG93OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRTdHlsZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICBzdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLSAgICAgICAgYWxsb3dT
dHlsZSA9IGZhbHNlOwotICAgICAgICBpZiAoYWxsb3dYKQotICAgICAgICAgICAgYWxsb3dCcmVh
ayA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9IGZhbHNl
OwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93Q29s
b3IgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHk7Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHZhbHVlczsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB5OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNwcmVhZDsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHN0eWxlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7
Ci0KLSAgICBib29sIGFsbG93WDsKLSAgICBib29sIGFsbG93WTsKLSAgICBib29sIGFsbG93Qmx1
cjsKLSAgICBib29sIGFsbG93U3ByZWFkOwotICAgIGJvb2wgYWxsb3dDb2xvcjsKLSAgICBib29s
IGFsbG93U3R5bGU7IC8vIGluc2V0IG9yIG5vdC4KLSAgICBib29sIGFsbG93QnJlYWs7Ci19Owot
Ci1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAgICBTaGFkb3dQ
YXJzZUNvbnRleHQgY29udGV4dChwcm9wSWQsICp0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWU7Ci0gICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkpKSB7Ci0gICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0g
ICAgICAgIC8vIENoZWNrIGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgotICAgICAgICBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUtPmlWYWx1ZSAhPSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewotICAgICAgICAg
ICAgICAgIC8vIE90aGVyIG9wZXJhdG9ycyBhcmVuJ3QgbGVnYWwgb3Igd2UgYXJlbid0IGRvbmUg
d2l0aCB0aGUgY3VycmVudCBzaGFkb3cKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZS4gIFRyZWF0
IGFzIGludmFsaWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBub3Qgc3VwcG9ydCBt
dWx0aXBsZSB2YWx1ZXMuCi0gICAgICAgICAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Vi
a2l0U3ZnU2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCi0gICAgICAgICAgICBjb250ZXh0
LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICAgICAgLy8g
V2UgcmVxdWlyZWQgYSBsZW5ndGggYW5kIGRpZG4ndCBnZXQgb25lLiBJbnZhbGlkLgotICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LmFsbG93TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgICAgIC8vIEJsdXIgcmFkaXVzIG11c3QgYmUgbm9uLW5lZ2F0
aXZlLgotICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgLy8gQSBsZW5n
dGggaXMgYWxsb3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBhbmQgYWRkIGl0LgotICAg
ICAgICAgICAgY29udGV4dC5jb21taXRMZW5ndGgodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluc2V0KSB7Ci0gICAgICAgICAg
ICBpZiAoIWNvbnRleHQuYWxsb3dTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHlsZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgb25seSBvdGhlciB0eXBl
IG9mIHZhbHVlIHRoYXQncyBvayBpcyBhIGNvbG9yIHZhbHVlLgotICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRDb2xvcjsKLSAgICAgICAgICAgIGJvb2wgaXNDb2xv
ciA9IChpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZSh2YWx1ZS0+aWQpIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZU1lbnUKLSAgICAgICAgICAgICAgICB8fCAodmFsdWUtPmlkID49IENTU1ZhbHVlV2Vi
a2l0Rm9jdXNSaW5nQ29sb3IgJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBp
blF1aXJrc01vZGUoKSkKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpOwotICAgICAgICAgICAgaWYgKGlzQ29sb3IpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQuYWxsb3dDb2xvcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZENvbG9yKQotICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGJ1aWx0LWluLiBUcnkgdG8gcGFyc2UgaXQgYXMgYSBjb2xvci4KLSAgICAgICAgICAgICAg
ICBwYXJzZWRDb2xvciA9IHBhcnNlQ29sb3IodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAoIXBh
cnNlZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29sb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7IC8vIFRoaXMgdmFsdWUgaXMgbm90IGEgY29sb3Igb3IgbGVuZ3RoIGFuZCBpcyBp
bnZhbGlkIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGEgY29sb3IsIGJ1
dCBhIGNvbG9yIGlzbid0IGFsbG93ZWQgYXQgdGhpcyBwb2ludC4KLQotICAgICAgICAgICAgY29u
dGV4dC5jb21taXRDb2xvcihwYXJzZWRDb2xvci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQu
YWxsb3dCcmVhaykgewotICAgICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIGlm
IChjb250ZXh0LnZhbHVlcyAmJiBjb250ZXh0LnZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGTW92ZShjb250ZXh0LnZhbHVlcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIGJveC1yZWZsZWN0OiA8ZGlyZWN0aW9u
PiA8b2Zmc2V0PiA8bWFzaz4KLQotICAgIC8vIERpcmVjdGlvbiBjb21lcyBmaXJzdC4KLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlyZWN0aW9uOwotICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBYm92ZToKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUJlbG93
OgotICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVJpZ2h0
OgotICAgICAgICAgICAgZGlyZWN0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRo
ZSBvZmZzZXQgY29tZXMgbmV4dC4KLSAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgb2Zmc2V0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotCi0gICAgLy8gTm93
IGZvciB0aGUgbWFzay4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1hc2s7Ci0gICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBpZiAoIXBhcnNl
Qm9yZGVySW1hZ2UocHJvcElkLCBtYXNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1JlZmxlY3RWYWx1ZTo6Y3JlYXRlKGRp
cmVjdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBvZmZzZXQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92
ZShtYXNrKSksIGltcG9ydGFudCk7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChDU1NQYXJzZXJWYWx1ZUxp
c3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghYXJncy5zaXplKCkgfHwgYXJn
cy5zaXplKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB1bnNldFZhbHVlID0gLTE7Ci0gICAgZG91YmxlIGZsZXhHcm93ID0gdW5zZXRWYWx1ZTsK
LSAgICBkb3VibGUgZmxleFNocmluayA9IHVuc2V0VmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBmbGV4QmFzaXM7Ci0KLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy5jdXJyZW50KCkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpKSB7Ci0gICAgICAg
ICAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3Jv
dyA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBl
bHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleFNo
cmluayA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgewotICAg
ICAgICAgICAgICAgIC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRz
KSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBz
ZXQuCi0gICAgICAgICAgICAgICAgZmxleEJhc2lzID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyAzIG51bWJlcnMgd2l0
aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2YWx1ZSBpcyAwLiBFLmcuLCBmbGV4OjEgMSAxIGlzIGlu
dmFsaWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxl
eEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmlkLCBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gTm90IGEgdmFsaWQgYXJnIGZvciBmbGV4LgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGFyZ3MubmV4dCgpOwotICAgIH0KLQotICAgIGlmIChm
bGV4R3JvdyA9PSB1bnNldFZhbHVlKQotICAgICAgICBmbGV4R3JvdyA9IDE7Ci0gICAgaWYgKGZs
ZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgZmxleFNocmluayA9IDE7Ci0gICAgaWYg
KCFmbGV4QmFzaXMpCi0gICAgICAgIGZsZXhCYXNpcyA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0KLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGNsYW1wVG9GbG9hdChmbGV4R3JvdyksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJp
bmssIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUb0Zsb2F0KGZs
ZXhTaHJpbmspLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7Ci0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4QmFzaXMsIGZsZXhCYXNpcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdHJ1Y3QgQm9yZGVy
SW1hZ2VQYXJzZUNvbnRleHQgewotICAgIEJvcmRlckltYWdlUGFyc2VDb250ZXh0KCkKLSAgICA6
IG1fY2FuQWR2YW5jZShmYWxzZSkKLSAgICAsIG1fYWxsb3dDb21taXQodHJ1ZSkKLSAgICAsIG1f
YWxsb3dJbWFnZSh0cnVlKQotICAgICwgbV9hbGxvd0ltYWdlU2xpY2UodHJ1ZSkKLSAgICAsIG1f
YWxsb3dSZXBlYXQodHJ1ZSkKLSAgICAsIG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcihmYWxz
ZSkKLSAgICAsIG1fcmVxdWlyZVdpZHRoKGZhbHNlKQotICAgICwgbV9yZXF1aXJlT3V0c2V0KGZh
bHNlKQotICAgIHt9Ci0KLSAgICBib29sIGNhbkFkdmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2Nh
bkFkdmFuY2U7IH0KLSAgICB2b2lkIHNldENhbkFkdmFuY2UoYm9vbCBjYW5BZHZhbmNlKSB7IG1f
Y2FuQWR2YW5jZSA9IGNhbkFkdmFuY2U7IH0KLQotICAgIGJvb2wgYWxsb3dDb21taXQoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93Q29tbWl0OyB9Ci0gICAgYm9vbCBhbGxvd0ltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ltYWdlOyB9Ci0gICAgYm9vbCBhbGxvd0ltYWdlU2xpY2UoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93SW1hZ2VTbGljZTsgfQotICAgIGJvb2wgYWxsb3dSZXBlYXQoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93UmVwZWF0OyB9Ci0gICAgYm9vbCBhbGxvd0ZvcndhcmRTbGFz
aE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9yOyB9
Ci0KLSAgICBib29sIHJlcXVpcmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZVdpZHRo
OyB9Ci0gICAgYm9vbCByZXF1aXJlT3V0c2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlT3V0
c2V0OyB9Ci0KLSAgICB2b2lkIGNvbW1pdEltYWdlKFJlZlB0cjxDU1NWYWx1ZT4mJiBpbWFnZSkK
LSAgICB7Ci0gICAgICAgIG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKLSAgICAgICAgbV9jYW5B
ZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9IHRydWU7Ci0gICAgICAgIG1f
YWxsb3dJbWFnZSA9IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRo
ID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0g
IW1faW1hZ2VTbGljZTsKLSAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9
Ci0gICAgdm9pZCBjb21taXRJbWFnZVNsaWNlKFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+JiYgc2xpY2UpCi0gICAgewotICAgICAgICBtX2ltYWdlU2xpY2UgPSBXVEZNb3ZlKHNsaWNl
KTsKLSAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9
IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dJbWFn
ZVNsaWNlID0gbV9yZXF1aXJlV2lkdGggPSBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsKLSAgICAg
ICAgbV9hbGxvd0ltYWdlID0gIW1faW1hZ2U7Ci0gICAgICAgIG1fYWxsb3dSZXBlYXQgPSAhbV9y
ZXBlYXQ7Ci0gICAgfQotICAgIHZvaWQgY29tbWl0Rm9yd2FyZFNsYXNoT3BlcmF0b3IoKQotICAg
IHsKLSAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9
IG1fYWxsb3dJbWFnZSA9IG1fYWxsb3dJbWFnZVNsaWNlID0gbV9hbGxvd1JlcGVhdCA9IG1fYWxs
b3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IGZhbHNlOwotICAgICAgICBpZiAoIW1fYm9yZGVyU2xp
Y2UpIHsKLSAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gdHJ1ZTsKLSAgICAgICAgICAgIG1f
cmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9y
ZXF1aXJlT3V0c2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJXaWR0aChSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiYgc2xpY2UpCi0gICAgewotICAgICAgICBtX2JvcmRlclNsaWNlID0g
V1RGTW92ZShzbGljZSk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1f
YWxsb3dDb21taXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSB0cnVlOwotICAgICAg
ICBtX2FsbG93SW1hZ2VTbGljZSA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0g
ZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBtX2FsbG93
UmVwZWF0ID0gIW1fcmVwZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdEJvcmRlck91dHNldChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgb3V0c2V0KQotICAgIHsKLSAgICAgICAgbV9vdXRz
ZXQgPSBXVEZNb3ZlKG91dHNldCk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAg
ICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwotICAgICAgICBtX2FsbG93SW1hZ2VTbGljZSA9IG1f
YWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0
c2V0ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBt
X2FsbG93UmVwZWF0ID0gIW1fcmVwZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdFJlcGVhdChS
ZWZQdHI8Q1NTVmFsdWU+JiYgcmVwZWF0KQotICAgIHsKLSAgICAgICAgbV9yZXBlYXQgPSBXVEZN
b3ZlKHJlcGVhdCk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxs
b3dDb21taXQgPSB0cnVlOwotICAgICAgICBtX2FsbG93UmVwZWF0ID0gbV9hbGxvd0ZvcndhcmRT
bGFzaE9wZXJhdG9yID0gbV9yZXF1aXJlV2lkdGggPSBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsK
LSAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSAhbV9pbWFnZVNsaWNlOwotICAgICAgICBtX2Fs
bG93SW1hZ2UgPSAhbV9pbWFnZTsKLSAgICB9Ci0KLSAgICBSZWY8Q1NTVmFsdWU+IGNvbW1pdFdl
YktpdEJvcmRlckltYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCb3JkZXJJbWFn
ZVZhbHVlKG1faW1hZ2UuY29weVJlZigpLCBtX2ltYWdlU2xpY2UuY29weVJlZigpLCBtX2JvcmRl
clNsaWNlLmNvcHlSZWYoKSwgbV9vdXRzZXQuY29weVJlZigpLCBtX3JlcGVhdC5jb3B5UmVmKCkp
OwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Qm9yZGVySW1hZ2UoQ1NTUGFyc2VyJiBwYXJzZXIs
IGJvb2wgaW1wb3J0YW50KQotICAgIHsKLSAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBwYXJzZXIsIFdURk1vdmUobV9pbWFnZSks
IGltcG9ydGFudCk7Ci0gICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVNsaWNlLCBwYXJzZXIsIG1faW1hZ2VTbGljZSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lk
dGgsIHBhcnNlciwgbV9ib3JkZXJTbGljZSwgaW1wb3J0YW50KTsKLSAgICAgICAgY29tbWl0Qm9y
ZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0LCBwYXJzZXIsIG1f
b3V0c2V0LCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQsIHBhcnNlciwgV1RGTW92ZShtX3JlcGVhdCksIGlt
cG9ydGFudCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQYXJzZXImIHBhcnNlciwgUmVmUHRyPENTU1ZhbHVlPiYm
IHZhbHVlLCBib29sIGltcG9ydGFudCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAg
ICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLnJlbGVhc2VOb25OdWxsKCks
IGltcG9ydGFudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0
eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICB9Ci0KLSAgICBib29sIG1fY2FuQWR2YW5j
ZTsKLQotICAgIGJvb2wgbV9hbGxvd0NvbW1pdDsKLSAgICBib29sIG1fYWxsb3dJbWFnZTsKLSAg
ICBib29sIG1fYWxsb3dJbWFnZVNsaWNlOwotICAgIGJvb2wgbV9hbGxvd1JlcGVhdDsKLSAgICBi
b29sIG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcjsKLQotICAgIGJvb2wgbV9yZXF1aXJlV2lk
dGg7Ci0gICAgYm9vbCBtX3JlcXVpcmVPdXRzZXQ7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1f
aW1hZ2U7Ci0gICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gbV9pbWFnZVNsaWNl
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3JkZXJTbGljZTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fb3V0c2V0OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBt
X3JlcGVhdDsKLX07Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQsIGJvb2wgaW1wb3J0YW50KQot
ewotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgQm9yZGVySW1h
Z2VQYXJzZUNvbnRleHQgY29udGV4dDsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGN1cnJl
bnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgY29udGV4dC5zZXRD
YW5BZHZhbmNlKGZhbHNlKTsKLQotICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYm
IGNvbnRleHQuYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcigpICYmIGlzRm9yd2FyZFNsYXNoT3Bl
cmF0b3IoKmN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZvcndhcmRT
bGFzaE9wZXJhdG9yKCk7Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBj
b250ZXh0LmFsbG93SW1hZ2UoKSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmNvbW1pdEltYWdlKENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjdXJyZW50VmFs
dWUtPnN0cmluZykpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1
ZSgqY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0
LCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2UoV1RGTW92
ZSh2YWx1ZSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1
ZSgqY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93SW1h
Z2VTbGljZSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PiBpbWFnZVNsaWNlOwotICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9w
SWQsIGltYWdlU2xpY2UpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2VTbGlj
ZShXVEZNb3ZlKGltYWdlU2xpY2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29udGV4
dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd1JlcGVhdCgpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdDsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdl
UmVwZWF0KHJlcGVhdCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRSZXBlYXQoV1RG
TW92ZShyZXBlYXQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZh
bmNlKCkgJiYgY29udGV4dC5yZXF1aXJlV2lkdGgoKSkgewotICAgICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBib3JkZXJTbGljZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRl
ckltYWdlV2lkdGgoYm9yZGVyU2xpY2UpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
Qm9yZGVyV2lkdGgoV1RGTW92ZShib3JkZXJTbGljZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LnJlcXVpcmVPdXRzZXQoKSkgewot
ICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3JkZXJPdXRzZXQ7Ci0gICAg
ICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZU91dHNldChib3JkZXJPdXRzZXQpKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0Qm9yZGVyT3V0c2V0KFdURk1vdmUoYm9yZGVyT3V0c2V0
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dDb21taXQoKSkgewotICAgICAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1p
dEJvcmRlckltYWdlKCp0aGlzLCBpbXBvcnRhbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnRleHQuY29tbWl0V2ViS2l0Qm9yZGVySW1hZ2UoKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBp
c0JvcmRlckltYWdlUmVwZWF0S2V5d29yZChpbnQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENT
U1ZhbHVlU3RyZXRjaCB8fCBpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZVNw
YWNlIHx8IGlkID09IENTU1ZhbHVlUm91bmQ7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJv
cmRlckltYWdlUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0VmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzZWNvbmRWYWx1ZTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAgICAgZmlyc3RWYWx1
ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+
aWQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsKSB7Ci0gICAgICAgIGlmIChpc0JvcmRlckltYWdl
UmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAgICAgICAgIHNlY29uZFZhbHVlID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7Ci0gICAg
ICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBu
b3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlkLgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdHMgYWR2YW5jZWQgd2UnbGwK
LSAgICAgICAgICAgIC8vIGVuZCB1cCBiYWNrIGF0IHRoaXMgdmFsdWUuCi0gICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAgICAgICAgIHNlY29uZFZhbHVlID0gZmlyc3RW
YWx1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBzZWNvbmRWYWx1ZSA9IGZpcnN0
VmFsdWU7Ci0KLSAgICByZXN1bHQgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoZmlyc3RWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpLCBzZWNvbmRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCB7Ci1w
dWJsaWM6Ci0gICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dChDU1NQYXJzZXImIHBhcnNl
cikKLSAgICA6IG1fcGFyc2VyKHBhcnNlcikKLSAgICAsIG1fYWxsb3dOdW1iZXIodHJ1ZSkKLSAg
ICAsIG1fYWxsb3dGaWxsKHRydWUpCi0gICAgLCBtX2FsbG93RmluYWxDb21taXQoZmFsc2UpCi0g
ICAgLCBtX2ZpbGwoZmFsc2UpCi0gICAgeyB9Ci0KLSAgICBib29sIGFsbG93TnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV9hbGxvd051bWJlcjsgfQotICAgIGJvb2wgYWxsb3dGaWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ZpbGw7IH0KLSAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLQotICAgIHZvaWQgY29tbWl0TnVt
YmVyKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9u
KQotICAgIHsKLSAgICAgICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGlmICgh
bV90b3ApCi0gICAgICAgICAgICBtX3RvcCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAg
ICAgICBlbHNlIGlmICghbV9yaWdodCkKLSAgICAgICAgICAgIG1fcmlnaHQgPSBXVEZNb3ZlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoIW1fYm90dG9tKQotICAgICAgICAgICAg
bV9ib3R0b20gPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1fbGVmdCk7Ci0gICAgICAgICAgICBtX2xlZnQgPSBXVEZNb3ZlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWxsb3dOdW1iZXIgPSAhbV9s
ZWZ0OwotICAgICAgICBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOwotICAgIH0KLQotICAgIHZv
aWQgY29tbWl0RmlsbCgpIHsgbV9maWxsID0gdHJ1ZTsgbV9hbGxvd0ZpbGwgPSBmYWxzZTsgbV9h
bGxvd051bWJlciA9ICFtX3RvcDsgfQotCi0gICAgUmVmPENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZT4gY29tbWl0Qm9yZGVySW1hZ2VTbGljZSgpCi0gICAgewotICAgICAgICAvLyBXZSBuZWVkIHRv
IGNsb25lIGFuZCByZXBlYXQgdmFsdWVzIGZvciBhbnkgb21pc3Npb25zLgotICAgICAgICBBU1NF
UlQobV90b3ApOwotICAgICAgICBpZiAoIW1fcmlnaHQpIHsKLSAgICAgICAgICAgIG1fcmlnaHQg
PSBtX3RvcDsKLSAgICAgICAgICAgIG1fYm90dG9tID0gbV90b3A7Ci0gICAgICAgICAgICBtX2xl
ZnQgPSBtX3RvcDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fYm90dG9tKSB7Ci0gICAgICAg
ICAgICBtX2JvdHRvbSA9IG1fdG9wOwotICAgICAgICAgICAgbV9sZWZ0ID0gbV9yaWdodDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoIW1fbGVmdCkKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fcmln
aHQ7Ci0KLSAgICAgICAgLy8gTm93IGJ1aWxkIGEgcmVjdCB2YWx1ZSB0byBob2xkIGFsbCBmb3Vy
IG9mIG91ciBwcmltaXRpdmUgdmFsdWVzLgotICAgICAgICBhdXRvIHF1YWQgPSBRdWFkOjpjcmVh
dGUoKTsKLSAgICAgICAgcXVhZC0+c2V0VG9wKG1fdG9wLmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1
YWQtPnNldFJpZ2h0KG1fcmlnaHQuY29weVJlZigpKTsKLSAgICAgICAgcXVhZC0+c2V0Qm90dG9t
KG1fYm90dG9tLmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1YWQtPnNldExlZnQobV9sZWZ0LmNvcHlS
ZWYoKSk7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXIgbmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cu
Ci0gICAgICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocXVhZCkpLCBtX2ZpbGwpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQYXJzZXImIG1fcGFyc2VyOwotCi0gICAgYm9vbCBt
X2FsbG93TnVtYmVyOwotICAgIGJvb2wgbV9hbGxvd0ZpbGw7Ci0gICAgYm9vbCBtX2FsbG93Rmlu
YWxDb21taXQ7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0Owot
Ci0gICAgYm9vbCBtX2ZpbGw7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFn
ZVNsaWNlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlPiYgcmVzdWx0KQotewotICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQgY29udGV4
dCgqdGhpcyk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwotICAgIHdoaWxlICgodmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICAvLyBGSVhNRSBjYWxjKCkg
aHR0cDovL3dlYmtpdC5vcmcvYi8xNjY2MiA6IGNhbGMgaXMgcGFyc2VkIGJ1dCB2YWx1ZXMgYXJl
IG5vdCBjcmVhdGVkIHlldC4KLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAh
aXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2VudCwgQ1NTU3RyaWN0
TW9kZSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmFsbG93RmlsbCgpICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUZpbGwpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZpbGwoKTsK
LSAgICAgICAgZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdl
J3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY29u
dGV4dC5hbGxvd0ZpbmFsQ29tbWl0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBnb2lu
ZyB0byBzdWNjZXNzZnVsbHkgcGFyc2UsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNvbnN1bWUgdGhp
cyB0b2tlbi4KLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIC13ZWJr
aXQtYm9yZGVyLWltYWdlLCAtd2Via2l0LW1hc2stYm94LWltYWdlIGFuZCAtd2Via2l0LWJveC1y
ZWZsZWN0IGhhdmUgdG8gZG8gYSBmaWxsIGJ5IGRlZmF1bHQuCi0gICAgICAgIC8vIEZJWE1FOiBX
aGF0IGRvIHdlIGRvIHdpdGggLXdlYmtpdC1ib3gtcmVmbGVjdCBhbmQgLXdlYmtpdC1tYXNrLWJv
eC1pbWFnZT8gUHJvYmFibHkganVzdCBoYXZlIHRvIGxlYXZlIHRoZW0gZmlsbGluZy4uLgotICAg
ICAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UgfHwgcHJvcElk
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFJlZmxlY3QpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZpbGwoKTsKLQot
ICAgICAgICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAgICAg
ICAgcmVzdWx0ID0gY29udGV4dC5jb21taXRCb3JkZXJJbWFnZVNsaWNlKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY2xhc3MgQm9yZGVy
SW1hZ2VRdWFkUGFyc2VDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBCb3JkZXJJbWFnZVF1YWRQYXJz
ZUNvbnRleHQoQ1NTUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAg
LCBtX2FsbG93TnVtYmVyKHRydWUpCi0gICAgLCBtX2FsbG93RmluYWxDb21taXQoZmFsc2UpCi0g
ICAgeyB9Ci0KLSAgICBib29sIGFsbG93TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd051
bWJlcjsgfQotICAgIGJvb2wgYWxsb3dGaW5hbENvbW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dGaW5hbENvbW1pdDsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJl
dHVybiBtX3RvcC5nZXQoKTsgfQotCi0gICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyOjpW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi0gICAgewotICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlOwotICAgICAgICBpZiAo
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAg
ICAgICBwcmltaXRpdmVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgaWYgKCFtX3Rv
cCkKLSAgICAgICAgICAgIG1fdG9wID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKCFtX3JpZ2h0KQotICAgICAgICAgICAgbV9yaWdodCA9IFdURk1vdmUocHJpbWl0
aXZlVmFsdWUpOwotICAgICAgICBlbHNlIGlmICghbV9ib3R0b20pCi0gICAgICAgICAgICBtX2Jv
dHRvbSA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9sZWZ0KTsKLSAgICAgICAgICAgIG1fbGVmdCA9IFdURk1vdmUocHJpbWl0
aXZlVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9hbGxvd051bWJlciA9ICFtX2xlZnQ7
Ci0gICAgICAgIG1fYWxsb3dGaW5hbENvbW1pdCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRBbGxvd0ZpbmFsQ29tbWl0KCkgeyBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBzZXRUb3AoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3RvcCA9IFdU
Rk1vdmUodmFsKTsgfQotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjb21taXRCb3JkZXJJ
bWFnZVF1YWQoKQotICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBhbmQgcmVwZWF0
IHZhbHVlcyBmb3IgYW55IG9taXNzaW9ucy4KLSAgICAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICAg
ICAgaWYgKCFtX3JpZ2h0KSB7Ci0gICAgICAgICAgICBtX3JpZ2h0ID0gbV90b3A7Ci0gICAgICAg
ICAgICBtX2JvdHRvbSA9IG1fdG9wOwotICAgICAgICAgICAgbV9sZWZ0ID0gbV90b3A7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFtX2JvdHRvbSkgewotICAgICAgICAgICAgbV9ib3R0b20gPSBt
X3RvcDsKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFtX2xlZnQpCi0gICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0OwotCi0gICAgICAgIC8v
IE5vdyBidWlsZCBhIHF1YWQgdmFsdWUgdG8gaG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZl
IHZhbHVlcy4KLSAgICAgICAgYXV0byBxdWFkID0gUXVhZDo6Y3JlYXRlKCk7Ci0gICAgICAgIHF1
YWQtPnNldFRvcChtX3RvcC5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRSaWdodChtX3Jp
Z2h0LmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1YWQtPnNldEJvdHRvbShtX2JvdHRvbS5jb3B5UmVm
KCkpOwotICAgICAgICBxdWFkLT5zZXRMZWZ0KG1fbGVmdC5jb3B5UmVmKCkpOwotCi0gICAgICAg
IC8vIE1ha2Ugb3VyIG5ldyB2YWx1ZSBub3cuCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocXVhZCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBDU1NQYXJzZXImIG1fcGFyc2VyOwotCi0gICAgYm9vbCBtX2FsbG93TnVtYmVyOwot
ICAgIGJvb2wgbV9hbGxvd0ZpbmFsQ29tbWl0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3RvcDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fbGVmdDsKLX07Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdl
UXVhZChVbml0cyB2YWxpZFVuaXRzLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQp
Ci17Ci0gICAgQm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAg
IENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAgICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAo
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBDU1NTdHJpY3RN
b2RlKSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgewotICAgICAgICAgICAgY29udGV4
dC5jb21taXROdW1iZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICB9IGVsc2UgaWYg
KCFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBh
IHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlkLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENv
bW1pdCgpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5wcmV2aW91cygpOyAvLyBUaGUg
c2hvcnRoYW5kIGxvb3Agd2lsbCBhZHZhbmNlIGJhY2sgdG8gdGhpcyBwb2ludC4KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
fQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgpKSB7Ci0gICAgICAgIC8vIE5l
ZWQgdG8gZnVsbHkgY29tbWl0IGFzIGEgc2luZ2xlIHZhbHVlLgotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LmNvbW1pdEJvcmRlckltYWdlUXVhZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJ
bWFnZVdpZHRoKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdCkKLXsKLSAgICByZXR1
cm4gcGFyc2VCb3JkZXJJbWFnZVF1YWQoRkxlbmd0aCB8IEZJbnRlZ2VyIHwgRk5vbk5lZyB8IEZQ
ZXJjZW50LCByZXN1bHQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZU91
dHNldChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHBh
cnNlQm9yZGVySW1hZ2VRdWFkKEZMZW5ndGggfCBGSW50ZWdlciB8IEZOb25OZWcsIHJlc3VsdCk7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgbnVtID0gbV92YWx1ZUxpc3Qt
PnNpemUoKTsKLSAgICBpZiAobnVtID4gOSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHJhZGlpWzJdWzRdOwotCi0gICAgdW5zaWduZWQgaW5kZXhBZnRlclNsYXNoID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KGkpOwotICAgICAgICBp
ZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5pVmFsdWUgIT0gJy8nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCFpIHx8IGluZGV4QWZ0ZXJTbGFzaCB8fCBpICsgMSA9PSBudW0g
fHwgbnVtID4gaSArIDUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBpbmRleEFmdGVyU2xhc2ggPSBpICsgMTsKLSAgICAgICAgICAgIGNvbXBsZXRlQm9yZGVy
UmFkaWkocmFkaWlbMF0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9u
KHZhbHVlKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGF1dG8gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewot
ICAgICAgICAgICAgcmFkaWlbMF1baV0gPSBXVEZNb3ZlKHJhZGl1cyk7Ci0KLSAgICAgICAgICAg
IC8vIExlZ2FjeSBzeW50YXg6IC13ZWJraXQtYm9yZGVyLXJhZGl1czogbDEgbDI7IGlzIGVxdWl2
YWxlbnQgdG8gYm9yZGVyLXJhZGl1czogbDEgLyBsMjsKLSAgICAgICAgICAgIGlmIChudW0gPT0g
MiAmJiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMpIHsKLSAgICAgICAg
ICAgICAgICBpbmRleEFmdGVyU2xhc2ggPSAxOwotICAgICAgICAgICAgICAgIGNvbXBsZXRlQm9y
ZGVyUmFkaWkocmFkaWlbMF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHJhZGlpWzFdW2kgLSBpbmRleEFmdGVyU2xhc2hdID0gV1RGTW92ZShyYWRpdXMpOwot
ICAgIH0KLQotICAgIGlmICghaW5kZXhBZnRlclNsYXNoKSB7Ci0gICAgICAgIGNvbXBsZXRlQm9y
ZGVyUmFkaWkocmFkaWlbMF0pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsg
KytpKQotICAgICAgICAgICAgcmFkaWlbMV1baV0gPSByYWRpaVswXVtpXTsKLSAgICB9IGVsc2UK
LSAgICAgICAgY29tcGxldGVCb3JkZXJSYWRpaShyYWRpaVsxXSk7Ci0KLSAgICBJbXBsaWNpdFNj
b3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwotICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURk1vdmUocmFkaWlbMF1bMF0pLCBXVEZNb3ZlKHJhZGlpWzFdWzBdKSksIGltcG9ydGFu
dCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgY3Jl
YXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMV0pLCBXVEZNb3ZlKHJhZGlp
WzFdWzFdKSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21SaWdodFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlb
MF1bMl0pLCBXVEZNb3ZlKHJhZGlpWzFdWzJdKSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBjcmVhdGVQcmltaXRpdmVWYWx1
ZVBhaXIoV1RGTW92ZShyYWRpaVswXVszXSksIFdURk1vdmUocmFkaWlbMV1bM10pKSwgaW1wb3J0
YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0
UmF0aW8oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgbnVtID0gbV92YWx1ZUxpc3Qt
PnNpemUoKTsKLSAgICBpZiAobnVtID09IDEpIHsKLSAgICAgICAgQ1NTVmFsdWVJRCB2YWx1ZUlk
ID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCktPmlkOwotICAgICAgICBpZiAodmFsdWVJZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsdWVJZCA9PSBDU1NWYWx1ZUZyb21EaW1lbnNpb25zIHx8IHZhbHVl
SWQgPT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG51bSAhPSAzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSYgb3AgPSAqbV92YWx1ZUxpc3Qt
PnZhbHVlQXQoMSk7Ci0KLSAgICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3Iob3ApKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBsdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDApKTsKLSAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBydmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDIpKTsK
LSAgICBpZiAoIXZhbGlkYXRlVW5pdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
Tm9uTmVnKSB8fCAhdmFsaWRhdGVVbml0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZOb25OZWcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IGhhbmRsZSBjYWxjdWxhdGVkIHZhbHVlcy4KLSAgICBpZiAoIWx2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSB8fCAhcnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
ZlZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93
UHJlY2lzaW9uVG9GbG9hdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1
ZSkpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUNvdW50ZXIoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJv
b2wgaW1wb3J0YW50KQotewotICAgIGVudW0geyBJRCwgVkFMIH0gc3RhdGUgPSBJRDsKLQotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvdW50ZXJOYW1lOwotCi0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBJRDoKLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCkgewotICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
VkFMOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZBTDogewotICAgICAgICAgICAgICAgIGludCBpID0g
ZGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICBp
ID0gY2xhbXBUb0ludGVnZXIodmFsdWUtPmZWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKGNvdW50ZXJOYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZSA9IElEOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChsaXN0LT5sZW5ndGgo
KSA+IDApIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKGxpc3QpLCBpbXBv
cnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vIFRoaXMgc2hvdWxkIGdvIGF3YXkgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIC13
ZWJraXQtZ3JhZGllbnQKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBib29sIGhvcml6b250
YWwpCi17Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7Ci0gICAgaWYgKHZh
bHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICBpZiAo
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibGVmdCIpICYmIGhvcml6b250
YWwpCi0gICAgICAgICAgICB8fCAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpOwotICAgICAgICBlbHNlIGlmICgoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UodmFsdWUsICJyaWdodCIpICYmIGhvcml6b250YWwpCi0gICAgICAgICAgICB8fCAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJib3R0b20iKSAmJiAhaG9yaXpvbnRhbCkp
Ci0gICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKDEwMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIGVs
c2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiY2VudGVyIikpCi0g
ICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KDUwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9IGVsc2UgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgdmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgIHJlc3VsdCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuZlZhbHVlLCBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0KSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRD
b2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3ApCi17Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKQot
ICAgICAgICAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJ0bygiKQotICAgICAgICAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZy
b20oIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJ0bygiKSkgewotICAgICAgICAvLyBUaGUgImZyb20iIGFuZCAidG8iIHN0
b3BzIGV4cGVjdCAxIGFyZ3VtZW50LgotICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKSkKLSAgICAgICAgICAg
IHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAgICBDU1NWYWx1
ZUlEIGlkID0gYXJncy0+Y3VycmVudCgpLT5pZDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
V2Via2l0VGV4dCB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKSB8fCBp
ZCA9PSBDU1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlci5wYXJzZUNvbG9yKGFyZ3MtPmN1cnJl
bnQoKSk7Ci0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFRoZSAiY29sb3Itc3RvcCIgZnVuY3Rpb24gZXhwZWN0cyAz
IGFyZ3VtZW50cy4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKSB7Ci0gICAgICAgIGlmIChhcmdzLT5zaXpl
KCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDU1NQYXJzZXJW
YWx1ZSogc3RvcEFyZyA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHN0b3BBcmctPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAgc3Rv
cC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShzdG9w
QXJnLT5mVmFsdWUgLyAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAg
ICAgZWxzZSBpZiAoc3RvcEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBzdG9wQXJnID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoc3RvcEFyZy0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgc3RvcEFyZy0+aVZhbHVlICE9ICcsJykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzdG9wQXJnID0gYXJncy0+bmV4dCgpOwot
ICAgICAgICBDU1NWYWx1ZUlEIGlkID0gc3RvcEFyZy0+aWQ7Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShp
ZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VDb2xvcihzdG9w
QXJnKTsKLSAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ZhbHVlPiYgZ3JhZGllbnQpCi17Ci0gICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgotICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9u
LT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBncmFk
aWVudCB0eXBlLiAgSXQgaXMgYW4gaWRlbnRpZmllci4KLSAgICBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlOwotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAibGluZWFyIikpCi0gICAgICAgIGdyYWRp
ZW50VHlwZSA9IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudDsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgqYXJndW1lbnQsICJyYWRpYWwiKSkKLSAgICAgICAg
Z3JhZGllbnRUeXBlID0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50OwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IHJlc3Vs
dDsKLSAgICBzd2l0Y2ggKGdyYWRpZW50VHlwZSkgewotICAgIGNhc2UgQ1NTRGVwcmVjYXRlZExp
bmVhckdyYWRpZW50OgotICAgICAgICByZXN1bHQgPSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpj
cmVhdGUoTm9uUmVwZWF0aW5nLCBncmFkaWVudFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTUmFk
aWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKE5vblJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGdy
YWRpZW50IHR5cGVzIHNob3VsZG4ndCBhcHBlYXIgaGVyZS4KLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotCi0gICAgLy8gQ29tbWEuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gTmV4dCBjb21lcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBncmFkaWVu
dCBhcyBhbiB4IHkgcGFpci4gIFRoZXJlIGlzIG5vCi0gICAgLy8gY29tbWEgYmV0d2VlbiB0aGUg
eCBhbmQgdGhlIHkgdmFsdWVzLgotICAgIC8vIEZpcnN0IFguICBJdCBjYW4gYmUgbGVmdCwgcmln
aHQsIG51bWJlciBvciBwZXJjZW50LgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
IGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1l
bnQsIHRydWUpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXN1bHQtPnNldEZpcnN0WChwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIC8vIEZpcnN0
IFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJlciBvciBwZXJjZW50LgotICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoKmFyZ3VtZW50
LCBmYWxzZSk7Ci0gICAgaWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
c3VsdC0+c2V0Rmlyc3RZKHBvaW50LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gQ29tbWEg
YWZ0ZXIgdGhlIGZpcnN0IHBvaW50LgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
IGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgYSBudW1lcmljIHJhZGl1
cy4KLSAgICBpZiAoZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkg
ewotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KLSAgICAgICAgaWYgKCFhcmd1
bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgLy8g
Q29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTmV4dCBpcyB0aGUgZW5kaW5nIHBvaW50IGZvciB0
aGUgZ3JhZGllbnQgYXMgYW4geCwgeSBwYWlyLgotICAgIC8vIFNlY29uZCBYLiAgSXQgY2FuIGJl
IGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9p
bnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwgdHJ1ZSk7Ci0gICAg
aWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC0+c2V0U2Vjb25k
WChwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIC8vIFNlY29uZCBZLiAgSXQgY2FuIGJl
IHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9p
bnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwgZmFsc2UpOwotICAg
IGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQtPnNldFNlY29u
ZFkocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50
cyBvbmx5LCB3ZSBub3cgZXhwZWN0IHRoZSBzZWNvbmQgcmFkaXVzLgotICAgIGlmIChncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIC8vIENvbW1h
IGFmdGVyIHRoZSBzZWNvbmQgcG9pbnQuCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRpb24gdmFsdWVzLgotICAgICAgICBpZiAo
IWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBkb3duY2Fz
dDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgfQot
Ci0gICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9y
ZSkuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgd2hpbGUgKGFyZ3VtZW50KSB7
Ci0gICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KLSAg
ICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAvLyBOb3cgZXhhbWluZSB0aGUgc3RvcCBpdHNlbGYuCi0gICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFRoZSBmdW5jdGlvbiBuYW1lIG5lZWRzIHRvIGJl
IG9uZSBvZiAiZnJvbSIsICJ0byIsIG9yICJjb2xvci1zdG9wLiIKLSAgICAgICAgQ1NTR3JhZGll
bnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgaWYgKCFwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENv
bG9yU3RvcCgqdGhpcywgKmFyZ3VtZW50LCBzdG9wKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmVzdWx0LT5hZGRTdG9wKHN0b3ApOwotCi0gICAgICAgIC8vIEFkdmFuY2UK
LSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgfQotCi0gICAgZ3JhZGllbnQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRnJvbVNpZGVLZXl3b3JkKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgYm9vbCYgaXNIb3Jpem9udGFsKQotewotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
c3dpdGNoICh2YWx1ZS5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZVJpZ2h0OgotICAgICAgICAgICAgaXNIb3Jpem9udGFsID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVG9wOgotICAgICAgICBjYXNl
IENTU1ZhbHVlQm90dG9tOgotICAgICAgICAgICAgaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoQ1NTUGFyc2VyJiBwYXJzZXIsIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7Ci0g
ICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0
ZW1Db2xvclZhbHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUgfHwgaWQgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7Ci0KLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlQ29sb3Io
JnZhbHVlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFk
aWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQotewotICAgIGF1dG8gcmVzdWx0ID0g
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5l
YXJHcmFkaWVudCk7Ci0KLSAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0
KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLQotICAgIGJvb2wg
ZXhwZWN0Q29tbWEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFs
aWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUp
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgYXJncy0+bmV4dCgpOwotICAg
ICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTG9vayBv
bmUgb3IgdHdvIG9wdGlvbmFsIGtleXdvcmRzIHRoYXQgaW5kaWNhdGUgYSBzaWRlIG9yIGNvcm5l
ci4KLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdGFydFgsIHN0YXJ0WTsKLSAg
ICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKLSAgICAgICAgaWYgKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQs
IGlzSG9yaXpvbnRhbCkpIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAg
ICAgICAgICAgc3RhcnRYID0gV1RGTW92ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc3RhcnRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0KLSAgICAgICAgICAg
IGlmICgoYXJndW1lbnQgPSBhcmdzLT5uZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChs
b2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCphcmd1bWVudCwgaXNIb3Jpem9udGFsKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0WCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggPSBXVEZNb3ZlKGxvY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFydFkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBhcmdzLT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0YXJ0WCAmJiAhc3RhcnRZ
KQotICAgICAgICAgICAgc3RhcnRZID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUb3ApOwotCi0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RY
KFdURk1vdmUoc3RhcnRYKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1vdmUoc3Rh
cnRZKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZUdyYWRpZW50Q29sb3JTdG9wcygqYXJncywg
cmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
cmVzdWx0LT5zdG9wQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ3JhZGll
bnQgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJl
cGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNy
ZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpOwotCi0gICAgLy8gV2Fs
ayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlz
dC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJn
cy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwotCi0gICAgLy8g
T3B0aW9uYWwgYmFja2dyb3VuZC1wb3NpdGlvbgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY2VudGVyWDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAg
Ly8gcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uIGFkdmFuY2VzIHRoZSBhcmdzIG5leHQgcG9pbnRl
ci4KLSAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKmFyZ3MsIGNlbnRlclgsIGNlbnRlclkp
OwotICAgIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYXJndW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjZW50ZXJYIHx8IGNlbnRlclkpIHsKLSAg
ICAgICAgLy8gQ29tbWEKLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXN1bHQtPnNldEZpcnN0WChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5z
ZXRTZWNvbmRYKFdURk1vdmUoY2VudGVyWCkpOwotICAgIC8vIENTUzMgcmFkaWFsIGdyYWRpZW50
cyBhbHdheXMgc2hhcmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBwb2ludC4KLSAgICByZXN1bHQt
PnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdU
Rk1vdmUoY2VudGVyWSkpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZVZh
bHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZhbHVlOwotCi0gICAgLy8g
T3B0aW9uYWwgc2hhcGUgYW5kL29yIHNpemUgaW4gYW55IG9yZGVyLgotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYm9v
bCBmb3VuZFZhbHVlID0gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAoYXJndW1lbnQtPmlkKSB7Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVDaXJjbGU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVFbGxpcHNl
OgotICAgICAgICAgICAgc2hhcGVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGFyZ3VtZW50LT5pZCk7Ci0gICAgICAgICAgICBmb3VuZFZhbHVl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2Vz
dFNpZGU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZXN0Q29ybmVyOgotICAgICAgICBjYXNl
IENTU1ZhbHVlRmFydGhlc3RTaWRlOgotICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhlc3RDb3Ju
ZXI6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVDb250YWluOgotICAgICAgICBjYXNlIENTU1ZhbHVl
Q292ZXI6Ci0gICAgICAgICAgICBzaXplVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAgICAgICAgZm91bmRW
YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvdW5kVmFsdWUpIHsKLSAg
ICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGV4cGVj
dENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC0+c2V0U2hhcGUo
c2hhcGVWYWx1ZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6
ZVZhbHVlLmNvcHlSZWYoKSk7Ci0KLSAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFn
ZXMKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGhvcml6b250YWxTaXplOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwotCi0gICAgaWYgKCFzaGFwZVZh
bHVlICYmICFzaXplVmFsdWUpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gaFNpemVX
aXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdChoU2l6
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgaG9y
aXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoaFNpemVXaXRoQ2FsY3Vs
YXRpb24pOwotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdlNpemVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYg
KHZhbGlkYXRlVW5pdCh2U2l6ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
ewotICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZTaXplV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIE11c3QgaGF2ZSBuZWl0aGVyIG9yIGJvdGguCi0gICAgaWYgKCFob3Jpem9u
dGFsU2l6ZSAhPSAhdmVydGljYWxTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXN1bHQtPnNldEVuZEhvcml6b250YWxTaXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKLSAg
ICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOwotCi0g
ICAgaWYgKCFwYXJzZUdyYWRpZW50Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21t
YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1
bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJH
cmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYg
Z3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3Vs
dCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU0xpbmVhckdy
YWRpZW50KTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJy
ZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWFyZ3MtPmN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RB
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+Y3VycmVudCgpKTsKLQotICAgIGJvb2wgZXhw
ZWN0Q29tbWEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRh
dGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9k
ZSkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFyZ3MtPm5leHQo
KTsKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmaXJzdEFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uLCAidG8iKSkgewotICAgICAgICAvLyB0byBbIFtsZWZ0IHwgcmlnaHRdIHx8
IFt0b3AgfCBib3R0b21dIF0KLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRBcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKLSAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3
b3JkKCpuZXh0QXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIGlmICghbG9jYXRpb24p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBlbmRYLCBlbmRZOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAg
ICAgZW5kWCA9IFdURk1vdmUobG9jYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
bmRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0KLSAgICAgICAgbmV4dEFyZ3VtZW50ID0gYXJncy0+
bmV4dCgpOwotICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCpuZXh0QXJn
dW1lbnQsIGlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIGlmIChsb2NhdGlvbikgewotICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgIGlmIChlbmRYKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZW5kWCA9IFdURk1v
dmUobG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZW5kWSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGVuZFkgPSBXVEZNb3ZlKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXJncy0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwot
ICAgICAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRGaXJzdFkoV1RGTW92ZShlbmRZKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZUdyYWRp
ZW50Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghcmVzdWx0LT5zdG9wQ291bnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZ3JhZGllbnQgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGll
bnRSZXBlYXQgcmVwZWF0aW5nKQotewotICAgIGF1dG8gcmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFkaWFsR3JhZGllbnQpOwotCi0gICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGV4cGVjdENvbW1hID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNo
YXBlVmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplVmFsdWU7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsU2l6ZTsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKLQotICAgIC8vIEZpcnN0IHBhcnQgb2YgZ3Jh
bW1hciwgdGhlIHNpemUvc2hhcGUgY2xhdXNlOgotICAgIC8vIFsgY2lyY2xlIHx8IDxsZW5ndGg+
IF0gfAotICAgIC8vIFsgZWxsaXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0g
XSB8Ci0gICAgLy8gWyBbIGNpcmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBpZiAoYXJn
dW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAg
ICAgYm9vbCBiYWRJZGVudCA9IGZhbHNlOwotICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+
aWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDaXJjbGU6Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRWxsaXBzZToKLSAgICAgICAgICAgICAgICBpZiAoc2hhcGVWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNoYXBlVmFsdWUg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVu
dC0+aWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUNsb3Nlc3RTaWRlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3Nlc3RDb3JuZXI6Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhlc3RTaWRlOgotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUZhcnRoZXN0Q29ybmVyOgotICAgICAgICAgICAgICAgIGlmIChzaXplVmFsdWUgfHwg
aG9yaXpvbnRhbFNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBzaXplVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBiYWRJZGVudCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChiYWRJZGVudCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKLQotICAgICAgICAgICAgaWYgKHNpemVWYWx1ZSB8fCBob3Jpem9udGFs
U2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBob3Jpem9u
dGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbik7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAg
ICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZTaXplV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZTaXplV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAg
ICAgICAgICArK2k7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIC8vIFlvdSBjYW4gc3BlY2lmeSBzaXplIGFzIGEga2V5d29yZCBvciBh
IGxlbmd0aC9wZXJjZW50YWdlLCBub3QgYm90aC4KLSAgICBpZiAoc2l6ZVZhbHVlICYmIGhvcml6
b250YWxTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gQ2lyY2xlcyBtdXN0IGhh
dmUgMCBvciAxIGxlbmd0aHMuCi0gICAgaWYgKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlQ2lyY2xlICYmIHZlcnRpY2FsU2l6ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIC8vIEVsbGlwc2VzIG11c3QgaGF2ZSAwIG9yIDIgbGVuZ3RoL3BlcmNl
bnRhZ2VzLgotICAgIGlmIChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUVsbGlwc2UgJiYgaG9yaXpvbnRhbFNpemUgJiYgIXZlcnRpY2FsU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgc2l6ZSwgaXQg
bXVzdCBiZSBhIGxlbmd0aC4KLSAgICBpZiAoIXZlcnRpY2FsU2l6ZSAmJiBob3Jpem9udGFsU2l6
ZSAmJiBob3Jpem9udGFsU2l6ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJlc3VsdC0+c2V0U2hhcGUoc2hhcGVWYWx1ZS5jb3B5UmVmKCkpOwotICAgIHJl
c3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6ZVZhbHVlLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0
LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShob3Jpem9udGFsU2l6ZS5jb3B5UmVmKCkpOwotICAgIHJl
c3VsdC0+c2V0RW5kVmVydGljYWxTaXplKHZlcnRpY2FsU2l6ZS5jb3B5UmVmKCkpOwotCi0gICAg
Ly8gU2Vjb25kIHBhcnQgb2YgZ3JhbW1hciwgdGhlIGNlbnRlci1wb3NpdGlvbiBjbGF1c2U6Ci0g
ICAgLy8gYXQgPHBvc2l0aW9uPgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVy
WDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAgaWYgKGFyZ3Vt
ZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAiYXQiKSkgewotICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbigqYXJncywgY2VudGVyWCwgY2Vu
dGVyWSk7Ci0gICAgICAgIGlmICghKGNlbnRlclggJiYgY2VudGVyWSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAg
ICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICByZXN1bHQtPnNl
dEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgICAgIC8vIFJpZ2h0IG5vdywgQ1NTIHJh
ZGlhbCBncmFkaWVudHMgaGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGNlbnRlcnMuCi0gICAg
ICAgIHJlc3VsdC0+c2V0U2Vjb25kWChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0U2Vjb25kWShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgfQotCi0gICAgaWYgKHNoYXBl
VmFsdWUgfHwgc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplIHx8IGNlbnRlclggfHwgY2VudGVy
WSkKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotCi0gICAgaWYgKCFwYXJzZUdyYWRpZW50
Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIENTU0dyYWRpZW50VmFsdWUmIGdyYWRpZW50LCBib29sIGV4
cGVjdENvbW1hKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC5jdXJy
ZW50KCk7Ci0gICAgYm9vbCBwcmV2aW91c1N0b3BXYXNNaWRwb2ludCA9IHRydWU7Ci0KLSAgICAv
LyBOb3cgbG9vayBmb3IgY29sb3Igc3RvcHMuCi0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAg
IC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KLSAgICAgICAgaWYg
KGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxpc3Qu
bmV4dCgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8Y29sb3Itc3RvcD4gPSA8Y29sb3I+IFsg
PHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4gXT8KLSAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Ag
c3RvcDsKLSAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3Jk
KCp0aGlzLCAqdmFsdWUpOwotICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikgewotICAgICAgICAg
ICAgaWYgKHByZXZpb3VzU3RvcFdhc01pZHBvaW50KSAvLyAyIG1pZHBvaW50cyBpbiBhIHJvdyBp
cyBub3QgYWxsb3dlZC4gVGhpcyBhbHNvIGNhdGNoZXMgc3RhcnRpbmcgd2l0aCBhIG1pZHBvaW50
LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc3RvcC5pc01p
ZHBvaW50ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
TGlzdC5uZXh0KCk7Ci0KLSAgICAgICAgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSBzdG9wLmlz
TWlkcG9pbnQ7Ci0KLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICAgICAgaWYg
KHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
ewotICAgICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZUxpc3QubmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wLmlzTWlkcG9pbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3Jh
ZGllbnQuYWRkU3RvcChzdG9wKTsKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0K
LQotICAgIC8vIFdlIGNhbid0IGVuZCBvbiBhIG1pZHBvaW50LgotICAgIGlmIChwcmV2aW91c1N0
b3BXYXNNaWRwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTXVzdCBoYXZl
IDIgb3IgbW9yZSBzdG9wcyB0byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENv
dW50KCkgPj0gMjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OmlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICJsaW5lYXItZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1saW5lYXIt
Z3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAg
IHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAi
LXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyYWRpYWwtZ3JhZGllbnQoIikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LXJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRp
bmctcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jYW52YXMoIikKLSAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJj
cm9zcy1mYWRlKCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jcm9zcy1mYWRlKCIpCi0gICAgICAgIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZmlsdGVy
KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0
aW9uLT5uYW1lLCAiLXdlYmtpdC1maWx0ZXIoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW5hbWVkLWltYWdl
KCIpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUpCi17Ci0gICAgQ1NT
UGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlID0gKnZhbHVlTGlzdC5jdXJyZW50KCk7Ci0KLSAgICBp
ZiAocGFyc2VyVmFsdWUudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShw
YXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtZ3JhZGllbnQoIikpCi0gICAgICAg
IHJldHVybiBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+
bmFtZSwgIi13ZWJraXQtbGluZWFyLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VE
ZXByZWNhdGVkTGluZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsK
LQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgImxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTGlu
ZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsKLQotICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIFJlcGVhdGluZyk7
Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1
cm4gcGFyc2VMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBlYXRpbmcpOwotCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoIikpCi0gICAgICAgIHJldHVybiBwYXJz
ZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBOb25SZXBlYXRpbmcp
OwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAicmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VS
YWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBOb25SZXBlYXRpbmcpOwotCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4g
cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgUmVwZWF0aW5n
KTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5m
dW5jdGlvbi0+bmFtZSwgInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikpCi0gICAgICAgIHJl
dHVybiBwYXJzZVJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIFJlcGVhdGluZyk7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICItd2Via2l0LWNhbnZhcygiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FudmFz
KHZhbHVlTGlzdCwgdmFsdWUpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jcm9zcy1mYWRlKCIpKQot
ICAgICAgICByZXR1cm4gcGFyc2VDcm9zc2ZhZGUodmFsdWVMaXN0LCB2YWx1ZSwgdHJ1ZSk7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJjcm9zcy1mYWRlKCIpKQotICAgICAgICByZXR1cm4gcGFyc2VDcm9zc2ZhZGUo
dmFsdWVMaXN0LCB2YWx1ZSwgZmFsc2UpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZmlsdGVyKCIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1maWx0ZXIoIikpCi0gICAgICAgIHJldHVybiBwYXJzZUZpbHRlckltYWdlKHZhbHVlTGlz
dCwgdmFsdWUpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNl
clZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1uYW1lZC1pbWFnZSgiKSkKLSAgICAgICAg
cmV0dXJuIHBhcnNlTmFtZWRJbWFnZSh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsdGVySW1hZ2UoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGZpbHRlcikKLXsKLSAgICAvLyBX
YWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVM
aXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy0+Y3Vy
cmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgaW1hZ2UuIEl0IGlzIGEgZmlsbCBpbWFnZS4KLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7Ci0gICAgaWYgKCFwYXJzZUZpbGxJbWFnZSgq
YXJncywgaW1hZ2VWYWx1ZSkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgaW1hZ2VWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YWx1ZSA9IGFyZ3MtPm5l
eHQoKTsKLQotICAgIC8vIFNraXAgYSBjb21tYQotICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZSA9IGFyZ3MtPm5leHQoKTsKLQotICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGZpbHRlclZhbHVlOwotICAgIGlmICghdmFsdWUgfHwgIXBhcnNl
RmlsdGVyKCphcmdzLCBmaWx0ZXJWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2
YWx1ZSA9IGFyZ3MtPm5leHQoKTsKLQotICAgIGZpbHRlciA9IENTU0ZpbHRlckltYWdlVmFsdWU6
OmNyZWF0ZShpbWFnZVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGZpbHRlclZhbHVlLnJlbGVhc2VO
b25OdWxsKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNyb3NzZmFkZShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVl
PiYgY3Jvc3NmYWRlLCBib29sIHByZWZpeGVkKQotewotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50
cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5m
dW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9
IGFyZ3MtPmN1cnJlbnQoKTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgImZy
b20iIGltYWdlLiBJdCBpcyBhIGZpbGwgaW1hZ2UuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBmcm9t
SW1hZ2VWYWx1ZTsKLSAgICBpZiAoIWFyZ3VtZW50IHx8ICFwYXJzZUZpbGxJbWFnZSgqYXJncywg
ZnJvbUltYWdlVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0KLSAgICAvLyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlzQ29tbWEoYXJn
dW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0KLSAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSAidG8iIGltYWdlLiBJdCBp
cyBhIGZpbGwgaW1hZ2UuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB0b0ltYWdlVmFsdWU7Ci0gICAg
aWYgKCFhcmd1bWVudCB8fCAhcGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIHRvSW1hZ2VWYWx1ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAg
IC8vIFNraXAgYSBjb21tYQotICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgIC8vIFRoZSB0
aGlyZCBhcmd1bWVudCBpcyB0aGUgY3Jvc3NmYWRlIHZhbHVlLiBJdCBpcyBhIHBlcmNlbnRhZ2Ug
b3IgYSBmcmFjdGlvbmFsIG51bWJlci4KLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwZXJjZW50YWdl
OwotICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCi0gICAgICAgIHBlcmNlbnRhZ2UgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPihhcmd1bWVudC0+ZlZhbHVlIC8gMTAwLCAwLCAxKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgIGVsc2UgaWYgKGFyZ3VtZW50LT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICBwZXJjZW50YWdl
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4o
YXJndW1lbnQtPmZWYWx1ZSwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNyb3NzZmFkZSA9IENTU0Ny
b3NzZmFkZVZhbHVlOjpjcmVhdGUoZnJvbUltYWdlVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgdG9J
bWFnZVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIHBlcmNlbnRhZ2UucmVsZWFzZU5vbk51bGwoKSwg
cHJlZml4ZWQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYg
Y2FudmFzKQotewotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
LSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FudmFzIG5hbWUuICBJdCBp
cyBhbiBpZGVudGlmaWVyLgotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGFyZ3MtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhbnZhcyA9IENTU0Nh
bnZhc1ZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZU5hbWVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIG5hbWVkSW1hZ2UpCi17Ci0gICAgQ1NTUGFyc2VyVmFs
dWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
Ci0gICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgaW1hZ2UgbmFtZS4KLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCB2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBuYW1lZEltYWdlID0gQ1NTTmFtZWRJbWFnZVZhbHVlOjpjcmVh
dGUodmFsdWUtPnN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1JFU09MVVRJT04pCi1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNl
SW1hZ2VSZXNvbHV0aW9uKCkKLXsKLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgYm9vbCBoYXZlUmVzb2x1dGlvbiA9IGZhbHNlOwotICAg
IGJvb2wgaGF2ZUZyb21JbWFnZSA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVNuYXAgPSBmYWxzZTsK
LQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
KTsKLSAgICAgICAgICAgIGhhdmVGcm9tSW1hZ2UgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYg
KCFoYXZlU25hcCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbmFwKSB7Ci0gICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBoYXZlU25hcCA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWhhdmVSZXNvbHV0aW9uICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlJlc29sdXRpb24gfCBGTm9uTmVnKSAmJiB2YWx1ZS0+ZlZhbHVlID4gMCkgewotICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbikpOwotICAgICAgICAgICAgaGF2ZVJlc29sdXRpb24gPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiAhaGF2ZVJl
c29sdXRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEZNb3ZlKGxp
c3QpOwotfQotI2VuZGlmCi0KLVJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlSW1hZ2VTZXQoKQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIEFTU0VSVCh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpG
dW5jdGlvbik7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGZ1bmN0aW9uQXJncyA9IHZhbHVl
LmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghZnVuY3Rpb25BcmdzIHx8ICFmdW5jdGlv
bkFyZ3MtPnNpemUoKSB8fCAhZnVuY3Rpb25BcmdzLT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZVNldCA9IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0
ZSgpOwotICAgIENTU1BhcnNlclZhbHVlKiBhcmcgPSBmdW5jdGlvbkFyZ3MtPmN1cnJlbnQoKTsK
LSAgICB3aGlsZSAoYXJnKSB7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBp
bWFnZVNldC0+YXBwZW5kKENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChhcmctPnN0
cmluZykpKTsKLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlm
ICghYXJnIHx8IGFyZy0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTikK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGRvdWJsZSBpbWFnZVNjYWxl
RmFjdG9yID0gMDsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcgPSBhcmctPnN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBpZiAo
IWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoc3RyaW5n
LmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogc3RhcnQgPSBzdHJpbmcuY2hh
cmFjdGVyczgoKTsKLSAgICAgICAgICAgIHBhcnNlRG91YmxlKHN0YXJ0LCBzdGFydCArIGxlbmd0
aCwgJ3gnLCBpbWFnZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKLSAgICAgICAgICAg
IHBhcnNlRG91YmxlKHN0YXJ0LCBzdGFydCArIGxlbmd0aCwgJ3gnLCBpbWFnZVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW1hZ2VTY2FsZUZhY3RvciA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlU2V0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShpbWFnZVNjYWxlRmFjdG9yLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3Jl
IGFyZ3VtZW50cywgd2UncmUgZG9uZS4KLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0
KCk7Ci0gICAgICAgIGlmICghYXJnKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzLCB0aGV5IHNob3VsZCBiZSBhZnRlciBhIGNvbW1h
LgotICAgICAgICBpZiAoIWlzQ29tbWEoYXJnKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIC8vIFNraXAgdGhlIGNvbW1hIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGFy
Z3VtZW50LgotICAgICAgICBhcmcgPSBmdW5jdGlvbkFyZ3MtPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShpbWFnZVNldCk7Ci19Ci0KLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlv
bkluZm8gewotcHVibGljOgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbkluZm8oY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fdHlwZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgLCBtX2FyZ0NvdW50KDEpCi0g
ICAgICAgICwgbV9hbGxvd1NpbmdsZUFyZ3VtZW50KGZhbHNlKQotICAgICAgICAsIG1fdW5pdChD
U1NQYXJzZXI6OkZVbmtub3duKQotICAgIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnM7Ci0gICAgICAgIHVuc2lnbmVkIG5hbWVMZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotCi0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmdlc3ROYW1lTGVuZ3RoID0gMTI7Ci0gICAgICAgIFVDaGFy
IGNoYXJhY3RlckJ1ZmZlcltsb25nZXN0TmFtZUxlbmd0aF07Ci0gICAgICAgIGlmIChuYW1lLmlz
OEJpdCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdGQ6Om1pbihsb25nZXN0
TmFtZUxlbmd0aCwgbmFtZUxlbmd0aCk7Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFj
dGVyczggPSBuYW1lLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgY2hhcmFjdGVyQnVmZmVyW2ld
ID0gY2hhcmFjdGVyczhbaV07Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVyQnVm
ZmVyOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJh
Y3RlcnMxNigpOwotCi0gICAgICAgIHN3aXRjaCAobmFtZUxlbmd0aCkgewotICAgICAgICBjYXNl
IDU6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lOiBza2V3KC4KLSAgICAgICAgICAgIGlmICgo
KGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnUycpKQotICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdrJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0g
J0snKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnZScpIHx8IChjaGFy
YWN0ZXJzWzJdID09ICdFJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0g
J3cnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnVycpKQotICAgICAgICAgICAgICAgICYgKGNoYXJh
Y3RlcnNbNF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6
RkFuZ2xlOwotICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVB
cmd1bWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAg
Ly8gVmFsaWQgbmFtZXM6IHNrZXd4KCwgc2tld3koLCBzY2FsZSguCi0gICAgICAgICAgICBpZiAo
KGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzBd
ID09ICdTJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykg
fHwgKGNoYXJhY3RlcnNbMl0gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbM10gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnTCcpKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdF
JykpCi0gICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNV0gPT0gJygnKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9hbGxvd1NpbmdsZUFyZ3VtZW50ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAo
Y2hhcmFjdGVyc1swXSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1sxXSA9PSAnaycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdLJykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0g
J0UnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3cnKSB8
fCAoY2hhcmFjdGVyc1szXSA9PSAnVycpKQotICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFy
YWN0ZXJzWzVdID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s0XSA9PSAneScpIHx8IChjaGFyYWN0
ZXJzWzRdID09ICdZJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2Vy
OjpGQW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAg
ICAgLy8gVmFsaWQgbmFtZXM6IG1hdHJpeCgsIHJvdGF0ZSgsIHNjYWxleCgsIHNjYWxleSgsIHNj
YWxleiguCi0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ20nKSB8fCAoY2hhcmFj
dGVyc1swXSA9PSAnTScpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9
PSAnYScpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAg
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1sz
XSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnaScp
IHx8IChjaGFyYWN0ZXJzWzRdID09ICdJJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzVdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1gnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDExOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAoY2hhcmFjdGVy
c1swXSA9PSAnUicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9PSAn
bycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAgICAg
ICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1szXSA9
PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAndCcpIHx8
IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAg
ICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdz
JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKQotICAgICAg
ICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJz
WzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09
ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScpKQotICAg
ICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzZdID09ICcoJykpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNV0gPT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAn
WCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsK
LSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFy
YWN0ZXJzWzVdID09ICd5JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1knKSkgewotICAgICAgICAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVy
YXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s1XSA9PSAneicp
IHx8IChjaGFyYWN0ZXJzWzVdID09ICdaJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0
ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IDg6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogcm90YXRleCgsIHJvdGF0ZXkoLCByb3Rh
dGV6KCwgc2NhbGUzZCguCi0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8
fCAoY2hhcmFjdGVyc1swXSA9PSAnUycpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFj
dGVyc1sxXSA9PSAnYycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdDJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ0En
KSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2wnKSB8fCAoY2hh
cmFjdGVyc1szXSA9PSAnTCcpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0
XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdFJykpCi0gICAgICAgICAgICAgICAgICAg
ICYgKGNoYXJhY3RlcnNbNV0gPT0gJzMnKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1s2XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdEJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKGNoYXJhY3RlcnNbN10gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwotICAg
ICAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gNTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAncicpIHx8IChjaGFyYWN0ZXJz
WzBdID09ICdSJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09
ICdvJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ08nKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMl0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnVCcpKQotICAg
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnYScpIHx8IChjaGFyYWN0
ZXJzWzNdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRd
ID09ICd0JykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnRScpKQot
ICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzddID09ICcoJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNl0gPT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s2XSA9
PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xl
OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChj
aGFyYWN0ZXJzWzZdID09ICd5JykgfHwgKGNoYXJhY3RlcnNbNl0gPT0gJ1knKSkgewotICAgICAg
ICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAg
ICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1P
cGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s2XSA9PSAn
eicpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdaJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91
bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDk6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogbWF0cml4M2QoLCByb3RhdGUzZCgu
Ci0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ20nKSB8fCAoY2hhcmFjdGVyc1sw
XSA9PSAnTScpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9PSAnYScp
IHx8IChjaGFyYWN0ZXJzWzFdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAn
UicpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnaScpIHx8IChj
aGFyYWN0ZXJzWzRdID09ICdJJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzVdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1gnKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnMycpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzddID09ICdkJykgfHwgKGNoYXJhY3RlcnNbN10gPT0gJ0QnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoY2hhcmFjdGVyc1s4XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOwot
ICAgICAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gMzE7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAoY2hhcmFj
dGVyc1swXSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sx
XSA9PSAnbycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAgICAgICAgICAgICAg
ICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8fCAoY2hh
cmFjdGVyc1szXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVy
c1s0XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAgICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0Un
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnMycpCi0gICAg
ICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICdkJykgfHwgKGNoYXJhY3Rl
cnNbN10gPT0gJ0QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s4XSA9
PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwot
ICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUz
RFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gNzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOgotICAgICAg
ICAgICAgLy8gVmFsaWQgbmFtZTogdHJhbnNsYXRlKC4KLSAgICAgICAgICAgIGlmICgoKGNoYXJh
Y3RlcnNbMF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnVCcpKQotICAgICAgICAgICAg
ICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ1InKSkK
LSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJz
WzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ24nKSB8
fCAoY2hhcmFjdGVyc1szXSA9PSAnTicpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzRdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykpCi0gICAg
ICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1s2XSA9
PSAnQScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0JykgfHwgKGNo
YXJhY3RlcnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s4XSA9
PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAgICAgICAgICAgJiAoY2hh
cmFjdGVyc1s5XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2Vy
OjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2VudDsKLSAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOwot
ICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVBcmd1bWVudCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiB0cmFuc2xhdGV4
KCwgdHJhbnNsYXRleSgsIHRyYW5zbGF0ZXooLgotICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVy
c1swXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzBdID09ICdUJykpCi0gICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMV0gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnUicpKQotICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbMl0g
PT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnbicpIHx8IChj
aGFyYWN0ZXJzWzNdID09ICdOJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnUycpKQotICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzVdID09ICdsJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0wnKSkKLSAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s2XSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdB
JykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbN10gPT0gJ3QnKSB8fCAoY2hhcmFj
dGVyc1s3XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzhdID09ICdl
JykgfHwgKGNoYXJhY3RlcnNbOF0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAmIChjaGFyYWN0
ZXJzWzEwXSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzldID09
ICd4JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1gnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50OwotICAgICAg
ICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFyYWN0
ZXJzWzldID09ICd5JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1knKSkgewotICAgICAgICAgICAg
ICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50
OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KChjaGFyYWN0ZXJzWzldID09ICd6JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1onKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6
OkZQZXJjZW50OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMjoKLSAg
ICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBwZXJzcGVjdGl2ZSgsIHRyYW5zbGF0ZTNkKC4KLSAg
ICAgICAgICAgIGlmICgoY2hhcmFjdGVyc1swXSA9PSAncCcpIHx8IChjaGFyYWN0ZXJzWzBdID09
ICdQJykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKChjaGFyYWN0ZXJzWzFdID09ICdlJykgfHwg
KGNoYXJhY3RlcnNbMV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbMl0gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnUicpKQotICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdTJykp
Ci0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09ICdwJykgfHwgKGNoYXJh
Y3RlcnNbNF0gPT0gJ1AnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNV0g
PT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s2XSA9PSAnYycpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdDJykpCi0gICAg
ICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0JykgfHwgKGNoYXJhY3RlcnNb
N10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbOF0gPT0gJ2kn
KSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnSScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s5XSA9PSAndicpIHx8IChjaGFyYWN0ZXJzWzldID09ICdWJykpCi0gICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzEwXSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzEwXSA9
PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzExXSA9PSAnKCcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAg
ICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1Qn
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMV0gPT0gJ3InKSB8fCAo
Y2hhcmFjdGVyc1sxXSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICduJykgfHwgKGNoYXJhY3RlcnNbM10gPT0g
J04nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3MnKSB8
fCAoY2hhcmFjdGVyc1s0XSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykpCi0gICAgICAgICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzZdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbNl0g
PT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbN10gPT0gJ3Qn
KSB8fCAoY2hhcmFjdGVyc1s3XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1s4XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbOV0gPT0gJzMnKQotICAgICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1sxMF0gPT0gJ2QnKSB8fCAoY2hhcmFjdGVyc1sxMF0gPT0g
J0QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1sxMV0gPT0gJygnKSkg
ewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rkxlbmd0aCB8IENTU1BhcnNl
cjo6RlBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIG1f
YXJnQ291bnQgPSA1OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gLy8gZW5kIHN3aXRjaCAoKQotICAgIH0KLQotICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICB1bnNpZ25lZCBhcmdDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJnQ291bnQ7IH0KLSAg
ICBDU1NQYXJzZXI6OlVuaXRzIHVuaXQoKSBjb25zdCB7IHJldHVybiBtX3VuaXQ7IH0KLQotICAg
IGJvb2wgdW5rbm93bigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjsgfQotICAgIGJvb2wgaGFzQ29ycmVj
dEFyZ0NvdW50KHVuc2lnbmVkIGFyZ0NvdW50KSB7IHJldHVybiBtX2FyZ0NvdW50ID09IGFyZ0Nv
dW50IHx8IChtX2FsbG93U2luZ2xlQXJndW1lbnQgJiYgYXJnQ291bnQgPT0gMSk7IH0KLQotcHJp
dmF0ZToKLSAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9hcmdDb3VudDsKLSAgICBib29sIG1fYWxsb3dTaW5n
bGVBcmd1bWVudDsKLSAgICBDU1NQYXJzZXI6OlVuaXRzIG1fdW5pdDsKLX07Ci0KLVJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQotewotICAgIGlmICghbV92
YWx1ZUxpc3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gcGFy
c2VUcmFuc2Zvcm1WYWx1ZSgqdmFsdWUpOwotICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbGlzdC0+YXBwZW5k
KHBhcnNlZFRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi1SZWZQdHI8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1
ZS5mdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBFdmVyeSBwcmlt
aXRpdmUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgotICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZWUgaWYgdGhlIHNwZWNpZmllZCBw
cmltaXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9uSW5m
byBpbmZvKHZhbHVlLmZ1bmN0aW9uLT5uYW1lKTsKLSAgICBpZiAoaW5mby51bmtub3duKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFpbmZvLmhhc0NvcnJlY3RBcmdDb3Vu
dChhcmdzLT5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRoZSB0
cmFuc2Zvcm0gaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwgcHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkg
dHJhbnNmb3JtIG9wZXJhdGlvbnMuCi0gICAgLy8gV2UgY29sbGVjdCBhIGxpc3Qgb2YgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWVzLCB3aGVyZSBlYWNoIHZhbHVlIHNwZWNpZmllcyBhIHNpbmdsZSBv
cGVyYXRpb24uCi0KLSAgICAvLyBDcmVhdGUgdGhlIG5ldyBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZSBmb3IgdGhpcyBvcGVyYXRpb24gYW5kIGFkZCBpdCB0byBvdXIgbGlzdC4KLSAgICBhdXRvIHRy
YW5zZm9ybVZhbHVlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OmNyZWF0ZShpbmZvLnR5cGUo
KSk7Ci0KLSAgICAvLyBTbmFnIG91ciB2YWx1ZXMuCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIHVuc2lnbmVkIGFyZ051bWJlciA9IDA7Ci0gICAg
d2hpbGUgKGFyZ3VtZW50KSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIENTU1BhcnNlcjo6VW5pdHMgdW5p
dCA9IGluZm8udW5pdCgpOwotCi0gICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09
IDMpIHsKLSAgICAgICAgICAgIC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFuIGFuZ2xl
IHJhdGhlciB0aGFuIGEgYmFyZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENT
U1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMikgewotICAgICAgICAgICAg
Ly8gM3JkIHBhcmFtIG9mIHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIpIHsKLSAgICAgICAgICAg
IC8vIDFzdCBwYXJhbSBvZiB0cmFuc2xhdGVaKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAvLyAxc3QgcGFyYW0gb2YgcGVyc3BlY3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51
bWJlciAoZGVwcmVjYXRlZCkgb3IgbGVuZ3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0gZWxzZSBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdCwg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAv
LyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAg
ICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhcmd1bWVu
dC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBh
cmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICArK2FyZ051bWJlcjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gV1RGTW92ZSh0cmFuc2Zvcm1WYWx1ZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2Vy
Ojppc0JsZW5kTW9kZShDU1NWYWx1ZUlEIHZhbHVlSUQpCi17Ci0gICAgcmV0dXJuICh2YWx1ZUlE
ID49IENTU1ZhbHVlTXVsdGlwbHkgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUx1bWlub3NpdHkpCi0g
ICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwKLSAgICAgICAgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZU92ZXJsYXk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0NvbXBvc2l0ZU9wZXJh
dG9yKENTU1ZhbHVlSUQgdmFsdWVJRCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIENTU1ZhbHVlRGVz
dGluYXRpb24gYW5kIENTU1ZhbHVlTGlnaHRlciB3aGVuIHRoZSBDb21wb3NpdGluZyBzcGVjIHVw
ZGF0ZXMuCi0gICAgcmV0dXJuIHZhbHVlSUQgPj0gQ1NTVmFsdWVDbGVhciAmJiB2YWx1ZUlEIDw9
IENTU1ZhbHVlWG9yOwotfQotCi1zdGF0aWMgdm9pZCBmaWx0ZXJJbmZvRm9yTmFtZShjb25zdCBD
U1NQYXJzZXJTdHJpbmcmIG5hbWUsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRp
b25UeXBlJiBmaWx0ZXJUeXBlLCB1bnNpZ25lZCYgbWF4aW11bUFyZ3VtZW50Q291bnQpCi17Ci0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJncmF5c2NhbGUoIikp
Ci0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmls
dGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsICJzZXBpYSgiKSkKLSAgICAgICAgZmlsdGVyVHlwZSA9IFdlYktpdENTU0ZpbHRlclZh
bHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCAic2F0dXJhdGUoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImh1ZS1yb3RhdGUoIikpCi0g
ICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVy
T3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsICJpbnZlcnQoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsICJvcGFjaXR5KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImJyaWdodG5lc3MoIikpCi0gICAg
ICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiY29udHJhc3QoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobmFtZSwgImJsdXIoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAiZHJvcC1zaGFkb3coIikpIHsKLSAgICAg
ICAgZmlsdGVyVHlwZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uOwotICAgICAgICBtYXhpbXVtQXJndW1lbnRDb3VudCA9IDQ7ICAvLyB4LW9mZnNldCwg
eS1vZmZzZXQsIGJsdXItcmFkaXVzLCBjb2xvciAtLSBzcHJlYWQgYW5kIGluc2V0IHN0eWxlIG5v
dCBhbGxvd2VkLgotICAgIH0KLX0KLQotUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIGZpbHRlclR5cGUp
Ci17Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUo
ZmlsdGVyVHlwZSk7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsgICAgCi0gICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgIC8vIE9u
ZSBvcHRpb25hbCBhcmd1bWVudCwgMC0xIG9yIDAlLTEwMCUsIGlmIG1pc3NpbmcgdXNlIDEwMCUu
Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJl
ciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAg
ICAgICAgICAvLyBTYXR1cmF0ZSBhbmQgQ29udHJhc3QgYWxsb3cgdmFsdWVzIG92ZXIgMTAwJS4K
LSAgICAgICAgICAgIGlmIChmaWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1
cmF0ZUZpbHRlck9wZXJhdGlvbgotICAgICAgICAgICAgICAgICYmIGZpbHRlclR5cGUgIT0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgZG91YmxlIG1heEFsbG93ZWQgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDEwMC4wIDogMS4wOwotICAg
ICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSA+IG1heEFs
bG93ZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKFdURk1vdmUocHJpbWl0aXZlVmFs
dWUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAvLyBP
bmUgb3B0aW9uYWwgYXJndW1lbnQsIGlmIG1pc3NpbmcgdXNlIDEwMCUuCi0gICAgICAgIGlmIChh
cmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBp
ZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZh
bGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50LCBD
U1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9u
OiB7Ci0gICAgICAgIC8vIGh1ZS1yb3RhdGUoKSB0YWtlcyBvbmUgb3B0aW9uYWwgYW5nbGUuCi0g
ICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsK
LSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
QW5nbGUsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0
ZXJPcGVyYXRpb246IHsKLSAgICAgICAgLy8gQmx1ciB0YWtlcyBhIHNpbmdsZSBsZW5ndGguIFpl
cm8gcGFyYW1ldGVycyBhcmUgYWxsb3dlZC4KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RN
b2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgZmls
dGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAg
ICAgICAvLyBkcm9wLXNoYWRvdygpIHRha2VzIGEgc2luZ2xlIHNoYWRvdy4KLSAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gc2hhZG93VmFsdWVMaXN0ID0gcGFyc2VTaGFkb3coYXJncywgQ1NT
UHJvcGVydHlGaWx0ZXIpOwotICAgICAgICBpZiAoIXNoYWRvd1ZhbHVlTGlzdCB8fCBzaGFkb3dW
YWx1ZUxpc3QtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgCi0gICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoKnNoYWRvd1ZhbHVlTGlzdC0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoZmlsdGVyVmFsdWUpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGaWx0ZXIoQ1NT
UGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiByZXN1bHQp
Ci17Ci0gICAgLy8gVGhlIGZpbHRlciBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25hbCBwcmltaXRpdmVz
IHRoYXQgc3BlY2lmeSBpbmRpdmlkdWFsIG9wZXJhdGlvbnMuCi0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoYXV0byogdmFsdWUg
PSB2YWx1ZUxpc3QuY3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpKSB7
Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSAm
JiAodmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1ZS0+ZnVu
Y3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbjsKLQotICAgICAgICAvLyBTZWUgaWYgdGhl
IHNwZWNpZmllZCBwcmltaXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCi0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAg
YXV0byByZWZlcmVuY2VGaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUo
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICByZWZlcmVuY2VGaWx0ZXJWYWx1ZS0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKLSAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChXVEZNb3ZlKHJlZmVyZW5jZUZpbHRlclZhbHVlKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQYXJzZXJTdHJpbmcgbmFtZSA9IHZhbHVl
LT5mdW5jdGlvbi0+bmFtZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1heGltdW1Bcmd1bWVudENv
dW50ID0gMTsKLQotICAgICAgICAgICAgZmlsdGVySW5mb0Zvck5hbWUobmFtZSwgZmlsdGVyVHlw
ZSwgbWF4aW11bUFyZ3VtZW50Q291bnQpOwotCi0gICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSA9
PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCog
YXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYXJn
cykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWUgPSBwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1
bWVudHMoKmFyZ3MsIGZpbHRlclR5cGUpOwotICAgICAgICAgICAgaWYgKCFmaWx0ZXJWYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChmaWx0ZXJWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJlc3VsdCA9IFdURk1vdmUobGlzdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLXN0YXRpYyBib29sIHZhbGlkRmxvd05hbWUo
Y29uc3QgU3RyaW5nJiBmbG93TmFtZSkKLXsKLSAgICByZXR1cm4gIShlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImF1dG8iKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImRlZmF1bHQiKQotICAgICAgICB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImluaGVyaXQiKQotICAgICAgICB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImluaXRpYWwiKQotICAgICAg
ICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgIm5vbmUiKSk7Ci19
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotYm9vbCBDU1NQYXJz
ZXI6OmlzVGV4dEF1dG9zaXppbmdFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0LnRleHRBdXRvc2l6aW5nRW5hYmxlZDsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19H
UklEX0xBWU9VVCkKLWJvb2wgQ1NTUGFyc2VyOjppc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LmNzc0dyaWRMYXlvdXRFbmFibGVkOwotfQotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0KLS8vIG5vbmUgfCA8aWRlbnQ+Ci1ib29s
IENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0lu
dG8pOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
dmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgaW5wdXRQcm9wZXJ0eSA9IFN0cmluZyh2YWx1ZS0+c3Ry
aW5nKTsKLSAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICgh
dmFsaWRGbG93TmFtZShpbnB1dFByb3BlcnR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGlucHV0UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwg
aW1wb3J0YW50KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
LCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC13ZWJraXQtZmxvdy1m
cm9tOiBub25lIHwgPGlkZW50PgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmVnaW9uVGhyZWFkKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJvcElk
ID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb20pOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5z
aXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0
YW50KTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBTdHJpbmco
dmFsdWUtPnN0cmluZyk7Ci0gICAgICAgIGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghdmFsaWRGbG93TmFtZShpbnB1dFByb3BlcnR5KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUcmFu
c2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEs
IENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIENTU1Byb3BlcnR5SUQmIHByb3BJZDMsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1
ZTIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMykKLXsKLSAgICBwcm9wSWQxID0gcHJvcElkOwot
ICAgIHByb3BJZDIgPSBwcm9wSWQ7Ci0gICAgcHJvcElkMyA9IHByb3BJZDsKLSAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luKSB7Ci0gICAgICAgIHByb3BJZDEgPSBD
U1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblg7Ci0gICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0
eVRyYW5zZm9ybU9yaWdpblk7Ci0gICAgICAgIHByb3BJZDMgPSBDU1NQcm9wZXJ0eVRyYW5zZm9y
bU9yaWdpblo7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luOgotICAgICAgICBpZiAoIXBhcnNlVHJhbnNmb3JtT3JpZ2lu
U2hvcnRoYW5kKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMykpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIC8vIHBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kIGFkdmFuY2VzIHRo
ZSBtX3ZhbHVlTGlzdCBwb2ludGVyCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW5YOiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblgoKm1f
dmFsdWVMaXN0KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFu
c2Zvcm1PcmlnaW5ZOiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVM
aXN0KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1P
cmlnaW5aOiB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGlm
ICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlUGVyc3BlY3RpdmVPcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IENTU1Byb3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1
ZTIpCi17Ci0gICAgcHJvcElkMSA9IHByb3BJZDsKLSAgICBwcm9wSWQyID0gcHJvcElkOwotICAg
IGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpbikgewotICAgICAgICBw
cm9wSWQxID0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblg7Ci0gICAgICAgIHByb3BJZDIg
PSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBy
b3BJZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpbjoKLSAgICAgICAg
aWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgPiAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWx1ZSwgdmFs
dWUyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3Jp
Z2luWDogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5Z
OiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVMaXN0KTsKLSAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIENTU1BhcnNlcjo6YWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICAvLyBUaGUgdGV4dC1kZWNvcmF0aW9uLWxpbmUgcHJvcGVydHkgdGFrZXMgcHJpb3JpdHkgb3Zl
ciB0ZXh0LWRlY29yYXRpb24sIHVubGVzcyB0aGUgbGF0dGVyIGhhcyBpbXBvcnRhbnQgcHJpb3Jp
dHkgc2V0LgotICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiAmJiAh
aW1wb3J0YW50ICYmICFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX3BhcnNlZFByb3BlcnRpZXNbaV0uaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uTGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50KTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5v
bmUpIHsKLSAgICAgICAgYWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGlt
cG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKLSAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpc1ZhbGlk
ICYmIHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVCbGluazoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVUaHJvdWdoOgotICAgICAg
ICBjYXNlIENTU1ZhbHVlT3ZlcmxpbmU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVVbmRlcmxpbmU6
Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGV0
dGVycHJlc3M6Ci0jZW5kaWYKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzVmFsaWQpCi0g
ICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8g
VmFsdWVzIGFyZSBlaXRoZXIgdmFsaWQgb3IgaW4gc2hvcnRoYW5kIHNjb3BlLgotICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAmJiAoaXNWYWxpZCB8fCBpblNob3J0aGFuZCgpKSkgewotICAgICAgICBh
ZGRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RGVjb3JhdGlvblNraXAoYm9vbCBpbXBvcnRhbnQp
Ci17Ci0gICAgLy8gVGhlIHRleHQtZGVjb3JhdGlvbi1za2lwIHByb3BlcnR5IGhhcyBzeW50YXgg
Im5vbmUgfCBbIG9iamVjdHMgfHwgc3BhY2VzIHx8IGluayB8fCBlZGdlcyB8fCBib3gtZGVjb3Jh
dGlvbiBdIi4KLSAgICAvLyBIb3dldmVyLCBvbmx5ICdub25lJyBhbmQgJ2luaycgYXJlIGltcGxl
bWVudGVkIHlldCwgc28gd2Ugd2lsbCBwYXJzZSBzeW50YXggIm5vbmUgfCBpbmsiIGZvciBub3cu
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBkbyB7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgotICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUluazoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU9iamVjdHM6Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4
dCgpKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0
VW5kZXJsaW5lUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gVGhlIHRleHQtdW5k
ZXJsaW5lLXBvc2l0aW9uIHByb3BlcnR5IGhhcyBzaW50YXggImF1dG8gfCBhbHBoYWJldGljIHwg
WyB1bmRlciB8fCBbIGxlZnQgfCByaWdodCBdIF0iLgotICAgIC8vIEhvd2V2ZXIsIHZhbHVlcyAn
bGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHNvIHdlIHdpbGwgcGFy
c2Ugc2ludGF4Ci0gICAgLy8gImF1dG8gfCBhbHBoYWJldGljIHwgdW5kZXIiIGZvciBub3cuCi0g
ICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAg
c3dpdGNoICh2YWx1ZS5pZCkgewotICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAgIGNhc2UgQ1NT
VmFsdWVBbHBoYWJldGljOgotICAgIGNhc2UgQ1NTVmFsdWVVbmRlcjoKLSAgICAgICAgaWYgKG1f
dmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VGV4dEVtcGhhc2lzU3R5bGUoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgdmFsdWVM
aXN0U2l6ZSA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZpbGw7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZTsKLQotICAg
IGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFs
dWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIGlmIChm
aWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1Zh
bHVlKCp2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgaWYgKGZpbGwgfHwgc2hhcGUg
fHwgKHZhbHVlTGlzdFNpemUgIT0gMSAmJiAhaW5TaG9ydGhhbmQoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXNTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPcGVuIHx8IHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUZpbGxlZCkgewotICAgICAgICAgICAgaWYgKGZpbGwpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlRG90IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNpcmNsZSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVEb3VibGVDaXJjbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
VHJpYW5nbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU2VzYW1lKSB7Ci0gICAgICAgICAgICBp
ZiAoc2hhcGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2hh
cGUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpOwotICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoZmlsbCAmJiBzaGFwZSkgewotICAgICAgICBhdXRvIHBhcnNlZFZhbHVlcyA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgcGFyc2VkVmFsdWVz
LT5hcHBlbmQoZmlsbC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgcGFyc2VkVmFsdWVzLT5h
cHBlbmQoc2hhcGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIFdURk1vdmUocGFyc2VkVmFsdWVzKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChmaWxsKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGZp
bGwucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmIChzaGFwZSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlLCBzaGFwZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRFbXBoYXNpc1Bvc2l0aW9uKGJvb2wgaW1wb3J0YW50
KQotewotICAgIGJvb2wgZm91bmRPdmVyT3JVbmRlciA9IGZhbHNlOwotICAgIENTU1ZhbHVlSUQg
b3ZlclVuZGVyVmFsdWVJRCA9IENTU1ZhbHVlT3ZlcjsKLSAgICBib29sIGZvdW5kTGVmdE9yUmln
aHQgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIGxlZnRSaWdodFZhbHVlSUQgPSBDU1NWYWx1ZVJp
Z2h0OwotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlT3ZlcjoKLSAgICAgICAgICAg
IGlmIChmb3VuZE92ZXJPclVuZGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGZvdW5kT3Zlck9yVW5kZXIgPSB0cnVlOwotICAgICAgICAgICAgb3ZlclVuZGVy
VmFsdWVJRCA9IENTU1ZhbHVlT3ZlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVW5kZXI6Ci0gICAgICAgICAgICBpZiAoZm91bmRPdmVyT3JVbmRlcikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3VuZE92ZXJPclVuZGVyID0g
dHJ1ZTsKLSAgICAgICAgICAgIG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZVVuZGVyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZWZ0OgotICAgICAgICAgICAg
aWYgKGZvdW5kTGVmdE9yUmlnaHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgZm91bmRMZWZ0T3JSaWdodCA9IHRydWU7Ci0gICAgICAgICAgICBsZWZ0UmlnaHRW
YWx1ZUlEID0gQ1NTVmFsdWVMZWZ0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGlmIChmb3VuZExlZnRPclJpZ2h0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvdW5kTGVmdE9yUmlnaHQgPSB0
cnVlOwotICAgICAgICAgICAgbGVmdFJpZ2h0VmFsdWVJRCA9IENTU1ZhbHVlUmlnaHQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWZvdW5kT3Zlck9yVW5kZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKG92ZXJVbmRlclZhbHVlSUQpKTsKLSAgICBpZiAoZm91bmRM
ZWZ0T3JSaWdodCkKLSAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGxlZnRSaWdodFZhbHVlSUQpKTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uLCBXVEZNb3ZlKGxpc3Qp
LCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWVMaXN0
PiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCi17Ci0gICAgLy8gPGxlbmd0aD4gfCA8cGVy
Y2VudGFnZT4gfCBpbmhlcml0ICB3aGVuIENTUzNfVEVYVCBpcyBkaXNhYmxlZC4KLSAgICAvLyBb
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF0gJiYgWyAtd2Via2l0LWhhbmdpbmcgfHwgLXdlYmtp
dC1lYWNoLWxpbmUgXT8gfCBpbmhlcml0ICB3aGVuIENTUzNfVEVYVCBpcyBlbmFibGVkLgotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBi
b29sIGhhc0xlbmd0aE9yUGVyY2VudGFnZSA9IGZhbHNlOwotI2lmIEVOQUJMRShDU1MzX1RFWFQp
Ci0gICAgYm9vbCBoYXNFYWNoTGluZSA9IGZhbHNlOwotICAgIGJvb2wgaGFzSGFuZ2luZyA9IGZh
bHNlOwotI2VuZGlmCi0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIWhhc0xlbmd0
aE9yUGVyY2VudGFnZSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAgIGhhc0xl
bmd0aE9yUGVyY2VudGFnZSA9IHRydWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTM19URVhU
KQotICAgICAgICBlbHNlIGlmICghaGFzRWFjaExpbmUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVl
V2Via2l0RWFjaExpbmUpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEVhY2hMaW5l
KSk7Ci0gICAgICAgICAgICBoYXNFYWNoTGluZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAo
IWhhc0hhbmdpbmcgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykgewotICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlV2Via2l0SGFuZ2luZykpOwotICAgICAgICAgICAgaGFzSGFu
Z2luZyA9IHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotCi0gICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUobGlzdCk7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUhhbmdpbmdQdW5jdHVhdGlvbihib29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1
ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5SGFuZ2luZ1B1bmN0dWF0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAg
IGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgc3RkOjpiaXRzZXQ8bnVtQ1NTVmFsdWVLZXl3b3Jk
cz4gc2VlblZhbHVlczsKLSAgICB3aGlsZSAoaXNWYWxpZCAmJiB2YWx1ZSkgewotICAgICAgICBp
ZiAoc2VlblZhbHVlc1t2YWx1ZS0+aWRdCi0gICAgICAgICAgICB8fCAodmFsdWUtPmlkID09IENT
U1ZhbHVlQWxsb3dFbmQgJiYgc2VlblZhbHVlc1tDU1NWYWx1ZUZvcmNlRW5kXSkKLSAgICAgICAg
ICAgIHx8ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb3JjZUVuZCAmJiBzZWVuVmFsdWVzW0NTU1Zh
bHVlQWxsb3dFbmRdKSkgewotICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUFsbG93RW5kOgotICAgICAgICBjYXNlIENTU1ZhbHVlRmlyc3Q6Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVGb3JjZUVuZDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxhc3Q6
Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBzZWVuVmFsdWVzLnNl
dCh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXNWYWxpZCkKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVmFsdWVzIGFyZSBlaXRoZXIgdmFsaWQgb3IgaW4g
c2hvcnRoYW5kIHNjb3BlLgotICAgIGlmIChsaXN0LT5sZW5ndGgoKSAmJiBpc1ZhbGlkKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SGFuZ2luZ1B1bmN0dWF0aW9uLCBXVEZNb3Zl
KGxpc3QpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lQm94Q29udGFp
bihib29sIGltcG9ydGFudCkKLXsKLSAgICBMaW5lQm94Q29udGFpbiBsaW5lQm94Q29udGFpbiA9
IExpbmVCb3hDb250YWluTm9uZTsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KSkgewotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQmxvY2spIHsKLSAgICAgICAg
ICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWluQmxvY2spCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJv
eENvbnRhaW5CbG9jazsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJ
bmxpbmUpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWlu
SW5saW5lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVC
b3hDb250YWluIHw9IExpbmVCb3hDb250YWluSW5saW5lOwotICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUZvbnQpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFp
biAmIExpbmVCb3hDb250YWluRm9udCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbkZvbnQ7Ci0gICAgICAg
IH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlR2x5cGhzKSB7Ci0gICAgICAgICAgICBp
ZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkdseXBocykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29u
dGFpbkdseXBoczsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXBs
YWNlZCkgewotICAgICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRhaW5S
ZXBsYWNlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsaW5l
Qm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpblJlcGxhY2VkOwotICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUlubGluZUJveCkgewotICAgICAgICAgICAgaWYgKGxpbmVC
b3hDb250YWluICYgTGluZUJveENvbnRhaW5JbmxpbmVCb3gpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5J
bmxpbmVCb3g7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5pdGlh
bExldHRlcikgewotICAgICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRh
aW5Jbml0aWFsTGV0dGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGxpbmVCb3hDb250YWluIHw9IExpbmVCb3hDb250YWluSW5pdGlhbExldHRlcjsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFs
aW5lQm94Q29udGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbiwgQ1NTTGluZUJveENvbnRhaW5WYWx1ZTo6
Y3JlYXRlKGxpbmVCb3hDb250YWluKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0JiBzZXR0
aW5ncykKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIC8vIEZlYXR1cmUgdGFnIG5hbWUgY29tZXMgZmlyc3QKLSAgICBpZiAodmFsdWUt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBGb250RmVhdHVyZVRhZyB0YWc7Ci0gICAgaWYgKHZhbHVlLT5zdHJpbmcubGVu
Z3RoKCkgIT0gdGFnLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0YWcuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTGltaXRzIHRo
ZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFt
ZSBydWxlcyBkZWZpZW5kIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSB2YWx1ZS0+c3RyaW5nW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVy
IDwgMHgyMCB8fCBjaGFyYWN0ZXIgPiAweDdFKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB0YWdbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKLSAgICB9Ci0KLSAgICBp
bnQgdGFnVmFsdWUgPSAxOwotICAgIC8vIEZlYXR1cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6
IDxpbnRlZ2VyPiB8IG9uIHwgb2ZmCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIGlmICh2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPmlzSW50ICYmIHZhbHVlLT5mVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgdGFnVmFsdWUgPSBjbGFtcFRvSW50ZWdlcih2YWx1ZS0+ZlZhbHVlKTsK
LSAgICAgICAgICAgIGlmICh0YWdWYWx1ZSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPZmYpIHsK
LSAgICAgICAgICAgIHRhZ1ZhbHVlID0gdmFsdWUtPmlkID09IENTU1ZhbHVlT247Ci0gICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNldHRpbmdz
LmFwcGVuZChDU1NGb250RmVhdHVyZVZhbHVlOjpjcmVhdGUoV1RGTW92ZSh0YWcpLCB0YWdWYWx1
ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmVh
dHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6
ZSgpID09IDEgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwp
IHsKLSAgICAgICAgYXV0byBub3JtYWxWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzLCBXVEZNb3ZlKG5vcm1hbFZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgYXV0byBzZXR0aW5ncyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
Q29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsK
LSAgICAgICAgaWYgKCFwYXJzZUZvbnRGZWF0dXJlVGFnKHNldHRpbmdzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBJZiB0aGUgbGlzdCBpc24ndCBwYXJzZWQgZnVs
bHksIHRoZSBjdXJyZW50IHZhbHVlIHNob3VsZCBiZSBjb21tYS4KLSAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgIWlzQ29tbWEodmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2V0dGluZ3Mt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZlYXR1cmVT
ZXR0aW5ncywgV1RGTW92ZShzZXR0aW5ncyksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1
cmUsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGln
YXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb250
ZXh0dWFsQWx0ZXJuYXRlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0KLSAgICBm
b3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVl
OyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzID0gRm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVDb21tb25MaWdhdHVyZXM6Ci0gICAgICAgICAgICBjb21tb25MaWdhdHVyZXMgPSBGb250
VmFyaWFudExpZ2F0dXJlczo6WWVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgICAgICBkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAg
ICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExp
Z2F0dXJlczoKLSAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXMgPSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUhp
c3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlQ29udGV4dHVhbDoKLSAgICAgICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0g
Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU1ZhbHVlTm9Db250ZXh0dWFsOgotICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0
ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmtub3duSXNGYWlsdXJlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChjb21tb25MaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnRMaWdhdHVyZXM6OlllczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0g
ICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpObzoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdh
dHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChoaXN0b3JpY2Fs
TGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAg
IHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b0hpc3RvcmljYWxMaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChjb250ZXh0dWFsQWx0ZXJuYXRlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJl
czo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRleHR1YWwpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0gICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9Db250ZXh0dWFsKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICgh
dmFsdWVzLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuICF1bmtub3duSXNGYWlsdXJlOwotCi0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcywgV1RGTW92ZSh2
YWx1ZXMpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnROdW1lcmljKGJvb2wgaW1wb3J0YW50LCBib29s
IHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljRmlndXJlIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOwotICAg
IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgc3BhY2luZyA9IEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiBmcmFjdGlvbiA9
IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbCBvcmRpbmFsID0gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOwot
ICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvID0gRm9udFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlTGluaW5nTnVtczoKLSAgICAg
ICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlT2xkc3R5bGVOdW1zOgot
ICAgICAgICAgICAgZmlndXJlID0gRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51
bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRp
b25hbE51bXM6Ci0gICAgICAgICAgICBzcGFjaW5nID0gRm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zzo6UHJvcG9ydGlvbmFsTnVtYmVyczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgICAgICBzcGFjaW5nID0gRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zOgotICAgICAgICAgICAgZnJhY3Rpb24g
PSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnM6Ci0gICAg
ICAgICAgICBmcmFjdGlvbiA9IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJh
Y3Rpb25zOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFs
OgotICAgICAgICAgICAgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU2xhc2hlZFplcm86Ci0g
ICAgICAgICAgICBzbGFzaGVkWmVybyA9IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZ
ZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlm
ICh1bmtub3duSXNGYWlsdXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChmaWd1cmUp
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoK
LSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5pbmdOdW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnM6Ci0gICAgICAg
IHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlT2xkc3R5bGVOdW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoc3BhY2luZykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zzo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9y
dGlvbmFsTnVtcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRhYnVsYXJO
dW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoZnJhY3Rpb24pIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rp
b25zOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFj
dGlvbnM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9ucykpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9yZGluYWwpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3Jk
aW5hbCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNsYXNoZWRaZXJv
KSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6
Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2xhc2hlZFplcm8pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gIXVua25v
d25Jc0ZhaWx1cmU7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVt
ZXJpYywgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRFYXN0QXNpYW4oYm9v
bCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNpdCkKLXsKLSAg
ICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAg
ICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggd2lkdGgg
PSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRFYXN0
QXNpYW5SdWJ5IHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDsKLQotICAg
IGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFs
dWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1Zh
bHVlSmlzNzg6Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM3ODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlz
ODM6Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM4MzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6Ci0g
ICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzMDQ6Ci0gICAgICAg
ICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU2ltcGxpZmllZDoKLSAgICAgICAg
ICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRyYWRpdGlvbmFsOgotICAg
ICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZ1bGxXaWR0aDoK
LSAgICAgICAgICAgIHdpZHRoID0gRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGg6
Ci0gICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRp
b25hbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlUnVieToKLSAg
ICAgICAgICAgIHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHVua25vd25Jc0Zh
aWx1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6Ci0gICAgICAgIHZhbHVl
cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSmlzNzgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQ6OkppczgzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczgzKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5
MDoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6Ci0gICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlSmlzMDQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2ltcGxpZmll
ZCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6VHJhZGl0aW9uYWw6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVHJhZGl0aW9uYWwpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoICh3aWR0aCkgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
RnVsbFdpZHRoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aDo6UHJvcG9ydGlvbmFsOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVByb3BvcnRpb25h
bFdpZHRoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAocnVieSkgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM6Ci0gICAgICAgIHZhbHVl
cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlUnVieSkpOwotICAgIH0KLQotICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuICF1bmtub3duSXNGYWlsdXJlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250VmFyaWFudEVhc3RBc2lhbiwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQsIGlt
cGxpY2l0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9u
dFZhcmlhbnQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgQ1NTUHJvcGVydHlGb250VmFyaWFudCk7Ci0gICAgaWYgKCFwYXJzZUZvbnRWYXJpYW50TGln
YXR1cmVzKGltcG9ydGFudCwgZmFsc2UsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdmFsdWVMaXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgaWYgKCFwYXJzZUZvbnRW
YXJpYW50TnVtZXJpYyhpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgIGlmICghcGFy
c2VGb250VmFyaWFudEVhc3RBc2lhbihpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotCi0g
ICAgRm9udFZhcmlhbnRQb3NpdGlvbiBwb3NpdGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246Ok5v
cm1hbDsKLSAgICBGb250VmFyaWFudENhcHMgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFs
OwotICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5hdGVzID0gRm9udFZhcmlhbnRBbHRl
cm5hdGVzOjpOb3JtYWw7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsK
LSAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQp
IHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICBjYXNl
IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICBjYXNlIENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0
dXJlczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVDb250ZXh0dWFsOgotICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db250ZXh0dWFsOgotICAgICAg
ICBjYXNlIENTU1ZhbHVlTGluaW5nTnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU9sZHN0eWxl
TnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbE51bXM6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVUYWJ1bGFyTnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFsRnJh
Y3Rpb25zOgotICAgICAgICBjYXNlIENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9uczoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZU9yZGluYWw6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbGFzaGVkWmVybzoK
LSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczc4OgotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzODM6
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM5MDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczA0
OgotICAgICAgICBjYXNlIENTU1ZhbHVlU2ltcGxpZmllZDoKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZVRyYWRpdGlvbmFsOgotICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgotICAgICAgICBj
YXNlIENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGg6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVSdWJ5
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdWI6Ci0gICAgICAg
ICAgICBwb3NpdGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6Ci0gICAgICAgICAgICBwb3Np
dGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6Ci0gICAgICAgICAgICBjYXBzID0g
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlQWxsU21hbGxDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fw
czo6QWxsU21hbGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVBl
dGl0ZUNhcHM6Ci0gICAgICAgICAgICBjYXBzID0gRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6Ci0g
ICAgICAgICAgICBjYXBzID0gRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVVuaWNhc2U6Ci0gICAgICAgICAgICBjYXBz
ID0gRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgICAgIGNhcHMgPSBGb250VmFyaWFu
dENhcHM6OlRpdGxpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUhpc3RvcmljYWxGb3JtczoKLSAgICAgICAgICAgIGFsdGVybmF0ZXMgPSBGb250VmFyaWFudEFs
dGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChwb3NpdGlvbikgewotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9y
bWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNj
cmlwdDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9u
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVN1YiksIGltcG9ydGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50UG9zaXRpb24sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3VwZXIpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChjYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENh
cHM6OlNtYWxsOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fw
cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVTbWFsbENhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGxTbWFsbENhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUGV0aXRlQ2FwcyksIGltcG9y
dGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
QWxsUGV0aXRlOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fw
cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBbGxQZXRpdGVDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmljYXNlKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgotICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUaXRsaW5nQ2FwcyksIGltcG9y
dGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGFsdGVy
bmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1z
OgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50QWx0ZXJuYXRlcywg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVI
aXN0b3JpY2FsRm9ybXMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkV2ls
bENoYW5nZUFuaW1hdGFibGVGZWF0dXJlKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlLmlkID09IENTU1ZhbHVl
QXV0byB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUFsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKHZhbHVlSXNDU1NLZXl3b3JkKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGNzc1Byb3BlcnR5SUQodmFsdWUuc3RyaW5nKSA9PSBDU1NQcm9wZXJ0eVdp
bGxDaGFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VXaWxsQ2hhbmdlKGJvb2wgaW1wb3J0YW50KQotewotICAg
IGF1dG8gd2lsbENoYW5nZVByb3BlcnR5VmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21t
YVNlcGFyYXRlZCgpOwotCi0gICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwotICAgIGZvciAo
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZh
bHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAoZXhwZWN0Q29tbWEpIHsK
LSAgICAgICAgICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBleHBlY3RDb21tYSA9IGZhbHNlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoIWlzVmFsaWRXaWxsQ2hhbmdlQW5pbWF0YWJsZUZlYXR1cmUo
KnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlOwotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlU2Nyb2xs
UG9zaXRpb24gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGVudHMpCi0gICAgICAgICAgICBj
c3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGlm
IChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgICAgICBjc3NW
YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBy
b3BlcnR5SUQpOwotICAgICAgICAgICAgZWxzZSAvLyBUaGlzIG1pZ2h0IGJlIGEgcHJvcGVydHkg
d2UgZG9uJ3Qgc3VwcG9ydC4KLSAgICAgICAgICAgICAgICBjc3NWYWx1ZSA9IGNyZWF0ZVByaW1p
dGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aWxsQ2hhbmdl
UHJvcGVydHlWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAg
ICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2lsbENoYW5nZSwgV1RGTW92ZSh3aWxsQ2hhbmdlUHJvcGVydHlWYWx1ZXMpLCBpbXBvcnRh
bnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBDYWxjdWxhdGlvblBl
cm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFs
dWUpKTsKLSAgICAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlv
bi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICphcmdzLCByYW5nZSk7Ci19Ci0KLSNkZWZpbmUgRU5EX1RPS0VOIDAK
LQotI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIKLQotZW51bSBDaGFyYWN0ZXJUeXBlIHsKLSAgICAv
LyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNoLgotCi0gICAgLy8gVGhlIGZpcnN0IDQgdHlwZXMg
bXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBhcyB0aGV5Ci0gICAgLy8gcmVwcmVzZW50IHRoZSBh
bGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZpZXIuCi0gICAgQ2hhcmFjdGVyQ2FzZWxlc3NVLAot
ICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLSAgICBDaGFyYWN0ZXJOdW1iZXIsCi0gICAg
Q2hhcmFjdGVyRGFzaCwKLQotICAgIENoYXJhY3Rlck90aGVyLAotICAgIENoYXJhY3Rlck51bGws
Ci0gICAgQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLSAgICBDaGFyYWN0ZXJFbmRDb25kaXRpb25RdWVy
eSwKLSAgICBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKLSAgICBDaGFyYWN0ZXJRdW90ZSwKLSAgICBD
aGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCi0gICAgQ2hhcmFjdGVySGFzaG1hcmssCi0gICAgQ2hh
cmFjdGVyRG9sbGFyLAotICAgIENoYXJhY3RlckFzdGVyaXNrLAotICAgIENoYXJhY3RlclBsdXMs
Ci0gICAgQ2hhcmFjdGVyRG90LAotICAgIENoYXJhY3RlclNsYXNoLAotICAgIENoYXJhY3Rlckxl
c3MsCi0gICAgQ2hhcmFjdGVyQXQsCi0gICAgQ2hhcmFjdGVyQmFja1NsYXNoLAotICAgIENoYXJh
Y3RlclhvciwKLSAgICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKLSAgICBDaGFyYWN0ZXJUaWxkZSwK
LX07Ci0KLS8vIDEyOCBBU0NJSSBjb2Rlcwotc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgdHlw
ZXNPZkFTQ0lJQ2hhcmFjdGVyc1sxMjhdID0gewotLyogICAwIC0gTnVsbCAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck51bGwsCi0vKiAgIDEgLSBTdGFydCBvZiBIZWFkaW5nICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgIDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgIDMgLSBFbmQgb2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDQg
LSBFbmQgb2YgVHJhbnNtLiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDUgLSBFbnF1aXJ5
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDYgLSBBY2tub3dsZWRnbWVudCAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDcgLSBCZWxsICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCi0vKiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCi0vKiAgIDkgLSBIb3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwK
LS8qICAxMCAtIExpbmUgRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAotLyog
IDExIC0gVmVydGljYWwgVGFiICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDEyIC0gRm9y
bSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCi0vKiAgMTMgLSBDYXJyaWFn
ZSBSZXR1cm4gICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLS8qICAxNCAtIFNoaWZ0IE91dCAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxNSAtIFNoaWZ0IEluICAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxNiAtIERhdGEgTGluZSBFc2NhcGUgICAqLyBDaGFyYWN0
ZXJPdGhlciwKLS8qICAxNyAtIERldmljZSBDb250cm9sIDEgICAqLyBDaGFyYWN0ZXJPdGhlciwK
LS8qICAxOCAtIERldmljZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxOSAt
IERldmljZSBDb250cm9sIDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMCAtIERldmljZSBD
b250cm9sIDQgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMSAtIE5lZ2F0aXZlIEFjay4gICAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMiAtIFN5bmNocm9ub3VzIElkbGUgICAqLyBDaGFy
YWN0ZXJPdGhlciwKLS8qICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKLS8qICAyNCAtIENhbmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAy
NSAtIEVuZCBvZiBNZWRpdW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyNiAtIFN1YnN0
aXR1dGUgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyNyAtIEVzY2FwZSAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyOCAtIEZpbGUgU2VwYXJhdG9yICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKLS8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKLS8qICAzMCAtIFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8q
ICAzMSAtIFVuaXQgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAzMiAtIFNw
YWNlICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAotLyogIDMzIC0gISAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKLS8qICAzNCAtICIgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90ZSwKLS8qICAzNSAtICMgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJIYXNobWFyaywKLS8qICAzNiAtICQgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJEb2xsYXIsCi0vKiAgMzcgLSAlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgMzggLSAmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgMzkgLSAnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCi0vKiAgNDAg
LSAoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNDEgLSApICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCi0vKiAgNDIgLSAqICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyQXN0ZXJpc2ssCi0vKiAgNDMgLSArICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyUGx1cywKLS8qICA0NCAtICwgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKLS8qICA0NSAtIC0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEYXNo
LAotLyogIDQ2IC0gLiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckRvdCwKLS8qICA0NyAt
IC8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKLS8qICA0OCAtIDAgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNDkgLSAxICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDUwIC0gMiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck51bWJlciwKLS8qICA1MSAtIDMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJO
dW1iZXIsCi0vKiAgNTIgLSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAot
LyogIDUzIC0gNSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NCAt
IDYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTUgLSA3ICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDU2IC0gOCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NyAtIDkgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTggLSA6ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAgNTkgLSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kQ29uZGl0
aW9uUXVlcnksCi0vKiAgNjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVzcywK
LS8qICA2MSAtID0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2MiAt
ID4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2MyAtID8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2NCAtIEAgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJBdCwKLS8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAotLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzIgLSBIICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDczIC0gSSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NCAtIEogICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzUgLSBLICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc2IC0gTCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NyAtIE0gICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzggLSBOICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc5IC0gTyAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4MCAtIFAgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODEgLSBRICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDgyIC0gUiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4MyAtIFMgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODQgLSBUICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg1IC0gVSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckNhc2VsZXNzVSwKLS8qICA4NiAtIFYgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODcgLSBXICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg4IC0gWCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4OSAtIFkgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgOTAgLSBaICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDkxIC0gWyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDkyIC0gXCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlckJhY2tTbGFzaCwKLS8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKLS8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJY
b3IsCi0vKiAgOTUgLSBfICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAotLyogIDk2IC0gYCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyog
IDk3IC0gYSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8q
ICA5OCAtIGIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0v
KiAgOTkgLSBjICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAot
LyogMTAwIC0gZCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
LS8qIDEwMSAtIGUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
Ci0vKiAxMDIgLSBmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAotLyogMTAzIC0gZyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKLS8qIDEwNCAtIGggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCi0vKiAxMDUgLSBpICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAotLyogMTA2IC0gaiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKLS8qIDEwNyAtIGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCi0vKiAxMDggLSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAotLyogMTA5IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKLS8qIDExMCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCi0vKiAxMTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAotLyogMTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKLS8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCi0vKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
Q2FzZWxlc3NVLAotLyogMTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKLS8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCi0vKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
RW5kQ29uZGl0aW9uUXVlcnksCi0vKiAxMjQgLSB8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyVmVydGljYWxCYXIsCi0vKiAxMjUgLSB9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAxMjYgLSB+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyVGlsZGUsCi0v
KiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi19OwotCi0vLyBV
dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIENTUyB0b2tlbml6ZXIuCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzQ1NTTGV0dGVyKENoYXJh
Y3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMTI4IHx8IHR5
cGVzT2ZBU0NJSUNoYXJhY3RlcnNbY2hhcmFjdGVyXSA8PSBDaGFyYWN0ZXJEYXNoOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NT
U0VzY2FwZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVy
ID49ICcgJyAmJiBjaGFyYWN0ZXIgIT0gMTI3OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1VSSUxldHRlcihDaGFyYWN0ZXJUeXBl
IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnKicgJiYgY2hhcmFjdGVy
ICE9IDEyNykgfHwgKGNoYXJhY3RlciA+PSAnIycgJiYgY2hhcmFjdGVyIDw9ICcmJykgfHwgY2hh
cmFjdGVyID09ICchJzsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goQ2hhcmFjdGVyVHlw
ZSogY3VycmVudENoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGN1cnJlbnRD
aGFyYWN0ZXJbMF0pIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPT0gJ18nIHx8IGN1cnJlbnRDaGFy
YWN0ZXJbMF0gPj0gMTI4Ci0gICAgICAgIHx8IChjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcg
JiYgaXNDU1NFc2NhcGUoY3VycmVudENoYXJhY3RlclsxXSkpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0N1c3RvbVByb3BlcnR5
SWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyKQotewotICAgIHJldHVy
biBpc0FTQ0lJQWxwaGEoY3VycmVudENoYXJhY3RlclswXSkgfHwgY3VycmVudENoYXJhY3Rlclsw
XSA9PSAnXycgfHwgY3VycmVudENoYXJhY3RlclswXSA+PSAxMjgKLSAgICAgICAgfHwgKGN1cnJl
bnRDaGFyYWN0ZXJbMF0gPT0gJ1xcJyAmJiBpc0NTU0VzY2FwZShjdXJyZW50Q2hhcmFjdGVyWzFd
KSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGlu
ZSBib29sIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSogY3NzU3RyaW5nLCBj
b25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKLXsKLSAgICAvLyBDb21wYXJlIGFuIGNoYXJhY3Rl
ciBtZW1vcnkgZGF0YSB3aXRoIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KLSAgICBkbyB7Ci0g
ICAgICAgIC8vIFRoZSBpbnB1dCBtdXN0IGJlIHBhcnQgb2YgYW4gaWRlbnRpZmllciBpZiBjb25z
dGFudENoYXIgb3IgY29uc3RTdHJpbmcKLSAgICAgICAgLy8gY29udGFpbnMgJy0nLiBPdGhlcndp
c2UgdG9BU0NJSUxvd2VyVW5jaGVja2VkKCdccicpIHdvdWxkIGJlIGVxdWFsIHRvICctJy4KLSAg
ICAgICAgQVNTRVJUKCgqY29uc3RhbnRTdHJpbmcgPj0gJ2EnICYmICpjb25zdGFudFN0cmluZyA8
PSAneicpIHx8ICpjb25zdGFudFN0cmluZyA9PSAnLScpOwotICAgICAgICBBU1NFUlQoKmNvbnN0
YW50U3RyaW5nICE9ICctJyB8fCBpc0NTU0xldHRlcigqY3NzU3RyaW5nKSk7Ci0gICAgICAgIGlm
ICh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoKmNzc1N0cmluZysrKSAhPSAoKmNvbnN0YW50U3RyaW5n
KyspKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gd2hpbGUgKCpjb25zdGFudFN0
cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzRXF1YWxUb0NTU0Nhc2VTZW5zaXRpdmVJZGVu
dGlmaWVyKENoYXJhY3RlclR5cGUqIHN0cmluZywgY29uc3QgY2hhciogY29uc3RhbnRTdHJpbmcp
Ci17Ci0gICAgZG8gewotICAgICAgICBpZiAoKnN0cmluZysrICE9ICpjb25zdGFudFN0cmluZysr
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gd2hpbGUgKCpjb25zdGFudFN0cmlu
Zyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIENoYXJhY3RlclR5cGUqIGNoZWNrQW5kU2tpcEVzY2FwZShDaGFyYWN0ZXJU
eXBlKiBjdXJyZW50Q2hhcmFjdGVyKQotewotICAgIC8vIFJldHVybnMgd2l0aCAwLCBpZiBlc2Nh
cGUgY2hlY2sgaXMgZmFpbGVkLiBPdGhlcndpc2UKLSAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhl
IGZvbGxvd2luZyBjaGFyYWN0ZXIuCi0gICAgQVNTRVJUKCpjdXJyZW50Q2hhcmFjdGVyID09ICdc
XCcpOwotCi0gICAgKytjdXJyZW50Q2hhcmFjdGVyOwotICAgIGlmICghaXNDU1NFc2NhcGUoKmN1
cnJlbnRDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpc0FT
Q0lJSGV4RGlnaXQoKmN1cnJlbnRDaGFyYWN0ZXIpKSB7Ci0gICAgICAgIGludCBsZW5ndGggPSA2
OwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAg
ICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAtLWxlbmd0
aCk7Ci0KLSAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1ZW5j
ZS4KLSAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXI7
Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyICsgMTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIENoYXJhY3RlclR5cGUqIHNr
aXBXaGl0ZVNwYWNlKENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXIpCi17Ci0gICAgd2hp
bGUgKGlzSFRNTFNwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAgKytjdXJyZW50Q2hh
cmFjdGVyOwotICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOwotfQotCi0vLyBNYWluIENTUyB0
b2tlbml6ZXIgZnVuY3Rpb25zLgotCi10ZW1wbGF0ZSA8PgotTENoYXIqIENTU1BhcnNlclN0cmlu
Zzo6Y2hhcmFjdGVyczxMQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzOCgpOyB9Ci0K
LXRlbXBsYXRlIDw+Ci1VQ2hhciogQ1NTUGFyc2VyU3RyaW5nOjpjaGFyYWN0ZXJzPFVDaGFyPigp
IGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlcnMxNigpOyB9Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
TENoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXI8TENoYXI+KCkKLXsKLSAgICByZXR1
cm4gbV9jdXJyZW50Q2hhcmFjdGVyODsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSBVQ2hhciom
IENTU1BhcnNlcjo6Y3VycmVudENoYXJhY3RlcjxVQ2hhcj4oKQotewotICAgIHJldHVybiBtX2N1
cnJlbnRDaGFyYWN0ZXIxNjsKLX0KLQotVUNoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0
ZXIxNigpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnRDaGFyYWN0ZXIxNikgewotICAgICAgICBtX2Rh
dGFTdGFydDE2ID0gc3RkOjptYWtlX3VuaXF1ZTxVQ2hhcltdPihtX2xlbmd0aCk7Ci0gICAgICAg
IG1fY3VycmVudENoYXJhY3RlcjE2ID0gbV9kYXRhU3RhcnQxNi5nZXQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
TENoYXIqIENTU1BhcnNlcjo6dG9rZW5TdGFydDxMQ2hhcj4oKQotewotICAgIHJldHVybiBtX3Rv
a2VuU3RhcnQucHRyODsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSBVQ2hhciogQ1NTUGFyc2Vy
Ojp0b2tlblN0YXJ0PFVDaGFyPigpCi17Ci0gICAgcmV0dXJuIG1fdG9rZW5TdGFydC5wdHIxNjsK
LX0KLQotQ1NTUGFyc2VyOjpMb2NhdGlvbiBDU1NQYXJzZXI6OmN1cnJlbnRMb2NhdGlvbigpCi17
Ci0gICAgTG9jYXRpb24gbG9jYXRpb247Ci0gICAgbG9jYXRpb24ubGluZU51bWJlciA9IG1fdG9r
ZW5TdGFydExpbmVOdW1iZXI7Ci0gICAgbG9jYXRpb24uY29sdW1uTnVtYmVyID0gbV90b2tlblN0
YXJ0Q29sdW1uTnVtYmVyOwotCi0gICAgQVNTRVJUKGxvY2F0aW9uLmxpbmVOdW1iZXIgPj0gMCk7
Ci0gICAgQVNTRVJUKGxvY2F0aW9uLmNvbHVtbk51bWJlciA+PSAwKTsKLQotICAgIGlmIChsb2Nh
dGlvbi5saW5lTnVtYmVyID09IG1fc2hlZXRTdGFydExpbmVOdW1iZXIpCi0gICAgICAgIGxvY2F0
aW9uLmNvbHVtbk51bWJlciArPSBtX3NoZWV0U3RhcnRDb2x1bW5OdW1iZXI7Ci0KLSAgICBpZiAo
aXM4Qml0U291cmNlKCkpCi0gICAgICAgIGxvY2F0aW9uLnRva2VuLmluaXQodG9rZW5TdGFydDxM
Q2hhcj4oKSwgY3VycmVudENoYXJhY3RlcjxMQ2hhcj4oKSAtIHRva2VuU3RhcnQ8TENoYXI+KCkp
OwotICAgIGVsc2UKLSAgICAgICAgbG9jYXRpb24udG9rZW4uaW5pdCh0b2tlblN0YXJ0PFVDaGFy
PigpLCBjdXJyZW50Q2hhcmFjdGVyPFVDaGFyPigpIC0gdG9rZW5TdGFydDxVQ2hhcj4oKSk7Ci0K
LSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjppc0lkZW50aWZpZXJTdGFydCgpCi17Ci0gICAg
Ly8gQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIGlzIHN0YXJ0ZWQuCi0gICAgcmV0dXJuIGlz
SWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKCgqY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBl
PigpICE9ICctJykgPyBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgOiBjdXJyZW50
Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgKyAxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIENoYXJhY3RlclR5cGUqIGNoZWNrQW5kU2tp
cFN0cmluZyhDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgcXVvdGUpCi17Ci0g
ICAgLy8gUmV0dXJucyB3aXRoIDAsIGlmIHN0cmluZyBjaGVjayBpcyBmYWlsZWQuIE90aGVyd2lz
ZQotICAgIC8vIGl0IHJldHVybnMgd2l0aCB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gVGhpcyBp
cyBuZWNlc3NhcnkKLSAgICAvLyBzaW5jZSB3ZSBjYW5ub3QgcmV2ZXJ0IGVzY2FwZSBzZXF1ZW5j
ZXMsIHRodXMgc3RyaW5ncwotICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5n
LgotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJh
Y3RlciA9PSBxdW90ZSkpIHsKLSAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nl
c3NmdWwuCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudENoYXJhY3RlciArIDE7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFVOTElLRUxZKCEqY3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwgdXAgdG8gZW5kIG9mIGlucHV0Lgot
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKFVOTElLRUxZKCpjdXJyZW50Q2hhcmFjdGVyIDw9ICdccicgJiYgKCpjdXJyZW50Q2hhcmFj
dGVyID09ICdcbicgfHwgKCpjdXJyZW50Q2hhcmFjdGVyIHwgMHgxKSA9PSAnXHInKSkpIHsKLSAg
ICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGZhaWxlZCBmb3IgY2hhcmFjdGVyICdcbics
ICdcZicgb3IgJ1xyJy4KLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKExJS0VMWShjdXJyZW50Q2hhcmFjdGVyWzBdICE9ICdcXCcpKQotICAgICAg
ICAgICAgKytjdXJyZW50Q2hhcmFjdGVyOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFj
dGVyWzFdID09ICdcbicgfHwgY3VycmVudENoYXJhY3RlclsxXSA9PSAnXGYnKQotICAgICAgICAg
ICAgY3VycmVudENoYXJhY3RlciArPSAyOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFj
dGVyWzFdID09ICdccicpCi0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyICs9IGN1cnJlbnRD
aGFyYWN0ZXJbMl0gPT0gJ1xuJyA/IDMgOiAyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGVja0FuZFNraXBFc2NhcGUoY3VycmVudENoYXJhY3Rlcik7
Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXIpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotdW5zaWduZWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShDaGFyYWN0ZXJU
eXBlKiYgc3JjKQotewotICAgIEFTU0VSVCgqc3JjID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoc3Jj
WzFdKSk7Ci0KLSAgICB1bnNpZ25lZCB1bmljb2RlID0gMDsKLQotICAgICsrc3JjOwotICAgIGlm
IChpc0FTQ0lJSGV4RGlnaXQoKnNyYykpIHsKLQotICAgICAgICBpbnQgbGVuZ3RoID0gNjsKLQot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUgPDwgNCkgKyB0b0FT
Q0lJSGV4VmFsdWUoKnNyYysrKTsKLSAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJ
SUhleERpZ2l0KCpzcmMpKTsKLQotICAgICAgICBpZiAodW5pY29kZSA+IFVDSEFSX01BWF9WQUxV
RSkKLSAgICAgICAgICAgIHVuaWNvZGUgPSByZXBsYWNlbWVudENoYXJhY3RlcjsKLQotICAgICAg
ICAvLyBPcHRpb25hbCBzcGFjZSBhZnRlciB0aGUgZXNjYXBlIHNlcXVlbmNlLgotICAgICAgICBp
ZiAoaXNIVE1MU3BhY2UoKnNyYykpCi0gICAgICAgICAgICArK3NyYzsKLQotICAgICAgICByZXR1
cm4gdW5pY29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKmN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSsrOwotfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpV
bmljb2RlVG9DaGFyczxMQ2hhcj4oTENoYXIqJiByZXN1bHQsIHVuc2lnbmVkIHVuaWNvZGUpCi17
Ci0gICAgQVNTRVJUKHVuaWNvZGUgPD0gMHhmZik7Ci0gICAgKnJlc3VsdCA9IHVuaWNvZGU7Ci0K
LSAgICArK3Jlc3VsdDsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6
VW5pY29kZVRvQ2hhcnM8VUNoYXI+KFVDaGFyKiYgcmVzdWx0LCB1bnNpZ25lZCB1bmljb2RlKQot
ewotICAgIC8vIFJlcGxhY2UgdW5pY29kZSB3aXRoIGEgc3Vycm9nYXRlIHBhaXJzIHdoZW4gaXQg
aXMgYmlnZ2VyIHRoYW4gMHhmZmZmCi0gICAgaWYgKFUxNl9MRU5HVEgodW5pY29kZSkgPT0gMikg
ewotICAgICAgICAqcmVzdWx0KysgPSBVMTZfTEVBRCh1bmljb2RlKTsKLSAgICAgICAgKnJlc3Vs
dCA9IFUxNl9UUkFJTCh1bmljb2RlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgKnJlc3VsdCA9IHVu
aWNvZGU7Ci0KLSAgICArK3Jlc3VsdDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFNyY0NoYXJh
Y3RlclR5cGUsIHR5cGVuYW1lIERlc3RDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0
Q2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgYm9vbCYgaGFzRXNjYXBlKQotewotICAgIGhhc0VzY2Fw
ZSA9IGZhbHNlOwotICAgIGRvIHsKLSAgICAgICAgaWYgKExJS0VMWSgqc3JjICE9ICdcXCcpKQot
ICAgICAgICAgICAgKnJlc3VsdCsrID0gKnNyYysrOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGhhc0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBzYXZl
ZEVzY2FwZVN0YXJ0ID0gc3JjOwotICAgICAgICAgICAgdW5zaWduZWQgdW5pY29kZSA9IHBhcnNl
RXNjYXBlPFNyY0NoYXJhY3RlclR5cGU+KHNyYyk7Ci0gICAgICAgICAgICBpZiAodW5pY29kZSA+
IDB4ZmYgJiYgc2l6ZW9mKERlc3RDaGFyYWN0ZXJUeXBlKSA9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgc3JjID0gc2F2ZWRFc2NhcGVTdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBVbmljb2RlVG9DaGFycyhyZXN1bHQsIHVuaWNv
ZGUpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIoc3JjWzBdKSB8fCAoc3Jj
WzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoc3JjWzFdKSkpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpwYXJzZUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgQ1NTUGFyc2Vy
U3RyaW5nJiByZXN1bHRTdHJpbmcsIGJvb2wmIGhhc0VzY2FwZSkKLXsKLSAgICBDaGFyYWN0ZXJU
eXBlKiBzdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBpZiAo
VU5MSUtFTFkoIXBhcnNlSWRlbnRpZmllckludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSwgcmVzdWx0LCBoYXNFc2NhcGUpKSkgewotICAgICAgICAvLyBGb3VuZCBhbiBl
c2NhcGUgd2UgY291bGRuJ3QgaGFuZGxlIHdpdGggOCBiaXRzLCBjb3B5IHdoYXQgaGFzIGJlZW4g
cmVjb2duaXplZCBhbmQgY29udGludWUKLSAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsK
LSAgICAgICAgVUNoYXIqJiByZXN1bHQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAg
ICBVQ2hhciogc3RhcnQxNiA9IHJlc3VsdDE2OwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAg
IGZvciAoOyBpIDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdDE2W2ld
ID0gc3RhcnRbaV07Ci0KLSAgICAgICAgcmVzdWx0MTYgKz0gaTsKLQotICAgICAgICBwYXJzZUlk
ZW50aWZpZXJJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIHJlc3Vs
dDE2LCBoYXNFc2NhcGUpOwotCi0gICAgICAgIHJlc3VsdCArPSByZXN1bHQxNiAtIHN0YXJ0MTY7
Ci0gICAgICAgIHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0MTYsIHJlc3VsdDE2IC0gc3RhcnQxNik7
Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0
LCByZXN1bHQgLSBzdGFydCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJU
eXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6
cGFyc2VTdHJpbmdJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0Q2hhcmFjdGVy
VHlwZSomIHJlc3VsdCwgVUNoYXIgcXVvdGUpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCpzcmMgPT0gcXVvdGUpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcg
cGFyc2luZyBpcyBkb25lLgotICAgICAgICAgICAgKytzcmM7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoVU5MSUtFTFkoISpzcmMpKSB7Ci0gICAgICAg
ICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBkb25lLCBidXQgZG9uJ3QgYWR2YW5jZSBwb2ludGVy
IGlmIGF0IHRoZSBlbmQgb2YgaW5wdXQuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBBU1NFUlQoKnNyYyA+ICdccicgfHwgKCpzcmMgPCAnXG4nICYmICpzcmMp
IHx8ICpzcmMgPT0gJ1x2Jyk7Ci0KLSAgICAgICAgaWYgKExJS0VMWShzcmNbMF0gIT0gJ1xcJykp
Ci0gICAgICAgICAgICAqcmVzdWx0KysgPSAqc3JjKys7Ci0gICAgICAgIGVsc2UgaWYgKHNyY1sx
XSA9PSAnXG4nIHx8IHNyY1sxXSA9PSAnXGYnKQotICAgICAgICAgICAgc3JjICs9IDI7Ci0gICAg
ICAgIGVsc2UgaWYgKHNyY1sxXSA9PSAnXHInKQotICAgICAgICAgICAgc3JjICs9IHNyY1syXSA9
PSAnXG4nID8gMyA6IDI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3JjQ2hhcmFjdGVy
VHlwZSogc2F2ZWRFc2NhcGVTdGFydCA9IHNyYzsKLSAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNv
ZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwotICAgICAgICAgICAgaWYg
KHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihEZXN0Q2hhcmFjdGVyVHlwZSkgPT0gMSkgewotICAg
ICAgICAgICAgICAgIHNyYyA9IHNhdmVkRXNjYXBlU3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMocmVz
dWx0LCB1bmljb2RlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNl
cjo6cGFyc2VTdHJpbmcoQ2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgQ1NTUGFyc2VyU3RyaW5nJiBy
ZXN1bHRTdHJpbmcsIFVDaGFyIHF1b3RlKQotewotICAgIENoYXJhY3RlclR5cGUqIHN0YXJ0ID0g
Y3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgaWYgKFVOTElLRUxZKCFw
YXJzZVN0cmluZ0ludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSwgcmVz
dWx0LCBxdW90ZSkpKSB7Ci0gICAgICAgIC8vIEZvdW5kIGFuIGVzY2FwZSB3ZSBjb3VsZG4ndCBo
YW5kbGUgd2l0aCA4IGJpdHMsIGNvcHkgd2hhdCBoYXMgYmVlbiByZWNvZ25pemVkIGFuZCBjb250
aW51ZQotICAgICAgICBBU1NFUlQoaXM4Qml0U291cmNlKCkpOwotICAgICAgICBVQ2hhciomIHJl
c3VsdDE2ID0gY3VycmVudENoYXJhY3RlcjE2KCk7Ci0gICAgICAgIFVDaGFyKiBzdGFydDE2ID0g
cmVzdWx0MTY7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCByZXN1bHQg
LSBzdGFydDsgKytpKQotICAgICAgICAgICAgcmVzdWx0MTZbaV0gPSBzdGFydFtpXTsKLQotICAg
ICAgICByZXN1bHQxNiArPSBpOwotCi0gICAgICAgIHBhcnNlU3RyaW5nSW50ZXJuYWwoY3VycmVu
dENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCByZXN1bHQxNiwgcXVvdGUpOwotCi0gICAgICAg
IHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0MTYsIHJlc3VsdDE2IC0gc3RhcnQxNik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydCwgcmVzdWx0IC0g
c3RhcnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBi
b29sIENTU1BhcnNlcjo6ZmluZFVSSShDaGFyYWN0ZXJUeXBlKiYgc3RhcnQsIENoYXJhY3RlclR5
cGUqJiBlbmQsIFVDaGFyJiBxdW90ZSkKLXsKLSAgICBzdGFydCA9IHNraXBXaGl0ZVNwYWNlKGN1
cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgCi0gICAgaWYgKCpzdGFydCA9
PSAnIicgfHwgKnN0YXJ0ID09ICdcJycpIHsKLSAgICAgICAgcXVvdGUgPSAqc3RhcnQrKzsKLSAg
ICAgICAgZW5kID0gY2hlY2tBbmRTa2lwU3RyaW5nKHN0YXJ0LCBxdW90ZSk7Ci0gICAgICAgIGlm
ICghZW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHF1b3RlID0gMDsKLSAgICAgICAgZW5kID0gc3RhcnQ7Ci0gICAgICAgIHdoaWxlIChpc1VSSUxl
dHRlcigqZW5kKSkgewotICAgICAgICAgICAgaWYgKExJS0VMWSgqZW5kICE9ICdcXCcpKQotICAg
ICAgICAgICAgICAgICsrZW5kOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZW5kID0gY2hlY2tBbmRTa2lwRXNjYXBlKGVuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbmQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGVuZCA9IHNraXBXaGl0ZVNwYWNlKGVuZCk7Ci0gICAgaWYgKCpl
bmQgIT0gJyknKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0
Q2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VVUklJbnRlcm5hbChT
cmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0Q2hhcmFjdGVyVHlwZSomIGRlc3QsIFVDaGFyIHF1
b3RlKQotewotICAgIGlmIChxdW90ZSkgewotICAgICAgICBBU1NFUlQocXVvdGUgPT0gJyInIHx8
IHF1b3RlID09ICdcJycpOwotICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdJbnRlcm5hbChzcmMs
IGRlc3QsIHF1b3RlKTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGlzVVJJTGV0dGVyKCpzcmMp
KSB7Ci0gICAgICAgIGlmIChMSUtFTFkoKnNyYyAhPSAnXFwnKSkKLSAgICAgICAgICAgICpkZXN0
KysgPSAqc3JjKys7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgdW5pY29k
ZSA9IHBhcnNlRXNjYXBlPFNyY0NoYXJhY3RlclR5cGU+KHNyYyk7Ci0gICAgICAgICAgICBpZiAo
dW5pY29kZSA+IDB4ZmYgJiYgc2l6ZW9mKFNyY0NoYXJhY3RlclR5cGUpID09IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMoZGVzdCwg
dW5pY29kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBh
cnNlVVJJKENTU1BhcnNlclN0cmluZyYgc3RyaW5nKQotewotICAgIENoYXJhY3RlclR5cGUqIHVy
aVN0YXJ0OwotICAgIENoYXJhY3RlclR5cGUqIHVyaUVuZDsKLSAgICBVQ2hhciBxdW90ZTsKLSAg
ICBpZiAoIWZpbmRVUkkodXJpU3RhcnQsIHVyaUVuZCwgcXVvdGUpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgQ2hhcmFjdGVyVHlwZSogZGVzdCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSA9IHVyaVN0YXJ0OwotICAgIGlmIChMSUtFTFkocGFyc2VVUklJbnRlcm5hbChj
dXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIGRlc3QsIHF1b3RlKSkpCi0gICAgICAg
IHN0cmluZy5pbml0KHVyaVN0YXJ0LCBkZXN0IC0gdXJpU3RhcnQpOwotICAgIGVsc2UgewotICAg
ICAgICAvLyBBbiBlc2NhcGUgc2VxdWVuY2Ugd2FzIGVuY291bnRlcmVkIHRoYXQgY2FuJ3QgYmUg
c3RvcmVkIGluIDggYml0cy4KLSAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVy
IHRvIHRoZSBzdGFydCBvZiB0aGUgVVJJIGFuZCByZS1wYXJzZSB3aXRoCi0gICAgICAgIC8vIGEg
MTYtYml0IGRlc3RpbmF0aW9uLgotICAgICAgICBBU1NFUlQoaXM4Qml0U291cmNlKCkpOwotICAg
ICAgICBVQ2hhciogdXJpU3RhcnQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAgICBj
dXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSB1cmlTdGFydDsKLSAgICAgICAgYm9v
bCByZXN1bHQgPSBwYXJzZVVSSUludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlw
ZT4oKSwgY3VycmVudENoYXJhY3RlcjE2KCksIHF1b3RlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgICAgIHN0cmluZy5pbml0KHVyaVN0YXJ0MTYsIGN1cnJl
bnRDaGFyYWN0ZXIxNigpIC0gdXJpU3RhcnQxNik7Ci0gICAgfQotCi0gICAgY3VycmVudENoYXJh
Y3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gdXJpRW5kICsgMTsKLSAgICBtX3Rva2VuID0gVVJJOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1Bh
cnNlcjo6cGFyc2VVbmljb2RlUmFuZ2UoKQotewotICAgIENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
ciA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSArIDE7Ci0gICAgaW50IGxlbmd0
aCA9IDY7Ci0gICAgQVNTRVJUKCpjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPT0g
JysnKTsKLQotICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmNoYXJhY3RlcikgJiYgbGVuZ3Ro
KSB7Ci0gICAgICAgICsrY2hhcmFjdGVyOwotICAgICAgICAtLWxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBpZiAobGVuZ3RoICYmICpjaGFyYWN0ZXIgPT0gJz8nKSB7Ci0gICAgICAgIC8vIEF0IG1vc3Qg
NSBoZXggZGlnaXQgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgotICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgIC0tbGVuZ3RoOwotICAgICAgICB9
IHdoaWxlICgqY2hhcmFjdGVyID09ICc/JyAmJiBsZW5ndGgpOwotICAgICAgICBjdXJyZW50Q2hh
cmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGlmIChsZW5ndGggPCA2KSB7Ci0gICAgICAgIC8vIEF0IGxlYXN0IG9u
ZSBoZXggZGlnaXQuCi0gICAgICAgIGlmIChjaGFyYWN0ZXJbMF0gPT0gJy0nICYmIGlzQVNDSUlI
ZXhEaWdpdChjaGFyYWN0ZXJbMV0pKSB7Ci0gICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIGRh
c2ggYW5kIGEgaGV4IGRpZ2l0LgotICAgICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAg
ICBsZW5ndGggPSA2OwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY2hhcmFj
dGVyOwotICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0KCpj
aGFyYWN0ZXIpKTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3Rl
clR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlTnRoQ2hpbGQoKQotewotICAgIENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlciA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAgIHdoaWxlIChp
c0FTQ0lJRGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgICsrY2hhcmFjdGVyOwotICAgIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKCpjaGFyYWN0ZXIsICduJykpIHsKLSAgICAgICAgY3Vy
cmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyICsgMTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZEV4dHJh
KCkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBza2lwV2hpdGVTcGFjZShjdXJy
ZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkpOwotICAgIGlmICgqY2hhcmFjdGVyICE9ICcr
JyAmJiAqY2hhcmFjdGVyICE9ICctJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hh
cmFjdGVyID0gc2tpcFdoaXRlU3BhY2UoY2hhcmFjdGVyICsgMSk7Ci0gICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAg
ICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIp
KTsKLQotICAgIGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IGNoYXJhY3RlcjsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVHlwZVRva2VuKGludCBsZW5n
dGgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCA+IDApOwotICAgIENoYXJhY3RlclR5cGUqIG5hbWUg
PSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBzd2l0Y2ggKGxlbmd0aCkgewot
ICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsw
XSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKSB7Ci0gICAgICAgICAgICBtX3Rv
a2VuID0gTk9URlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAndScpICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMl0sICdsJykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAndicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwobmFtZVsxXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdy
JykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBWQVJGVU5DVElPTjsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICBp
ZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYycpICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMl0sICdlJykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBDVUVGVU5DVElPTjsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NT
X1NFTEVDVE9SU19MRVZFTDQpCi0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMF0sICdkJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnaScp
ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3InKSkgewotICAgICAgICAg
ICAgbV90b2tlbiA9IERJUkZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIDQ6Ci0gICAg
ICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJjYWxjIikpIHsKLSAgICAgICAg
ICAgIG1fdG9rZW4gPSBDQUxDRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibGFuZyIp
KSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gTEFOR0ZVTkNUSU9OOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0g
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJyb2xlIikpIHsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBST0xFRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUsICJob3N0IikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBIT1NURlVOQ1RJT047Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjYXNlIDc6Ci0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJt
YXRjaGVzIikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNQVRDSEVTRlVOQ1RJT047Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lLCAic2xvdHRlZCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gU0xP
VFRFREZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSA5OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lLCAibnRoLWNoaWxkIikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEhDSElMREZVTkNUSU9OUzsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1v
ZGU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjYXNlIDExOgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmll
cihuYW1lLCAibnRoLW9mLXR5cGUiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50
aENoaWxkTW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgMTQ6Ci0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUsICJudGgtbGFzdC1jaGlsZCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIQ0hJTERGVU5DVElPTlM7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hp
bGRNb2RlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgY2FzZSAxNjoKLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5n
TW9kZSA9IE50aENoaWxkTW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9wYXJz
aW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSk7Ci0gICAgQ2hhcmFjdGVyVHlwZSogbmFtZSA9IHRv
a2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAgIGlmIChsZW5ndGggPT0gMykgewotICAg
ICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG5hbWVbMl0sICdkJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfQU5EOwot
ICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICduJykg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJ
QV9OT1Q7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwobmFtZVsxXSwgJ24nKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
M10sICd5JykpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfT05MWTsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpkZXRlY3ROdW1iZXJUb2tlbihDaGFyYWN0ZXJUeXBlKiB0eXBlLCBpbnQgbGVuZ3RoKQotewot
ICAgIEFTU0VSVChsZW5ndGggPiAwKTsKLQotICAgIHN3aXRjaCAodG9BU0NJSUxvd2VyVW5jaGVj
a2VkKHR5cGVbMF0pKSB7Ci0gICAgY2FzZSAnYyc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMiAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCi0gICAgICAgICAgICBt
X3Rva2VuID0gQ01TOwotICAgICAgICBlbHNlIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdoJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gQ0hT
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdkJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9
PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdnJykpCi0gICAgICAgICAgICBtX3Rva2VuID0g
REVHUzsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotICAgICAgICBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3AnKSkgewotICAgICAgICAgICAgaWYgKGxlbmd0
aCA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0
IHRoZSBuYW1lIG9mIHRoaXMgdW5pdCBvbiB3d3ctc3R5bGUuCi0gICAgICAgICAgICAgICAgLy8g
S2VlcCB0aGlzIGNvbXBpbGUgdGltZSBndWFyZCBpbiBwbGFjZSB1bnRpbCB0aGF0IGlzIHJlc29s
dmVkLgotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEyTWF5LzA5MTUuaHRtbAotICAgICAgICAgICAgICAgIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdwJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0eXBlWzNdLCAneCcpKQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBQ
WDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdjJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbScpKQot
ICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBDTTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVuZ3RoID09IDMgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnaScp
KQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBJOwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnZSc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwg
J20nKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRU1TOwotICAgICAgICAgICAgZWxzZSBp
ZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAneCcpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBFWFM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSAnZic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKHR5cGVbMV0sICdyJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gRlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlICdnJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSA0ICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3InKQotICAgICAgICAgICAgICAgICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbM10sICdkJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gR1JBRFM7Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2gnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAneicpKQotICAgICAgICAgICAgbV90
b2tlbiA9IEhFUlRaOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdpJzoKLSAgICAgICAg
aWYgKGxlbmd0aCA9PSAyICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ24n
KSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNh
c2UgJ2snOgotICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh0eXBlWzFdLCAnaCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwg
J3onKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBLSEVSVFo7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgJ20nOgotICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgIGlm
IChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCi0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IE1NUzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwodHlwZVsxXSwgJ3MnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTVNFQ1M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAncCc6Ci0gICAgICAgIGlm
IChsZW5ndGggPT0gMikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwodHlwZVsxXSwgJ3gnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUFhTOwotICAgICAg
ICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndCcpKQot
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQVFM7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdjJykpCi0gICAgICAgICAgICAgICAgbV90
b2tlbiA9IFBDUzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdyJzoK
LSAgICAgICAgaWYgKGxlbmd0aCA9PSAzKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYScpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ2QnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkFEUzsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdtJykpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IFJFTVM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAn
cyc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTRUNT
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKGxlbmd0aCA9
PSA0ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQotICAgICAgICAg
ICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ3InKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICduJykpCi0gICAgICAgICAgICBtX3Rva2Vu
ID0gVFVSTlM7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlICd2JzoKLSAgICAgICAgaWYgKGxl
bmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0
eXBlWzFdLCAndycpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBWVzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2gnKSkKLSAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gVkg7Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnaScpICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwgJ24nKSkKLSAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gVk1JTjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICd4Jykp
Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFZNQVg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ18nICYmIGxlbmd0
aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18nICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlw
ZVsyXSwgJ3EnKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVszXSwgJ2UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbNF0sICdtJykp
Ci0gICAgICAgICAgICBtX3Rva2VuID0gUUVNUzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJz
ZXI6OmRldGVjdERhc2hUb2tlbihpbnQgbGVuZ3RoKQotewotICAgIENoYXJhY3RlclR5cGUqIG5h
bWUgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBpZiAobGVuZ3RoID09IDEx
KSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneScp
ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtYW4iKSkKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBBTllGVU5DVElPTjsKLSAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ24nKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAxLCAid2Via2l0LW1pIikpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUlORlVOQ1RJ
T047Ci0gICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMF0s
ICd4JykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1tYSIpKQot
ICAgICAgICAgICAgbV90b2tlbiA9IE1BWEZVTkNUSU9OOwotICAgIH0gZWxzZSBpZiAobGVuZ3Ro
ID09IDEyICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtY2FsYyIp
KQotICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihp
bnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBuYW1lID0g
dG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotICAgIEFTU0VSVChuYW1lWzBdID09ICdAJyAm
JiBsZW5ndGggPj0gMik7Ci0KLSAgICAvLyBjaGFyc2V0LCBmb250LWZhY2UsIGltcG9ydCwgbWVk
aWEsIG5hbWVzcGFjZSwgcGFnZSwgc3VwcG9ydHMsCi0gICAgLy8gLXdlYmtpdC1rZXlmcmFtZXMs
IGFuZCAtd2Via2l0LW1lZGlhcXVlcnkgYXJlIG5vdCBhZmZlY3RlZCBieSBoYXNFc2NhcGUuCi0g
ICAgc3dpdGNoICh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQobmFtZVsxXSkpIHsKLSAgICBjYXNlICdi
JzoKLSAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBzd2l0Y2ggKGxlbmd0aCkgewotICAgICAgICBjYXNlIDEyOgotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGNhc2UgMTM6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihu
YW1lICsgMiwgIm90dG9tLXJpZ2h0IikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRP
TVJJR0hUX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE0OgotICAg
ICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1jZW50
ZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NQ0VOVEVSX1NZTTsKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE5OgotICAgICAgICAgICAgaWYgKGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIDIwOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKLSAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2MnOgotICAgICAgICBpZiAo
bGVuZ3RoID09IDggJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImhhcnNldCIp
KQotICAgICAgICAgICAgbV90b2tlbiA9IENIQVJTRVRfU1lNOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlICdmJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAib250LWZhY2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBG
T05UX0ZBQ0VfU1lNOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdpJzoKLSAgICAgICAg
aWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9y
dCIpKSB7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7Ci0gICAg
ICAgICAgICBtX3Rva2VuID0gSU1QT1JUX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlICdrJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZXlmcmFtZXMiKSkKLSAgICAgICAgICAgIG1fdG9rZW4g
PSBLRVlGUkFNRVNfU1lNOwotICAgICAgICBlbHNlIGlmIChsZW5ndGggPT0gMTQgJiYgIWhhc0Vz
Y2FwZSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZXlmcmFtZS1ydWxlIikp
Ci0gICAgICAgICAgICBtX3Rva2VuID0gS0VZRlJBTUVfUlVMRV9TWU07Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhc2UgJ2wnOgotICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChsZW5ndGggPT0gOSkgewotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJlZnQtdG9wIikpCi0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IExFRlRUT1BfU1lNOwotICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAx
MikgewotICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNv
dWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCi0gICAgICAgICAgICBpZiAo
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzExXSwgJ2UnKSAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IExFRlRNSURETEVfU1lNOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzExXSwgJ20nKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAiZWZ0LWJvdHRvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRCT1RUT01f
U1lNOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ20nOgotICAgICAg
ICBpZiAobGVuZ3RoID09IDYgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImVk
aWEiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwotICAg
ICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiYW1lc3BhY2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4g
PSBOQU1FU1BBQ0VfU1lNOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdwJzoKLSAgICAg
ICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJh
Z2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBQQUdFX1NZTTsKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSAncic6Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCkgewotICAgICAgICAgICAgaWYgKGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJpZ2h0LXRvcCIpKQotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBSSUdIVFRPUF9TWU07Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEz
KSB7Ci0gICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291
bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KLSAgICAgICAgICAgIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnZScpICYmIGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJpZ2h0LW1pZGRsIikpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IFJJR0hUTUlERExFX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1l
ICsgMiwgImlnaHQtYm90dG8iKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRCT1RU
T01fU1lNOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3MnOgotICAg
ICAgICBpZiAobGVuZ3RoID09IDkgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwg
InVwcG9ydHMiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IFN1cHBvcnRzTW9kZTsK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19TWU07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FzZSAndCc6Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAgY2FzZSA5
OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1s
ZWZ0IikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRfU1lNOwotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRv
Q1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9wLXJpZ2h0IikpCi0gICAgICAgICAgICAgICAgbV90
b2tlbiA9IFRPUFJJR0hUX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNl
IDExOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJv
cC1jZW50ZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QQ0VOVEVSX1NZTTsKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1sZWZ0LWNvcm5lciIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDIsICJvcC1yaWdodC1jb3JuZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gVE9QUklHSFRDT1JORVJfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJy0nOgotICAgICAgICBzd2l0Y2ggKGxlbmd0
aCkgewotICAgICAgICBjYXNlIDEzOgotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1ydWxlIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjYXNlIDE0OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3Rl
ciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgotICAgICAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxM10sICdzJykgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1kZWNsIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9ERUNMU19TWU07Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAnZScpICYmIGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtdmFsdSIpKQotICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBXRUJLSVRfVkFMVUVfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNh
c2UgMTU6Ci0gICAgICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKG5hbWVbMTRdLCAnbicpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIo
bmFtZSArIDIsICJ3ZWJraXQtcmVnaW8iKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VC
S0lUX1JFR0lPTl9SVUxFX1NZTTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNhc2UgMTc6Ci0gICAgICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFt
ZVsxNl0sICdyJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1z
ZWxlY3RvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9TRUxFQ1RPUl9TWU07
Ci0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxNl0sICd0JykgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC12aWV3cG9yIikpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IFdFQktJVF9WSUVXUE9SVF9SVUxFX1NZTTsKLSNlbmRpZgotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNhc2UgMTg6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFtZXMiKSkKLSAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gS0VZRlJBTUVTX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc2l6ZXNhdHRyIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9TSVpFU0FUVFJfU1lNOwotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGNhc2UgMTk6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgIndlYmtpdC1tZWRpYXF1ZXJ5IikpIHsKLSAgICAgICAgICAgICAgICBt
X3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9
IFdFQktJVF9NRURJQVFVRVJZX1NZTTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIDIyOgotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFtZS1ydWxlIikpCi0g
ICAgICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FX1JVTEVfU1lNOwotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNhc2UgMjc6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1zdXBwb3J0cy1jb25kaXRpb24iKSkgewotICAg
ICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBTdXBwb3J0c01vZGU7Ci0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFdFQktJVF9TVVBQT1JUU19DT05ESVRJT05fU1lNOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0U3Vw
cG9ydHNUb2tlbihpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChtX3BhcnNpbmdNb2RlID09IFN1
cHBvcnRzTW9kZSk7Ci0gICAgQ2hhcmFjdGVyVHlwZSogbmFtZSA9IHRva2VuU3RhcnQ8Q2hhcmFj
dGVyVHlwZT4oKTsKLQotICAgIGlmIChsZW5ndGggPT0gMikgewotICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwobmFtZVsxXSwgJ3InKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19PUjsK
LSAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAzKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMF0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzFdLCAnbicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2QnKSkK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19BTkQ7Ci0gICAgICAgIGVsc2UgaWYgKGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzJdLCAndCcpKQotICAgICAgICAgICAgbV90b2tlbiA9IFNVUFBPUlRTX05PVDsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJUeXBlPgotaW50IENTU1BhcnNlcjo6
cmVhbExleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkKLXsKLSAgICBZWVNUWVBFKiB5eWx2YWwg
PSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91dFR5cGUpOwotICAgIC8vIFdyaXRl
IHBvaW50ZXIgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlci4KLSAgICBTcmNDaGFyYWN0ZXJUeXBlKiBy
ZXN1bHQ7Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICBib29sIGhhc0Vz
Y2FwZTsKLQotICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgdGVybWluYXRlZCBieSBhIFwwIGNo
YXJhY3Rlciwgc28KLSAgICAvLyBpdCBpcyBzYWZlIHRvIHJlYWQgb25lIGNoYXJhY3RlciBhaGVh
ZCBvZiBhIGtub3duIG5vbi1udWxsLgotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBJbiBkZWJ1ZyB3
ZSBjaGVjayB3aXRoIGFuIEFTU0VSVCB0aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJpbmcg
dHlwZXMuCi0gICAgeXlsdmFsLT5zdHJpbmcuY2xlYXIoKTsKLSNlbmRpZgotCi1yZXN0YXJ0QWZ0
ZXJDb21tZW50OgotICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKTsKLSAgICBzZXRUb2tlblN0YXJ0KHJlc3VsdCk7Ci0gICAgbV90b2tlblN0YXJ0TGluZU51
bWJlciA9IG1fbGluZU51bWJlcjsKLSAgICBtX3Rva2VuU3RhcnRDb2x1bW5OdW1iZXIgPSB0b2tl
blN0YXJ0T2Zmc2V0KCkgLSBtX2NvbHVtbk9mZnNldEZvckxpbmU7Ci0gICAgbV90b2tlbiA9ICpj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgKytjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBzd2l0Y2ggKChtX3Rva2VuIDw9IDEyNykg
PyB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6Ci0gICAgICAgIGlmIChVTkxJS0VM
WSgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICcrJykpIHsKLSAgICAg
ICAgICAgIGlmIChwYXJzZVVuaWNvZGVSYW5nZTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFVOSUNPREVSQU5HRTsKLSAgICAgICAgICAgICAgICB5eWx2
YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBl
PigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBGQUxMVEhST1VHSDsgLy8gVG8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LgotCi0g
ICAgY2FzZSBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQ6Ci0gICAgICAgIC0tY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0
LCB5eWx2YWwtPnN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgbV90b2tlbiA9IElERU5UOwot
Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpID09ICcoJykpIHsKLSAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IFN1cHBvcnRz
TW9kZSAmJiAhaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgZGV0ZWN0U3VwcG9ydHNUb2tl
bjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgICAgIGlmIChtX3Rva2VuICE9IElERU5UKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5D
VElPTjsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkU2tpcFBhcmVudGhlc2lzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGlmICghaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkZXRlY3Rl
ZCA9IGRldGVjdEZ1bmN0aW9uVHlwZVRva2VuPFNyY0NoYXJhY3RlclR5cGU+KHJlc3VsdCAtIHRv
a2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZXRl
Y3RlZCAmJiBtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIC4uLiBhbmQobWF4LXdpZHRoOiA0ODBweCkgLi4uIGxvb2tzIGxpa2UgYSBmdW5j
dGlvbiwgYnV0IGluIGZhY3QgaXQgaXMgbm90LAotICAgICAgICAgICAgICAgICAgICAvLyBzbyBy
dW4gbW9yZSBkZXRlY3Rpb24gY29kZSBpbiB0aGUgTWVkaWFRdWVyeU1vZGUuCi0gICAgICAgICAg
ICAgICAgICAgIGRldGVjdE1lZGlhUXVlcnlUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQg
LSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgICAgICAgICBz
aG91bGRTa2lwUGFyZW50aGVzaXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChMSUtFTFkoc2hvdWxkU2tpcFBhcmVudGhlc2lzKSkg
ewotICAgICAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
OwotICAgICAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgICAgICsreXlsdmFsLT5z
dHJpbmcubV9sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbigp
ID09IFVSSSkgewotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5DVElPTjsKLSAgICAgICAg
ICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGl0IGlzIHJlYWxseSBhbiBVUkkuCi0gICAgICAgICAg
ICAgICAgaWYgKHl5bHZhbC0+c3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAgICBw
YXJzZVVSSTxMQ2hhcj4oeXlsdmFsLT5zdHJpbmcpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcGFyc2VVUkk8VUNoYXI+KHl5bHZhbC0+c3RyaW5nKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlICE9IE5v
cm1hbE1vZGUpICYmICFoYXNFc2NhcGUpIHsKLSAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2Rl
ID09IE1lZGlhUXVlcnlNb2RlKQotICAgICAgICAgICAgICAgIGRldGVjdE1lZGlhUXVlcnlUb2tl
bjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9wYXJzaW5nTW9kZSA9PSBTdXBwb3J0c01vZGUp
Ci0gICAgICAgICAgICAgICAgZGV0ZWN0U3VwcG9ydHNUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihy
ZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KClbMF0sICduJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQgIm4r
MSIgaXMgTlRILgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhPFNy
Y0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5tX2xlbmd0aCA9IGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFj
dGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID49IDIgJiYgdG9r
ZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdID09ICctJykgewotICAgICAgICAgICAgICAg
ICAgICAvLyBTdHJpbmcgIm4tIiBpcyBJREVOVCBidXQgIm4tMSIgaXMgTlRILgotICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgY3VycmVudENoYXJhY3RlciB0byAnLScgdG8gY29udGludWUgcGFy
c2luZy4KLSAgICAgICAgICAgICAgICAgICAgU3JjQ2hhcmFjdGVyVHlwZSogbmV4dENoYXJhY3Rl
ciA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFy
YWN0ZXJUeXBlPigpID0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpICsgMTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0ZXJUeXBlPigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAg
ICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuc2V0TGVuZ3RoKGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZl
cnQgdGhlIGNoYW5nZSB0byBjdXJyZW50Q2hhcmFjdGVyIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9
IG5leHRDaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlICYmIG1fdG9rZW4gPT0gSURFTlQgJiYgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
KCkgPT0gMiAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh5eWx2YWwtPnN0cmluZywg
Im9mIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOwotICAgICAg
ICAgICAgbV90b2tlbiA9IE5USENISUxEU0VMRUNUT1JTRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckRvdDoKLSAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBGQUxMVEhST1VHSDsgLy8gVG8gQ2hhcmFjdGVyTnVtYmVy
LgotCi0gICAgY2FzZSBDaGFyYWN0ZXJOdW1iZXI6IHsKLSAgICAgICAgYm9vbCBkb3RTZWVuID0g
KG1fdG9rZW4gPT0gJy4nKTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
aWYgKCFpc0FTQ0lJRGlnaXQoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBd
KSkgewotICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGRvdCBpcyBhbGxvd2VkIGZvciBhIG51
bWJlciwKLSAgICAgICAgICAgICAgICAvLyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRp
Z2l0LgotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KClbMF0gIT0gJy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMV0pKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkb3RTZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAh
ZG90U2VlbiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKCpjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCksICduJykpIHsKLSAgICAgICAgICAgIC8vICJbMC05XStuIiBpcyBh
bHdheXMgYW4gTnRoQ2hpbGQuCi0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKLSAgICAgICAgICAgIHl5bHZh
bC0+c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgU1ZH
IHBhcnNlciBmb3IgbnVtYmVycyBvbiBTVkcgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMuCi0gICAg
ICAgIGlmIChtX2NvbnRleHQubW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB1bml0cyBsaWtlICdlbScgb3IgJ2V4Jy4KLSAg
ICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIGNoYXJhY3RlciA9IGN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKCpjaGFyYWN0ZXIsICdlJykpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2hhcmFj
dGVyIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID4gMCk7Ci0gICAgICAgICAgICAg
ICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKCpjaGFyYWN0ZXIgPT0gJy0nIHx8
ICpjaGFyYWN0ZXIgPT0gJysnIHx8IGlzQVNDSUlEaWdpdCgqY2hhcmFjdGVyKSkgewotICAgICAg
ICAgICAgICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlz
QVNDSUlEaWdpdCgqY2hhcmFjdGVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsrY2hhcmFj
dGVyOwotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRkxPQVRUT0tFTiBpZiB0aGUgc3RyaW5n
IGNvbnRhaW5zIGV4cG9uZW50cy4KLSAgICAgICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KSA9IGNoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlU1ZHTnVtYmVyKHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwg
Y2hhcmFjdGVyIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCB5eWx2YWwtPm51bWJl
cikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
eXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUodG9rZW5TdGFydDxTcmNDaGFyYWN0
ZXJUeXBlPigpLCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0
YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotIAotICAgICAgICAvLyBUeXBlIG9mIHRoZSBmdW5j
dGlvbi4KLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkp
IHsKLSAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIHR5cGUgPSBjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICAgICAgICAgIHBhcnNlSWRlbnRpZmllcihy
ZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLQotICAgICAgICAgICAgbV90b2tlbiA9
IERJTUVOOwotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCi0gICAgICAgICAgICAgICAgZGV0
ZWN0TnVtYmVyVG9rZW4odHlwZSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC0gdHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3Rva2VuID09IERJTUVOKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92ZXJ3cml0dGVuLCBidXQgdGhpcyBp
cyBpbnRlbnRpb25hbC4KLSAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2Vu
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
ID09ICclJykgewotICAgICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMg
e251bX0lIHdlIGZvbGxvdwotICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hp
Y2ggdXNlcyB7bnVtfSUrLgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgfSB3aGlsZSAo
KmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnJScpOwotICAgICAgICAg
ICAgbV90b2tlbiA9IFBFUkNFTlRBR0U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV90
b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgotICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnRBZnRlckRhc2goY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgewot
ICAgICAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAg
ICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7
Ci0gICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7Ci0KLSAgICAgICAgICAgIGlmICgqY3VycmVu
dENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICcoJykgewotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBGVU5DVElPTjsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKLSAg
ICAgICAgICAgICAgICAgICAgZGV0ZWN0RGFzaFRva2VuPFNyY0NoYXJhY3RlclR5cGU+KHJlc3Vs
dCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICAgICAgKytj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgKyty
ZXN1bHQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlKSAmJiAhaGFzRXNjYXBlICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdLCAnbicpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4iIGlzIElERU5UIGJ1dCAiLW4rMSIgaXMg
TlRILgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhPFNyY0NoYXJh
Y3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+PSAzICYmIHRv
a2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsyXSA9PSAnLScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gU3RyaW5nICItbi0iIGlzIElERU5UIGJ1dCAiLW4tMSIgaXMgTlRILgotICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgY3VycmVudENoYXJhY3RlciB0byBzZWNvbmQgJy0nIG9mICct
bi0nIHRvIGNvbnRpbnVlIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgICAgIFNyY0NoYXJhY3Rl
clR5cGUqIG5leHRDaGFyYWN0ZXIgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSArIDI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmE8
U3JjQ2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9
IE5USDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIGN1cnJlbnRDaGFyYWN0
ZXIgaWYgdW5zdWNjZXNzZnVsLgotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID0gbmV4dENoYXJhY3RlcjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
c3VsdFN0cmluZy5zZXRMZW5ndGgocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBl
PigpKTsKLSAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nID0gcmVzdWx0U3RyaW5nOwotICAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVswXSA9PSAn
LScgJiYgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdID09ICc+Jykgewot
ICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpICs9IDI7Ci0g
ICAgICAgICAgICBtX3Rva2VuID0gU0dNTF9DRDsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMF0gPT0gJy0nKSB7Ci0gICAgICAgICAgICAt
LWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNl
SWRlbnRpZmllcihyZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBDVVNUT01fUFJPUEVSVFk7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZyA9
IHJlc3VsdFN0cmluZzsKLSAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2Rl
ID09IE50aENoaWxkTW9kZSkpIHsKLSAgICAgICAgICAgIC8vICItWzAtOV0rbiIgaXMgYWx3YXlz
IGFuIE50aENoaWxkLgotICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSkgewotICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0gICAgICAgICAgICAg
ICAgeXlsdmFsLT5zdHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFj
dGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENoYXJhY3Rlck90aGVyOgotICAgICAgICAvLyBtX3Rva2VuIGlzIHNpbXBseSB0
aGUgY3VycmVudCBjaGFyYWN0ZXIuCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0
ZXJOdWxsOgotICAgICAgICAvLyBEbyBub3QgYWR2YW5jZSBwb2ludGVyIGF0IHRoZSBlbmQgb2Yg
aW5wdXQuCi0gICAgICAgIC0tY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyV2hpdGVTcGFjZToKLSAgICAgICAg
bV90b2tlbiA9IFdISVRFU1BBQ0U7Ci0gICAgICAgIC8vIE1pZ2h0IHN0YXJ0IHdpdGggYSAnXG4n
LgotICAgICAgICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCkgPT0gJ1xuJykgewotICAgICAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAg
ICAgICAgICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IGN1cnJlbnRDaGFyYWN0ZXJPZmZzZXQo
KSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgfSB3aGlsZSAoKmN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKmN1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkp
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyRW5kQ29uZGl0aW9uUXVlcnk6
IHsKLSAgICAgICAgYm9vbCBpc1BhcnNpbmdDb25kaXRpb24gPSBtX3BhcnNpbmdNb2RlID09IE1l
ZGlhUXVlcnlNb2RlIHx8IG1fcGFyc2luZ01vZGUgPT0gU3VwcG9ydHNNb2RlOwotICAgICAgICBp
ZiAoaXNQYXJzaW5nQ29uZGl0aW9uKQotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1h
bE1vZGU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hhcmFjdGVyRW5kTnRo
Q2hpbGQ6Ci0gICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkKLSAgICAg
ICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ2hhcmFjdGVyUXVvdGU6Ci0gICAgICAgIGlmIChjaGVja0FuZFNraXBTdHJpbmcoY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpLCBtX3Rva2VuKSkgewotICAgICAgICAg
ICAgKytyZXN1bHQ7Ci0gICAgICAgICAgICBwYXJzZVN0cmluZzxTcmNDaGFyYWN0ZXJUeXBlPihy
ZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBtX3Rva2VuKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBT
VFJJTkc7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckV4
Y2xhbWF0aW9uTWFyazogewotICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHNraXBX
aGl0ZVNwYWNlKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAg
IGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKHN0YXJ0LCAiaW1wb3J0YW50IikpIHsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBJTVBPUlRBTlRfU1lNOwotICAgICAgICAgICAgY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID0gc3RhcnQgKyA5OwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hhcmFjdGVySGFzaG1hcms6IHsKLSAgICAgICAg
U3JjQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCk7Ci0gICAgICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKTsKLQotICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgYSB2YWxpZCBo
ZXggbnVtYmVyIHRva2VuLgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgfSB3aGlsZSAo
aXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkpKTsK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBIRVg7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5p
bml0KHN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSBzdGFydCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJZGVudGlmaWVyU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSkgewotICAgICAgICAgICAgbV90b2tlbiA9IElEU0VMOwotICAgICAgICAgICAgcGFyc2VJZGVu
dGlmaWVyKHJlc3VsdCwgeXlsdmFsLT5zdHJpbmcsIGhhc0VzY2FwZSk7Ci0gICAgICAgICAgICBp
ZiAoIWhhc0VzY2FwZSkgewotICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGlk
ZW50aWZpZXIgaXMgYWxzbyBhIHZhbGlkIGhleCBudW1iZXIuCi0gICAgICAgICAgICAgICAgU3Jj
Q2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBIRVg7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
QVNDSUlIZXhEaWdpdCgqY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBJRFNFTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlIChjdXJyZW50IDwgcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENoYXJhY3RlclNsYXNoOgotICAgICAg
ICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hp
dGUgc3BhY2VzLgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSA9PSAnKicpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKVswXSAhPSAnKicgfHwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpWzFdICE9ICcvJykgewotICAgICAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxT
cmNDaGFyYWN0ZXJUeXBlPigpID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgKyttX2xp
bmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IGN1
cnJlbnRDaGFyYWN0ZXJPZmZzZXQoKSArIDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgq
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICdcMCcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIGNvbW1lbnRzIGFyZSBzaW1wbHkgaWdub3JlZC4K
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC09IDI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSArPSAyOwotICAgICAgICAgICAgZ290byByZXN0YXJ0QWZ0ZXJDb21tZW50OwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJEb2xsYXI6Ci0gICAgICAg
IGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9JykgewotICAg
ICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gRU5EU1dJVEg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENoYXJhY3RlckFzdGVyaXNrOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IENPTlRBSU5T
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJQbHVzOgot
ICAgICAgICBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7Ci0g
ICAgICAgICAgICAvLyBTaW1wbGVzdCBjYXNlLiAiK1swLTldKm4iIGlzIGFsd2F5cyBOdGhDaGls
ZC4KLSAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkPFNyY0NoYXJhY3RlclR5cGU+KCkpIHsK
LSAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFjdGVyVHlwZT4oKTsK
LSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
aGFyYWN0ZXJMZXNzOgotICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpWzBdID09ICchJyAmJiBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClb
MV0gPT0gJy0nICYmIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVsyXSA9PSAn
LScpIHsKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAr
PSAzOwotICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckF0OgotICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZ
V09SRDsKLSAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVy
KHJlc3VsdCwgcmVzdWx0U3RyaW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgZGV0ZWN0QXRU
b2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCksIGhhc0VzY2FwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENoYXJhY3RlckJhY2tTbGFzaDoKLSAgICAgICAgaWYgKGlzQ1NTRXNjYXBlKCpjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkpKSB7Ci0gICAgICAgICAgICAtLWN1cnJlbnRDaGFy
YWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNlSWRlbnRpZmllcihy
ZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgbV90b2tlbiA9
IElERU5UOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxk
TW9kZSAmJiBtX3Rva2VuID09IElERU5UICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCgpID09IDIg
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeXlsdmFsLT5zdHJpbmcsICJvZiIpKSB7
Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKLSAgICAgICAgICAgIG1f
dG9rZW4gPSBOVEhDSElMRFNFTEVDVE9SU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJYb3I6Ci0gICAgICAgIGlmICgqY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9JykgewotICAgICAgICAgICAgKytjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gQkVH
SU5TV0lUSDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVy
VmVydGljYWxCYXI6Ci0gICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpID09ICc9JykgewotICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJUaWxkZToKLSAgICAgICAgaWYg
KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJz0nKSB7Ci0gICAgICAg
ICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBJTkNMVURFUzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9rZW4oKTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4g
Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYgdXJsLCBS
ZWZQdHI8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSkKLXsKLSAgICBpZiAoIW1lZGlhIHx8ICFtX2Fs
bG93SW1wb3J0UnVsZXMpIHsKLSAgICAgICAgcG9wUnVsZURhdGEoKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRl
KHVybCwgbWVkaWEucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVU
b1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBXVEZNb3ZlKHJ1bGUpOwotfQotCi1S
ZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKFJlZlB0cjxNZWRp
YVF1ZXJ5U2V0PiYmIG1lZGlhLCBSdWxlTGlzdCogcnVsZXMpCi17Ci0gICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFJlZlB0
cjxTdHlsZVJ1bGVNZWRpYT4gcnVsZTsKLSAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOwotICAgIGlm
ICghbWVkaWEpIHsKLSAgICAgICAgLy8gVG8gY29tcGx5IHdpdGggdzNjIHRlc3Qgc3VpdGUgZXhw
ZWN0YXRpb24sIGNyZWF0ZSBhbiBlbXB0eSBtZWRpYSBxdWVyeQotICAgICAgICAvLyBldmVuIHdo
ZW4gaXQgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QuCi0gICAgICAgIHJ1bGUgPSBTdHlsZVJ1
bGVNZWRpYTo6Y3JlYXRlKE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpLCBlbXB0eVJ1bGVzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtZWRpYS0+c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcnVsZSA9
IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEucmVsZWFzZU5vbk51bGwoKSwgcnVsZXMgPyAq
cnVsZXMgOiBlbXB0eVJ1bGVzKTsKLSAgICB9Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBydWxlLnJlbGVhc2VOb25OdWxsKCk7Ci19
Ci0KLVJlZjxTdHlsZVJ1bGVNZWRpYT4gQ1NTUGFyc2VyOjpjcmVhdGVFbXB0eU1lZGlhUnVsZShS
dWxlTGlzdCogcnVsZXMpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGUoKSwgcnVsZXMpOwotfQotCi1SZWY8U3R5bGVSdWxlU3VwcG9ydHM+IENTU1Bh
cnNlcjo6Y3JlYXRlU3VwcG9ydHNSdWxlKGJvb2wgY29uZGl0aW9uSXNTdXBwb3J0ZWQsIFJ1bGVM
aXN0KiBydWxlcykKLXsKLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNl
RGVjbGFyYXRpb25zID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRh
dGEgPSBwb3BTdXBwb3J0c1J1bGVEYXRhKCk7Ci0gICAgU3RyaW5nIGNvbmRpdGlvblRleHQ7Ci0g
ICAgdW5zaWduZWQgY29uZGl0aW9uT2Zmc2V0ID0gZGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0
ICsgOTsKLSAgICB1bnNpZ25lZCBjb25kaXRpb25MZW5ndGggPSBkYXRhLT5ydWxlSGVhZGVyUmFu
Z2UubGVuZ3RoKCkgLSA5OwotCi0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICBjb25k
aXRpb25UZXh0ID0gU3RyaW5nKG1fZGF0YVN0YXJ0OC5nZXQoKSArIGNvbmRpdGlvbk9mZnNldCwg
Y29uZGl0aW9uTGVuZ3RoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGNv
bmRpdGlvblRleHQgPSBTdHJpbmcobV9kYXRhU3RhcnQxNi5nZXQoKSArIGNvbmRpdGlvbk9mZnNl
dCwgY29uZGl0aW9uTGVuZ3RoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIFJlZlB0cjxTdHls
ZVJ1bGVTdXBwb3J0cz4gcnVsZTsKLSAgICBpZiAocnVsZXMpCi0gICAgICAgIHJ1bGUgPSBTdHls
ZVJ1bGVTdXBwb3J0czo6Y3JlYXRlKGNvbmRpdGlvblRleHQsIGNvbmRpdGlvbklzU3VwcG9ydGVk
LCAqcnVsZXMpOwotICAgIGVsc2UgewotICAgICAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOwotICAg
ICAgICBydWxlID0gU3R5bGVSdWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25k
aXRpb25Jc1N1cHBvcnRlZCwgZW1wdHlSdWxlcyk7Ci0gICAgfQotCi0gICAgcHJvY2Vzc0FuZEFk
ZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJ1bGUucmVsZWFz
ZU5vbk51bGwoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtTdXBwb3J0c1J1bGVIZWFkZXJT
dGFydCgpCi17Ci0gICAgaWYgKCFtX3N1cHBvcnRzUnVsZURhdGFTdGFjaykKLSAgICAgICAgbV9z
dXBwb3J0c1J1bGVEYXRhU3RhY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bGVTb3VyY2VEYXRhTGlz
dD4oKTsKLQotICAgIGF1dG8gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVs
ZVNvdXJjZURhdGE6OlNVUFBPUlRTX1JVTEUpOwotICAgIGRhdGEtPnJ1bGVIZWFkZXJSYW5nZS5z
dGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+
YXBwZW5kKFdURk1vdmUoZGF0YSkpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1N1cHBvcnRz
UnVsZUhlYWRlckVuZCgpCi17Ci0gICAgQVNTRVJUKG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrICYm
ICFtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLQotICAgIGlmIChpczhCaXRT
b3VyY2UoKSkKLSAgICAgICAgbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUhl
YWRlclJhbmdlLmVuZCA9IHRva2VuU3RhcnQ8TENoYXI+KCkgLSBtX2RhdGFTdGFydDguZ2V0KCk7
Ci0gICAgZWxzZQotICAgICAgICBtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxl
SGVhZGVyUmFuZ2UuZW5kID0gdG9rZW5TdGFydDxVQ2hhcj4oKSAtIG1fZGF0YVN0YXJ0MTYuZ2V0
KCk7Ci19Ci0KLVJlZjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BTdXBwb3J0c1J1
bGVEYXRhKCkKLXsKLSAgICBBU1NFUlQobV9zdXBwb3J0c1J1bGVEYXRhU3RhY2sgJiYgIW1fc3Vw
cG9ydHNSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX3N1cHBvcnRzUnVs
ZURhdGFTdGFjay0+dGFrZUxhc3QoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnByb2Nlc3NBbmRB
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKQotewotICAgIGlmICghaXNFeHRyYWN0aW5n
U291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWFya1J1bGVCb2R5RW5kKCk7Ci0g
ICAgUmVmPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlID0gKnBvcFJ1bGVEYXRhKCk7Ci0gICAgZml4
VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlKTsKLSAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVl
KFdURk1vdmUocnVsZSkpOwotfQotCi12b2lkIENTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNl
VHJlZShSZWY8Q1NTUnVsZVNvdXJjZURhdGE+JiYgcnVsZSkKLXsKLSAgICAvLyBQcmVjb25kaXRp
b246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgotICAgIGlmICghbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LT5pc0VtcHR5KCkpCi0gICAgICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmFwcGVuZChXVEZN
b3ZlKHJ1bGUpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxh
c3QoKS0+Y2hpbGRSdWxlcy5hcHBlbmQoV1RGTW92ZShydWxlKSk7Ci19Ci0KLVJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BSdWxlRGF0YSgpCi17Ci0gICAgaWYgKCFtX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VS
VCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICBtX2N1cnJlbnRSdWxl
RGF0YSA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnRha2VM
YXN0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzeW50YXhFcnJvcihjb25zdCBMb2NhdGlvbiYg
bG9jYXRpb24sIFN5bnRheEVycm9yVHlwZSBlcnJvcikKLXsKLSAgICBpZiAoIWlzTG9nZ2luZ0Vy
cm9ycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgc3dpdGNoIChlcnJvcikgewotICAgIGNhc2UgUHJvcGVydHlEZWNsYXJhdGlvbkVycm9yOgot
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkludmFsaWQgQ1NTIHByb3BlcnR5IGRlY2xh
cmF0aW9uIGF0OiAiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJVbmV4cGVjdGVkIENTUyB0b2tlbjogIik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbi50b2tlbi5pczhCaXQoKSkKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQobG9jYXRpb24udG9rZW4uY2hhcmFjdGVyczgoKSwgbG9jYXRpb24udG9r
ZW4ubGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobG9jYXRpb24u
dG9rZW4uY2hhcmFjdGVyczE2KCksIGxvY2F0aW9uLnRva2VuLmxlbmd0aCgpKTsKLQotICAgIGxv
Z0Vycm9yKGJ1aWxkZXIudG9TdHJpbmcoKSwgbG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24u
Y29sdW1uTnVtYmVyKTsKLQotICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IHRydWU7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0xvZ2dpbmdFcnJvcnMoKQotewotICAgIHJldHVybiBt
X2xvZ0Vycm9ycyAmJiAhbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uOwotfQotCi12b2lkIENT
U1BhcnNlcjo6bG9nRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
aW50IGNvbHVtbk51bWJlcikKLXsKLSAgICBQYWdlQ29uc29sZUNsaWVudCYgY29uc29sZSA9IG1f
c3R5bGVTaGVldC0+c2luZ2xlT3duZXJEb2N1bWVudCgpLT5wYWdlKCktPmNvbnNvbGUoKTsKLSAg
ICBjb25zb2xlLmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6Q1NTLCBNZXNzYWdlTGV2ZWw6Oldh
cm5pbmcsIG1lc3NhZ2UsIG1fc3R5bGVTaGVldC0+YmFzZVVSTCgpLnN0cmluZygpLCBsaW5lTnVt
YmVyICsgMSwgY29sdW1uTnVtYmVyICsgMSk7Ci19Ci0KLVJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+
IENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4ga2V5ZnJhbWVzKQotewot
ICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBm
YWxzZTsKLSAgICBSZWY8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlID0gU3R5bGVSdWxlS2V5ZnJh
bWVzOjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIGtleUZyYW1lIDogKmtleWZyYW1lcykKLSAg
ICAgICAgcnVsZS0+cGFyc2VyQXBwZW5kS2V5ZnJhbWUoV1RGTW92ZShrZXlGcmFtZSkpOwotICAg
IHJ1bGUtPnNldE5hbWUobmFtZSk7Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRy
ZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBydWxlOwotfQotCi1SZWZQdHI8U3R5bGVSdWxlPiBD
U1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPj4qIHNlbGVjdG9ycykKLXsKLSAgICBSZWZQdHI8U3R5bGVSdWxlPiBydWxlOwot
ICAgIGlmIChzZWxlY3RvcnMpIHsKLSAgICAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gZmFsc2U7
Ci0gICAgICAgIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICAgICAg
cnVsZSA9IFN0eWxlUnVsZTo6Y3JlYXRlKG1fbGFzdFNlbGVjdG9yTGluZU51bWJlciwgY3JlYXRl
U3R5bGVQcm9wZXJ0aWVzKCkpOwotICAgICAgICBydWxlLT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVj
dG9yKCpzZWxlY3RvcnMpOwotICAgICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJl
ZUlmTmVlZGVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgY2xl
YXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHJ1bGU7Ci19Ci0KLVJlZlB0cjxTdHlsZVJ1bGVG
b250RmFjZT4gQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQotewotICAgIG1fYWxsb3dJ
bXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBm
b3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChw
cm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Rm9udEZhbWlseSAmJiAoIWlzPENTU1ZhbHVlTGlz
dD4oKnByb3BlcnR5LnZhbHVlKCkpIHx8IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5
LnZhbHVlKCkpLmxlbmd0aCgpICE9IDEpKSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgZm9udC1m
YW1pbHkgcHJvcGVydHksIGZvbnQtZmFtaWx5IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBydWxl
Ci0gICAgICAgICAgICAvLyBoYXMgdG8gYmUgYSB2YWx1ZSBsaXN0IHdpdGggZXhhY3RseSBvbmUg
ZmFtaWx5IG5hbWUuIEl0IGNhbm5vdCBoYXZlIGEKLSAgICAgICAgICAgIC8vIGhhdmUgJ2luaXRp
YWwnIHZhbHVlIGFuZCBjYW5ub3QgJ2luaGVyaXQnIGZyb20gcGFyZW50LgotICAgICAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtZm9udHMvI2ZvbnQtZmFtaWx5LWRl
c2MKLSAgICAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgICAgICAgICAgcG9wUnVsZURh
dGEoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAg
IGF1dG8gcnVsZSA9IFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
aWVzKCkpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHByb2Nlc3NBbmRBZGROZXdSdWxl
VG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gV1RGTW92ZShydWxlKTsKLX0KLQot
dm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCi17Ci0gICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1f
YWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FsbG93
SW1wb3J0UnVsZXMgPSBmYWxzZTsKLSAgICBtX3N0eWxlU2hlZXQtPnBhcnNlckFkZE5hbWVzcGFj
ZShwcmVmaXgsIHVyaSk7Ci0gICAgaWYgKHByZWZpeC5pc0VtcHR5KCkgJiYgIXVyaS5pc051bGwo
KSkKLSAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwotfQotCi1RdWFsaWZpZWROYW1l
IENTU1BhcnNlcjo6ZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLXsKLSAgICBpZiAocHJlZml4
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxO
YW1lLCBudWxsQXRvbSk7IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUg
aGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KLSAgICBpZiAocHJlZml4LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoZW1wdHlBdG9tLCBsb2NhbE5hbWUs
IGVtcHR5QXRvbSk7IC8vIEVtcHR5IG5hbWVzcGFjZS4KLSAgICBpZiAocHJlZml4ID09IHN0YXJB
dG9tKQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgc3Rh
ckF0b20pOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNwYWNlLgotCi0gICAgaWYgKCFtX3N0eWxl
U2hlZXQpCi0gICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBt
X2RlZmF1bHROYW1lc3BhY2UpOwotICAgIHJldHVybiBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9j
YWxOYW1lLCBtX3N0eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShwcmVmaXgpKTsKLX0KLQot
dm9pZCBDU1NQYXJzZXI6OnJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKENT
U1BhcnNlclNlbGVjdG9yJiBzcGVjaWZpZXJzKQotewotICAgIGlmIChtX2RlZmF1bHROYW1lc3Bh
Y2UgIT0gc3RhckF0b20gfHwgc3BlY2lmaWVycy5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICBRdWFsaWZpZWROYW1lIGVsZW1lbnROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgbV9k
ZWZhdWx0TmFtZXNwYWNlKTsKLSAgICAgICAgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5h
bWUoZWxlbWVudE5hbWUsIHNwZWNpZmllcnMsIC8qdGFnSXNGb3JOYW1lc3BhY2VSdWxlKi90cnVl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVt
ZW50TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVByZWZpeCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBlbGVtZW50TmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3ImIHNwZWNpZmllcnMpCi17Ci0g
ICAgUXVhbGlmaWVkTmFtZSB0YWcoZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKG5hbWVzcGFjZVBy
ZWZpeCwgZWxlbWVudE5hbWUpKTsKLSAgICByZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFt
ZSh0YWcsIHNwZWNpZmllcnMsIGZhbHNlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnJld3JpdGVT
cGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ1NTUGFy
c2VyU2VsZWN0b3ImIHNwZWNpZmllcnMsIGJvb2wgdGFnSXNGb3JOYW1lc3BhY2VSdWxlKQotewot
ICAgIGlmICghc3BlY2lmaWVycy5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBp
ZiAodGFnID09IGFueVFOYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgh
c3BlY2lmaWVycy5pc1BzZXVkb0VsZW1lbnRDdWVGdW5jdGlvbigpKQotICAgICAgICAgICAgc3Bl
Y2lmaWVycy5wcmVwZW5kVGFnU2VsZWN0b3IodGFnLCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGxhc3RTaGFk
b3dEZXNjZW5kYW50ID0gJnNwZWNpZmllcnM7Ci0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGhpc3Rv
cnkgPSAmc3BlY2lmaWVyczsKLSAgICB3aGlsZSAoaGlzdG9yeS0+dGFnSGlzdG9yeSgpKSB7Ci0g
ICAgICAgIGhpc3RvcnkgPSBoaXN0b3J5LT50YWdIaXN0b3J5KCk7Ci0gICAgICAgIGlmIChoaXN0
b3J5LT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBoaXN0b3J5LT5oYXNTaGFkb3dEZXNjZW5k
YW50KCkpCi0gICAgICAgICAgICBsYXN0U2hhZG93RGVzY2VuZGFudCA9IGhpc3Rvcnk7Ci0gICAg
fQotCi0gICAgaWYgKGxhc3RTaGFkb3dEZXNjZW5kYW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAg
ICAgaWYgKHRhZyAhPSBhbnlRTmFtZSgpKQotICAgICAgICAgICAgbGFzdFNoYWRvd0Rlc2NlbmRh
bnQtPnRhZ0hpc3RvcnkoKS0+cHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgdGFnSXNGb3JOYW1lc3Bh
Y2VSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBzaGFkb3ctSUQg
cHNldWRvLWVsZW1lbnRzIHRvIGJlIGNvcnJlY3RseSBtYXRjaGVkLCB0aGUgU2hhZG93RGVzY2Vu
ZGFudCBjb21iaW5hdG9yIGhhcyB0byBiZSB1c2VkLgotICAgIC8vIFdlIHRoZXJlZm9yZSBjcmVh
dGUgYSBuZXcgU2VsZWN0b3Igd2l0aCB0aGF0IGNvbWJpbmF0b3IgaGVyZSBpbiBhbnkgY2FzZSwg
ZXZlbiBpZiBtYXRjaGluZyBhbnkgKGhvc3QpIGVsZW1lbnQgaW4gYW55IG5hbWVzcGFjZSAoaS5l
LiAnKicpLgotICAgIGxhc3RTaGFkb3dEZXNjZW5kYW50LT5zZXRUYWdIaXN0b3J5KHN0ZDo6bWFr
ZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KHRhZykpOwotICAgIGxhc3RTaGFkb3dEZXNjZW5k
YW50LT5zZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lm
aWVycyhzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNwZWNpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV3U3BlY2lmaWVyKQotewotICAgIGlmIChu
ZXdTcGVjaWZpZXItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpIHx8IG5ld1NwZWNpZmllci0+aXNQ
c2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSkgewotICAgICAgICAvLyBVbmtub3duIHBzZXVkbyBl
bGVtZW50IGFsd2F5cyBnb2VzIGF0IHRoZSB0b3Agb2Ygc2VsZWN0b3IgY2hhaW4uCi0gICAgICAg
IG5ld1NwZWNpZmllci0+YXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2Vu
ZGFudCwgV1RGTW92ZShzcGVjaWZpZXJzKSk7Ci0gICAgICAgIHJldHVybiBuZXdTcGVjaWZpZXI7
Ci0gICAgfQotICAgIGlmIChzcGVjaWZpZXJzLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICAvLyBTcGVjaWZpZXJzIGZvciB1bmtub3duIHBzZXVkbyBlbGVtZW50IGdvIHJpZ2h0
IGJlaGluZCBpdCBpbiB0aGUgY2hhaW4uCi0gICAgICAgIHNwZWNpZmllcnMtPmluc2VydFRhZ0hp
c3RvcnkoQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yLCBXVEZNb3ZlKG5ld1NwZWNpZmllciksIENT
U1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50KTsKLSAgICAgICAgcmV0dXJuIHNwZWNpZmllcnM7
Ci0gICAgfQotICAgIHNwZWNpZmllcnMtPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yLCBXVEZNb3ZlKG5ld1NwZWNpZmllcikpOwotICAgIHJldHVybiBzcGVjaWZpZXJz
OwotfQotCi1SZWZQdHI8U3R5bGVSdWxlUGFnZT4gQ1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZShz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3RvcikKLXsKLSAgICAv
LyBGSVhNRTogTWFyZ2luIGF0LXJ1bGVzIGFyZSBpZ25vcmVkLgotICAgIG1fYWxsb3dJbXBvcnRS
dWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBpZiAocGFn
ZVNlbGVjdG9yKSB7Ci0gICAgICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZVBhZ2U6OmNyZWF0ZShj
cmVhdGVTdHlsZVByb3BlcnRpZXMoKSk7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+PiBzZWxlY3RvclZlY3RvcjsKLSAgICAgICAgc2VsZWN0b3JWZWN0
b3IuYXBwZW5kKFdURk1vdmUocGFnZVNlbGVjdG9yKSk7Ci0gICAgICAgIHJ1bGUtPnBhcnNlckFk
b3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOwotICAgICAgICBwcm9jZXNzQW5kQWRk
TmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgICAgIGNsZWFyUHJvcGVydGllcygp
OwotICAgICAgICByZXR1cm4gV1RGTW92ZShydWxlKTsKLSAgICB9Ci0KLSAgICBwb3BSdWxlRGF0
YSgpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+
PiBDU1NQYXJzZXI6OmNyZWF0ZVNlbGVjdG9yVmVjdG9yKCkKLXsKLSAgICBpZiAobV9yZWN5Y2xl
ZFNlbGVjdG9yVmVjdG9yKSB7Ci0gICAgICAgIG1fcmVjeWNsZWRTZWxlY3RvclZlY3Rvci0+c2hy
aW5rKDApOwotICAgICAgICByZXR1cm4gV1RGTW92ZShtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3Ip
OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPj4+KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZWN5Y2xl
U2VsZWN0b3JWZWN0b3Ioc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+Pj4gdmVjdG9yKQotewotICAgIGlmICh2ZWN0b3IgJiYgIW1fcmVjeWNs
ZWRTZWxlY3RvclZlY3RvcikKLSAgICAgICAgbV9yZWN5Y2xlZFNlbGVjdG9yVmVjdG9yID0gV1RG
TW92ZSh2ZWN0b3IpOwotfQotCi1SZWZQdHI8U3R5bGVSdWxlUmVnaW9uPiBDU1NQYXJzZXI6OmNy
ZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+
KiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKQotewotICAgIGlmICghcmVnaW9uU2Vs
ZWN0b3IgfHwgIXJ1bGVzKSB7Ci0gICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1l
c3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLQotICAgIGF1dG8gcmVnaW9uUnVsZSA9IFN0eWxl
UnVsZVJlZ2lvbjo6Y3JlYXRlKHJlZ2lvblNlbGVjdG9yLCAqcnVsZXMpOwotCi0gICAgaWYgKGlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShD
U1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKLQotICAgIHJldHVybiBXVEZNb3Zl
KHJlZ2lvblJ1bGUpOwotfQotCi12b2lkIENTU1BhcnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxlKENT
U1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlIC8qIG1hcmdpbkJveCAqLykKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1hcmdpbiBhdC1ydWxlIGhlcmUsIHVzaW5nOgotICAgIC8vICAgICAgICAt
IG1hcmdpbkJveDogbWFyZ2luIGJveAotICAgIC8vICAgICAgICAtIG1fcGFyc2VkUHJvcGVydGll
czogcHJvcGVydGllcyBhdCBbbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94LCBt
X3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpXSBhcmUgZm9yIHRoaXMgYXQtcnVsZS4KLSAgICAvLyBE
b24ndCBmb3JnZXQgdG8gYWxzbyB1cGRhdGUgdGhlIGFjdGlvbiBmb3IgcGFnZSBzeW1ib2wgaW4g
Q1NTR3JhbW1hci55IHN1Y2ggdGhhdCBtYXJnaW4gYXQtcnVsZSBkYXRhIGlzIGNsZWFyZWQgaWYg
cGFnZV9zZWxlY3RvciBpcyBpbnZhbGlkLgotCi0gICAgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2lu
Qm94KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCgpCi17Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gbV9wYXJz
ZWRQcm9wZXJ0aWVzLnNpemUoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9u
c0Zvck1hcmdpbkJveCgpCi17Ci0gICAgcm9sbGJhY2tMYXN0UHJvcGVydGllcyhtX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94KTsK
LSAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBpbnZhbGlkUGFyc2Vk
UHJvcGVydGllc0NvdW50OwotfQotCi1SZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpj
cmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGtleXMpCi17Ci0gICAgLy8gQ3JlYXRl
IGEga2V5IHN0cmluZyBmcm9tIHRoZSBwYXNzZWQga2V5cwotICAgIFN0cmluZ0J1aWxkZXIga2V5
U3RyaW5nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIC8vIEp1c3QgYXMgcGVyIHRoZSBjb21tZW50IGJlbG93LCB3ZSBpZ25vcmUga2V5
ZnJhbWVzIHdpdGgKLSAgICAgICAgLy8gaW52YWxpZCBrZXkgdmFsdWVzIChwbGFpbiBudW1iZXJz
IG9yIHVua25vd24gaWRlbnRpZmllcnMpCi0gICAgICAgIC8vIG1hcmtlZCBhcyBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VOS05PV04gZHVyaW5nIHBhcnNpbmcuCi0gICAgICAgIGlmIChrZXlzLnZh
bHVlQXQoaSktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKSB7Ci0gICAg
ICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGtleXMudmFsdWVBdChpKS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgIGZsb2F0IGtleSA9IHN0YXRpY19j
YXN0PGZsb2F0PihrZXlzLnZhbHVlQXQoaSktPmZWYWx1ZSk7Ci0gICAgICAgIGlmIChrZXkgPCAw
IHx8IGtleSA+IDEwMCkgewotICAgICAgICAgICAgLy8gQXMgcGVyIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtYW5pbWF0aW9ucy8ja2V5ZnJhbWVzLAotICAgICAgICAgICAgLy8gIklmIGEga2V5
ZnJhbWUgc2VsZWN0b3Igc3BlY2lmaWVzIG5lZ2F0aXZlIHBlcmNlbnRhZ2UgdmFsdWVzCi0gICAg
ICAgICAgICAvLyBvciB2YWx1ZXMgaGlnaGVyIHRoYW4gMTAwJSwgdGhlbiB0aGUga2V5ZnJhbWUg
d2lsbCBiZSBpZ25vcmVkLiIKLSAgICAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgIT0gMCkKLSAg
ICAgICAgICAgIGtleVN0cmluZy5hcHBlbmQoJywnKTsKLSAgICAgICAga2V5U3RyaW5nLmFwcGVu
ZE51bWJlcihrZXkpOwotICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCclJyk7Ci0gICAgfQotCi0g
ICAgYXV0byBrZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZShjcmVhdGVTdHlsZVByb3Bl
cnRpZXMoKSk7Ci0gICAga2V5ZnJhbWUtPnNldEtleVRleHQoa2V5U3RyaW5nLnRvU3RyaW5nKCkp
OwotCi0gICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShrZXlmcmFt
ZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjppbnZhbGlkQmxvY2tIaXQoKQotewotICAgIGlmICht
X3N0eWxlU2hlZXQgJiYgIW1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZSkKLSAgICAgICAg
bV9zdHlsZVNoZWV0LT5zZXRIYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoZmFsc2UpOwot
fQotCi12b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCkK
LXsKLSAgICBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7Ci19Ci0KLXZv
aWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQmIG1lZGlhKQot
ewotICAgIG1lZGlhLnNldExhc3RMaW5lKG1fbGluZU51bWJlcik7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSB2b2lkIGZpeFVucGFyc2VkUHJv
cGVydGllcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBDU1NSdWxlU291cmNlRGF0
YSYgcnVsZURhdGEpCi17Ci0gICAgYXV0byYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEuc3R5bGVT
b3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHByb3BlcnR5RGF0
YS5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25l
ZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEucnVsZUJvZHlSYW5nZS5zdGFydDsKLSAgICBhdXRvKiBu
ZXh0RGF0YSA9ICZwcm9wZXJ0eURhdGFbMF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBhdXRvKiBjdXJyZW50RGF0YSA9IG5leHREYXRhOwotICAg
ICAgICBuZXh0RGF0YSA9IGkgPCBzaXplIC0gMSA/ICZwcm9wZXJ0eURhdGFbaSArIDFdIDogMDsK
LQotICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNlZE9rKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5kID4gMCAmJiBjaGFyYWN0ZXJz
W3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXQ7Ci0gICAgICAgIGlmICghbmV4dERhdGEpCi0gICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5
bGVTaGVldCA9IHJ1bGVEYXRhLnJ1bGVCb2R5UmFuZ2UuZW5kIC0gMTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERh
dGEtPnJhbmdlLnN0YXJ0IC0gMTsKLQotICAgICAgICB3aGlsZSAoaXNIVE1MU3BhY2UoY2hhcmFj
dGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0pKQotICAgICAgICAgICAgLS1wcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldDsKLQotICAgICAgICAvLyBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCBwb2lu
dHMgYXQgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCi0gICAgICAgIHVuc2lnbmVk
IG5ld1Byb3BlcnR5RW5kID0gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSBzdHlsZVN0YXJ0ICsg
MTsgLy8gRXhjbHVzaXZlIG9mIHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgotICAg
ICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgewotICAg
ICAgICAgICAgY3VycmVudERhdGEtPnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOwotICAgICAg
ICAgICAgdW5zaWduZWQgdmFsdWVTdGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJy
ZW50RGF0YS0+cmFuZ2Uuc3RhcnQgKyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgJiYgY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCi0gICAg
ICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OwotICAgICAgICAgICAgaWYgKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCkKLSAgICAgICAg
ICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7IC8vIFNoaWZ0IHBhc3QgdGhlICc6Jy4K
LSAgICAgICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXQgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0XSkpCi0gICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OwotICAgICAg
ICAgICAgLy8gTmVlZCB0byBleGNsdWRlIHRoZSB0cmFpbGluZyAnOycgZnJvbSB0aGUgcHJvcGVy
dHkgdmFsdWUuCi0gICAgICAgICAgICBjdXJyZW50RGF0YS0+dmFsdWUgPSBTdHJpbmcoY2hhcmFj
dGVycyArIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0g
dmFsdWVTdGFydEluU3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0XSA9PSAnOycgPyAwIDogMSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENTU1Bh
cnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSYgcnVsZURh
dGEpCi17Ci0gICAgaWYgKCFydWxlRGF0YS5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChpczhCaXRTb3VyY2UoKSkgewotICAgICAgICBmaXhVbnBhcnNlZFByb3Bl
cnRpZXM8TENoYXI+KG1fZGF0YVN0YXJ0OC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0
aCwgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZml4VW5wYXJzZWRQ
cm9wZXJ0aWVzPFVDaGFyPihtX2RhdGFTdGFydDE2LmdldCgpICsgbV9wYXJzZWRUZXh0UHJlZml4
TGVuZ3RoLCBydWxlRGF0YSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlclN0
YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpUeXBlIHJ1bGVUeXBlKQotewotICAgIGlmICghaXNFeHRy
YWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQb3Agb2ZmIGRh
dGEgZm9yIGEgcHJldmlvdXMgaW52YWxpZCBydWxlLgotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0
YSkKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+cmVtb3ZlTGFzdCgpOwotCi0gICAg
YXV0byBkYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShydWxlVHlwZSk7Ci0gICAgZGF0
YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIG1fY3Vy
cmVudFJ1bGVEYXRhID0gZGF0YS5jb3B5UmVmKCk7Ci0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFj
ay0+YXBwZW5kKFdURk1vdmUoZGF0YSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6c2V0UnVsZUhlYWRlckVuZChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBkYXRhU3RhcnQpCi17Ci0gICAgQ2hhcmFjdGVyVHlwZSogbGlzdEVuZCA9
IHRva2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICB3aGlsZSAobGlzdEVuZCA+IGRhdGFT
dGFydCArIDEpIHsKLSAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCoobGlzdEVuZCAtIDEpKSkKLSAg
ICAgICAgICAgIC0tbGlzdEVuZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlSGVhZGVyUmFu
Z2UuZW5kID0gbGlzdEVuZCAtIGRhdGFTdGFydDsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtS
dWxlSGVhZGVyRW5kKCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0
eSgpKTsKLQotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgc2V0UnVsZUhlYWRlckVu
ZDxMQ2hhcj4obV9kYXRhU3RhcnQ4LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFJ1bGVI
ZWFkZXJFbmQ8VUNoYXI+KG1fZGF0YVN0YXJ0MTYuZ2V0KCkpOwotfQotCi12b2lkIENTU1BhcnNl
cjo6bWFya1NlbGVjdG9yU3RhcnQoKQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0
YSgpIHx8IG1fbmVzdGVkU2VsZWN0b3JMZXZlbCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghbV9zZWxlY3RvclJhbmdlLmVuZCk7Ci0KLSAgICBtX3NlbGVjdG9yUmFuZ2Uuc3RhcnQgPSB0
b2tlblN0YXJ0T2Zmc2V0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JFbmQo
KQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpIHx8IG1fbmVzdGVkU2VsZWN0
b3JMZXZlbCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9zZWxlY3RvclJhbmdlLmVu
ZCk7Ci0gICAgQVNTRVJUKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnNpemUoKSk7Ci0KLSAgICBt
X3NlbGVjdG9yUmFuZ2UuZW5kID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmxhc3QoKS0+c2VsZWN0b3JSYW5nZXMuYXBwZW5kKG1fc2VsZWN0b3JSYW5n
ZSk7Ci0gICAgbV9zZWxlY3RvclJhbmdlLnN0YXJ0ID0gMDsKLSAgICBtX3NlbGVjdG9yUmFuZ2Uu
ZW5kID0gMDsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKLXsKLSAg
ICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Y3VycmVudFJ1bGVEYXRhID0gbnVsbHB0cjsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0
YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHRva2VuU3RhcnRDaGFyKCkgPT0gJ3snKQotICAgICAgICAr
K29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCi0gICAgQVNTRVJU
KCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOwotICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNldDsKLX0KLQotdm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCi17Ci0gICAgLy8gUHJlY29uZGl0aW9uOiAo
IWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0
YXJ0T2Zmc2V0KCk7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5
KCkpOwotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5l
bmQgPSBvZmZzZXQ7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCi17
Ci0gICAgbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uID0gZmFsc2U7Ci0gICAgaWYgKCFpc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50
UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpIHx8ICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0
KCktPnN0eWxlU291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9wZXJ0eVJh
bmdlLnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFy
a1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2Vk
KQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50
UnVsZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIG9mZnNldCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBpZiAodG9r
ZW5TdGFydENoYXIoKSA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3Bl
cnR5IHRleHQuCi0gICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlSYW5nZS5lbmQgPSBv
ZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgJiYgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHko
KSkgewotICAgICAgICAvLyBUaGlzIHN0dWZmIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiB0aGUgc3R5
bGUgZGF0YSByZXRyaWV2YWwgaXMgcmVxdWVzdGVkIGJ5IGNsaWVudC4KLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7Ci0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0IDwgZW5kKTsKLSAgICAgICAgU3RyaW5nIHByb3BlcnR5
U3RyaW5nOwotICAgICAgICBpZiAoaXM4Qml0U291cmNlKCkpCi0gICAgICAgICAgICBwcm9wZXJ0
eVN0cmluZyA9IFN0cmluZyhtX2RhdGFTdGFydDguZ2V0KCkgKyBzdGFydCwgZW5kIC0gc3RhcnQp
LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9wZXJ0eVN0
cmluZyA9IFN0cmluZyhtX2RhdGFTdGFydDE2LmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nLmVuZHNXaXRoKCc7
JykpCi0gICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5U3RyaW5nLmxlZnQocHJv
cGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgc2l6ZV90IGNvbG9uSW5kZXggPSBw
cm9wZXJ0eVN0cmluZy5maW5kKCc6Jyk7Ci0gICAgICAgIEFTU0VSVChjb2xvbkluZGV4ICE9IG5v
dEZvdW5kKTsKLQotICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29s
b25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3Bl
cnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3Ro
KCkpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMg
cmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAgICAgU291cmNl
UmFuZ2UmIHRvcFJ1bGVCb2R5UmFuZ2UgPSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCkt
PnJ1bGVCb2R5UmFuZ2U7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+
c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5
UGFyc2VkLCBTb3VyY2VSYW5nZShzdGFydCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZCAt
IHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7Ci0gICAgfQotICAgIHJlc2V0UHJvcGVydHlSYW5n
ZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLVJlZjxTdHlsZVJ1
bGVWaWV3cG9ydD4gQ1NTUGFyc2VyOjpjcmVhdGVWaWV3cG9ydFJ1bGUoKQotewotICAgIG1fYWxs
b3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLQot
ICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZVZpZXdwb3J0OjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9w
ZXJ0aWVzKCkpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotCi0gICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJ1bGU7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotCi0gICAgQ1NTVmFsdWVJRCBp
ZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgYm9vbCB2YWxpZFByaW1p
dGl2ZSA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5TWluV2lkdGg6IC8vIGF1dG8gfCBkZXZpY2Utd2lkdGggfCBkZXZpY2UtaGVpZ2h0IHwgPGxl
bmd0aD4gfCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0
OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRGV2aWNl
V2lkdGggfHwgaWQgPT0gQ1NTVmFsdWVEZXZpY2VIZWlnaHQpCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdpZHRoOiAvLyBzaG9ydGhhbmQKLSAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRTaG9ydGhh
bmQocHJvcElkLCBDU1NQcm9wZXJ0eU1pbldpZHRoLCBDU1NQcm9wZXJ0eU1heFdpZHRoLCBpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6Ci0gICAgICAgIHJldHVybiBwYXJz
ZVZpZXdwb3J0U2hvcnRoYW5kKHByb3BJZCwgQ1NTUHJvcGVydHlNaW5IZWlnaHQsIENTU1Byb3Bl
cnR5TWF4SGVpZ2h0LCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5ab29tOiAv
LyBhdXRvIHwgPG51bWJlcj4gfCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4
Wm9vbToKLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0bykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206IC8vIHpvb20gfCBmaXhlZAot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVab29tIHx8IGlkID09IENTU1ZhbHVlRml4ZWQpCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlPcmllbnRhdGlvbjogLy8gYXV0byB8IHBvcnRyYWl0IHwgbGFuZHNjYXBl
Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVQb3J0cmFp
dCB8fCBpZCA9PSBDU1NWYWx1ZUxhbmRzY2FwZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgIGlmICh2YWxpZFByaW1pdGl2ZSkgewotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IXBhcnNlZFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSAmJiAhaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBp
bXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VW
aWV3cG9ydFNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCBmaXJz
dCwgQ1NTUHJvcGVydHlJRCBzZWNvbmQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVk
IG51bVZhbHVlcyA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0KLSAgICBpZiAobnVtVmFsdWVzID4g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgcHJvcElkKTsKLQotICAgIGlmICghcGFyc2VWaWV3cG9ydFByb3BlcnR5KGZpcnN0LCBpbXBv
cnRhbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiBqdXN0IG9uZSB2YWx1
ZSBpcyBzdXBwbGllZCwgdGhlIHNlY29uZCB2YWx1ZQotICAgIC8vIGlzIGltcGxpY2l0bHkgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUgZmlyc3QgdmFsdWUuCi0gICAgaWYgKG51bVZhbHVlcyA9PSAxKQot
ICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLQotICAgIHJldHVybiBwYXJzZVZpZXdw
b3J0UHJvcGVydHkoc2Vjb25kLCBpbXBvcnRhbnQpOwotfQotI2VuZGlmCi0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIENTU1Byb3BlcnR5SUQgY3NzUHJvcGVydHlJ
RChjb25zdCBDaGFyYWN0ZXJUeXBlKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGggKyAxICsgMV07IC8vIDEg
dG8gdHVybiAiYXBwbGUiLyJraHRtbCIgaW50byAid2Via2l0IiwgMSBmb3IgbnVsbCBjaGFyYWN0
ZXIKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgQ2hhcmFjdGVyVHlwZSBjID0gcHJvcGVydHlOYW1lW2ldOwotICAgICAgICBpZiAoYyA9PSAw
IHx8IGMgPj0gMHg3RikKLSAgICAgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7IC8v
IGlsbGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IHRvQVNDSUlMb3dlcihjKTsK
LSAgICB9Ci0gICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotCi0gICAgY29uc3QgY2hhciogbmFt
ZSA9IGJ1ZmZlcjsKLSAgICBpZiAoYnVmZmVyWzBdID09ICctJykgewotI2lmIEVOQUJMRShMRUdB
Q1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykKLSAgICAgICAgLy8gSWYgdGhlIHByZWZpeCBpcyAtYXBw
bGUtIG9yIC1raHRtbC0sIGNoYW5nZSBpdCB0byAtd2Via2l0LS4KLSAgICAgICAgLy8gVGhpcyBt
YWtlcyB0aGUgc3RyaW5nIG9uZSBjaGFyYWN0ZXIgbG9uZ2VyLgotICAgICAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sZWdhY3lDU1NWZW5kb3JQcmVmaXhl
c0VuYWJsZWQoKQotICAgICAgICAgICAgJiYgKGhhc1ByZWZpeChidWZmZXIsIGxlbmd0aCwgIi1h
cHBsZS0iKSB8fCBoYXNQcmVmaXgoYnVmZmVyLCBsZW5ndGgsICIta2h0bWwtIikpKSB7Ci0gICAg
ICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIDcsIGJ1ZmZlciArIDYsIGxlbmd0aCArIDEgLSA2KTsK
LSAgICAgICAgICAgIG1lbWNweShidWZmZXIsICItd2Via2l0IiwgNyk7Ci0gICAgICAgICAgICAr
K2xlbmd0aDsKLSAgICAgICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBj
c3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhidWZmZXIsIG5hbWUsIGxlbmd0aCk7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICBjb25zdCBQcm9wZXJ0eSogaGFzaFRhYmxlRW50cnkgPSBmaW5kUHJvcGVy
dHkobmFtZSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gaGFzaFRhYmxlRW50cnkgPyBzdGF0aWNfY2Fz
dDxDU1NQcm9wZXJ0eUlEPihoYXNoVGFibGVFbnRyeS0+aWQpIDogQ1NTUHJvcGVydHlJbnZhbGlk
OwotfQotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0
aCA+IG1heENTU1Byb3BlcnR5TmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5
SW52YWxpZDsKLSAgICAKLSAgICByZXR1cm4gc3RyaW5nLmlzOEJpdCgpID8gY3NzUHJvcGVydHlJ
RChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKSA6IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQo
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQ
cm9wZXJ0eUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0aCA+IG1heENTU1Byb3BlcnR5TmFtZUxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKLSAgICAKLSAgICByZXR1cm4g
c3RyaW5nLmlzOEJpdCgpID8gY3NzUHJvcGVydHlJRChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVu
Z3RoKSA6IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQot
Ci0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBjc3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGNoYXIqJiBwcm9wZXJ0eU5hbWVBbGlhcywgdW5z
aWduZWQmIG5ld0xlbmd0aCkKLXsKLSAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICItd2Vi
a2l0LWh5cGhlbmF0ZS1sb2NhbGUiKSkgewotICAgICAgICAvLyBXb3JrZWQgaW4gaU9TIDQuMi4K
LSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgd2Via2l0TG9jYWxlW10gPSAiLXdlYmtpdC1sb2Nh
bGUiOwotICAgICAgICBwcm9wZXJ0eU5hbWVBbGlhcyA9IHdlYmtpdExvY2FsZTsKLSAgICAgICAg
bmV3TGVuZ3RoID0gc3RybGVuKHdlYmtpdExvY2FsZSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXN0
YXRpYyBib29sIGlzQXBwbGVMZWdhY3lDc3NWYWx1ZUtleXdvcmQoY29uc3QgY2hhciogdmFsdWVL
ZXl3b3JkLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgYXBwbGVQ
cmVmaXhbXSA9ICItYXBwbGUtIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBhcHBsZVN5c3RlbVBy
ZWZpeFtdID0gIi1hcHBsZS1zeXN0ZW0iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhcHBsZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXRBY3RpdmUgPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVBcHBsZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXRBY3RpdmUpOwotCi0gICAgcmV0dXJuIGhhc1ByZWZpeCh2YWx1
ZUtleXdvcmQsIGxlbmd0aCwgYXBwbGVQcmVmaXgpCi0gICAgICAgICYmICFoYXNQcmVmaXgodmFs
dWVLZXl3b3JkLCBsZW5ndGgsIGFwcGxlU3lzdGVtUHJlZml4KQotICAgICAgICAmJiAhV1RGOjpl
cXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odmFsdWVLZXl3b3JkKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGFwcGxlV2lyZWxlc3NQbGF5YmFja1RhcmdldEFjdGl2
ZSksIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIENTU1ZhbHVlSUQgY3NzVmFsdWVLZXl3b3JkSUQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdmFs
dWVLZXl3b3JkLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY2hhciBidWZmZXJbbWF4Q1NTVmFs
dWVLZXl3b3JkTGVuZ3RoICsgMSArIDFdOyAvLyAxIHRvIHR1cm4gImFwcGxlIi8ia2h0bWwiIGlu
dG8gIndlYmtpdCIsIDEgZm9yIG51bGwgY2hhcmFjdGVyCi0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9IHZhbHVl
S2V5d29yZFtpXTsKLSAgICAgICAgaWYgKGMgPT0gMCB8fCBjID49IDB4N0YpCi0gICAgICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOyAvLyBpbGxlZ2FsIGtleXdvcmQuCi0gICAgICAgIGJ1
ZmZlcltpXSA9IFdURjo6dG9BU0NJSUxvd2VyKGMpOwotICAgIH0KLSAgICBidWZmZXJbbGVuZ3Ro
XSA9ICdcMCc7Ci0KLSAgICBpZiAoYnVmZmVyWzBdID09ICctJykgewotICAgICAgICAvLyBJZiB0
aGUgcHJlZml4IGlzIC1hcHBsZS0gb3IgLWtodG1sLSwgY2hhbmdlIGl0IHRvIC13ZWJraXQtLgot
ICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBzdHJpbmcgb25lIGNoYXJhY3RlciBsb25nZXIuCi0g
ICAgICAgIC8vIE9uIGlPUyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB2YWx1ZXMgc3RhcnRpbmcg
d2l0aCAtYXBwbGUtc3lzdGVtIHRvIC13ZWJraXQtc3lzdGVtLgotICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgbWFuZ2xpbmcgd2l0aG91dCBicmVha2luZyB0aGUgd2ViLgotICAgICAgICBp
ZiAoaXNBcHBsZUxlZ2FjeUNzc1ZhbHVlS2V5d29yZChidWZmZXIsIGxlbmd0aCkgfHwgaGFzUHJl
Zml4KGJ1ZmZlciwgbGVuZ3RoLCAiLWtodG1sLSIpKSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKGJ1
ZmZlciArIDcsIGJ1ZmZlciArIDYsIGxlbmd0aCArIDEgLSA2KTsKLSAgICAgICAgICAgIG1lbWNw
eShidWZmZXIsICItd2Via2l0IiwgNyk7Ci0gICAgICAgICAgICArK2xlbmd0aDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNvbnN0IFZhbHVlKiBoYXNoVGFibGVFbnRyeSA9IGZpbmRWYWx1ZShi
dWZmZXIsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGhhc2hUYWJsZUVudHJ5ID8gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVJRD4oaGFzaFRhYmxlRW50cnktPmlkKSA6IENTU1ZhbHVlSW52YWxpZDsKLX0KLQot
Q1NTVmFsdWVJRCBjc3NWYWx1ZUtleXdvcmRJRChjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0aCA+
IG1heENTU1ZhbHVlS2V5d29yZExlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxp
ZDsKLQotICAgIHJldHVybiBzdHJpbmcuaXM4Qml0KCkgPyBjc3NWYWx1ZUtleXdvcmRJRChzdHJp
bmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKSA6IGNzc1ZhbHVlS2V5d29yZElEKHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKGNvbnN0IENo
YXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotCi0gICAgLy8gLT8KLSAg
ICBpZiAoY2hhcmFjdGVycyAhPSBlbmQgJiYgY2hhcmFjdGVyc1swXSA9PSAnLScpCi0gICAgICAg
ICsrY2hhcmFjdGVyczsKLQotICAgIC8vIHtubXN0YXJ0fQotICAgIGlmIChjaGFyYWN0ZXJzID09
IGVuZCB8fCAhKGNoYXJhY3RlcnNbMF0gPT0gJ18nIHx8IGNoYXJhY3RlcnNbMF0gPj0gMTI4IHx8
IGlzQVNDSUlBbHBoYShjaGFyYWN0ZXJzWzBdKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICArK2NoYXJhY3RlcnM7Ci0KLSAgICAvLyB7bm1jaGFyfSoKLSAgICBmb3IgKDsgY2hhcmFjdGVy
cyAhPSBlbmQ7ICsrY2hhcmFjdGVycykgewotICAgICAgICBpZiAoIShjaGFyYWN0ZXJzWzBdID09
ICdfJyB8fCBjaGFyYWN0ZXJzWzBdID09ICctJyB8fCBjaGFyYWN0ZXJzWzBdID49IDEyOCB8fCBp
c0FTQ0lJQWxwaGFudW1lcmljKGNoYXJhY3RlcnNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gImlkZW50IiBmcm9tIHRo
ZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlcwotc3RhdGlj
IGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgpOwotICAgIHJldHVybiBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NTU1Rva2VuaXplclVSTChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAKLSAgICBmb3IgKDsgY2hh
cmFjdGVycyAhPSBlbmQ7ICsrY2hhcmFjdGVycykgewotICAgICAgICBDaGFyYWN0ZXJUeXBlIGMg
PSBjaGFyYWN0ZXJzWzBdOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgIGNhc2Ug
JyEnOgotICAgICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICBjYXNlICckJzoKLSAgICAg
ICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjIDwgJyon
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYg
KGMgPD0gJ34nKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBp
ZiAoYyA8IDEyOCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAidXJsIiBmcm9tIHRoZSBD
U1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlcwotc3RhdGljIGJv
b2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGlzQ1NTVG9rZW5pemVyVVJMKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJl
dHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19
Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFN0
cmluZyBxdW90ZUNTU1N0cmluZ0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGb3IgZWZmaWNpZW5jeSwgd2UgZmlyc3Qg
cHJlLWNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBxdW90ZWQgc3RyaW5nLCB0aGVuIHdlIGJ1
aWxkIHRoZSBhY3R1YWwgb25lLgotICAgIC8vIFBsZWFzZSBzZWUgYmVsb3cgZm9yIHRoZSBhY3R1
YWwgbG9naWMuCi0gICAgdW5zaWduZWQgcXVvdGVkU3RyaW5nU2l6ZSA9IDI7IC8vIFR3byBxdW90
ZXMgc3Vycm91bmRpbmcgdGhlIGVudGlyZSBzdHJpbmcuCi0gICAgYm9vbCBhZnRlckVzY2FwZSA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICBDaGFyYWN0ZXJUeXBlIGNoID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYgKGNoID09
ICdcXCcgfHwgY2ggPT0gJ1wnJykgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSArPSAy
OwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChj
aCA8IDB4MjAgfHwgY2ggPT0gMHg3RikgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSAr
PSAyICsgKGNoID49IDB4MTApOwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSArPSAxICsgKGFmdGVy
RXNjYXBlICYmIChpc0FTQ0lJSGV4RGlnaXQoY2gpIHx8IGNoID09ICcgJykpOwotICAgICAgICAg
ICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIocXVvdGVkU3RyaW5nU2l6ZSk7Ci0gICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlcltpbmRleCsrXSA9ICdcJyc7Ci0gICAgYWZ0ZXJFc2Nh
cGUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChj
aCA9PSAnXFwnIHx8IGNoID09ICdcJycpIHsKLSAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9
ICdcXCc7Ci0gICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBjaDsKLSAgICAgICAgICAgIGFm
dGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDIwIHx8IGNoID09
IDB4N0YpIHsgLy8gQ29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gJ1xcJzsKLSAgICAgICAgICAgIHBsYWNlQnl0ZUFzSGV4Q29tcHJlc3NJZlBvc3NpYmxl
KGNoLCBidWZmZXIsIGluZGV4LCBMb3dlcmNhc2UpOwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUg
PSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU3BhY2UgY2hhcmFjdGVy
IG1heSBiZSByZXF1aXJlZCB0byBzZXBhcmF0ZSBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlIGFu
ZCBub3JtYWwgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChhZnRlckVzY2FwZSAmJiAoaXNB
U0NJSUhleERpZ2l0KGNoKSB8fCBjaCA9PSAnICcpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltp
bmRleCsrXSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGNoOwotICAgICAg
ICAgICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBidWZmZXJb
aW5kZXgrK10gPSAnXCcnOwotCi0gICAgQVNTRVJUKHF1b3RlZFN0cmluZ1NpemUgPT0gaW5kZXgp
OwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci19Ci0KLS8vIFdlIHVzZSBzaW5n
bGUgcXVvdGVzIGZvciBub3cgYmVjYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4K
LVN0cmluZyBxdW90ZUNTU1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGV4cGFuZHMgZWFjaCBjaGFyYWN0ZXIgdG8gYXQgbW9zdCAzIGNoYXJhY3Rl
cnMgKCdcdTAwMTAnIC0+ICdcJyAnMScgJzAnKSBhcyB3ZWxsIGFzIGFkZHMKLSAgICAvLyAyIHF1
b3RlIGNoYXJhY3RlcnMgKGJlZm9yZSBhbmQgYWZ0ZXIpLiBNYWtlIHN1cmUgdGhlIHJlc3VsdGlu
ZyBzaXplICgzICogbGVuZ3RoICsgMikgd2lsbCBub3Qgb3ZlcmZsb3cgdW5zaWduZWQuCi0KLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiXCdcJyIpOwotCi0gICAgaWYgKGxlbmd0aCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDMgLSAyKQotICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBxdW90ZUNTU1N0cmluZ0ludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIHJldHVybiBxdW90ZUNTU1N0cmluZ0ludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIHF1b3RlQ1NTU3RyaW5nSWZOZWVkZWQoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihz
dHJpbmcpID8gc3RyaW5nIDogcXVvdGVDU1NTdHJpbmcoc3RyaW5nKTsKLX0KLQotU3RyaW5nIHF1
b3RlQ1NTVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGlz
Q1NTVG9rZW5pemVyVVJMKHN0cmluZykgPyBzdHJpbmcgOiBxdW90ZUNTU1N0cmluZyhzdHJpbmcp
OwotfQotCi1ib29sIGlzVmFsaWROdGhUb2tlbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHRva2Vu
KQotewotICAgIC8vIFRoZSB0b2tlbml6ZXIgY2hlY2tzIGZvciB0aGUgY29uc3RydWN0IG9mIGFu
K2IuCi0gICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIHtpZGVudH0gcnVsZSBwcmVjZWRlcyB0aGUg
e250aH0gcnVsZSwgc29tZSBvZiB0aG9zZQotICAgIC8vIHRva2VucyBhcmUgaWRlbnRpZmllZCBh
cyBzdHJpbmcgbGl0ZXJhbC4gRnVydGhlcm1vcmUgd2UgbmVlZCB0byBhY2NlcHQKLSAgICAvLyAi
b2RkIiBhbmQgImV2ZW4iIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRvIGFuK2IuCi0gICAgcmV0dXJu
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAib2RkIikKLSAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJldmVuIikKLSAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJuIikKLSAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICItbiIpOwotfQotCi19CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAx
MCAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NHcmFkaWVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgotI2luY2x1
ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5o
IgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIk1lZGlhUXVlcnkuaCIKLSNpbmNsdWRlICJTb3VyY2VTaXplTGlzdC5oIgotI2luY2x1
ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZhbHVlLmgi
Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgotCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9V
VCkKLSNpbmNsdWRlICJHcmlkQXJlYS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQW5pbWF0aW9uUGFyc2VDb250ZXh0OwotY2xhc3MgQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlOwotY2xhc3MgQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlOwotY2xhc3MgQ1NTUHJp
bWl0aXZlVmFsdWU7Ci1jbGFzcyBDU1NTZWxlY3Rvckxpc3Q7Ci1jbGFzcyBDU1NWYWx1ZTsKLWNs
YXNzIENTU1ZhbHVlTGlzdDsKLWNsYXNzIENTU0Jhc2ljU2hhcGU7Ci1jbGFzcyBDU1NCYXNpY1No
YXBlQ2lyY2xlOwotY2xhc3MgQ1NTQmFzaWNTaGFwZUVsbGlwc2U7Ci1jbGFzcyBDU1NCYXNpY1No
YXBlSW5zZXQ7Ci1jbGFzcyBDU1NCYXNpY1NoYXBlUGF0aDsKLWNsYXNzIENTU0Jhc2ljU2hhcGVQ
b2x5Z29uOwotY2xhc3MgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlOwotY2xhc3MgQ1NTSW1hZ2VTZXRW
YWx1ZTsKLWNsYXNzIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU7Ci1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFzcyBN
ZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKLWNsYXNzIE1lZGlhUXVlcnlTZXQ7Ci1jbGFzcyBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOwotY2xhc3MgU1ZHQ29sb3I7Ci1jbGFzcyBTVkdQYWludDsKLWNsYXNz
IFN0eWxlS2V5ZnJhbWU7Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2hvcnRoYW5kOwotY2xhc3MgU3R5
bGVSdWxlOwotY2xhc3MgU3R5bGVSdWxlQmFzZTsKLWNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwot
Y2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwotY2xhc3MgU3R5bGVSdWxlTWVkaWE7Ci1jbGFzcyBT
dHlsZVJ1bGVQYWdlOwotY2xhc3MgU3R5bGVSdWxlUmVnaW9uOwotY2xhc3MgU3R5bGVSdWxlU3Vw
cG9ydHM7Ci1jbGFzcyBTdHlsZVJ1bGVWaWV3cG9ydDsKLWNsYXNzIFN0eWxlS2V5ZnJhbWU7Ci1j
bGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBTdHlsZWRFbGVtZW50OwotY2xhc3MgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU7Ci0KLWNsYXNzIENTU1BhcnNlciB7Ci0gICAgZnJpZW5kIGlu
bGluZSBpbnQgY3NzeXlsZXgodm9pZCosIENTU1BhcnNlciopOwotCi1wdWJsaWM6Ci0gICAgc3Ry
dWN0IExvY2F0aW9uOwotICAgIGVudW0gU3ludGF4RXJyb3JUeXBlIHsKLSAgICAgICAgUHJvcGVy
dHlEZWNsYXJhdGlvbkVycm9yLAotICAgICAgICBHZW5lcmFsU3ludGF4RXJyb3IKLSAgICB9Owot
Ci0gICAgZW51bSBjbGFzcyBQYXJzZVJlc3VsdCB7Ci0gICAgICAgIENoYW5nZWQsCi0gICAgICAg
IFVuY2hhbmdlZCwKLSAgICAgICAgRXJyb3IKLSAgICB9OwotCi0gICAgY2xhc3MgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotICAgICAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQotICAgICAgICB7IH0KLQotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAgIG9wZXJhdG9yIENTU1BhcnNlclZhbHVlJigp
IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotICAgICAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxj
dWxhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY3VsYXRpb247IH0KLSAgICAgICAgdm9pZCBz
ZXRDYWxjdWxhdGlvbihSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiYmIGNhbGN1bGF0aW9uKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbihtX3ZhbHVlKSk7Ci0gICAgICAg
ICAgICBtX2NhbGN1bGF0aW9uID0gY2FsY3VsYXRpb247Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBtX3ZhbHVlOwotICAgICAgICBSZWZQdHI8Q1NT
Q2FsY1ZhbHVlPiBtX2NhbGN1bGF0aW9uOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBD
U1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5D
U1NQYXJzZXIoKTsKLQotICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBUZXh0UG9zaXRpb24mLCBSdWxlU291cmNlRGF0YUxpc3QqLCBi
b29sIGxvZ0Vycm9ycyk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHls
ZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgYm9vbCBwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
c3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2Rl
LCBTdHlsZVNoZWV0Q29udGVudHMqKTsKLSAgICBzdGF0aWMgUGFyc2VSZXN1bHQgcGFyc2VDdXN0
b21Qcm9wZXJ0eVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBBdG9taWNTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNl
ck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgc3Rh
dGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0
cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShD
U1NWYWx1ZUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29s
b3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVu
dCwgVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGFy
c2VEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgU3RyaW5nJiwgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiYmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KTsKLSAgICBzdGF0aWMgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQs
IFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxz
ZSk7Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+
JiYsIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwotICAgIHZvaWQgcm9s
bGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKTsKLSAgICBib29sIGhhc1Byb3BlcnRpZXMoKSBj
b25zdCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQotICAgIHZvaWQg
YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWY8Q1NT
VmFsdWU+JiYsIGJvb2wpOwotCi0gICAgYm9vbCBwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZTRWYWx1ZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVydGll
cywgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDb250ZW50KENTU1Byb3BlcnR5SUQs
IGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlUXVvdGVzKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQWx0KENTU1Byb3BlcnR5SUQsIGJvb2wgaW1w
b3J0YW50KTsKLSAgICAKLSAgICBib29sIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihi
b29sIGltcG9ydGFudCwgQ1NTVmFsdWVJRCk7Ci0gICAgCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKTsKLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VCYWNrZ3JvdW5kQ29sb3IoKTsKLQotICAgIHN0cnVj
dCBTb3VyY2VTaXplIHsKLSAgICAgICAgTWVkaWFRdWVyeUV4cHJlc3Npb24gZXhwcmVzc2lvbjsK
LSAgICAgICAgUmVmPENTU1ZhbHVlPiBsZW5ndGg7Ci0KLSAgICAgICAgU291cmNlU2l6ZShTb3Vy
Y2VTaXplJiYpOwotICAgICAgICBTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYsIFJl
ZjxDU1NWYWx1ZT4mJik7Ci0gICAgfTsKLSAgICBWZWN0b3I8U291cmNlU2l6ZT4gcGFyc2VTaXpl
c0F0dHJpYnV0ZShTdHJpbmdWaWV3KTsKLSAgICBPcHRpb25hbDxTb3VyY2VTaXplPiBzb3VyY2VT
aXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYsIENTU1BhcnNlclZhbHVlJik7Ci0KLSAgICBib29s
IHBhcnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
LQotICAgIGVudW0gRmlsbFBvc2l0aW9uRmxhZyB7IEludmFsaWRGaWxsUG9zaXRpb24gPSAwLCBB
bWJpZ3VvdXNGaWxsUG9zaXRpb24gPSAxLCBYRmlsbFBvc2l0aW9uID0gMiwgWUZpbGxQb3NpdGlv
biA9IDQgfTsKLSAgICBlbnVtIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlIHsgUmVzb2x2ZVZhbHVl
c0FzUGVyY2VudCA9IDAsIFJlc29sdmVWYWx1ZXNBc0tleXdvcmQgPSAxIH07Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJW
YWx1ZUxpc3QmLCB1bnNpZ25lZCYgY3VtdWxhdGl2ZUZsYWdzLCBGaWxsUG9zaXRpb25GbGFnJiBp
bmRpdmlkdWFsRmxhZywgRmlsbFBvc2l0aW9uUGFyc2luZ01vZGUgPSBSZXNvbHZlVmFsdWVzQXNQ
ZXJjZW50KTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlUG9zaXRpb25YKENT
U1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VQ
b3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgdm9pZCBwYXJzZTJWYWx1ZXNGaWxs
UG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLSAgICBib29sIGlzUG90ZW50aWFsUG9zaXRp
b25WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIHZvaWQgcGFyc2VGaWxsUG9zaXRpb24oQ1NT
UGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mKTsKLSAgICB2b2lkIHBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQ
YXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiwgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiYmKTsKLSAgICB2b2lkIHBhcnNlNFZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJW
YWx1ZUxpc3QmLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmKTsKLQotICAgIHZvaWQgcGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQ
dHI8Q1NTVmFsdWU+Jik7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUZpbGxT
aXplKENTU1Byb3BlcnR5SUQsIGJvb2wgJmFsbG93Q29tbWEpOwotCi0gICAgYm9vbCBwYXJzZUZp
bGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwg
Q1NTUHJvcGVydHlJRCYgcHJvcElkMiwgUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1
ZT4mKTsKLSAgICBib29sIHBhcnNlRmlsbFNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBD
U1NQcm9wZXJ0eUlEKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCBpbXBvcnRh
bnQpOwotCi0gICAgdm9pZCBhZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUmVm
PENTU1ZhbHVlPiYmIHJ2YWwpOwotICAgIHZvaWQgYWRkQW5pbWF0aW9uVmFsdWUoUmVmUHRyPENT
U1ZhbHVlPiYgbHZhbCwgUmVmPENTU1ZhbHVlPiYmIHJ2YWwpOwotCi0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvbkRlbGF5KCk7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25EdXJhdGlvbigpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25GaWxsTW9kZSgpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25OYW1lKCk7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb25QYXJzZUNvbnRl
eHQmKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
KTsKLSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlQW5pbWF0aW9uVHJpZ2dlcigpOwotI2VuZGlmCi0gICAgc3RhdGljIFZlY3Rvcjxk
b3VibGU+IHBhcnNlS2V5ZnJhbWVTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wg
cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJz
ZXJWYWx1ZUxpc3QmKTsKLSAgICBPcHRpb25hbDxkb3VibGU+IHBhcnNlU3ByaW5nVGltaW5nRnVu
Y3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLSAgICBib29sIHBhcnNlQW5pbWF0aW9u
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYsIEFuaW1hdGlvblBhcnNl
Q29udGV4dCYpOwotICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5
SUQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENT
U1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgaXNTcHJpbmdUaW1pbmdG
dW5jdGlvbkVuYWJsZWQoKSBjb25zdDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cGFyc2VDb2x1bW5XaWR0aCgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VD
b2x1bW5Db3VudCgpOwotICAgIGJvb2wgcGFyc2VDb2x1bW5zU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KTsKLQotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgaXNUZXh0
QXV0b3NpemluZ0VuYWJsZWQoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19HUklE
X0xBWU9VVCkKLSAgICBib29sIGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSBjb25zdDsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlR3JpZFBvc2l0aW9uKCk7Ci0gICAgYm9vbCBwYXJzZUdyaWRJ
dGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotICAg
IGVudW0gVHJhY2tMaXN0VHlwZSB7IEdyaWRUZW1wbGF0ZSwgR3JpZFRlbXBsYXRlTm9SZXBlYXQs
IEdyaWRBdXRvIH07Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUZW1wbGF0ZUNvbHVt
bnMoVHJhY2tMaXN0VHlwZSA9IEdyaWRUZW1wbGF0ZSk7Ci0gICAgYm9vbCBwYXJzZUdyaWRUZW1w
bGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFy
c2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VH
cmlkU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlR3JpZEFyZWFTaG9y
dGhhbmQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VHcmlkR2FwU2hvcnRoYW5kKGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChSZWZQ
dHI8Q1NTVmFsdWU+Jik7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUcmFja0xpc3Qo
VHJhY2tMaXN0VHlwZSk7Ci0gICAgYm9vbCBwYXJzZUdyaWRUcmFja1JlcGVhdEZ1bmN0aW9uKENT
U1ZhbHVlTGlzdCYsIGJvb2wmIGlzQXV0b1JlcGVhdCwgYm9vbCYgYWxsVHJhY2tzQXJlRml4ZWRT
aXplZCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUcmFja1NpemUoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBpbnB1dExpc3QpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgcGFyc2VHcmlkVGVtcGxh
dGVBcmVhc1JvdyhOYW1lZEdyaWRBcmVhTWFwJiwgY29uc3QgdW5zaWduZWQsIHVuc2lnbmVkJik7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzKCk7Ci0gICAgYm9v
bCBwYXJzZUdyaWRMaW5lTmFtZXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgQ1NTVmFsdWVMaXN0Jiwg
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlKiA9IG51bGxwdHIpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VHcmlkQXV0b0Zsb3coQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0jZW5kaWYKLQotICAgIGJv
b2wgcGFyc2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsK
LQotICAgIGJvb2wgcGFyc2VDbGlwU2hhcGUoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQp
OwotCi0gICAgYm9vbCBwYXJzZUxlZ2FjeVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1w
b3J0YW50KTsKLSAgICBib29sIHBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihDU1NQ
cm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgUmVmUHRyPENTU0NvbnRlbnREaXN0cmli
dXRpb25WYWx1ZT4gcGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwot
Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNoYXBl
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHBhcnNlQmFzaWNTaGFwZUFuZE9yQm94KENTU1Byb3BlcnR5SUQgcHJvcElkKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQmFzaWNTaGFwZSgpOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VTaGFwZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSYpOwotICAg
IFJlZlB0cjxDU1NCYXNpY1NoYXBlQ2lyY2xlPiBwYXJzZUJhc2ljU2hhcGVDaXJjbGUoQ1NTUGFy
c2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVFbGxpcHNlPiBwYXJzZUJh
c2ljU2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NCYXNp
Y1NoYXBlUG9seWdvbj4gcGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
KTsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZVBhdGg+IHBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NT
UGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4gcGFyc2VC
YXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0KLSAgICBib29sIHBhcnNlRm9u
dChib29sIGltcG9ydGFudCk7Ci0gICAgdm9pZCBwYXJzZVN5c3RlbUZvbnQoYm9vbCBpbXBvcnRh
bnQpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhbWlseSgpOwotCi0gICAg
Ym9vbCBwYXJzZUNvdW50ZXIoQ1NTUHJvcGVydHlJRCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBp
bXBvcnRhbnQpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb3VudGVyQ29u
dGVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgY291bnRlcnMpOwotCi0gICAgYm9v
bCBwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYsIGludCogY29sb3JWYWx1ZXMs
IGJvb2wgcGFyc2VBbHBoYSk7Ci0gICAgYm9vbCBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VmFsdWUmLCBkb3VibGUqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEpOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb2xvcihDU1NQYXJzZXJWYWx1ZSogPSBudWxscHRy
KTsKLSAgICBib29sIHBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmLCBSR0JBMzIm
KTsKLSAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgQ1NTU2VsZWN0b3JMaXN0
Jik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotICAgIHN0YXRpYyBib29s
IGZhc3RQYXJzZUNvbG9yKFJHQkEzMiYsIGNvbnN0IFN0cmluZ1R5cGUmLCBib29sIHN0cmljdCk7
Ci0KLSAgICBib29sIHBhcnNlTGluZUhlaWdodChib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZUZvbnRTaXplKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlRm9udFdlaWdodChi
b29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRTeW50aGVzaXMoYm9vbCBpbXBvcnRh
bnQpOwotICAgIGJvb2wgcGFyc2VGb250RmFjZVNyYygpOwotICAgIGJvb2wgcGFyc2VGb250RmFj
ZVVuaWNvZGVSYW5nZSgpOwotCi0gICAgYm9vbCBwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBwYXJzZVNWR1Bh
aW50KCk7Ci0gICAgUmVmUHRyPFNWR0NvbG9yPiBwYXJzZVNWR0NvbG9yKCk7Ci0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBwYXJzZVBhaW50T3JkZXIoKTsKLQotICAgIC8vIENTUzMgUGFyc2luZyBSb3V0
aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKLSAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBDU1NQcm9wZXJ0eUlEKTsK
LSAgICBib29sIHBhcnNlQm9yZGVySW1hZ2UoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVl
PiYsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVJl
cGVhdChSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlU2xpY2Uo
Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4mKTsKLSAgICBi
b29sIHBhcnNlQm9yZGVySW1hZ2VXaWR0aChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0g
ICAgYm9vbCBwYXJzZUJvcmRlckltYWdlT3V0c2V0KFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
KTsKLSAgICBib29sIHBhcnNlQm9yZGVyUmFkaXVzKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0
YW50KTsKLQotICAgIGJvb2wgcGFyc2VBc3BlY3RSYXRpbyhib29sIGltcG9ydGFudCk7Ci0KLSAg
ICBib29sIHBhcnNlUmVmbGVjdChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAg
ICBib29sIHBhcnNlRmxleChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50
KTsKLQotICAgIC8vIEltYWdlIGdlbmVyYXRvcnMKLSAgICBib29sIHBhcnNlQ2FudmFzKENTU1Bh
cnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKLSAgICBib29sIHBhcnNlTmFtZWRJ
bWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBib29s
IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NW
YWx1ZT4mKTsKLSAgICBib29sIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNl
clZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRp
bmcpOwotICAgIGJvb2wgcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZyk7
Ci0gICAgYm9vbCBwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0
cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwotICAgIGJvb2wgcGFy
c2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jiwg
Q1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNlR3JhZGllbnRDb2xv
clN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYsIENTU0dyYWRpZW50VmFsdWUmLCBib29sIGV4cGVj
dENvbW1hKTsKLQotICAgIGJvb2wgcGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYsIGJvb2wgcHJlZml4ZWQpOwotCi0jaWYgRU5BQkxFKENTU19JTUFH
RV9SRVNPTFVUSU9OKQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlSW1hZ2VSZXNvbHV0
aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBwYXJzZUltYWdl
U2V0KCk7Ci0KLSAgICBib29sIHBhcnNlRmlsdGVySW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYpOwotCi0gICAgYm9vbCBwYXJzZUZpbHRlcihDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYpOwotICAgIFJlZlB0cjxXZWJLaXRDU1NGaWx0
ZXJWYWx1ZT4gcGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlclZhbHVlTGlzdCYs
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlKTsKLQotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VDbGlwUGF0aCgpOwotCi0gICAgc3RhdGljIGJvb2wgaXNCbGVuZE1v
ZGUoQ1NTVmFsdWVJRCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDb21wb3NpdGVPcGVyYXRvcihDU1NW
YWx1ZUlEKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlVHJhbnNmb3JtKCk7Ci0g
ICAgUmVmUHRyPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKENT
U1BhcnNlclZhbHVlJik7Ci0gICAgYm9vbCBwYXJzZVRyYW5zZm9ybU9yaWdpbihDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElk
MiwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBw
YXJzZVBlcnNwZWN0aXZlT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlE
JiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLQotICAgIGJvb2wgcGFyc2VUZXh0
RW1waGFzaXNTdHlsZShib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRleHRFbXBoYXNp
c1Bvc2l0aW9uKGJvb2wgaW1wb3J0YW50KTsKLQotICAgIHZvaWQgYWRkVGV4dERlY29yYXRpb25Q
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlVGV4dERlY29yYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGJvb2wgaW1w
b3J0YW50KTsKLSAgICBib29sIHBhcnNlVGV4dFVuZGVybGluZVBvc2l0aW9uKGJvb2wgaW1wb3J0
YW50KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlVGV4dEluZGVudCgpOwotICAg
IAotICAgIGJvb2wgcGFyc2VIYW5naW5nUHVuY3R1YXRpb24oYm9vbCBpbXBvcnRhbnQpOwotCi0g
ICAgYm9vbCBwYXJzZUxpbmVCb3hDb250YWluKGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQdHI8
Q1NTQ2FsY1ZhbHVlPiBwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiwgQ2FsY3VsYXRp
b25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKLQotICAgIGJvb2wgcGFyc2VGb250RmVhdHVyZVRhZyhD
U1NWYWx1ZUxpc3QmKTsKLSAgICBib29sIHBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyhib29sIGlt
cG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlRmxvd1RocmVhZChDU1NQcm9wZXJ0eUlELCBib29s
IGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVJlZ2lvblRocmVhZChDU1NQcm9wZXJ0eUlELCBi
b29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9v
bCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNpdCk7Ci0gICAg
Ym9vbCBwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhib29sIGltcG9ydGFudCwgYm9vbCB1bmtub3du
SXNGYWlsdXJlLCBib29sIGltcGxpY2l0KTsKLSAgICBib29sIHBhcnNlRm9udFZhcmlhbnRFYXN0
QXNpYW4oYm9vbCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNp
dCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50KGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJv
b2wgcGFyc2VXaWxsQ2hhbmdlKGJvb2wgaW1wb3J0YW50KTsKLQotICAgIC8vIEZhc3RlciB0aGFu
IGRvaW5nIGEgbmV3L2RlbGV0ZSBlYWNoIHRpbWUgc2luY2UgaXQga2VlcHMgb25lIHZlY3Rvci4K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4+PiBjcmVhdGVTZWxlY3RvclZlY3RvcigpOwotICAgIHZvaWQgcmVjeWNsZVNlbGVjdG9y
VmVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4+KTsKLQotICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0ZUltcG9ydFJ1
bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYpOwotICAg
IFJlZlB0cjxTdHlsZUtleWZyYW1lPiBjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3Qm
KTsKLSAgICBSZWY8U3R5bGVSdWxlS2V5ZnJhbWVzPiBjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0
IFN0cmluZyYsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4p
OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiBSdWxlTGlzdDsK
LSAgICBSZWY8U3R5bGVSdWxlTWVkaWE+IGNyZWF0ZU1lZGlhUnVsZShSZWZQdHI8TWVkaWFRdWVy
eVNldD4mJiwgUnVsZUxpc3QqKTsKLSAgICBSZWY8U3R5bGVSdWxlTWVkaWE+IGNyZWF0ZUVtcHR5
TWVkaWFSdWxlKFJ1bGVMaXN0Kik7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZT4gY3JlYXRlU3R5bGVS
dWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piogc2VsZWN0b3Jz
KTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlRm9udEZhY2U+IGNyZWF0ZUZvbnRGYWNlUnVsZSgpOwot
ICAgIFJlZlB0cjxTdHlsZVJ1bGVQYWdlPiBjcmVhdGVQYWdlUnVsZShzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZVJl
Z2lvbj4gY3JlYXRlUmVnaW9uUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4qIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOwotICAgIHZvaWQgY3Jl
YXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKLSAgICBSZWY8U3R5
bGVSdWxlU3VwcG9ydHM+IGNyZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9y
dGVkLCBSdWxlTGlzdCopOwotICAgIHZvaWQgbWFya1N1cHBvcnRzUnVsZUhlYWRlclN0YXJ0KCk7
Ci0gICAgdm9pZCBtYXJrU3VwcG9ydHNSdWxlSGVhZGVyRW5kKCk7Ci0gICAgUmVmPENTU1J1bGVT
b3VyY2VEYXRhPiBwb3BTdXBwb3J0c1J1bGVEYXRhKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RGVjbGFy
YXRpb25zRm9yTWFyZ2luQm94KCk7Ci0gICAgdm9pZCBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5C
b3goKTsKLQotICAgIHZvaWQgYWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7Ci0gICAgUXVhbGlmaWVkTmFtZSBkZXRlcm1pbmVO
YW1lSW5OYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKTsKLQotICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVu
dE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJik7Ci0gICAgdm9pZCByZXdyaXRl
U3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBD
U1NQYXJzZXJTZWxlY3RvciYsIGJvb2wgaXNOYW1lc3BhY2VQbGFjZWhvbGRlciA9IGZhbHNlKTsK
LSAgICB2b2lkIHJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKENTU1BhcnNl
clNlbGVjdG9yJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiByZXdy
aXRlU3BlY2lmaWVycyhzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKLQotICAgIHZvaWQgaW52YWxpZEJsb2NrSGl0
KCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwotICAg
IHZvaWQgdXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1ZXJ5U2V0Jik7Ci0KLSAgICB2b2lkIGNs
ZWFyUHJvcGVydGllcygpOwotCi0gICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3Jl
YXRlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxp
ZFBhcnNlZFByb3BlcnRpZXNDb3VudDsKLQotICAgIENTU1BhcnNlckNvbnRleHQgbV9jb250ZXh0
OwotCi0gICAgYm9vbCBtX2ltcG9ydGFudCB7IGZhbHNlIH07Ci0gICAgQ1NTUHJvcGVydHlJRCBt
X2lkIHsgQ1NTUHJvcGVydHlJbnZhbGlkIH07Ci0gICAgQXRvbWljU3RyaW5nIG1fY3VzdG9tUHJv
cGVydHlOYW1lOwotICAgIFN0eWxlU2hlZXRDb250ZW50cyogbV9zdHlsZVNoZWV0IHsgbnVsbHB0
ciB9OwotICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7Ci0gICAgUmVmUHRyPFN0eWxl
S2V5ZnJhbWU+IG1fa2V5ZnJhbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IG1f
bWVkaWFRdWVyeTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFNvdXJjZVNpemU+PiBtX3Nv
dXJjZVNpemVMaXN0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IG1f
dmFsdWVMaXN0OwotICAgIGJvb2wgbV9zdXBwb3J0c0NvbmRpdGlvbiB7IGZhbHNlIH07Ci0KLSAg
ICBQYXJzZWRQcm9wZXJ0eVZlY3RvciBtX3BhcnNlZFByb3BlcnRpZXM7Ci0gICAgQ1NTU2VsZWN0
b3JMaXN0KiBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgeyBudWxscHRyIH07Ci0KLSAg
ICB1bnNpZ25lZCBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggeyBpbnZhbGlk
UGFyc2VkUHJvcGVydGllc0NvdW50IH07Ci0KLSAgICBpbnQgbV9pblBhcnNlU2hvcnRoYW5kIHsg
MCB9OwotICAgIENTU1Byb3BlcnR5SUQgbV9jdXJyZW50U2hvcnRoYW5kIHsgQ1NTUHJvcGVydHlJ
bnZhbGlkIH07Ci0gICAgYm9vbCBtX2ltcGxpY2l0U2hvcnRoYW5kIHsgZmFsc2UgfTsKLQotICAg
IGJvb2wgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fbG9nRXJyb3JzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRXJyb3JzSW5EZWNsYXJh
dGlvbiB7IGZhbHNlIH07Ci0KLSAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlIHsg
c3RhckF0b20gfTsKLQotICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBkYXRhCi0gICAgc2l6
ZV90IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX25lc3Rl
ZFNlbGVjdG9yTGV2ZWwgeyAwIH07Ci0gICAgU291cmNlUmFuZ2UgbV9zZWxlY3RvclJhbmdlOwot
ICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5nZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gbV9jdXJyZW50UnVsZURhdGFT
dGFjazsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fY3VycmVudFJ1bGVEYXRhOwot
ICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogbV9ydWxlU291cmNlRGF0YVJlc3VsdCB7IG51bGxwdHIg
fTsKLQotICAgIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0
YSYpOwotICAgIHZvaWQgbWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlw
ZSk7Ci0gICAgdm9pZCBtYXJrUnVsZUhlYWRlckVuZCgpOwotCi0gICAgdm9pZCBzdGFydE5lc3Rl
ZFNlbGVjdG9yTGlzdCgpIHsgKyttX25lc3RlZFNlbGVjdG9yTGV2ZWw7IH0KLSAgICB2b2lkIGVu
ZE5lc3RlZFNlbGVjdG9yTGlzdCgpIHsgLS1tX25lc3RlZFNlbGVjdG9yTGV2ZWw7IH0KLSAgICB2
b2lkIG1hcmtTZWxlY3RvclN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JFbmQoKTsKLQot
ICAgIHZvaWQgbWFya1J1bGVCb2R5U3RhcnQoKTsKLSAgICB2b2lkIG1hcmtSdWxlQm9keUVuZCgp
OwotICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKLSAgICB2b2lkIG1hcmtQcm9wZXJ0eUVu
ZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7Ci0gICAgdm9p
ZCBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBh
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFJlZjxDU1NSdWxlU291cmNlRGF0YT4mJik7Ci0gICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBwb3BSdWxlRGF0YSgpOwotICAgIHZvaWQgcmVzZXRQcm9w
ZXJ0eVJhbmdlKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5k
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgYm9vbCBpc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrOyB9Ci0gICAgdm9pZCBzeW50YXhFcnJvcihjb25zdCBMb2NhdGlvbiYsIFN5bnRheEVycm9y
VHlwZSA9IEdlbmVyYWxTeW50YXhFcnJvcik7Ci0KLSAgICBpbmxpbmUgaW50IGxleCh2b2lkKiB5
eWx2YWwpIHsgcmV0dXJuICh0aGlzLT4qbV9sZXhGdW5jKSh5eWx2YWwpOyB9Ci0KLSAgICBpbnQg
dG9rZW4oKSB7IHJldHVybiBtX3Rva2VuOyB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIHZvaWQgbWFya1ZpZXdwb3J0UnVsZUJvZHlTdGFydCgpIHsgbV9pblZpZXdw
b3J0ID0gdHJ1ZTsgfQotICAgIHZvaWQgbWFya1ZpZXdwb3J0UnVsZUJvZHlFbmQoKSB7IG1faW5W
aWV3cG9ydCA9IGZhbHNlOyB9Ci0gICAgUmVmPFN0eWxlUnVsZVZpZXdwb3J0PiBjcmVhdGVWaWV3
cG9ydFJ1bGUoKTsKLSNlbmRpZgotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKLSAgICBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVl
Jik7Ci0KLSAgICBzdGF0aWMgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IENTU1BhcnNlckNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0KLSAgICBMb2NhdGlvbiBjdXJyZW50TG9jYXRpb24oKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJik7Ci0KLSAgICB2
b2lkIHNldEN1c3RvbVByb3BlcnR5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgeyBtX2N1c3RvbVByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsgfQotCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCwgY29u
c3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVN
YXAmIGN1c3RvbVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKLQotcHJp
dmF0ZToKLSAgICBib29sIGlzOEJpdFNvdXJjZSgpIHsgcmV0dXJuIG1faXM4Qml0U291cmNlOyB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlQ2hhcmFjdGVyVHlwZT4KLSAgICBpbnQg
cmVhbExleCh2b2lkKiB5eWx2YWwpOwotCi0gICAgVUNoYXIqJiBjdXJyZW50Q2hhcmFjdGVyMTYo
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudENoYXJhY3RlcigpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIENoYXJhY3RlclR5cGUqIHRva2VuU3RhcnQo
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2
b2lkIHNldFRva2VuU3RhcnQoQ2hhcmFjdGVyVHlwZSopOwotCi0gICAgaW5saW5lIHVuc2lnbmVk
IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBpbmxpbmUgVUNoYXIgdG9rZW5TdGFydENoYXIoKTsK
LQotICAgIGlubGluZSB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyT2Zmc2V0KCk7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBpc0lkZW50
aWZpZXJTdGFydCgpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0g
ICAgdW5zaWduZWQgcGFyc2VFc2NhcGUoQ2hhcmFjdGVyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIHZvaWQgVW5pY29kZVRvQ2hh
cnMoRGVzdENoYXJhY3RlclR5cGUqJiwgdW5zaWduZWQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLSAgICBpbmxp
bmUgYm9vbCBwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RD
aGFyYWN0ZXJUeXBlKiYsIGJvb2wmKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNlSWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiYs
IENTU1BhcnNlclN0cmluZyYsIGJvb2wmKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTcmND
aGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9v
bCBwYXJzZVN0cmluZ0ludGVybmFsKFNyY0NoYXJhY3RlclR5cGUqJiwgRGVzdENoYXJhY3RlclR5
cGUqJiwgVUNoYXIpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0g
ICAgaW5saW5lIHZvaWQgcGFyc2VTdHJpbmcoQ2hhcmFjdGVyVHlwZSomLCBDU1NQYXJzZXJTdHJp
bmcmIHJlc3VsdFN0cmluZywgVUNoYXIpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgZmluZFVSSShDaGFyYWN0ZXJUeXBlKiYgc3RhcnQs
IENoYXJhY3RlclR5cGUqJiBlbmQsIFVDaGFyJiBxdW90ZSk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAg
aW5saW5lIGJvb2wgcGFyc2VVUklJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RDaGFy
YWN0ZXJUeXBlKiYsIFVDaGFyIHF1b3RlKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNlVVJJKENTU1BhcnNlclN0cmluZyYpOwot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBib29sIHBh
cnNlVW5pY29kZVJhbmdlKCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci0gICAgYm9vbCBwYXJzZU50aENoaWxkKCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci0gICAgYm9vbCBwYXJzZU50aENoaWxkRXh0cmEoKTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBkZXRlY3RGdW5jdGlvblR5
cGVUb2tlbihpbnQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAg
IGlubGluZSB2b2lkIGRldGVjdE1lZGlhUXVlcnlUb2tlbihpbnQpOwotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdE51bWJlclRva2Vu
KENoYXJhY3RlclR5cGUqLCBpbnQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOwotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4o
aW50LCBib29sKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBp
bmxpbmUgdm9pZCBkZXRlY3RTdXBwb3J0c1Rva2VuKGludCk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBzZXRSdWxlSGVhZGVyRW5kKGNv
bnN0IENoYXJhY3RlclR5cGUqKTsKLQotICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHlsZVNoZWV0
Q29udGVudHMqIHN0eWxlU2hlZXQpIHsgbV9zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsgfQotCi0g
ICAgaW5saW5lIGJvb2wgaW5TdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1v
ZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBtX2NvbnRleHQubW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2Rl
OyB9Ci0gICAgaW5saW5lIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZTsgfQotICAgIAotICAgIFVSTCBjb21wbGV0ZVVSTChj
b25zdCBTdHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlY2hlY2tBdEtleXdvcmQoY29u
c3QgVUNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBwcmVmaXhM
ZW5ndGgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aD4KLSAgICB2b2lkIHNldHVwUGFyc2VyKGNvbnN0
IGNoYXIgKCZwcmVmaXgpW3ByZWZpeExlbmd0aF0sIFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBj
aGFyICgmc3VmZml4KVtzdWZmaXhMZW5ndGhdKQotICAgIHsKLSAgICAgICAgc2V0dXBQYXJzZXIo
cHJlZml4LCBwcmVmaXhMZW5ndGggLSAxLCBzdHJpbmcsIHN1ZmZpeCwgc3VmZml4TGVuZ3RoIC0g
MSk7Ci0gICAgfQotICAgIHZvaWQgc2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCB1bnNp
Z25lZCBwcmVmaXhMZW5ndGgsIFN0cmluZ1ZpZXcsIGNvbnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWdu
ZWQgc3VmZml4TGVuZ3RoKTsKLSAgICBib29sIGluU2hvcnRoYW5kKCkgY29uc3QgeyByZXR1cm4g
bV9pblBhcnNlU2hvcnRoYW5kOyB9Ci0KLSAgICBib29sIGlzVmFsaWRTaXplKFZhbHVlV2l0aENh
bGN1bGF0aW9uJik7Ci0KLSAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJW
YWx1ZSYpIGNvbnN0OwotICAgIGJvb2wgcGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVl
KE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sIGltcG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0g
ICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKLQotICAgIFJl
ZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IHBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhSZWY8Q1NT
QmFzaWNTaGFwZUluc2V0PiYmLCBDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLQotICAgIGVudW0gU2l6
ZVBhcmFtZXRlclR5cGUgewotICAgICAgICBOb25lLAotICAgICAgICBBdXRvLAotICAgICAgICBM
ZW5ndGgsCi0gICAgICAgIFBhZ2VTaXplLAotICAgICAgICBPcmllbnRhdGlvbiwKLSAgICB9Owot
Ci0gICAgYm9vbCBwYXJzZVBhZ2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpOwotICAgIFNpemVQYXJhbWV0ZXJUeXBlIHBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxp
c3QmIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUmLCBTaXplUGFyYW1ldGVyVHlwZSBwcmV2
UGFyYW1UeXBlKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgYm9vbCBwYXJz
ZU5vbkVsZW1lbnRTbmFwUG9pbnRzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCk7Ci0gICAgYm9vbCBwYXJzZVNjcm9sbFNuYXBEZXN0aW5hdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VTY3JvbGxTbmFwQ29vcmRpbmF0
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VT
Y3JvbGxTbmFwUG9zaXRpb25zKFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWCwgUmVmUHRyPENT
U1ZhbHVlPiYgY3NzVmFsdWVZKTsKLSNlbmRpZgotCi0gICAgYm9vbCBwYXJzZUZvbnRGYWNlU3Jj
VVJJKENTU1ZhbHVlTGlzdCYpOwotICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY0xvY2FsKENTU1Zh
bHVlTGlzdCYpOwotCi0gICAgYm9vbCBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYpOwotCi0jaWYg
RU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBib29sIHBhcnNlSW50ZWdlck9yQ3VzdG9tSWRl
bnRGcm9tR3JpZFBvc2l0aW9uKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIG51bWVyaWNWYWx1
ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgZ3JpZExpbmVOYW1lKTsKLSNlbmRpZgotCi0g
ICAgZW51bSBQYXJzaW5nTW9kZSB7Ci0gICAgICAgIE5vcm1hbE1vZGUsCi0gICAgICAgIE1lZGlh
UXVlcnlNb2RlLAotICAgICAgICBTdXBwb3J0c01vZGUsCi0gICAgICAgIE50aENoaWxkTW9kZQot
ICAgIH07Ci0KLSAgICBQYXJzaW5nTW9kZSBtX3BhcnNpbmdNb2RlIHsgTm9ybWFsTW9kZSB9Owot
ICAgIGJvb2wgbV9pczhCaXRTb3VyY2UgeyBmYWxzZSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxM
Q2hhcltdPiBtX2RhdGFTdGFydDg7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVDaGFyW10+IG1fZGF0
YVN0YXJ0MTY7Ci0gICAgTENoYXIqIG1fY3VycmVudENoYXJhY3RlcjggeyBudWxscHRyIH07Ci0g
ICAgVUNoYXIqIG1fY3VycmVudENoYXJhY3RlcjE2IHsgbnVsbHB0ciB9OwotICAgIHVuaW9uIHsK
LSAgICAgICAgTENoYXIqIHB0cjg7Ci0gICAgICAgIFVDaGFyKiBwdHIxNjsKLSAgICB9IG1fdG9r
ZW5TdGFydCB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKLSAgICBp
bnQgbV90b2tlbiB7IDAgfTsKLSAgICBpbnQgbV9saW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBt
X3Rva2VuU3RhcnRMaW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBtX3Rva2VuU3RhcnRDb2x1bW5O
dW1iZXIgeyAwIH07Ci0gICAgaW50IG1fbGFzdFNlbGVjdG9yTGluZU51bWJlciB7IDAgfTsKLSAg
ICBpbnQgbV9jb2x1bW5PZmZzZXRGb3JMaW5lIHsgMCB9OwotCi0gICAgaW50IG1fc2hlZXRTdGFy
dExpbmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IG1fc2hlZXRTdGFydENvbHVtbk51bWJlciB7IDAg
fTsKLQotICAgIGJvb2wgbV9hbGxvd0ltcG9ydFJ1bGVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9h
bGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShDU1NfREVW
SUNFX0FEQVBUQVRJT04pCi0gICAgYm9vbCBwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlVmlld3BvcnRTaG9y
dGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQgZmlyc3QsIENTU1Byb3Bl
cnR5SUQgc2Vjb25kLCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIGluVmlld3BvcnQoKSBj
b25zdCB7IHJldHVybiBtX2luVmlld3BvcnQ7IH0KLSAgICBib29sIG1faW5WaWV3cG9ydCB7IGZh
bHNlIH07Ci0jZW5kaWYKLQotICAgIGJvb2wgdXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhh
bmRCZWhhdmlvcigpIGNvbnN0OwotCi0gICAgaW50IChDU1NQYXJzZXI6OiptX2xleEZ1bmMpKHZv
aWQqKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1Bh
cnNlclNlbGVjdG9yPj4+IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrOwotCi0g
ICAgLy8gZGVmaW5lcyB1bml0cyBhbGxvd2VkIGZvciBhIGNlcnRhaW4gcHJvcGVydHksIHVzZWQg
aW4gcGFyc2VVbml0Ci0gICAgZW51bSBVbml0cyB7Ci0gICAgICAgIEZVbmtub3duID0gMHgwMDAw
LAotICAgICAgICBGSW50ZWdlciA9IDB4MDAwMSwKLSAgICAgICAgRk51bWJlciA9IDB4MDAwMiwg
Ly8gUmVhbCBOdW1iZXJzCi0gICAgICAgIEZQZXJjZW50ID0gMHgwMDA0LAotICAgICAgICBGTGVu
Z3RoID0gMHgwMDA4LAotICAgICAgICBGQW5nbGUgPSAweDAwMTAsCi0gICAgICAgIEZUaW1lID0g
MHgwMDIwLAotICAgICAgICBGRnJlcXVlbmN5ID0gMHgwMDQwLAotICAgICAgICBGUG9zaXRpdmVJ
bnRlZ2VyID0gMHgwMDgwLAotICAgICAgICBGUmVsYXRpdmUgPSAweDAxMDAsCi0jaWYgRU5BQkxF
KENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkK
LSAgICAgICAgRlJlc29sdXRpb24gPSAweDAyMDAsCi0jZW5kaWYKLSAgICAgICAgRk5vbk5lZyA9
IDB4MDQwMAotICAgIH07Ci0KLSAgICBmcmllbmQgaW5saW5lIFVuaXRzIG9wZXJhdG9yfChVbml0
cyBhLCBVbml0cyBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXRzPihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYSkgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYikpOwotICAg
IH0KLQotICAgIGVudW0gUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiB7Ci0gICAgICAg
IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUsCi0gICAgICAgIERvTm90UmVsZWFzZVBhcnNlZENhbGNW
YWx1ZQotICAgIH07Ci0KLSAgICBib29sIGlzTG9nZ2luZ0Vycm9ycygpOwotICAgIHZvaWQgbG9n
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51
bWJlcik7Ci0KLSAgICBib29sIHZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1
bGF0aW9uJiwgVW5pdHMpOwotCi0gICAgYm9vbCBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhD
U1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKLQotICAgIGlubGluZSBib29s
IHZhbGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWUsIFVuaXRzIHVuaXRGbGFn
cykgeyByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlLCB1bml0RmxhZ3MsIG1fY29udGV4dC5tb2Rl
KTsgfQotICAgIGJvb2wgdmFsaWRhdGVVbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiwgVW5pdHMs
IENTU1BhcnNlck1vZGUpOwotCi0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlUXVhZChVbml0cywg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBjb2xvckludEZyb21WYWx1ZShW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwotICAgIGRvdWJsZSBwYXJzZWREb3VibGUoVmFsdWVXaXRo
Q2FsY3VsYXRpb24mKTsKLSAgICAKLSAgICBmcmllbmQgY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9u
SW5mbzsKLSAgICBmcmllbmQgY2xhc3MgRmlsdGVyT3BlcmF0aW9uSW5mbzsKLX07Ci0KLUNTU1By
b3BlcnR5SUQgY3NzUHJvcGVydHlJRChjb25zdCBDU1NQYXJzZXJTdHJpbmcmKTsKLUNTU1Byb3Bl
cnR5SUQgY3NzUHJvcGVydHlJRChjb25zdCBTdHJpbmcmKTsKLUNTU1ZhbHVlSUQgY3NzVmFsdWVL
ZXl3b3JkSUQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotdm9p
ZCBjc3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IGNoYXIqJiBwcm9wZXJ0eU5hbWVBbGlhcywgdW5zaWduZWQmIG5ld0xlbmd0aCk7Ci0jZW5k
aWYKLQotY2xhc3MgU2hvcnRoYW5kU2NvcGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFNob3J0aGFuZFNjb3BlKENTU1BhcnNlciogcGFyc2VyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BJZCkgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgewotICAgICAgICBpZiAoISht
X3BhcnNlci0+bV9pblBhcnNlU2hvcnRoYW5kKyspKQotICAgICAgICAgICAgbV9wYXJzZXItPm1f
Y3VycmVudFNob3J0aGFuZCA9IHByb3BJZDsKLSAgICB9Ci0gICAgflNob3J0aGFuZFNjb3BlKCkK
LSAgICB7Ci0gICAgICAgIGlmICghKC0tbV9wYXJzZXItPm1faW5QYXJzZVNob3J0aGFuZCkpCi0g
ICAgICAgICAgICBtX3BhcnNlci0+bV9jdXJyZW50U2hvcnRoYW5kID0gQ1NTUHJvcGVydHlJbnZh
bGlkOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQYXJzZXIqIG1fcGFyc2VyOwotfTsKLQot
c3RydWN0IENTU1BhcnNlcjo6TG9jYXRpb24gewotICAgIGludCBsaW5lTnVtYmVyOwotICAgIGlu
dCBjb2x1bW5OdW1iZXI7Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIHRva2VuOwotfTsKLQotU3RyaW5n
IHF1b3RlQ1NTU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotU3RyaW5nIHF1b3RlQ1NTU3RyaW5nSWZO
ZWVkZWQoY29uc3QgU3RyaW5nJik7Ci1TdHJpbmcgcXVvdGVDU1NVUkxJZk5lZWRlZChjb25zdCBT
dHJpbmcmKTsKLQotYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7
Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFRva2VuU3RhcnQ8TENo
YXI+KExDaGFyKiB0b2tlblN0YXJ0KQotewotICAgIG1fdG9rZW5TdGFydC5wdHI4ID0gdG9rZW5T
dGFydDsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6c2V0VG9rZW5T
dGFydDxVQ2hhcj4oVUNoYXIqIHRva2VuU3RhcnQpCi17Ci0gICAgbV90b2tlblN0YXJ0LnB0cjE2
ID0gdG9rZW5TdGFydDsKLX0KLQotaW5saW5lIHVuc2lnbmVkIENTU1BhcnNlcjo6dG9rZW5TdGFy
dE9mZnNldCgpCi17Ci0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICByZXR1cm4gbV90
b2tlblN0YXJ0LnB0cjggLSBtX2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgcmV0dXJuIG1fdG9rZW5T
dGFydC5wdHIxNiAtIG1fZGF0YVN0YXJ0MTYuZ2V0KCk7Ci19Ci0KLXVuc2lnbmVkIENTU1BhcnNl
cjo6Y3VycmVudENoYXJhY3Rlck9mZnNldCgpCi17Ci0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOCAtIG1fZGF0YVN0YXJ0OC5nZXQoKTsK
LSAgICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTYgLSBtX2RhdGFTdGFydDE2LmdldCgpOwot
fQotCi1pbmxpbmUgVUNoYXIgQ1NTUGFyc2VyOjp0b2tlblN0YXJ0Q2hhcigpCi17Ci0gICAgaWYg
KGlzOEJpdFNvdXJjZSgpKQotICAgICAgICByZXR1cm4gKm1fdG9rZW5TdGFydC5wdHI4OwotICAg
IHJldHVybiAqbV90b2tlblN0YXJ0LnB0cjE2OwotfQotCi1pbmxpbmUgYm9vbCBpc0N1c3RvbVBy
b3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gcHJv
cGVydHlOYW1lLmxlbmd0aCgpID4gMiAmJiBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVyQXQoMCkgPT0g
Jy0nICYmIHByb3BlcnR5TmFtZS5jaGFyYWN0ZXJBdCgxKSA9PSAnLSc7Ci19Ci0KLWlubGluZSBp
bnQgY3NzeXlsZXgodm9pZCogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikKLXsKLSAgICByZXR1
cm4gcGFyc2VyLT5sZXgoeXlsdmFsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlck1vZGUuaAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENTU1BhcnNlck1vZGVfaAotI2RlZmluZSBDU1NQYXJz
ZXJNb2RlX2gKLQotI2luY2x1ZGUgIlVSTC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIERvY3VtZW50OwotCi1lbnVtIENTU1BhcnNlck1vZGUgewotICAgIENTU1F1aXJrc01vZGUs
Ci0gICAgQ1NTU3RyaWN0TW9kZSwKLSAgICAvLyBTVkcgc2hvdWxkIGFsd2F5cyBiZSBpbiBzdHJp
Y3QgbW9kZS4gRm9yIFNWRyBhdHRyaWJ1dGVzLCB0aGUgcnVsZXMgZGlmZmVyIHRvIHN0cmljdCBz
b21ldGltZXMuCi0gICAgU1ZHQXR0cmlidXRlTW9kZQotfTsKLQotaW5saW5lIENTU1BhcnNlck1v
ZGUgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGJvb2wgaW5TdHJpY3RNb2RlKQotewotICAgIHJldHVy
biBpblN0cmljdE1vZGUgPyBDU1NTdHJpY3RNb2RlIDogQ1NTUXVpcmtzTW9kZTsKLX0KLQotaW5s
aW5lIGJvb2wgaXNTdHJpY3RQYXJzZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkK
LXsKLSAgICByZXR1cm4gY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IGNzc1BhcnNl
ck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsKLX0KLQotc3RydWN0IENTU1BhcnNlckNvbnRleHQg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIENTU1BhcnNlckNv
bnRleHQoQ1NTUGFyc2VyTW9kZSwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCkpOwotICAgIFdF
QkNPUkVfRVhQT1JUIENTU1BhcnNlckNvbnRleHQoRG9jdW1lbnQmLCBjb25zdCBVUkwmIGJhc2VV
UkwgPSBVUkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7Ci0KLSAg
ICBVUkwgYmFzZVVSTDsKLSAgICBTdHJpbmcgY2hhcnNldDsKLSAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBDU1NTdHJpY3RNb2RlIH07Ci0gICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBib29sIGNzc0dyaWRMYXlvdXRFbmFi
bGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQot
ICAgIGJvb2wgdGV4dEF1dG9zaXppbmdFbmFibGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJv
b2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5mb3JjZXND
U1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVnYWN5QmFj
a2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07Ci0gICAgYm9vbCBzcHJpbmdU
aW1pbmdGdW5jdGlvbkVuYWJsZWQgeyBmYWxzZSB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENTU1BhcnNlckNvbnRleHQmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7Ci1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi1XRUJDT1JFX0VYUE9SVCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCk7Ci0KLX07Ci0KLSNl
bmRpZiAvLyBDU1NQYXJzZXJNb2RlX2gKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkocmV2
aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgotCi0jaW5jbHVkZSAiQ1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5j
bHVkZSAiQ1NTRnVuY3Rpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgot
I2luY2x1ZGUgIlNlbGVjdG9yUHNldWRvVHlwZU1hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLXZvaWQgZGVzdHJveShjb25zdCBDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uKQotICAgICAgICBkZWxldGUgdmFsdWUuZnVuY3Rpb247Ci0gICAgZWxzZSBpZiAodmFs
dWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICBkZWxldGUgdmFs
dWUudmFsdWVMaXN0OwotICAgIGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OlZhcmlhYmxlKQotICAgICAgICBkZWxldGUgdmFsdWUudmFyaWFibGU7Ci19Ci0KLUNTU1BhcnNl
clZhbHVlTGlzdDo6fkNTU1BhcnNlclZhbHVlTGlzdCgpCi17Ci0gICAgZm9yIChhdXRvJiB2YWx1
ZSA6IG1fdmFsdWVzKQotICAgICAgICBkZXN0cm95KHZhbHVlKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXJWYWx1ZUxpc3Q6OmFkZFZhbHVlKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAg
ICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwotfQotCi12b2lkIENTU1BhcnNlclZhbHVlTGlzdDo6
aW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCBpLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgbV92YWx1ZXMuaW5zZXJ0KGksIHZhbHVlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJWYWx1
ZUxpc3Q6OmV4dGVuZChDU1NQYXJzZXJWYWx1ZUxpc3QmIG90aGVyKQotewotICAgIGZvciAoYXV0
byYgdmFsdWUgOiBvdGhlci5tX3ZhbHVlcykgewotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQodmFs
dWUpOwotICAgICAgICB2YWx1ZS51bml0ID0gMDsgLy8gV2UgbW92ZWQgdGhlIENTU1BhcnNlclZh
bHVlIGZyb20gdGhlIG90aGVyIGxpc3Q7IHRoaXMgYWN0cyBsaWtlIHN0ZDo6bW92ZS4KLSAgICB9
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyVmFsdWVMaXN0Ojpjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IGF1dG8qIHBhcnNlclZhbHVlID0gJm1fdmFsdWVzW2ldOwotICAgICAgICBpZiAocGFyc2VyVmFs
dWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhcmlhYmxlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmIChwYXJzZXJWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6
RnVuY3Rpb24gJiYgcGFyc2VyVmFsdWUtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiBw
YXJzZXJWYWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPmNvbnRhaW5zVmFyaWFibGVzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcnNlclZhbHVlLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpWYWx1ZUxpc3QgJiYgcGFyc2VyVmFsdWUtPnZhbHVlTGlzdC0+Y29udGFpbnNW
YXJpYWJsZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyVmFsdWU6OmNyZWF0ZUNTU1Zh
bHVlKCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgIGlmIChpZCkK
LSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkKTsK
LSAgICAKLSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAg
ICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVQYXJzZXJP
cGVyYXRvcihpVmFsdWUpOwotICAgICAgICBwcmltaXRpdmVWYWx1ZS0+c2V0UHJpbWl0aXZlVHlw
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9PUEVSQVRPUik7Ci0gICAgICAgIHJldHVy
biBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gQ1NTRnVuY3Rpb25WYWx1ZTo6Y3Jl
YXRlKGZ1bmN0aW9uKTsKLSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFyaWFibGUp
Ci0gICAgICAgIHJldHVybiBDU1NWYXJpYWJsZVZhbHVlOjpjcmVhdGUodmFyaWFibGUpOwotICAg
IGlmICh1bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgIHJldHVybiBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKnZhbHVlTGlzdCk7Ci0KLSAg
ICBpZiAodW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCi0gICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayhmVmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRU1TKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
cHJpbWl0aXZlVW5pdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+
KHVuaXQpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVW5pdCkgewotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFJP
UEVSVFlfSUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBTFVFX0lEOgotICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEFSU0VSX0lERU5USUZJRVIpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KGZWYWx1ZSwgaXNJbnQgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDog
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkc6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSToKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT046Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VOSUNPREVfUkFOR0U6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BBUlNFUl9XSElURVNQQUNFOgotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHJpbmcsIHByaW1pdGl2ZVVuaXQpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVM6Ci0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSU46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQ6Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19IWjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfS0haOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVzoKLSAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1ZNSU46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUzoKLSAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlI6Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGZWYWx1ZSwgcHJpbWl0aXZlVW5pdCk7Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VOS05PV046Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FU
VFI6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NPVU5URVI6Ci0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1Q6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JHQkNPTE9SOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUEk6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQQ006Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBSVI6Ci0j
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EQVNIQk9BUkRfUkVHSU9OOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BBUlNFUl9PUEVSQVRPUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEFSU0VSX0lOVEVHRVI6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9J
REVOVElGSUVSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSX05BTUU6
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NIQVBFOgotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19GT05UX0ZBTUlMWToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUVVBRDoKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19MRU5HVEhfUkVQRUFUOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0NBTEM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NB
TENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBhZ2VQc2V1
ZG9TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpCi17Ci0g
ICAgQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc1R5cGUgcHNldWRvVHlwZTsKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHNldWRvVHlwZVN0cmluZywgImZpcnN0Iikp
Ci0gICAgICAgIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVkb0NsYXNzRmlyc3Q7
Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHNldWRvVHlwZVN0
cmluZywgImxlZnQiKSkKLSAgICAgICAgcHNldWRvVHlwZSA9IENTU1NlbGVjdG9yOjpQYWdlUHNl
dWRvQ2xhc3NMZWZ0OwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHBzZXVkb1R5cGVTdHJpbmcsICJyaWdodCIpKQotICAgICAgICBwc2V1ZG9UeXBlID0gQ1NTU2Vs
ZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc1JpZ2h0OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJT
ZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0
b3I6OlBhZ2VQc2V1ZG9DbGFzcyk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBhZ2VQ
c2V1ZG9UeXBlKHBzZXVkb1R5cGUpOwotICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7Ci19
Ci0KLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKQotewotICAgIHBz
ZXVkb1R5cGVTdHJpbmcuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgQXRv
bWljU3RyaW5nIG5hbWUgPSBwc2V1ZG9UeXBlU3RyaW5nOwotCi0gICAgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnRUeXBlIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50VHlwZShuYW1lKTsKLSAgICBpZiAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFVua25vd24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzZWxl
Y3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0
b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKLSAg
ICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZSk7
Ci0gICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRD
dXN0b21MZWdhY3lQcmVmaXhlZCkgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5hbWUg
PT0gIi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIiLCAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRl
ciBpcyB0aGUgb25seSBMZWdhY3lQcmVmaXggcHNldWRvIHR5cGUuIik7Ci0gICAgICAgIGlmIChu
YW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIikKLSAgICAgICAgICAgIG5hbWUgPSBB
dG9taWNTdHJpbmcoInBsYWNlaG9sZGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgfQotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsK
LSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0Vs
ZW1lbnRDdWVGdW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25J
ZGVudGlmaWVyLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHBh
cnNlZFNlbGVjdG9yVmVjdG9yKQotewotICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JZGVudGlm
aWVyLCBTdHJpbmcoZnVuY3Rpb25JZGVudGlmaWVyKSA9PSAiY3VlKCIpOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gc2Vs
ZWN0b3JWZWN0b3IocGFyc2VkU2VsZWN0b3JWZWN0b3IpOwotCi0gICAgaWYgKCFzZWxlY3RvclZl
Y3RvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNlbGVjdG9yID0gc3Rk
OjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxl
Y3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9FbGVtZW50VHlwZShDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudEN1ZSk7Ci0gICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9yVmVj
dG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLUNTU1Bh
cnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50U2xvdHRl
ZEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZp
ZXIsIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZWRTZWxlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKGZ1bmN0aW9uSWRlbnRpZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gInNs
b3R0ZWQoIik7Ci0KLSAgICBpZiAoIXBhcnNlZFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gb3duZWRQYXJz
ZWRTZWxlY3RvcihwYXJzZWRTZWxlY3Rvcik7Ci0KLSAgICBmb3IgKGF1dG8qIGNvbXBvbmVudCA9
IHBhcnNlZFNlbGVjdG9yOyBjb21wb25lbnQ7IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlz
dG9yeSgpKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnQtPm1hdGNoZXNQc2V1ZG9FbGVtZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIHNlbGVjdG9y
VmVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPj4+KCk7Ci0gICAgc2VsZWN0b3JWZWN0b3ItPmFwcGVuZChXVEZNb3ZlKG93bmVk
UGFyc2VkU2VsZWN0b3IpKTsKLQotICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRj
aChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3It
PnNldFBzZXVkb0VsZW1lbnRUeXBlKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2xvdHRlZCk7
Ci0gICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9yVmVjdG9yKTsKLSAg
ICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NT
UGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xhc3NIb3N0RnVuY3Rpb25TZWxlY3Rvcihjb25z
dCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3Iq
IHBhcnNlZFNlbGVjdG9yKQotewotICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JZGVudGlmaWVy
LCBTdHJpbmcoZnVuY3Rpb25JZGVudGlmaWVyKSA9PSAiaG9zdCgiKTsKLQotICAgIGlmICghcGFy
c2VkU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPiBvd25lZFBhcnNlZFNlbGVjdG9yKHBhcnNlZFNlbGVjdG9y
KTsKLQotICAgIGZvciAoYXV0byogY29tcG9uZW50ID0gcGFyc2VkU2VsZWN0b3I7IGNvbXBvbmVu
dDsgY29tcG9uZW50ID0gY29tcG9uZW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKGNv
bXBvbmVudC0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGF1dG8gc2VsZWN0b3JWZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4oKTsKLSAgICBzZWxl
Y3RvclZlY3Rvci0+YXBwZW5kKFdURk1vdmUob3duZWRQYXJzZWRTZWxlY3RvcikpOwotCi0gICAg
YXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0g
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NIb3N0KTsKLSAgICBzZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3Rv
cigqc2VsZWN0b3JWZWN0b3IpOwotICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7Ci19Ci0K
LUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc0Fu
ZENvbXBhdGliaWxpdHlFbGVtZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBl
U3RyaW5nKQotewotICAgIGlmIChwc2V1ZG9UeXBlU3RyaW5nLmxlbmd0aCgpICYmIHBzZXVkb1R5
cGVTdHJpbmdbcHNldWRvVHlwZVN0cmluZy5sZW5ndGgoKSAtIDFdID09ICcoJykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0Vs
ZW1lbnQgcHNldWRvVHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVu
dFN0cmluZyhwc2V1ZG9UeXBlU3RyaW5nKTsKLSAgICBpZiAocHNldWRvVHlwZS5wc2V1ZG9DbGFz
cyAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NVbmtub3duKSB7Ci0gICAgICAgIGF1dG8gc2Vs
ZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgICAgICBz
ZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsK
LSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShwc2V1ZG9U
eXBlLnBzZXVkb0NsYXNzKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgaWYgKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgIT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0b3Ig
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgICAgICBzZWxlY3Rv
ci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAg
ICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlw
ZS5jb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCk7Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1l
ID0gcHNldWRvVHlwZVN0cmluZzsKLSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFZh
bHVlKG5hbWUpOwotICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQ1NTUGFyc2VyU2VsZWN0b3I6OkNTU1BhcnNlclNlbGVj
dG9yKCkKLSAgICA6IG1fc2VsZWN0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4oKSkK
LXsKLX0KLQotQ1NTUGFyc2VyU2VsZWN0b3I6OkNTU1BhcnNlclNlbGVjdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ1FOYW1lKQotICAgIDogbV9zZWxlY3RvcihzdGQ6Om1ha2VfdW5pcXVlPENT
U1NlbGVjdG9yPih0YWdRTmFtZSkpCi17Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yOjp+Q1NTUGFy
c2VyU2VsZWN0b3IoKQotewotICAgIGlmICghbV90YWdIaXN0b3J5KQotICAgICAgICByZXR1cm47
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4sIDE2PiB0b0Rl
bGV0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yID0g
V1RGTW92ZShtX3RhZ0hpc3RvcnkpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV4dCA9IFdURk1vdmUoc2VsZWN0b3ItPm1f
dGFnSGlzdG9yeSk7Ci0gICAgICAgIHRvRGVsZXRlLmFwcGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7
Ci0gICAgICAgIGlmICghbmV4dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzZWxlY3Rv
ciA9IFdURk1vdmUobmV4dCk7Ci0gICAgfQotfQotCi12b2lkIENTU1BhcnNlclNlbGVjdG9yOjph
ZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+PiYgc2VsZWN0b3JWZWN0b3IpCi17Ci0gICAgYXV0byBzZWxlY3Rvckxpc3QgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU1NlbGVjdG9yTGlzdD4oKTsKLSAgICBzZWxlY3Rvckxpc3QtPmFkb3B0U2Vs
ZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOwotICAgIG1fc2VsZWN0b3ItPnNldFNlbGVjdG9y
TGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOwotfQotCi12b2lkIENTU1BhcnNlclNlbGVjdG9y
OjpzZXRMYW5nQXJndW1lbnRMaXN0KGNvbnN0IFZlY3RvcjxDU1NQYXJzZXJTdHJpbmc+JiBzdHJp
bmdWZWN0b3IpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nVmVjdG9yLmlzRW1w
dHkoKSwgIk5vIENTUyBTZWxlY3RvciB0YWtlcyBhbiBlbXB0eSBhcmd1bWVudCBsaXN0LiIpOwot
ICAgIGF1dG8gYXJndW1lbnRMaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8QXRvbWljU3Ry
aW5nPj4oKTsKLSAgICBhcmd1bWVudExpc3QtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RyaW5n
VmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlQXJn
dW1lbnQgOiBzdHJpbmdWZWN0b3IpCi0gICAgICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKGxhbmd1
YWdlQXJndW1lbnQpOwotICAgIG1fc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92
ZShhcmd1bWVudExpc3QpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0UHNldWRv
Q2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKQotewot
ICAgIEFTU0VSVChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7Ci0KLSAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgcHNldWRv
VHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFN0cmluZyhwc2V1
ZG9DbGFzc1N0cmluZyk7Ci0gICAgbV9zZWxlY3Rvci0+c2V0UHNldWRvQ2xhc3NUeXBlKHBzZXVk
b1R5cGUucHNldWRvQ2xhc3MpOwotfQotCi1zdGF0aWMgYm9vbCBzZWxlY3Rvckxpc3RNYXRjaGVz
UHNldWRvRWxlbWVudChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCkKLXsKLSAg
ICBpZiAoIXNlbGVjdG9yTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1
YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3Rv
cikpIHsKLSAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzdWJTZWxl
Y3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaGVzUHNldWRvRWxlbWVudCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGNvbnN0IENTU1NlbGVjdG9yTGlz
dCogc3Vic2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yTGlzdE1hdGNoZXNQc2V1ZG9FbGVtZW50KHN1YnNlbGVjdG9y
TGlzdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXJT
ZWxlY3Rvcjo6bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3Nl
bGVjdG9yLT5tYXRjaGVzUHNldWRvRWxlbWVudCgpIHx8IHNlbGVjdG9yTGlzdE1hdGNoZXNQc2V1
ZG9FbGVtZW50KG1fc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXJTZWxlY3Rvcjo6aW5zZXJ0VGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYmVmb3Jl
LCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yLCBDU1NTZWxlY3Rv
cjo6UmVsYXRpb24gYWZ0ZXIpCi17Ci0gICAgaWYgKG1fdGFnSGlzdG9yeSkKLSAgICAgICAgc2Vs
ZWN0b3ItPnNldFRhZ0hpc3RvcnkoV1RGTW92ZShtX3RhZ0hpc3RvcnkpKTsKLSAgICBzZXRSZWxh
dGlvbihiZWZvcmUpOwotICAgIHNlbGVjdG9yLT5zZXRSZWxhdGlvbihhZnRlcik7Ci0gICAgbV90
YWdIaXN0b3J5ID0gV1RGTW92ZShzZWxlY3Rvcik7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyU2VsZWN0
b3I6OmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uLCBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yKQotewotICAgIENTU1BhcnNl
clNlbGVjdG9yKiBlbmQgPSB0aGlzOwotICAgIHdoaWxlIChlbmQtPnRhZ0hpc3RvcnkoKSkKLSAg
ICAgICAgZW5kID0gZW5kLT50YWdIaXN0b3J5KCk7Ci0KLSAgICBlbmQtPnNldFJlbGF0aW9uKHJl
bGF0aW9uKTsKLSAgICBlbmQtPnNldFRhZ0hpc3RvcnkoV1RGTW92ZShzZWxlY3RvcikpOwotfQot
Ci12b2lkIENTU1BhcnNlclNlbGVjdG9yOjphcHBlbmRUYWdIaXN0b3J5KENTU1BhcnNlclNlbGVj
dG9yQ29tYmluYXRvciByZWxhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvcikKLXsKLSAgICBDU1NQYXJzZXJTZWxlY3RvciogZW5kID0gdGhpczsKLSAgICB3
aGlsZSAoZW5kLT50YWdIaXN0b3J5KCkpCi0gICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgp
OwotCi0gICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHNlbGVjdG9yUmVsYXRpb247Ci0gICAgc3dp
dGNoIChyZWxhdGlvbikgewotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpD
aGlsZDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpDaGlsZDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2Nl
bmRhbnRTcGFjZToKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpEZXNj
ZW5kYW50OwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQp
Ci0gICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2NlbmRhbnREb3VibGVD
aGlsZDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21i
aW5hdG9yOjpEaXJlY3RBZGphY2VudDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1Nl
bGVjdG9yOjpEaXJlY3RBZGphY2VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQYXJz
ZXJTZWxlY3RvckNvbWJpbmF0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHNlbGVjdG9y
UmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGVuZC0+c2V0UmVsYXRpb24oc2VsZWN0b3JSZWxhdGlvbik7Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0gICAgaWYgKHJlbGF0aW9uID09IENTU1BhcnNl
clNlbGVjdG9yQ29tYmluYXRvcjo6RGVzY2VuZGFudERvdWJsZUNoaWxkKQotICAgICAgICBlbmQt
PnNldERlc2NlbmRhbnRVc2VEb3VibGVDaGlsZFN5bnRheCgpOwotI2VuZGlmCi0KLSAgICBlbmQt
PnNldFRhZ0hpc3RvcnkoV1RGTW92ZShzZWxlY3RvcikpOwotfQotCi12b2lkIENTU1BhcnNlclNl
bGVjdG9yOjpwcmVwZW5kVGFnU2VsZWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnUU5hbWUs
IGJvb2wgdGFnSXNGb3JOYW1lc3BhY2VSdWxlKQotewotICAgIGF1dG8gc2Vjb25kID0gc3RkOjpt
YWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWNvbmQtPm1fc2VsZWN0b3Ig
PSBXVEZNb3ZlKG1fc2VsZWN0b3IpOwotICAgIHNlY29uZC0+bV90YWdIaXN0b3J5ID0gV1RGTW92
ZShtX3RhZ0hpc3RvcnkpOwotICAgIG1fdGFnSGlzdG9yeSA9IFdURk1vdmUoc2Vjb25kKTsKLQot
ICAgIG1fc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1NlbGVjdG9yPih0YWdRTmFtZSwg
dGFnSXNGb3JOYW1lc3BhY2VSdWxlKTsKLSAgICBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbihDU1NT
ZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwotfQotCi19Ci0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Bh
cnNlclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5o
CShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdI
YXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBRdWFsaWZpZWROYW1lOwotCi0vLyBUaGlz
IHNob3VsZCBiZSBhIFN0cmluZ1ZpZXcgYnV0IGN1cnJlbnRseSBpdCBjYW4ndCBiZWNhdXNlIGl0
J3MgdXNlZCBhcyBhbiBlbGVtZW50IG9mIGEgdW5pb24gaW4gQ1NTUGFyc2VyVmFsdWUuCi1zdHJ1
Y3QgQ1NTUGFyc2VyU3RyaW5nIHsKLSAgICB2b2lkIGluaXQoTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IGNoYXJh
Y3RlcnM7Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICBtX2lzOEJpdCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczE2ID0gY2hhcmFjdGVyczsK
LSAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdm9pZCBpbml0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAg
ICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGggfHwg
c3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczggPSBjb25z
dF9jYXN0PExDaGFyKj4oc3RyaW5nLmNoYXJhY3RlcnM4KCkpOwotICAgICAgICAgICAgbV9pczhC
aXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kYXRhLmNoYXJhY3Rl
cnMxNiA9IGNvbnN0X2Nhc3Q8VUNoYXIqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpOwotICAgICAg
ICAgICAgbV9pczhCaXQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY2xl
YXIoKQotICAgIHsKLSAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gMDsKLSAgICAgICAgbV9s
ZW5ndGggPSAwOwotICAgICAgICBtX2lzOEJpdCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQotICAgIExDaGFyKiBjaGFyYWN0ZXJz
OCgpIGNvbnN0IHsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzODsg
fQotICAgIFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyBy
ZXR1cm4gbV9kYXRhLmNoYXJhY3RlcnMxNjsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMoKSBjb25zdDsKLQotICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgdm9pZCBzZXRMZW5n
dGgodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9Ci0KLSAgICB2b2lkIGNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzOFtpXTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5j
aGFyYWN0ZXJzMTZbaV07Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gaXM4Qml0KCkgPyBTdHJpbmcobV9kYXRhLmNoYXJhY3RlcnM4LCBtX2xlbmd0aCkgOiBT
dHJpbmcobV9kYXRhLmNoYXJhY3RlcnMxNiwgbV9sZW5ndGgpOyB9Ci0gICAgb3BlcmF0b3IgQXRv
bWljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gaXM4Qml0KCkgPyBBdG9taWNTdHJpbmcobV9kYXRh
LmNoYXJhY3RlcnM4LCBtX2xlbmd0aCkgOiBBdG9taWNTdHJpbmcobV9kYXRhLmNoYXJhY3RlcnMx
NiwgbV9sZW5ndGgpOyB9Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIExDaGFyKiBjaGFyYWN0ZXJz
ODsKLSAgICAgICAgVUNoYXIqIGNoYXJhY3RlcnMxNjsKLSAgICB9IG1fZGF0YTsKLSAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKLSAgICBib29sIG1faXM4Qml0OwotfTsKLQotdGVtcGxhdGU8dW5zaWdu
ZWQgbGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENTU1Bh
cnNlclN0cmluZyYsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKLQot
c3RydWN0IENTU1BhcnNlckZ1bmN0aW9uOwotc3RydWN0IENTU1BhcnNlclZhcmlhYmxlOwotCi1z
dHJ1Y3QgQ1NTUGFyc2VyVmFsdWUgewotICAgIENTU1ZhbHVlSUQgaWQ7Ci0gICAgYm9vbCBpc0lu
dDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGRvdWJsZSBmVmFsdWU7Ci0gICAgICAgIGludCBpVmFs
dWU7Ci0gICAgICAgIENTU1BhcnNlclN0cmluZyBzdHJpbmc7Ci0gICAgICAgIENTU1BhcnNlckZ1
bmN0aW9uKiBmdW5jdGlvbjsKLSAgICAgICAgQ1NTUGFyc2VyVmFyaWFibGUqIHZhcmlhYmxlOwot
ICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdDsKLSAgICB9OwotICAgIGVudW0g
ewotICAgICAgICBPcGVyYXRvciAgPSAweDEwMDAwMCwKLSAgICAgICAgRnVuY3Rpb24gID0gMHgx
MDAwMDEsCi0gICAgICAgIFZhbHVlTGlzdCA9IDB4MTAwMDAyLAotICAgICAgICBRX0VNUyAgICAg
PSAweDEwMDAwMywKLSAgICAgICAgVmFyaWFibGUgID0gMHgxMDAwMDQKLSAgICB9OwotICAgIGlu
dCB1bml0OwotCi0gICAgdm9pZCBzZXRGcm9tVmFsdWVMaXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJWYWx1ZUxpc3Q+KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3JlYXRlQ1NTVmFsdWUo
KTsKLX07Ci0KLXZvaWQgZGVzdHJveShjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwotCi1jbGFzcyBD
U1NQYXJzZXJWYWx1ZUxpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIENTU1BhcnNlclZhbHVlTGlzdCgpCi0gICAgICAgIDogbV9jdXJyZW50KDApCi0gICAg
ewotICAgIH0KLSAgICB+Q1NTUGFyc2VyVmFsdWVMaXN0KCk7Ci0KLSAgICB2b2lkIGFkZFZhbHVl
KGNvbnN0IENTU1BhcnNlclZhbHVlJik7Ci0gICAgdm9pZCBpbnNlcnRWYWx1ZUF0KHVuc2lnbmVk
LCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwotICAgIHZvaWQgZXh0ZW5kKENTU1BhcnNlclZhbHVl
TGlzdCYpOwotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNp
emUoKTsgfQotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCgpIHsgcmV0dXJuIG1fY3VycmVudDsg
fQotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50KCkgeyByZXR1cm4gbV9jdXJyZW50IDwgbV92
YWx1ZXMuc2l6ZSgpID8gJm1fdmFsdWVzW21fY3VycmVudF0gOiAwOyB9Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUqIG5leHQoKSB7ICsrbV9jdXJyZW50OyByZXR1cm4gY3VycmVudCgpOyB9Ci0gICAgQ1NT
UGFyc2VyVmFsdWUqIHByZXZpb3VzKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50KQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIC0tbV9jdXJyZW50OwotICAgICAgICByZXR1
cm4gY3VycmVudCgpOwotICAgIH0KLSAgICB2b2lkIHNldEN1cnJlbnRJbmRleCh1bnNpZ25lZCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSk7Ci0g
ICAgICAgIGlmIChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSkKLSAgICAgICAgICAgIG1fY3VycmVu
dCA9IGluZGV4OwotICAgIH0KLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZUF0KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIGkgPCBtX3ZhbHVlcy5zaXplKCkgPyAmbV92YWx1ZXNbaV0gOiAwOyB9Ci0K
LSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlcy5jbGVhcigpOyB9Ci0gICAgCi0gICAgU3RyaW5n
IHRvU3RyaW5nKCk7Ci0gICAgCi0gICAgYm9vbCBjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fY3VycmVudDsKLSAgICBWZWN0b3I8Q1NTUGFyc2Vy
VmFsdWUsIDQ+IG1fdmFsdWVzOwotfTsKLQotc3RydWN0IENTU1BhcnNlckZ1bmN0aW9uIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJTdHJpbmcg
bmFtZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBhcmdzOwotfTsK
LQotc3RydWN0IENTU1BhcnNlclZhcmlhYmxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJTdHJpbmcgbmFtZTsgLy8gVGhlIGN1c3RvbSBwcm9w
ZXJ0eSBuYW1lCi0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsg
Ly8gVGhlIGZhbGxiYWNrIGFyZ3MKLX07Ci0KLWVudW0gY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3JD
b21iaW5hdG9yIHsKLSAgICBDaGlsZCwKLSAgICBEZXNjZW5kYW50U3BhY2UsCi0jaWYgRU5BQkxF
KENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgIERlc2NlbmRhbnREb3VibGVDaGlsZCwKLSNlbmRp
ZgotICAgIERpcmVjdEFkamFjZW50LAotICAgIEluZGlyZWN0QWRqYWNlbnQKLX07Ci0KLWNsYXNz
IENTU1BhcnNlclNlbGVjdG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUGFnZVBzZXVkb1NlbGVjdG9y
KGNvbnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZyk7Ci0gICAgc3RhdGljIENT
U1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0VsZW1lbnRTZWxlY3RvcihDU1NQYXJzZXJTdHJp
bmcmIHBzZXVkb1R5cGVTdHJpbmcpOwotICAgIHN0YXRpYyBDU1NQYXJzZXJTZWxlY3RvciogcGFy
c2VQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcm
IGZ1bmN0aW9uSWRlbnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4+Kik7Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0VsZW1l
bnRTbG90dGVkRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9u
SWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3IqKTsKLSAgICBzdGF0aWMgQ1NTUGFyc2VyU2Vs
ZWN0b3IqIHBhcnNlUHNldWRvQ2xhc3NIb3N0RnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJz
ZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3IqKTsKLSAgICBz
dGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZyk7Ci0KLSAg
ICBDU1NQYXJzZXJTZWxlY3RvcigpOwotICAgIGV4cGxpY2l0IENTU1BhcnNlclNlbGVjdG9yKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICB+Q1NTUGFyc2VyU2VsZWN0b3IoKTsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4gcmVsZWFzZVNlbGVjdG9yKCkgeyByZXR1cm4gV1RG
TW92ZShtX3NlbGVjdG9yKTsgfQotCi0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsgfQotICAgIHZvaWQgc2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGlzQ2FzZUluc2Vuc2l0
aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgaXNDYXNlSW5zZW5zaXRpdmUp
OyB9Ci0gICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1f
c2VsZWN0b3ItPnNldEFyZ3VtZW50KHZhbHVlKTsgfQotICAgIHZvaWQgc2V0QXR0cmlidXRlVmFs
dWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wgaXNDYXNlSW5zZW5zaXRpdmUpIHsgbV9z
ZWxlY3Rvci0+c2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGlzQ2Fz
ZUluc2Vuc2l0aXZlKTsgfQotICAgIHZvaWQgc2V0TWF0Y2goQ1NTU2VsZWN0b3I6Ok1hdGNoIHZh
bHVlKSB7IG1fc2VsZWN0b3ItPnNldE1hdGNoKHZhbHVlKTsgfQotICAgIHZvaWQgc2V0UmVsYXRp
b24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFJlbGF0aW9u
KHZhbHVlKTsgfQotICAgIHZvaWQgc2V0Rm9yUGFnZSgpIHsgbV9zZWxlY3Rvci0+c2V0Rm9yUGFn
ZSgpOyB9Ci0KLSAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+JiBzZWxlY3RvclZlY3Rvcik7Ci0gICAgdm9pZCBzZXRM
YW5nQXJndW1lbnRMaXN0KGNvbnN0IFZlY3RvcjxDU1NQYXJzZXJTdHJpbmc+JiBzdHJpbmdWZWN0
b3IpOwotCi0gICAgdm9pZCBzZXRQc2V1ZG9DbGFzc1ZhbHVlKGNvbnN0IENTU1BhcnNlclN0cmlu
ZyYgcHNldWRvQ2xhc3NTdHJpbmcpOwotICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUg
cHNldWRvQ2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCk7IH0KLSAgICBib29sIGlzQ3VzdG9tUHNldWRvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0b3ItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpOyB9Ci0KLSAgICBib29sIGlzUHNl
dWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgICAgICByZXR1cm4gbV9zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCAmJiBtX3NlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCi0gICAgfQotCi0gICAgYm9vbCBoYXNTaGFkb3dEZXNjZW5kYW50KCkgY29uc3Q7Ci0g
ICAgYm9vbCBtYXRjaGVzUHNldWRvRWxlbWVudCgpIGNvbnN0OwotCi0gICAgQ1NTUGFyc2VyU2Vs
ZWN0b3IqIHRhZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3RhZ0hpc3RvcnkuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFRhZ0hpc3Rvcnkoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvcikgeyBtX3RhZ0hpc3RvcnkgPSBXVEZNb3ZlKHNlbGVjdG9yKTsgfQotICAgIHZv
aWQgY2xlYXJUYWdIaXN0b3J5KCkgeyBtX3RhZ0hpc3RvcnkucmVzZXQoKTsgfQotICAgIHZvaWQg
aW5zZXJ0VGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYmVmb3JlLCBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYWZ0ZXIpOwot
ICAgIHZvaWQgYXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24sIHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4pOwotICAgIHZvaWQgYXBwZW5kVGFnSGlzdG9yeShD
U1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3IsIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4pOwotICAgIHZvaWQgcHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSA9IGZhbHNlKTsKLQotcHJpdmF0ZToKLSNpZiBF
TkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0gICAgdm9pZCBzZXREZXNjZW5kYW50VXNlRG91
YmxlQ2hpbGRTeW50YXgoKSB7IG1fc2VsZWN0b3ItPnNldERlc2NlbmRhbnRVc2VEb3VibGVDaGls
ZFN5bnRheCgpOyB9Ci0jZW5kaWYKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4g
bV9zZWxlY3RvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG1fdGFn
SGlzdG9yeTsKLX07Ci0KLWlubGluZSBib29sIENTU1BhcnNlclNlbGVjdG9yOjpoYXNTaGFkb3dE
ZXNjZW5kYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZWxlY3Rvci0+cmVsYXRpb24oKSA9
PSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDsKLX0KLQotaW5saW5lIHZvaWQgQ1NTUGFy
c2VyVmFsdWU6OnNldEZyb21WYWx1ZUxpc3Qoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVl
TGlzdD4gdmFsdWVMaXN0KQotewotICAgIGlkID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIHRoaXMt
PnZhbHVlTGlzdCA9IHZhbHVlTGlzdC5yZWxlYXNlKCk7Ci0gICAgdW5pdCA9IFZhbHVlTGlzdDsK
LX0KLQotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmluZywgY29uc3QgY2hh
ciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIFdURjo6ZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzKTsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJD
b3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzMiArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcs
IDIwMTAgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYgQXBwbGUgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNTU0lu
aGVyaXRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNWR1BhaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbnRyb2xDb2xvclZhbHVlKENTU1ZhbHVl
SUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID49IENTU1ZhbHVlQWN0aXZlYm9yZGVyICYmIENTU1Bh
cnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOwotCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuaWQ7Ci0KLSAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IGZhbHNlOwotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7Ci0KLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAg
IC8qIFRoZSBjb21tZW50IHRvIHRoZSByaWdodCBkZWZpbmVzIGFsbCB2YWxpZCB2YWx1ZSBvZiB0
aGVzZQotICAgICAqIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBTVkcgMS4xLCBBcHBlbmRpeCBO
LiBQcm9wZXJ0eSBpbmRleCAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlBbGlnbm1lbnRCYXNlbGlu
ZToKLSAgICAvLyBhdXRvIHwgYmFzZWxpbmUgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVk
Z2UgfCBtaWRkbGUgfAotICAgIC8vIGNlbnRyYWwgfCBhZnRlci1lZGdlIHwgdGV4dC1hZnRlci1l
ZGdlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwKLSAgICAvLyBoYW5naW5nIHwgbWF0aGVt
YXRpY2FsIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09
IENTU1ZhbHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwKLSAgICAgICAgICAo
aWQgPj0gQ1NTVmFsdWVCZWZvcmVFZGdlICYmIGlkIDw9IENTU1ZhbHVlTWF0aGVtYXRpY2FsKSkK
LSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQ6Ci0gICAgLy8gYmFzZWxpbmUgfCBzdXBl
ciB8IHN1YiB8IDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IHwgaW5oZXJpdAotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBpZCA9PSBDU1NWYWx1ZVN1YiB8fAotICAgICAgICAg
ICBpZCA+PSBDU1NWYWx1ZVN1cGVyKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0
ZU1vZGUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlEb21pbmFudEJh
c2VsaW5lOgotICAgIC8vIGF1dG8gfCB1c2Utc2NyaXB0IHwgbm8tY2hhbmdlIHwgcmVzZXQtc2l6
ZSB8IGlkZW9ncmFwaGljIHwKLSAgICAvLyBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0
aWNhbCB8IGNlbnRyYWwgfCBtaWRkbGUgfAotICAgIC8vIHRleHQtYWZ0ZXItZWRnZSB8IHRleHQt
YmVmb3JlLWVkZ2UgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwg
aWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwKLSAgICAgICAgICAoaWQgPj0gQ1NTVmFsdWVVc2VTY3Jp
cHQgJiYgaWQgPD0gQ1NTVmFsdWVSZXNldFNpemUpIHx8Ci0gICAgICAgICAgKGlkID49IENTU1Zh
bHVlQ2VudHJhbCAmJiBpZCA8PSBDU1NWYWx1ZU1hdGhlbWF0aWNhbCkpCi0gICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlFbmFibGVCYWNrZ3JvdW5kOgotICAgIC8vIGFjY3VtdWxhdGUgfCBuZXcgW3hdIFt5XSBb
d2lkdGhdIFtoZWlnaHRdIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBY2N1
bXVsYXRlKSAvLyBUT0RPIDogbmV3Ci0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJTdGFydDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJF
bmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNl
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpOwotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFJ1bGU6ICAgICAgICAgICAgLy8gbm9uemVybyB8
IGV2ZW5vZGQgfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGxSdWxlOgotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb256ZXJvIHx8IGlkID09IENTU1ZhbHVlRXZlbm9kZCkKLSAg
ICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+IHwgaW5o
ZXJpdAotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWpvaW46ICAgLy8gbWl0ZXIg
fCByb3VuZCB8IGJldmVsIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVNaXRl
ciB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kIHx8IGlkID09IENTU1ZhbHVlQmV2ZWwpCi0gICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOiAgICAvLyBidXR0IHwgcm91bmQgfCBzcXVhcmUgfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUJ1dHQgfHwgaWQgPT0gQ1NTVmFsdWVS
b3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNxdWFyZSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU9w
YWNpdHk6ICAgLy8gPG9wYWNpdHktdmFsdWU+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWxsT3BhY2l0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNpdHk6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFp
ZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2Vu
dCwgU1ZHQXR0cmlidXRlTW9kZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlTaGFwZVJlbmRlcmluZzoKLSAgICAvLyBhdXRvIHwgb3B0aW1pemVTcGVlZCB8IGNyaXNw
RWRnZXMgfCBnZW9tZXRyaWNQcmVjaXNpb24gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8Ci0gICAgICAgICAg
ICBpZCA9PSBDU1NWYWx1ZUNyaXNwZWRnZXMgfHwgaWQgPT0gQ1NTVmFsdWVHZW9tZXRyaWNwcmVj
aXNpb24pCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvclJlbmRlcmluZzogLy8gYXV0byB8IG9wdGlt
aXplU3BlZWQgfCBvcHRpbWl6ZVF1YWxpdHkgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8Ci0gICAgICAgICAg
ICBpZCA9PSBDU1NWYWx1ZU9wdGltaXplcXVhbGl0eSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJ1ZmZl
cmVkUmVuZGVyaW5nOiAvLyBhdXRvIHwgZHluYW1pYyB8IHN0YXRpYwotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRHluYW1pYyB8fCBpZCA9PSBDU1NWYWx1
ZVN0YXRpYykKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yUHJvZmlsZTogLy8gYXV0byB8IHNSR0Ig
fCA8bmFtZT4gfCA8dXJpPiBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgaWQgPT0gQ1NTVmFsdWVTcmdiKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0
aW9uOiAgIC8vIGF1dG8gfCBzUkdCIHwgbGluZWFyUkdCIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlU3JnYiB8fCBpZCA9PSBDU1NWYWx1ZUxpbmVhcnJn
YikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgLyogU3RhcnQgb2Ygc3VwcG9ydGVkIENTUyBwcm9wZXJ0aWVzIHdpdGggdmFsaWRhdGlv
bi4gVGhpcyBpcyBuZWVkZWQgZm9yIHBhcnNlU2hvcnRIYW5kIHRvIHdvcmsKLSAgICAgKiBjb3Jy
ZWN0bHkgYW5kIGFsbG93cyBvcHRpbWl6YXRpb24gaW4gYXBwbHlSdWxlKC4uKQotICAgICAqLwot
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6ICAgIC8vIHN0YXJ0IHwgbWlkZGxlIHwg
ZW5kIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBpZCA9PSBD
U1NWYWx1ZU1pZGRsZSB8fCBpZCA9PSBDU1NWYWx1ZUVuZCkKLSAgICAgICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbDogLy8gYXV0byB8IDxhbmdsZT4gfCBpbmhlcml0Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBGQUxMVEhS
T1VHSDsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDog
Ly8gPGFuZ2xlPiAocmVzdHJpY3RlZCB0byBfZGVnXyBwZXIgU1ZHIDEuMSBzcGVjKSB8IGluaGVy
aXQKLSAgICAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwotCi0gICAgICAgICAg
ICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFpbnRPcmRl
cjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVBhaW50T3JkZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUZpbGw6ICAgICAgICAgICAgICAgICAvLyA8cGFpbnQ+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlTdHJva2U6ICAgICAgICAgICAgICAgLy8gPHBhaW50PiB8IGluaGVyaXQKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVOb25lKCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVN
ZW51KQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9y
KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoaWQpKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6
OnRyYW5zcGFyZW50OwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
U1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
c3RyaW5nLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV92YWx1ZUxpc3QtPmN1
cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFp
bnQ6OmNyZWF0ZVVSSSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU1ZHUGFp
bnQoKTsKLQotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5U3RvcENvbG9yOiAvLyBUT0RPIDogaWNjY29sb3IKLSAgICBjYXNlIENTU1By
b3BlcnR5Rmxvb2RDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKLSAg
ICAgICAgaWYgKENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpCi0gICAgICAg
ICAgICB8fCAoaWQgPj0gQ1NTVmFsdWVBbGljZWJsdWUgJiYgaWQgPD0gQ1NTVmFsdWVZZWxsb3dn
cmVlbikpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3Ry
aW5nKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKLSAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR0NvbG9yOjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKLSAgICAgICAgZWxzZSAvLyBUT0RPIDog
c3ZnY29sb3IgKGljY0NvbG9yKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNWR0Nv
bG9yKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlWZWN0
b3JFZmZlY3Q6IC8vIG5vbmUgfCBub24tc2NhbGluZy1zdHJva2UgfCBpbmhlcml0Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgaWQgPT0gQ1NTVmFsdWVOb25TY2FsaW5nU3Ryb2tl
KQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6Ci0gICAgLy8gbHItdGIgfCBybF90YiB8
IHRiLXJsIHwgbHIgfCBybCB8IHRiIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVMclRiIHx8IGlkID09IENTU1ZhbHVlUmxUYiB8fCBpZCA9PSBDU1NWYWx1ZVRiUmwgfHwgaWQg
PT0gQ1NTVmFsdWVMciB8fCBpZCA9PSBDU1NWYWx1ZVJsIHx8IGlkID09IENTU1ZhbHVlVGIpCi0g
ICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDogICAgICAgICAvLyA8bGVuZ3RoPiB8IGluaGVy
aXQKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldDoKLSAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxkYXNoYXJyYXk+IHwgaW5o
ZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwotCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUtlcm5pbmc6ICAgICAgICAgICAgICAvLyBhdXRvIHwgbm9ybWFsIHwgPGxl
bmd0aD4gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0g
Q1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDogICAgLy8gPHVyaT4gfCBub25l
IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCk7Ci0gICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBhdXRvIHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hhZG93KCptX3ZhbHVl
TGlzdCwgcHJvcElkKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dWYWx1ZUxpc3QpIHsKLSAgICAg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUoc2hhZG93VmFsdWVMaXN0KSwg
aW1wb3J0YW50KTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1hc2tUeXBlOiAvLyBsdW1pbmFuY2UgfCBhbHBoYSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTHVtaW5hbmNlIHx8IGlkID09IENTU1ZhbHVlQWxwaGEpCi0gICAgICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIC8qIHNob3J0
aGFuZCBwcm9wZXJ0aWVzICovCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlcjoKLSAgICB7Ci0g
ICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgICAgIG1faW1w
bGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVy
dHlNYXJrZXJTdGFydCwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgICAgIHJvbGxiYWNr
TGFzdFByb3BlcnRpZXMoMSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1
ZSgpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlck1pZCwgdmFsdWUsIGlt
cG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TWFya2VyRW5kLCB2YWx1
ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUN4OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDeToKLSAgICBjYXNlIENTU1Byb3BlcnR5UjoKLSAgICBjYXNlIENTU1By
b3BlcnR5Ung6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlY
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlZOgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIElmIHlvdSBjcmFz
aCBoZXJlLCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEgY3NzIHByb3BlcnR5IGFuZCBhcmUgbm90
IGhhbmRsaW5nIGl0Ci0gICAgICAgIC8vIGluIGVpdGhlciB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQg
b3IgdGhlIG9uZSBpbiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUKLSAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSgwLCAidW5pbXBsZW1lbnRlZCBwcm9wZXJ0eUlEOiAlZCIsIHByb3BJZCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWRfcHJpbWl0aXZlKSB7Ci0g
ICAgICAgIGlmIChpZCAhPSAwKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCk7Ci0gICAgICAgIGVs
c2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMp
OwotICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCi0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRo
Q2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotICAgIGlmICghcGFyc2VkVmFsdWUgfHwgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkg
JiYgIWluU2hvcnRoYW5kKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUocGFyc2VkVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ry
b2tlRGFzaGFycmF5KCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiByZXQgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IHRy
dWU7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7Ci0gICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBo
YW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCi0gICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gMCkKLSAg
ICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KHZhbHVlLT5pZCkpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0tIWikKLSAgICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51
bml0KSk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYg
KHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1
ZS0+aVZhbHVlID09ICcsJykKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVJlZlB0cjxTVkdQYWludD4gQ1NTUGFyc2VyOjpw
YXJzZVNWR1BhaW50KCkKLXsKLSAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAg
ICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9y
KENvbG9yKGMpKTsKLX0KLQotUmVmUHRyPFNWR0NvbG9yPiBDU1NQYXJzZXI6OnBhcnNlU1ZHQ29s
b3IoKQotewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGlmICghcGFy
c2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBTVkdDb2xvcjo6Y3JlYXRlRnJvbUNvbG9yKENvbG9y
KGMpKTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVBhaW50T3Jk
ZXIoKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7Ci0KLSAgICBWZWN0b3I8Q1NTVmFsdWVJRD4gcGFpbnRUeXBlTGlzdDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGZpbGw7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBz
dHJva2U7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtYXJrZXJzOwotICAgIHdoaWxl
ICh2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRmlsbCAmJiAhZmls
bCkKLSAgICAgICAgICAgIGZpbGwgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cih2YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTdHJv
a2UgJiYgIXN0cm9rZSkKLSAgICAgICAgICAgIHN0cm9rZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZU1hcmtlcnMgJiYgIW1hcmtlcnMpCi0gICAgICAgICAgICBtYXJrZXJzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHBhaW50VHlwZUxpc3QuYXBw
ZW5kKHZhbHVlLT5pZCk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICB9Ci0KLSAgICAvLyBBZnRlciBwYXJzaW5nIHdlIHNlcmlhbGl6ZSB0aGUgcGFpbnQtb3JkZXIg
bGlzdC4gU2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgLy8gcG9wIGEgbGFzdCBsaXN0
IGl0ZW1zIGZyb20gQ1NTVmFsdWVMaXN0IHdpdGhvdXQgYmlnZ2VyIGNvc3QsIHdlIGNyZWF0ZSB0
aGUKLSAgICAvLyBsaXN0IGFmdGVyIHBhcnNpbmcuIAotICAgIENTU1ZhbHVlSUQgZmlyc3RQYWlu
dE9yZGVyVHlwZSA9IHBhaW50VHlwZUxpc3QuYXQoMCk7Ci0gICAgYXV0byBwYWludE9yZGVyTGlz
dCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBzd2l0Y2ggKGZp
cnN0UGFpbnRPcmRlclR5cGUpIHsKLSAgICBjYXNlIENTU1ZhbHVlRmlsbDoKLSAgICAgICAgRkFM
TFRIUk9VR0g7Ci0gICAgY2FzZSBDU1NWYWx1ZVN0cm9rZToKLSAgICAgICAgcGFpbnRPcmRlckxp
c3QtPmFwcGVuZChmaXJzdFBhaW50T3JkZXJUeXBlID09IENTU1ZhbHVlRmlsbCA/IGZpbGwucmVs
ZWFzZU5vbk51bGwoKSA6IHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgaWYgKHBh
aW50VHlwZUxpc3Quc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgaWYgKHBhaW50VHlwZUxpc3Qu
YXQoMSkgPT0gQ1NTVmFsdWVNYXJrZXJzKQotICAgICAgICAgICAgICAgIHBhaW50T3JkZXJMaXN0
LT5hcHBlbmQobWFya2Vycy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWFya2VyczoKLSAgICAgICAgcGFpbnRPcmRlckxpc3Qt
PmFwcGVuZChtYXJrZXJzLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBpZiAocGFpbnRUeXBl
TGlzdC5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRUeXBlTGlzdC5hdCgxKSA9
PSBDU1NWYWx1ZVN0cm9rZSkKLSAgICAgICAgICAgICAgICBwYWludE9yZGVyTGlzdC0+YXBwZW5k
KHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIFdURk1vdmUocGFpbnRPcmRlckxpc3QpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZp
c2lvbiAyMDQ3NDMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI1MSw2ICsyNTEsOCBAQAogCiBuZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQogCituZXdDU1NQ
YXJzZXJFbmFibGVkIGluaXRpYWw9ZmFsc2UKKwogaHR0cEVxdWl2RW5hYmxlZCBpbml0aWFsPXRy
dWUKIAogIyBTb21lIHBvcnRzIChlLmcuIGlPUykgbWlnaHQgY2hvb3NlIHRvIGRpc3BsYXkgYXR0
YWNobWVudHMgaW5saW5lLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHJlc3BvbnNlIGluY2x1
ZGVzIHRoZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286745</attachid>
            <date>2016-08-23 11:17:14 -0700</date>
            <delta_ts>2016-08-23 11:23:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>653712</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTIzICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVmIGZvciBlbmFibGluZyBu
ZXcgQ1NTIHBhcnNpbmcgYW5kIG1vdmUgcGFyc2VyIGZpbGVzIGludG8gc3ViZGlyZWN0b3J5Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQv
V2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXROZXdDU1NQYXJzZXJF
bmFibGVkKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNi0wOC0yMyAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIy
MDQyNDMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNl
c0RlZmluaXRpb25zLmgJKHJldmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsy
MjEsNyBAQAogICAgIG1hY3JvKEVuYWJsZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudCwgZW5hYmxl
SW5oZXJpdFVSSVF1ZXJ5Q29tcG9uZW50LCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAg
ICAgbWFjcm8oU2VydmljZUNvbnRyb2xzRW5hYmxlZCwgc2VydmljZUNvbnRyb2xzRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKE5ld0Jsb2NrSW5zaWRlSW5s
aW5lTW9kZWxFbmFibGVkLCBuZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZCwgQm9vbCwg
Ym9vbCwgZmFsc2UsICIiLCAiIikgXAorICAgIG1hY3JvKE5ld0NTU1BhcnNlckVuYWJsZWQsIG5l
d0NTU1BhcnNlckVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNy
byhIVFRQRXF1aXZFbmFibGVkLCBodHRwRXF1aXZFbmFibGVkLCBCb29sLCBib29sLCB0cnVlLCAi
IiwgIiIpIFwKICAgICBtYWNybyhNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBtb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8o
U2hhZG93RE9NRW5hYmxlZCwgc2hhZG93RE9NRW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIlNo
YWRvdyBET00iLCAiSFRNTCBTaGFkb3cgRE9NIHByb3RvdHlwZSIpIFwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9u
IDIwNDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MSw2ICsxMjYxLDE2IEBACiAgICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPm5ld0Jsb2NrSW5zaWRlSW5saW5lTW9kZWxFbmFibGVkKCk7
CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldE5ld0NTU1BhcnNlckVuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldE5ld0NTU1BhcnNlckVuYWJsZWQoZmxhZyk7Cit9CisKK2Jvb2wgV0tQcmVm
ZXJlbmNlc0dldE5ld0NTU1BhcnNlckVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bmV3Q1NTUGFyc2Vy
RW5hYmxlZCgpOworfQorCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhlbENTU09NRWxlbWVu
dE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxh
ZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTdWJwaXhlbENTU09NRWxlbWVu
dE1ldHJpY3NFbmFibGVkKGZsYWcpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHJldmlzaW9uIDIw
NDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVm
UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDEwIEBACiBXS19FWFBPUlQg
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQoV0tQ
cmVmZXJlbmNlc1JlZik7CiAKIC8vIERlZmF1bHRzIHRvIGZhbHNlLgorV0tfRVhQT1JUIHZvaWQg
V0tQcmVmZXJlbmNlc1NldE5ld0NTU1BhcnNlckVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwgYm9v
bCk7CitXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmKTsKKworLy8gRGVmYXVsdHMgdG8gZmFsc2UuCiBXS19FWFBPUlQgdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0U3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRTdWJw
aXhlbENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOTMsNyArMzA5Myw4IEBACiAgICAgc2V0dGluZ3Mu
c2V0U2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5h
YmxlZEtleSgpKSk7CiAgICAgCiAgICAgc2V0dGluZ3Muc2V0TmV3QmxvY2tJbnNpZGVJbmxpbmVN
b2RlbEVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpu
ZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZEtleSgpKSk7Ci0gICAgCisgICAgc2V0dGlu
Z3Muc2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJl
ZmVyZW5jZXNLZXk6Om5ld0NTU1BhcnNlckVuYWJsZWRLZXkoKSkpOworCiAgICAgc2V0dGluZ3Mu
c2V0U3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVG
b3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnN1YnBpeGVsQ1NTT01FbGVtZW50TWV0cmljc0VuYWJs
ZWRLZXkoKSkpOwogCiAgICAgc2V0dGluZ3Muc2V0VXNlTGVnYWN5VGV4dEFsaWduUG9zaXRpb25l
ZEVsZW1lbnRCZWhhdmlvcihzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNL
ZXk6OnVzZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3JLZXkoKSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2NyeXB0by9rZXlzIgogICAgICIke1dFQkNPUkVfRElSfS9jcnlwdG8v
cGFyYW1ldGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vY3NzIgorICAgICIke1dFQkNPUkVfRElS
fS9jc3MvcGFyc2VyIgogICAgICIke1dFQkNPUkVfRElSfS9jc3NqaXQiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2RvbSIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tL2RlZmF1bHQiCkBAIC0xMzQ0LDgg
KzEzNDUsOCBAQAogICAgIGNzcy9DU1NOYW1lZEltYWdlVmFsdWUuY3BwCiAgICAgY3NzL0NTU09N
VXRpbHMuY3BwCiAgICAgY3NzL0NTU1BhZ2VSdWxlLmNwcAotICAgIGNzcy9DU1NQYXJzZXIuY3Bw
Ci0gICAgY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKKyAgICBjc3MvcGFyc2VyL0NTU1BhcnNlci5j
cHAKKyAgICBjc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHAKICAgICBjc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuY3BwCiAgICAgY3NzL0NTU1Byb3BlcnR5LmNwcAogICAgIGNzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuY3BwCkBAIC0xMzg5LDcgKzEzOTAsNyBAQAogICAgIGNzcy9SdWxlRmVhdHVy
ZS5jcHAKICAgICBjc3MvUnVsZVNldC5jcHAKICAgICBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAotICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwCisgICAgY3NzL3BhcnNlci9T
VkdDU1NQYXJzZXIuY3BwCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKICAgICBjc3MvU2Vs
ZWN0b3JGaWx0ZXIuY3BwCiAgICAgY3NzL1NvdXJjZVNpemVMaXN0LmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDgtMjMgIERhdmUgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHByZWYgZm9yIGVuYWJsaW5nIG5ldyBDU1MgcGFyc2lu
ZyBhbmQgbW92ZSBwYXJzZXIgZmlsZXMgaW50byBzdWJkaXJlY3RvcnkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjEwOTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6IFJlbW92
ZWQuCisgICAgICAgICogY3NzL0NTU1BhcnNlck1vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBj
c3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
VmFsdWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogY3NzL1NWR0NTU1BhcnNlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogY3NzL3BhcnNlcjogQWRkZWQuCisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwOiBDb3BpZWQgZnJvbSBjc3MvQ1NTUGFyc2VyLmNwcC4KKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlci5oOiBDb3BpZWQgZnJvbSBjc3MvQ1NTUGFyc2VyLmguCisgICAg
ICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmg6IENvcGllZCBmcm9tIGNzcy9DU1NQYXJz
ZXJNb2RlLmguCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwOiBDb3Bp
ZWQgZnJvbSBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlclZhbHVlcy5oOiBDb3BpZWQgZnJvbSBjc3MvQ1NTUGFyc2VyVmFsdWVzLmguCisgICAg
ICAgICogY3NzL3BhcnNlci9TVkdDU1NQYXJzZXIuY3BwOiBDb3BpZWQgZnJvbSBjc3MvU1ZHQ1NT
UGFyc2VyLmNwcC4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmluOgorCiAyMDE2LTA4LTIzICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEIHNob3VsZCBub3QgaGF2ZSBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgcGFyZW50
IGludGVyZmFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIxLDYg
KzMzMjEsMTIgQEAKIAkJOTNGOUI3QTAwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlC
NzlFMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi87IH07CiAJCTkzRjlC
N0ExMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8q
IEpTQ0RBVEFTZWN0aW9uLmggKi87IH07CiAJCTkzRkRBRkNBMEIxMTMwNzQwMEUyNzQ2RiAvKiBF
ZGl0b3JJbnNlcnRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRkRBRkM5MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NDZE
MzcyRDFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBD
U1NQYXJzZXIuY3BwICovOyB9OworCQk5NDZEMzcyRTFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZE
MzcyOTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggKi87IH07CisJCTk0NkQzNzJGMUQ2
Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzcyQTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFy
c2VyTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTk0NkQzNzMwMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MkIxRDZDQjI4
QjAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgKi87IH07CisJCTk0NkQzNzMxMUQ2Q0Iy
OTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJz
ZXJWYWx1ZXMuaCAqLzsgfTsKKwkJOTQ2RDM3MzMxRDZDQzQyQjAwNzcwODRGIC8qIFNWR0NTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NDZEMzczMjFENkNDMzcyMDA3NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLzsgfTsKIAkJOTZB
QkE0MjMxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2QUJBNDIy
MTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgKi87
IH07CiAJCTk3MDNFMUJGMTVEQzRFMzcwMDFGMjRDOCAvKiBKU1ZvaWRDYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0U5RUM4QjE1REM0
OTJGMDA0RjJFNzEgLyogSlNWb2lkQ2FsbGJhY2suY3BwICovOyB9OwogCQk5NzA1OTk3NzEwN0Q5
NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwNTk5NzMxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGlj
eUNhbGxiYWNrLmNwcCAqLzsgfTsKQEAgLTQ1MDIsNyArNDUwOCw2IEBACiAJCUIyMjI3QUY1MEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OTVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkda
b29tQW5kUGFuLmNwcCAqLzsgfTsKIAkJQjIyMjdBRjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pv
b21BbmRQYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyMjI3OTYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmggKi87IH07CiAJCUIy
MjI3QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjdC
MDAwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki87IH07Ci0JCUIyMjI3QjA2MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjdCMDEwRDAw
QkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi87IH07CiAJCUIyMjJGNjk4MEFCNzcx
OTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjJGNjk2MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xl
LmNwcCAqLzsgfTsKIAkJQjIyMkY2OTkwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjJGNjk3MEFC
NzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmggKi87IH07CiAJCUIyMjJGNjlDMEFCNzcxQjgw
MDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUEwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVu
dC5jcHAgKi87IH07CkBAIC00OTE4LDggKzQ5MjMsNiBAQAogCQlCQzAwRjAxNTBFMEExODk1MDBG
RDA0RTMgLyogSlNGaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzAwRjAxMTBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMTYwRTBBMTg5NTAw
RkQwNEUzIC8qIEpTRmlsZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMwMEYwMTIwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3QuY3Bw
ICovOyB9OwogCQlCQzAwRjAxNzBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEYwMTMwRTBBMTg5
NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3QuaCAqLzsgfTsKLQkJQkMwMkE0QjcwRTA5OTdCOTAwNEI2
RDJCIC8qIENTU1BhcnNlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMwMkE0QjYwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJD
MDJBNTQwMEUwOTlDNUEwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkE1M0YwRTA5OUM1QTAwNEI2
RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgKi87IH07CiAJCUJDMDJBNjNDMEUwOUE5Q0YwMDRC
NkQyQiAvKiBDU1NGdW5jdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTYzQjBFMDlBOUNGMDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25W
YWx1ZS5oICovOyB9OwogCQlCQzAyQTY0NjBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25W
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzAyQTY0NTBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgKi87IH07CiAJ
CUJDMDZFRDA2MEJGRDVCQUUwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRDA0
MEJGRDVCQUUwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCAqLzsgfTsK
QEAgLTUxMTcsOCArNTEyMCw2IEBACiAJCUJDNzREQTQ5MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JH
QkNvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Qzc0REE0NzEwMTNGNDY4MDA3OTg3QUQgLyogSlNSR0JDb2xvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNzZBQzEzMEREN0FENUMwMDQxNUYz
NCAvKiBQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzZBQzExMEREN0FENUMwMDQxNUYzNCAvKiBQYXJzZXJVdGlsaXRpZXMu
aCAqLzsgfTsKIAkJQkM3NzJCM0MwQzRFQTkxRTAwODMyODVGIC8qIENTU0hlbHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzYwQzRFQTkx
RTAwODMyODVGIC8qIENTU0hlbHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUJDNzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJC
MzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgKi87IH07Ci0JCUJDNzcyQjNFMEM0
RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjM4MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3
MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDQwQzRFQjJDNjAwODMyODVG
IC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJQkM3NzJDNDcwQzRFQjJDNjAwODMyODVG
IC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCAq
LzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEMw
QzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwpAQCAtNjMzMiw3
ICs2MzMzLDYgQEAKIAkJRkIzMDU2QzIxNjlFNURBQzAwOTZBMjMyIC8qIENTU0dyb3VwaW5nUnVs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzMDU2
QzExNjlFNURBQzAwOTZBMjMyIC8qIENTU0dyb3VwaW5nUnVsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZCNDg0RjRDMTcxRjgyMUUwMDA0MDc1
NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkI0ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1
bmN0aW9ucy5jcHAgKi87IH07CiAJCUZCNDg0RjREMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zv
cm1GdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZCNDg0RjRCMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuaCAqLzsg
fTsKLQkJRkI3OEFEMkUxNTFCRjVFNjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCNzhBRDJDMTUxQkY1RDIw
MEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkI5MTM5MjQxNkFFNEMxNzAwMUZFNjgyIC8qIERPTVBhdGgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCOTEzOTIw
MTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi87IH07CiAJCUZCOTEzOTJBMTZBRTRGQzAw
MDFGRTY4MiAvKiBKU0RPTVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCOTEzOTI4MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguaCAqLzsg
fTsKIAkJRkI5MTM5MkIxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjkxMzkyOTE2QUU0RkMwMDAx
RkU2ODIgLyogSlNET01QYXRoLmNwcCAqLzsgfTsKQEAgLTEwNDI4LDYgKzEwNDI4LDEyIEBACiAJ
CTkzRjlCNzlFMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NEQVRBU2VjdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRB
U2VjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NEQVRBU2VjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0
NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFZGl0b3JJbnNlcnRBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTQ2RDM3MjgxRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQYXJzZXIuY3BwOyBwYXRoID0gcGFyc2VyL0NTU1Bh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQzNzI5MUQ2Q0IyOEIw
MDc3MDg0RiAvKiBDU1NQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q1NTUGFyc2VyLmg7IHBhdGggPSBwYXJzZXIvQ1NTUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk0NkQzNzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJNb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck1vZGUuaDsgcGF0aCA9
IHBhcnNlci9DU1NQYXJzZXJNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0
NkQzNzJCMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VyVmFsdWVzLmNwcDsgcGF0aCA9IHBh
cnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NDZEMzcyQzFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlclZhbHVlcy5oOyBwYXRoID0gcGFyc2VyL0NT
U1BhcnNlclZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NDZEMzczMjFE
NkNDMzcyMDA3NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNWR0NTU1BhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvU1ZHQ1NTUGFy
c2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTUwQzRDMDJCRUQ4OTM2Rjgx
OEUyRjk5IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0dyYXBoaWNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9saWN5Q2FsbGJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE4NzgsNyArMTE4ODQsNiBAQAogCQlCMjIyNzk2MDBE
MDBCRjIxMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjIyNzk2MTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFNWR1pvb21BbmRQYW4uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjIyN0IwMDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMjIyN0IwMTBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDU1NQYXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyN0IwNDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NT
VmFsdWVLZXl3b3Jkcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQ1NTVmFsdWVLZXl3
b3Jkcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIyMkY2OTYwQUI3NzE5NTAw
MjJFRkFEIC8qIEpTU1ZHQW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTU1ZHQW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIy
RjY5NzBBQjc3MTk1MDAyMkVGQUQgLyogSlNTVkdBbmdsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTVkdBbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTIzMDYsOCArMTIzMTEsNiBAQAogCQlCQzAwRjAxMTBFMEExODk1MDBGRDA0RTMgLyogSlNG
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAxMjBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMTMwRTBBMTg5NTAwRkQw
NEUzIC8qIEpTRmlsZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNG
aWxlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzAyQTRCNjBFMDk5N0I5
MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU1BhcnNlclZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
QzAyQTUzRjBFMDk5QzVBMDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1BhcnNlclZhbHVlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJBNjNCMEUwOUE5Q0YwMDRCNkQyQiAvKiBDU1NGdW5j
dGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0Z1bmN0aW9u
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkE2NDUwRTA5QUFFOTAw
NEI2RDJCIC8qIENTU0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTRnVuY3Rpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDZFRDA0MEJGRDVCQUUwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTE2
LDggKzEyNTE5LDYgQEAKIAkJQkM3NERBNDcxMDEzRjQ2ODAwNzk4N0FEIC8qIEpTUkdCQ29sb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSR0JDb2xvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc2QUMxMTBERDdBRDVDMDA0MTVGMzQgLyogUGFyc2Vy
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlclV0aWxp
dGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkIzNjBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCMzcwQzRFQTkx
RTAwODMyODVGIC8qIENTU1BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENTU1BhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDNzcyQjM4MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1BhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzc3MkM0NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVl
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAw
ODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBYTUxIdHRwUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3
MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTUlNRVR5cGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzkwNiw3ICsxMzkwNyw2IEBACiAJCUZCMzA1NkMxMTY5
RTVEQUMwMDk2QTIzMiAvKiBDU1NHcm91cGluZ1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTR3JvdXBpbmdSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCNDg0RjRBMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtRnVuY3Rpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1
IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUcmFuc2Zvcm1GdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkI3
OEFEMkMxNTFCRjVEMjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ1NTUGFyc2VyTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGQjkxMzkyMDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01QYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCOTEzOTIxMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBET01QYXRoLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkI5MTM5MjgxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0RPTVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4MDQ2LDYgKzE4MDQ2LDE5IEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQk5NDZEMzcyNzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2Vy
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5NDZEMzcz
MjFENkNDMzcyMDA3NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLywKKwkJCQk5NDZEMzcyODFE
NkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCAqLywKKwkJCQk5NDZEMzcyOTFENkNCMjhC
MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggKi8sCisJCQkJOTQ2RDM3MkExRDZDQjI4QjAwNzcwODRG
IC8qIENTU1BhcnNlck1vZGUuaCAqLywKKwkJCQk5NDZEMzcyQjFENkNCMjhCMDA3NzA4NEYgLyog
Q1NTUGFyc2VyVmFsdWVzLmNwcCAqLywKKwkJCQk5NDZEMzcyQzFENkNCMjhCMDA3NzA4NEYgLyog
Q1NTUGFyc2VyVmFsdWVzLmggKi8sCisJCQkpOworCQkJbmFtZSA9IHBhcnNlcjsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTk3MTE0NUZFMTRFRjAwNkUwMDY3NEZEOSAvKiBN
b2R1bGVzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIy
MTExLDYgKzIyMTI0LDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTQ2RDM3MjcxRDZD
QjIyNTAwNzcwODRGIC8qIHBhcnNlciAqLywKIAkJCQlGQkQ2QUY4NDE1RUYyMUQ0MDA4QjcxMTAg
LyogQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRkJENkFGODUxNUVGMjFENDAwOEI3
MTEwIC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuaCAqLywKIAkJCQlBODBFNkNEQTBBMTk4OUNBMDA3
RkI4QzUgLyogQ291bnRlci5oICovLApAQCAtMjIyMTIsMTEgKzIyMjI2LDYgQEAKIAkJCQlBODBF
NkNDQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUuY3BwICovLAogCQkJCUE4MEU2Q0Q2
MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5oICovLAogCQkJCTg1QzU2Q0E2MEFBODlE
NUYwMEQ5NTc1NSAvKiBDU1NQYWdlUnVsZS5pZGwgKi8sCi0JCQkJQkM3NzJCMzcwQzRFQTkxRTAw
ODMyODVGIC8qIENTU1BhcnNlci5jcHAgKi8sCi0JCQkJQkM3NzJCMzgwQzRFQTkxRTAwODMyODVG
IC8qIENTU1BhcnNlci5oICovLAotCQkJCUZCNzhBRDJDMTUxQkY1RDIwMEZFNTREMyAvKiBDU1NQ
YXJzZXJNb2RlLmggKi8sCi0JCQkJQkMwMkE1M0YwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNl
clZhbHVlcy5jcHAgKi8sCi0JCQkJQkMwMkE0QjYwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNl
clZhbHVlcy5oICovLAogCQkJCUE4MEU2Q0RCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRp
dmVWYWx1ZS5jcHAgKi8sCiAJCQkJQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1p
dGl2ZVZhbHVlLmggKi8sCiAJCQkJOTMwNzA1OTAwOUUwQzc1ODAwQjE3RkU0IC8qIENTU1ByaW1p
dGl2ZVZhbHVlLmlkbCAqLywKQEAgLTIyMzgzLDcgKzIyMzkyLDYgQEAKIAkJCQk4NTA2NTZERjBB
QUI0NTRGMDAyRDE1QzAgLyogU3R5bGVTaGVldExpc3QuaWRsICovLAogCQkJCTkzQ0E0Q0EyMDlE
RjkzRkEwMERGODY3NyAvKiBzdmcuY3NzICovLAogCQkJCUIyMjI3QjAwMEQwMEJGRjEwMDcxQjc4
MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwICovLAotCQkJCUIyMjI3QjAx
MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwICovLAogCQkJCUIyMjI3QjA0MEQw
MEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAogCQkJCUZCNDg0RjRB
MTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuY3BwICovLAogCQkJCUZCNDg0
RjRCMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuaCAqLywKQEAgLTIzOTcy
LDkgKzIzOTgwLDYgQEAKIAkJCQkzMTRCRTNBMTFCMzBGNkI3MDAxNDE5ODIgLyogQ1NTTmFtZWRJ
bWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGOThGRkY0NTExQTI2NzYyMDBGNTQ4RTgg
LyogQ1NTT01VdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDAwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU1BhZ2VSdWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzc3MkIzRTBDNEVBOTFF
MDA4MzI4NUYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlGQjc4QUQyRTE1MUJG
NUU2MDBGRTU0RDMgLyogQ1NTUGFyc2VyTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMwMkE0
QjcwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc3QjM4NjMxMjI4ODNFOTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODBFNkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUQ4QUMzMENDNDlCRTAwMEJGQzU1NyAvKiBDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTUyLDYgKzI1MTU3
LDcgQEAKIAkJCQlCMkZBM0RCNTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0
aFNlZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjkwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHUGF0aFNlZ0FyY0Ficy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTQ2RDM3MkUxRDZDQjI5NDAw
NzcwODRGIC8qIENTU1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQkIwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0FyY1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNEQkQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjJGQTNEQkYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0Ficy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTMyNCw2ICsyNTMzMCw3IEBACiAJCQkJ
RTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMkREOEY1MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3Ro
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NDZEMzcyRjFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFy
c2VyTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8q
IExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTVCQTdENjMxNTE0MzdDQTAwRkUxRTNG
IC8qIExlbmd0aEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NzE2NzAxQzg2OUQ4
MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NTAzLDYgKzI2
NTEwLDcgQEAKIAkJCQkwODEzQTRFQTEyODQxMzI2MDA5OTI1MTEgLyogU1ZHU3RhdGljUHJvcGVy
dHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FBOTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHU3RvcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUFDMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NDZEMzczMTFE
NkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjIyN0FCODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyN0FCQjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU1ZHRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjdBQkUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N3aXRjaEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2MjIsOCArMjc2MzAsNiBAQAogCQkJCTMxNEJFM0Ez
MUIzMEY2RDEwMDE0MTk4MiAvKiBDU1NOYW1lZEltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjk4RkZGNDQxMUEyNjc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgwRTZDRjUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUJDNzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMwMkE1NDAwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1Bh
cnNlclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzg2MjEyMjg4M0U5MDBCODFG
RjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZEMDUw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4MEU2Q0Y3MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI4NjMyLDYgKzI4NjM4LDcgQEAKIAkJCQkxQTc1MEQ4RDBBOTBFNTIxMDAwRkYy
MTUgLyogSlNOb2RlSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3NTBERDQwQTkw
RTcyOTAwMEZGMjE1IC8qIEpTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRDlDMkMyMEMxN0I2OUUwMDVDOTBBMiAvKiBKU05vZGVMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTk0NkQzNzMwMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOUMyNjUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9kZUxp
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M5MUEzOEYxQjQ5OEFCRTAwM0Y5RUZB
IC8qIEpTTm9kZU9yU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzNTAzQ0EzMTAxNzlB
RDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Mjk1
LDYgKzI5MzAyLDcgQEAKIAkJCQkwRjQzQzg1RDE4OUUxMENGMDAwMTlBRTIgLyogUGVyZm9ybWFu
Y2VUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1ODFGQjQxNTIwRjkzQjAwM0E3QTc1
IC8qIFBlcmlvZGljV2F2ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUQ1REMyRDBGNDIzQTcz
MDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTQ2RDM3MzMxRDZDQzQyQjAwNzcwODRGIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlEMEZGMkE1RDExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDdEMzM0MzFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxC
dWZmZXJDb25mb3JtZXJDVi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRGNDVBNzFCRDFDNkZE
MDBFNEZBOEMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5
ODI3LDcgKzI5ODM1LDYgQEAKIAkJCQlCMjIyNzlBMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ29s
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNW
R0NTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBNzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHQ3Vyc29yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBRDBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVmc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5QjAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Rlc2NFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzAwMzAsNiArMzAwMzcsNyBAQAogCQkJCTdBQTNBNjk5MTk0QTY0RTcwMDFDQkQy
NCAvKiBUaWxlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRjcyQkYwQTE4N0ZE
NDQ5MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdBQTNBNkEzMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTQ2RDM3MkQxRDZDQjI5NDAwNzcwODRGIC8qIENTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUEzQTY5QjE5NEE2NEU3MDAxQ0JEMjQgLyog
VGlsZUdyaWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4NzcwRjIxMjQyQzUzNTAwMjIyNkJB
IC8qIFRpbGluZ0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEREIxMjUxRjEyRDAw
M0VGMjY5IC8qIFRpbWVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM4NTcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtz
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotCi0jaW5j
bHVkZSAiQ1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAi
Q1NTQm9yZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIK
LSNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmli
dXRpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUu
aCIKLSNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZh
Y2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0ZvbnRGZWF0dXJlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGb250VmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCi0j
aW5jbHVkZSAiQ1NTSW5oZXJpdGVkVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbml0aWFsVmFsdWUu
aCIKLSNpbmNsdWRlICJDU1NLZXlmcmFtZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NLZXlmcmFtZXNS
dWxlLmgiCi0jaW5jbHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U01lZGlhUnVsZS5oIgotI2luY2x1ZGUgIkNTU05hbWVkSW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU1BhZ2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUmV2
ZXJ0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NoYWRv
d1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1RpbWlu
Z0Z1bmN0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU1Vuc2V0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0j
aW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCi0jaW5j
bHVkZSAiQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNvdW50ZXIuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkdyaWRBcmVhLmgiCi0jaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJIYXNoVG9vbHMuaCIKLSNpbmNs
dWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGFpci5o
IgotI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgotI2luY2x1ZGUgIlNWR1BhdGhVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRlICJTZWxlY3Rv
ckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgi
Ci0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUg
IldlYktpdENTU0ZpbHRlclZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5o
IgotI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSA8Yml0c2V0
PgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSW1wbC5oPgotCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSNpbmNsdWRl
ICJDU1NHcmlkQXV0b1JlcGVhdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JpZExpbmVOYW1lc1Zh
bHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIkxlbmd0aFJlcGVhdC5oIgot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0jaW5jbHVkZSAiRGFzaGJv
YXJkUmVnaW9uLmgiCi0jZW5kaWYKLQotI2RlZmluZSBZWURFQlVHIDAKLQotI2lmIFlZREVCVUcg
PiAwCi1leHRlcm4gaW50IGNzc3l5ZGVidWc7Ci0jZW5kaWYKLQotZXh0ZXJuIGludCBjc3N5eXBh
cnNlKFdlYkNvcmU6OkNTU1BhcnNlciopOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1l
c3BhY2UgewotCi1lbnVtIFByb3BlcnR5VHlwZSB7Ci0gICAgUHJvcGVydHlFeHBsaWNpdCwKLSAg
ICBQcm9wZXJ0eUltcGxpY2l0Ci19OwotCi1jbGFzcyBJbXBsaWNpdFNjb3BlIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbXBsaWNpdFNjb3BlKTsKLXB1YmxpYzoKLSAgICBJbXBsaWNpdFNj
b3BlKFdlYkNvcmU6OkNTU1BhcnNlciYgcGFyc2VyLCBQcm9wZXJ0eVR5cGUgcHJvcGVydHlUeXBl
KQotICAgICAgICA6IG1fcGFyc2VyKHBhcnNlcikKLSAgICB7Ci0gICAgICAgIG1fcGFyc2VyLm1f
aW1wbGljaXRTaG9ydGhhbmQgPSBwcm9wZXJ0eVR5cGUgPT0gUHJvcGVydHlJbXBsaWNpdDsKLSAg
ICB9Ci0KLSAgICB+SW1wbGljaXRTY29wZSgpCi0gICAgewotICAgICAgICBtX3BhcnNlci5tX2lt
cGxpY2l0U2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6
OkNTU1BhcnNlciYgbV9wYXJzZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNvbnN0IHVuc2lnbmVkIENTU1BhcnNlcjo6aW52YWxpZFBhcnNlZFByb3Bl
cnRpZXNDb3VudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLXN0YXRp
YyBjb25zdCBkb3VibGUgTUFYX1NDQUxFID0gMTAwMDAwMDsKLQotdGVtcGxhdGU8dW5zaWduZWQg
bGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENTU1BhcnNl
clZhbHVlJiB2YWx1ZSwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17
Ci0gICAgQVNTRVJUKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8
fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKLSAgICByZXR1
cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuc3RyaW5nLCBsb3dlcmNhc2VM
ZXR0ZXJzKTsKLX0KLQotc3RhdGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IGNoYXIqIHN0cmluZywg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyKiBwcmVmaXgpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghcHJlZml4W2ldKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzdHJpbmdbaV0gIT0gcHJlZml4W2ld
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoQXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwotfQotCi1jbGFzcyBBbmltYXRpb25QYXJzZUNv
bnRleHQgewotcHVibGljOgotICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCgpID0gZGVmYXVsdDsK
LQotICAgIHZvaWQgY29tbWl0Rmlyc3RBbmltYXRpb24oKQotICAgIHsKLSAgICAgICAgbV9maXJz
dEFuaW1hdGlvbkNvbW1pdHRlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNDb21taXR0
ZWRGaXJzdEFuaW1hdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9maXJzdEFu
aW1hdGlvbkNvbW1pdHRlZDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdEFuaW1hdGlvblByb3Bl
cnR5S2V5d29yZCgpCi0gICAgewotICAgICAgICBtX2FuaW1hdGlvblByb3BlcnR5S2V5d29yZEFs
bG93ZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvblByb3BlcnR5S2V5d29y
ZEFsbG93ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uUHJvcGVy
dHlLZXl3b3JkQWxsb3dlZDsKLSAgICB9Ci0KLSAgICBib29sIGhhc1NlZW5BbmltYXRpb25Qcm9w
ZXJ0eUtleXdvcmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFzU2VlbkFuaW1h
dGlvblByb3BlcnR5S2V5d29yZDsKLSAgICB9Ci0KLSAgICB2b2lkIHNhd0FuaW1hdGlvblByb3Bl
cnR5S2V5d29yZCgpCi0gICAgewotICAgICAgICBtX2hhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtl
eXdvcmQgPSB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1fYW5pbWF0aW9uUHJv
cGVydHlLZXl3b3JkQWxsb3dlZCB7IHRydWUgfTsKLSAgICBib29sIG1fZmlyc3RBbmltYXRpb25D
b21taXR0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNTZWVuQW5pbWF0aW9uUHJvcGVydHlL
ZXl3b3JkIHsgZmFsc2UgfTsKLX07Ci0KLWNvbnN0IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENT
U1BhcnNlckNvbnRleHQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJD
b250ZXh0PiBzdHJpY3RDb250ZXh0KENTU1N0cmljdE1vZGUpOwotICAgIHJldHVybiBzdHJpY3RD
b250ZXh0OwotfQotCi1DU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNl
ck1vZGUgbW9kZSwgY29uc3QgVVJMJiBiYXNlVVJMKQotICAgIDogYmFzZVVSTChiYXNlVVJMKQot
ICAgICwgbW9kZShtb2RlKQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgLCBjc3NH
cmlkTGF5b3V0RW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LmlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSNlbmRpZgotewotI2lmIFBMQVRGT1JNKElPUykK
LSAgICAvLyBGSVhNRTogRm9yY2UgdGhlIHNpdGUgc3BlY2lmaWMgcXVpcmsgYmVsb3cgdG8gd29y
ayBvbiBpT1MuIEludmVzdGlnYXRpbmcgb3RoZXIgc2l0ZSBzcGVjaWZpYyBxdWlya3MKLSAgICAv
LyB0byBzZWUgaWYgd2UgY2FuIGVuYWJsZSB0aGUgcHJlZmVyZW5jZSBhbGwgdG9nZXRoZXIgaXMg
dG8gYmUgaGFuZGxlZCBieToKLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vODQ5MzMwOT4gSW52ZXN0
aWdhdGUgRW5hYmxpbmcgU2l0ZSBTcGVjaWZpYyBRdWlya3MgaW4gTW9iaWxlU2FmYXJpIGFuZCBV
SVdlYlZpZXcKLSAgICBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IHRydWU7Ci0jZW5kaWYKLX0K
LQotQ1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogYmFzZVVS
TChiYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogYmFzZVVSTCkKLSAgICAs
IGNoYXJzZXQoY2hhcnNldCkKLSAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkgPyBD
U1NRdWlya3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKLSAgICAsIGlzSFRNTERvY3VtZW50KGRvY3Vt
ZW50LmlzSFRNTERvY3VtZW50KCkpCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICAs
IGNzc0dyaWRMYXlvdXRFbmFibGVkKGRvY3VtZW50LmlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkK
LSNlbmRpZgotewotICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5n
cygpKSB7Ci0gICAgICAgIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gc2V0dGluZ3MtPm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKCk7Ci0gICAgICAgIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSA9IHNldHRpbmdzLT5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSgpOwot
ICAgICAgICB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID0gc2V0dGlu
Z3MtPnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKTsKLSNpZiBFTkFC
TEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICAgICAgdGV4dEF1dG9zaXppbmdFbmFibGVkID0g
c2V0dGluZ3MtPnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgIHNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9IHNldHRpbmdzLT5zcHJpbmdUaW1pbmdGdW5jdGlvbkVu
YWJsZWQoKTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IEZvcmNl
IHRoZSBzaXRlIHNwZWNpZmljIHF1aXJrIGJlbG93IHRvIHdvcmsgb24gaU9TLiBJbnZlc3RpZ2F0
aW5nIG90aGVyIHNpdGUgc3BlY2lmaWMgcXVpcmtzCi0gICAgLy8gdG8gc2VlIGlmIHdlIGNhbiBl
bmFibGUgdGhlIHByZWZlcmVuY2UgYWxsIHRvZ2V0aGVyIGlzIHRvIGJlIGhhbmRsZWQgYnk6Ci0g
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg0OTMzMDk+IEludmVzdGlnYXRlIEVuYWJsaW5nIFNpdGUg
U3BlY2lmaWMgUXVpcmtzIGluIE1vYmlsZVNhZmFyaSBhbmQgVUlXZWJWaWV3Ci0gICAgbmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MgPSB0cnVlOwotI2VuZGlmCi19Ci0KLWJvb2wgb3BlcmF0b3I9PShj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKQotewot
ICAgIHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCi0gICAgICAgICYmIGEuY2hhcnNldCA9
PSBiLmNoYXJzZXQKLSAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQotICAgICAgICAmJiBhLmlz
SFRNTERvY3VtZW50ID09IGIuaXNIVE1MRG9jdW1lbnQKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQotICAgICAgICAmJiBhLmNzc0dyaWRMYXlvdXRFbmFibGVkID09IGIuY3NzR3JpZExheW91
dEVuYWJsZWQKLSNlbmRpZgotICAgICAgICAmJiBhLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID09
IGIubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MKLSAgICAgICAgJiYgYS5lbmZvcmNlc0NTU01JTUVU
eXBlSW5Ob1F1aXJrc01vZGUgPT0gYi5lbmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUK
LSAgICAgICAgJiYgYS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID09
IGIudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcgotICAgICAgICAmJiBh
LnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5h
YmxlZDsKLX0KLQotQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotewotI2lmIFlZREVCVUcgPiAwCi0g
ICAgY3NzeXlkZWJ1ZyA9IDE7Ci0jZW5kaWYKLX0KLQotQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkK
LXsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoQ2hhcmFjdGVyVHlwZSog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRvQVNDSUlMb3dlcihj
aGFyYWN0ZXJzW2ldKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlSW5QbGFjZSgpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICBXZWJDb3Jl
Ojpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkp
OwotICAgIGVsc2UKLSAgICAgICAgV2ViQ29yZTo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBs
YWNlKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzZXR1
cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgU3RyaW5n
VmlldyBzdHJpbmcsIGNvbnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWduZWQgc3VmZml4TGVuZ3RoKQot
ewotICAgIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aDsKLSAgICB1bnNp
Z25lZCBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nTGVuZ3RoICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3VmZml4TGVuZ3Ro
ICsgMTsKLSAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLQotICAgIGlmICghc3RyaW5nTGVuZ3RoIHx8
IHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICBtX2RhdGFTdGFydDggPSBzdGQ6Om1ha2VfdW5p
cXVlPExDaGFyW10+KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3BhcnNlZFRleHRQcmVmaXhMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fZGF0YVN0YXJ0OFtp
XSA9IHByZWZpeFtpXTsKLQotICAgICAgICBpZiAoc3RyaW5nTGVuZ3RoKQotICAgICAgICAgICAg
bWVtY3B5KG1fZGF0YVN0YXJ0OC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZ0xlbmd0aCAqIHNpemVvZihMQ2hhcikpOwotCi0gICAg
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nTGVu
Z3RoOwotICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLSAgICAgICAgICAgIG1f
ZGF0YVN0YXJ0OFtpXSA9IHN1ZmZpeFtpIC0gc3RhcnRdOwotCi0gICAgICAgIG1fZGF0YVN0YXJ0
OFtsZW5ndGggLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgbV9pczhCaXRTb3VyY2UgPSB0cnVlOwot
ICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXI4ID0gbV9kYXRhU3RhcnQ4LmdldCgpOwotICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG51bGxwdHI7Ci0gICAgICAgIHNldFRva2VuU3RhcnQ8
TENoYXI+KG1fY3VycmVudENoYXJhY3RlcjgpOwotICAgICAgICBtX2xleEZ1bmMgPSAmQ1NTUGFy
c2VyOjpyZWFsTGV4PExDaGFyPjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGF0
YVN0YXJ0MTYgPSBzdGQ6Om1ha2VfdW5pcXVlPFVDaGFyW10+KGxlbmd0aCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsgKytpKQotICAgICAg
ICBtX2RhdGFTdGFydDE2W2ldID0gcHJlZml4W2ldOwotCi0gICAgQVNTRVJUKHN0cmluZ0xlbmd0
aCk7Ci0gICAgbWVtY3B5KG1fZGF0YVN0YXJ0MTYuZ2V0KCkgKyBtX3BhcnNlZFRleHRQcmVmaXhM
ZW5ndGgsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nTGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSk7Ci0KLSAgICB1bnNpZ25lZCBzdGFydCA9IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCArIHN0
cmluZ0xlbmd0aDsKLSAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICBtX2RhdGFT
dGFydDE2W2ldID0gc3VmZml4W2kgLSBzdGFydF07Ci0KLSAgICBtX2RhdGFTdGFydDE2W2xlbmd0
aCAtIDFdID0gJ1wwJzsKLQotICAgIG1faXM4Qml0U291cmNlID0gZmFsc2U7Ci0gICAgbV9jdXJy
ZW50Q2hhcmFjdGVyOCA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50Q2hhcmFjdGVyMTYgPSBtX2Rh
dGFTdGFydDE2LmdldCgpOwotICAgIHNldFRva2VuU3RhcnQ8VUNoYXI+KG1fY3VycmVudENoYXJh
Y3RlcjE2KTsKLSAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PFVDaGFyPjsKLX0K
LQotdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRQb3NpdGlvbiYgdGV4dFBvc2l0aW9uLCBS
dWxlU291cmNlRGF0YUxpc3QqIHJ1bGVTb3VyY2VEYXRhUmVzdWx0LCBib29sIGxvZ0Vycm9ycykK
LXsKLSAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKLSAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBz
dGFyQXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotICAgIGlmIChydWxlU291
cmNlRGF0YVJlc3VsdCkKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IHN0ZDo6bWFr
ZV91bmlxdWU8UnVsZVNvdXJjZURhdGFMaXN0PigpOwotICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1
bHQgPSBydWxlU291cmNlRGF0YVJlc3VsdDsKLQotICAgIG1fbG9nRXJyb3JzID0gbG9nRXJyb3Jz
ICYmIHNoZWV0LT5zaW5nbGVPd25lckRvY3VtZW50KCkgJiYgIXNoZWV0LT5iYXNlVVJMKCkuaXNF
bXB0eSgpICYmIHNoZWV0LT5zaW5nbGVPd25lckRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBtX2ln
bm9yZUVycm9yc0luRGVjbGFyYXRpb24gPSBmYWxzZTsKLSAgICBtX3NoZWV0U3RhcnRMaW5lTnVt
YmVyID0gdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKLSAgICBtX3NoZWV0U3Rh
cnRDb2x1bW5OdW1iZXIgPSB0ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7Ci0g
ICAgbV9saW5lTnVtYmVyID0gbV9zaGVldFN0YXJ0TGluZU51bWJlcjsKLSAgICBtX2NvbHVtbk9m
ZnNldEZvckxpbmUgPSAwOwotICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKLSAgICBj
c3N5eXBhcnNlKHRoaXMpOwotICAgIHNoZWV0LT5zaHJpbmtUb0ZpdCgpOwotICAgIG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2sucmVzZXQoKTsKLSAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gbnVs
bHB0cjsKLSAgICBtX3J1bGUgPSBudWxscHRyOwotICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJh
dGlvbiA9IGZhbHNlOwotICAgIG1fbG9nRXJyb3JzID0gZmFsc2U7Ci19Ci0KLVJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKLSAg
ICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgc2V0dXBQYXJzZXIo
IkAtd2Via2l0LXJ1bGV7Iiwgc3RyaW5nLCAifSAiKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwot
ICAgIHJldHVybiBtX3J1bGU7Ci19Ci0KLVJlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6
OnBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwotICAgIHNldHVwUGFyc2Vy
KCJALXdlYmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFy
c2UodGhpcyk7Ci0gICAgcmV0dXJuIG1fa2V5ZnJhbWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIG1fc3Vw
cG9ydHNDb25kaXRpb24gPSBmYWxzZTsKLSAgICAvLyBjYW4ndCB1c2UgeyBiZWNhdXNlIHRva2Vu
aXplciBzdGF0ZSBzd2l0Y2hlcyBmcm9tIHN1cHBvcnRzIHRvIGluaXRpYWwgc3RhdGUgd2hlbiBp
dCBzZWVzIHsgdG9rZW4uCi0gICAgLy8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMg
V0hJVEVTUEFDRSBpbiBDU1NHcmFtbWFyLnkpCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXN1
cHBvcnRzLWNvbmRpdGlvbiAiLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7
Ci0gICAgcmV0dXJuIG1fc3VwcG9ydHNDb25kaXRpb247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NvbG9yUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlckNvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyRW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRG
aWxsQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotYm9vbCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKENTU1Zh
bHVlSUQgdmFsdWVJRCkKLXsKLSAgICByZXR1cm4gdmFsdWVJRCA+PSBDU1NWYWx1ZUFxdWEgJiYg
dmFsdWVJRCA8PSBDU1NWYWx1ZUFwcGxlU3lzdGVtWWVsbG93OwotfQotCi1zdGF0aWMgYm9vbCB2
YWxpZFByaW1pdGl2ZVZhbHVlQ29sb3IoQ1NTVmFsdWVJRCB2YWx1ZUlELCBib29sIHN0cmljdCA9
IGZhbHNlKQotewotICAgIHJldHVybiAodmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWVu
dQotICAgICAgICB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKHZhbHVlSUQp
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBbHBoYQotICAgICAgICB8fCAodmFsdWVJRCA+PSBDU1NW
YWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yICYmIHZhbHVlSUQgPCBDU1NWYWx1ZVdlYmtpdFRleHQg
JiYgIXN0cmljdCkpOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZUNv
bG9yVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCi17Ci0gICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgp
KTsKLSAgICBib29sIHN0cmljdCA9IGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKTsK
LSAgICBpZiAoIWlzQ29sb3JQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKQotICAgICAgICByZXR1cm4g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICBDU1NQYXJzZXJTdHJpbmcgY3Nz
U3RyaW5nOwotICAgIGNzc1N0cmluZy5pbml0KHN0cmluZyk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1
ZUlEID0gY3NzVmFsdWVLZXl3b3JkSUQoY3NzU3RyaW5nKTsKLSAgICBpZiAodmFsaWRQcmltaXRp
dmVWYWx1ZUNvbG9yKHZhbHVlSUQsIHN0cmljdCkpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwot
ICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHko
cHJvcGVydHlJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJz
ZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLSAg
ICB9Ci0gICAgUkdCQTMyIGNvbG9yOwotICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xv
cihjb2xvciwgc3RyaW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCi0gICAgICAgIHJl
dHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGF1dG8gdmFsdWUgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOwotICAgIHJl
dHVybiBkZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlk
LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpD
aGFuZ2VkIDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJZCwgYm9vbCYgYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKLXsKLSAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVBhZGRpbmdUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5M
b2dpY2FsSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdT
dGFydDoKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlH
cmlkQ29sdW1uR2FwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93R2FwOgotI2VuZGlmCi0j
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFy
Z2luOgotI2VuZGlmCi0gICAgICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKLSAgICBjYXNl
IENTU1Byb3BlcnR5Q3g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUN5OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmdpbkxlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Ub3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVJ4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKLSAgICBjYXNl
IENTU1Byb3BlcnR5UmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpbkJlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5WDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5WToKLSAgICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9
IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIGlubGluZSBib29sIHBhcnNlU2ltcGxlTGVuZ3RoKGNvbnN0IENoYXJhY3RlclR5cGUq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkJiBsZW5ndGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMmIHVuaXQsIGRvdWJsZSYgbnVtYmVyKQotewotICAgIGlmIChsZW5ndGggPiAyICYmIChjaGFy
YWN0ZXJzW2xlbmd0aCAtIDJdIHwgMHgyMCkgPT0gJ3AnICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAt
IDFdIHwgMHgyMCkgPT0gJ3gnKSB7Ci0gICAgICAgIGxlbmd0aCAtPSAyOwotICAgICAgICB1bml0
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDsKLSAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEg
JiYgY2hhcmFjdGVyc1tsZW5ndGggLSAxXSA9PSAnJScpIHsKLSAgICAgICAgbGVuZ3RoIC09IDE7
Ci0gICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7Ci0gICAg
fQotCi0gICAgLy8gV2UgcmVseSBvbiBjaGFyYWN0ZXJzVG9Eb3VibGUgZm9yIHZhbGlkYXRpb24g
YXMgd2VsbC4gVGhlIGZ1bmN0aW9uCi0gICAgLy8gd2lsbCBzZXQgIm9rIiB0byAiZmFsc2UiIGlm
IHRoZSBlbnRpcmUgcGFzc2VkLWluIGNoYXJhY3RlciByYW5nZSBkb2VzCi0gICAgLy8gbm90IHJl
cHJlc2VudCBhIGRvdWJsZS4KLSAgICBib29sIG9rOwotICAgIG51bWJlciA9IGNoYXJhY3RlcnNU
b0RvdWJsZShjaGFyYWN0ZXJzLCBsZW5ndGgsICZvayk7Ci0gICAgcmV0dXJuIG9rOwotfQotCi1z
dGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgYm9vbCBh
Y2NlcHRzTmVnYXRpdmVOdW1iZXJzOwotICAgIGlmICghaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlE
KHByb3BlcnR5SWQsIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMpKQotICAgICAgICByZXR1cm4gQ1NT
UGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJp
bmcubGVuZ3RoKCk7Ci0gICAgZG91YmxlIG51bWJlcjsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKLQotICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJzZVNpbXBsZUxlbmd0aChzdHJp
bmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCB1bml0LCBudW1iZXIpKQotICAgICAgICAgICAgcmV0
dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghcGFyc2VTaW1wbGVMZW5ndGgoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHVu
aXQsIG51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6
RXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKHVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpIHsKLSAgICAgICAgaWYgKG51bWJlciAmJiBpc1N0cmljdFBhcnNlck1vZGUoY3NzUGFy
c2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJy
b3I7Ci0gICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOwotICAgIH0KLSAg
ICBpZiAobnVtYmVyIDwgMCAmJiAhYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKLSAgICAgICAgcmV0
dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotICAgIGlmIChzdGQ6OmlzaW5mKG51
bWJlcikpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQot
ICAgIGF1dG8gdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51
bWJlciwgdW5pdCk7Ci0gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnR5KENT
U1Byb3BlcnR5KHByb3BlcnR5SWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpKSA/IENTU1Bh
cnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpVbmNo
YW5nZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5k
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBpbnQgdmFsdWVJRCwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgcGFyc2VyQ29udGV4dCwgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0
Q29udGVudHMpCi17Ci0gICAgaWYgKCF2YWx1ZUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29s
bGFwc2U6IC8vIGNvbGxhcHNlIHwgc2VwYXJhdGUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlQ29sbGFwc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNlcGFyYXRlKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BTdHlsZTogLy8gPGJvcmRlci1zdHlsZT4gfCBpbmhlcml0Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6IC8vIERlZmluZWQgYXM6IG5vbmUgfCBoaWRk
ZW4gfCBkb3R0ZWQgfCBkYXNoZWQgfAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21T
dHlsZTogLy8gc29saWQgfCBkb3VibGUgfCBncm9vdmUgfCByaWRnZSB8IGluc2V0IHwgb3V0c2V0
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyQmVmb3JlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFN0eWxlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlDb2x1bW5SdWxlU3R5bGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID49IENTU1Zh
bHVlTm9uZSAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlRG91YmxlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6Ci0g
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQ29udGVudEJveCkKLSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZTogLy8gdG9wIHwgYm90dG9tIHwg
bGVmdCB8IHJpZ2h0IHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxl
ZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUb3Ag
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJvdHRvbSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6IC8vIG5vbmUgfCBsZWZ0
IHwgcmlnaHQgfCBib3RoIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJp
Z2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCb3RoKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246IC8vIGx0ciB8
IHJ0bCB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMdHIgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZVJ0bCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKLSAgICAgICAgLy8gaW5saW5lIHwg
YmxvY2sgfCBsaXN0LWl0ZW0gfCBpbmxpbmUtYmxvY2sgfCB0YWJsZSB8Ci0gICAgICAgIC8vIGlu
bGluZS10YWJsZSB8IHRhYmxlLXJvdy1ncm91cCB8IHRhYmxlLWhlYWRlci1ncm91cCB8IHRhYmxl
LWZvb3Rlci1ncm91cCB8IHRhYmxlLXJvdyB8Ci0gICAgICAgIC8vIHRhYmxlLWNvbHVtbi1ncm91
cCB8IHRhYmxlLWNvbHVtbiB8IHRhYmxlLWNlbGwgfCB0YWJsZS1jYXB0aW9uIHwgLXdlYmtpdC1i
b3ggfCAtd2Via2l0LWlubGluZS1ib3ggfCBub25lIHwgaW5oZXJpdAotICAgICAgICAvLyBmbGV4
IHwgLXdlYmtpdC1mbGV4IHwgaW5saW5lLWZsZXggfCAtd2Via2l0LWlubGluZS1mbGV4IHwgZ3Jp
ZCB8IGlubGluZS1ncmlkIHwgY29udGVudHMKLSAgICAgICAgaWYgKCh2YWx1ZUlEID49IENTU1Zh
bHVlSW5saW5lICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVDb250ZW50cykgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0dS
SURfTEFZT1VUKQotICAgICAgICBpZiAocGFyc2VyQ29udGV4dC5jc3NHcmlkTGF5b3V0RW5hYmxl
ZCAmJiAodmFsdWVJRCA9PSBDU1NWYWx1ZUdyaWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUlubGlu
ZUdyaWQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5RW1wdHlDZWxsczogLy8gc2hvdyB8IGhpZGUgfCBpbmhl
cml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlU2hvdyB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlSGlkZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6IC8vIGxlZnQgfCByaWdodCB8IG5vbmUgfCBjZW50ZXIg
KGZvciBidWdneSBDU1MsIG1hcHMgdG8gbm9uZSkKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NT
VmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6IC8v
IG5vcm1hbCB8IGl0YWxpYyB8IG9ibGlxdWUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJdGFsaWMgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU9ibGlxdWUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOiAvLyBhdXRvIHwgb3B0
aW1pemVTcGVlZCB8IG9wdGltaXplUXVhbGl0eSB8IC13ZWJraXQtY3Jpc3AtZWRnZXMgfCAtd2Vi
a2l0LW9wdGltaXplLWNvbnRyYXN0IHwgY3Jpc3AtZWRnZXMgfCBwaXhlbGF0ZWQKLSAgICAgICAg
Ly8gb3B0aW1pemVTcGVlZCBhbmQgb3B0aW1pemVRdWFsaXR5IGFyZSBkZXByZWNhdGVkOyBhIHVz
ZXIgYWdlbnQgbXVzdCBhY2NlcHQgdGhlbSBhcyB2YWxpZCB2YWx1ZXMgYnV0IG11c3QgdHJlYXQg
dGhlbSBhcyBoYXZpbmcgdGhlIHNhbWUgYmVoYXZpb3IgYXMgcGl4ZWxhdGVkIGFuZCBhdXRvIHJl
c3BlY3RpdmVseS4KLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6
ZXF1YWxpdHkKLSAgICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRDcmlzcEVk
Z2VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRPcHRpbWl6ZUNvbnRyYXN0IHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVDcmlzcEVkZ2VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQaXhlbGF0ZWQp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOiAvLyBpbnNpZGUgfCBvdXRzaWRlIHwgaW5oZXJpdAot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUluc2lkZSB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlT3V0c2lkZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAgICAgICAgLy8gU2VlIHNlY3Rpb24g
Q1NTX1BST1BfTElTVF9TVFlMRV9UWVBFIG9mIGZpbGUgQ1NTVmFsdWVLZXl3b3Jkcy5pbgotICAg
ICAgICAvLyBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGxpc3Qtc3R5bGUtdHlwZXMuCi0gICAg
ICAgIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZURpc2MgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUth
dGFrYW5hSXJvaGEpIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPYmplY3RGaXQ6
Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlRmlsbCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQ29udGFpbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ292ZXIgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjYWxlRG93bikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0
eWxlOiAvLyAoPGJvcmRlci1zdHlsZT4gZXhjZXB0IGhpZGRlbikgfCBhdXRvIHwgaW5oZXJpdAot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZU5vbmUgfHwgKHZhbHVlSUQgPj0gQ1NTVmFsdWVJbnNldCAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVl
RG91YmxlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dXcmFwOiAvLyBub3JtYWwgfCBicmVhay13b3JkCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQnJlYWtXb3JkKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRvdWNoQWN0aW9uOiAvLyBhdXRvIHwgbWFuaXB1bGF0aW9uCi0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWFu
aXB1bGF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0U2Nyb2xsU25hcFR5cGU6IC8vIG5vbmUgfCBtYW5kYXRvcnkgfCBwcm94aW1pdHkKLSAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNYW5k
YXRvcnkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVByb3hpbWl0eSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVy
Zmxvd1g6IC8vIHZpc2libGUgfCBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvICB8IG92ZXJsYXkgfCBp
bmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlSGlkZGVuIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU92ZXJsYXkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92
ZXJmbG93WTogLy8gdmlzaWJsZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gfCBvdmVybGF5IHwg
aW5oZXJpdCB8IC13ZWJraXQtcGFnZWQteCB8IC13ZWJraXQtcGFnZWQteQotICAgICAgICBpZiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZVZpc2libGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUhpZGRlbiB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlU2Nyb2xsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRQ
YWdlZFggfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFr
QWZ0ZXI6IC8vIGF1dG8gfCBhbHdheXMgfCBhdm9pZCB8IGxlZnQgfCByaWdodCB8IGluaGVyaXQK
LSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5CcmVha0JlZm9yZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBbHdheXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGFnZUJyZWFrSW5zaWRlOiAvLyBhdm9pZCB8IGF1dG8gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZl
bnRzOgotICAgICAgICAvLyBub25lIHwgdmlzaWJsZVBhaW50ZWQgfCB2aXNpYmxlRmlsbCB8IHZp
c2libGVTdHJva2UgfCB2aXNpYmxlIHwKLSAgICAgICAgLy8gcGFpbnRlZCB8IGZpbGwgfCBzdHJv
a2UgfCBhdXRvIHwgYWxsIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZVZpc2libGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFsbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCAodmFsdWVJRCA+PSBDU1NWYWx1ZVZp
c2libGVwYWludGVkICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVTdHJva2UpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlv
bjogLy8gc3RhdGljIHwgcmVsYXRpdmUgfCBhYnNvbHV0ZSB8IGZpeGVkIHwgc3RpY2t5IHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXRpYyB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlUmVsYXRpdmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFic29sdXRlIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVGaXhlZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0U3RpY2t5KQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlSZXNpemU6IC8vIG5vbmUgfCBib3RoIHwgaG9yaXpvbnRhbCB8IHZlcnRpY2FsIHwgYXV0
bwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUJvdGggfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZVZlcnRpY2FsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlTcGVhazog
Ly8gbm9uZSB8IG5vcm1hbCB8IHNwZWxsLW91dCB8IGRpZ2l0cyB8IGxpdGVyYWwtcHVuY3R1YXRp
b24gfCBuby1wdW5jdHVhdGlvbiB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NT
VmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZVNwZWxsT3V0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEaWdpdHMgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUxpdGVyYWxQdW5jdHVhdGlvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9QdW5jdHVh
dGlvbikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6IC8vIGF1dG8gfCBmaXhlZCB8IGluaGVyaXQKLSAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVGaXhl
ZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92
ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6Ci0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQ29udGludW91cyB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlU2tpcFdoaXRlU3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVu
ZGVybGluZVN0eWxlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZVNvbGlkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEb3VibGUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZURhc2hlZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRG90RGFzaCB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlRG90RG90RGFzaCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2F2ZSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dE92ZXJmbG93OiAvLyBjbGlwIHwgZWxsaXBzaXMKLSAgICAgICAgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVDbGlwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbGxpcHNpcykKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFJlbmRlcmluZzogLy8gYXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZUxlZ2liaWxp
dHkgfCBnZW9tZXRyaWNQcmVjaXNpb24KLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVB
dXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVPcHRpbWl6ZWxlZ2liaWxpdHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUdlb21ldHJpY3By
ZWNpc2lvbikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybTogLy8gY2FwaXRhbGl6ZSB8IHVwcGVyY2FzZSB8
IGxvd2VyY2FzZSB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlmICgodmFsdWVJRCA+PSBDU1NW
YWx1ZUNhcGl0YWxpemUgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUxvd2VyY2FzZSkgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6IC8vIHZpc2libGUgfCBoaWRkZW4g
fCBjb2xsYXBzZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNp
YmxlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRkZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNv
bGxhcHNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBcHBlYXJhbmNlOgotICAgICAgICBpZiAoKHZhbHVlSUQgPj0g
Q1NTVmFsdWVDaGVja2JveCAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlQ2Fwc0xvY2tJbmRpY2F0b3Ip
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxp
dHk6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlSGlkZGVuKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFr
OwotI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1peEJs
ZW5kTW9kZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU11bHRpcGx5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JlZW4KLSAgICAg
ICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVEYXJrZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpZ2h0ZW4gfHwgIHZhbHVlSUQgPT0gQ1NT
VmFsdWVDb2xvckRvZGdlCi0gICAgICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sb3JC
dXJuIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIYXJkTGlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZVNvZnRMaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlmZmVyZW5jZQotICAgICAgICAgICAg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUV4Y2x1c2lvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUGx1
c0RhcmtlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlv
bjoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVJc29sYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
I2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVCb3JkZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpbmVzKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hBbGlnbjoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVTdHJl
dGNoIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdGFydCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRW5k
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDZW50ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhc2Vs
aW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eERlY29yYXRpb25CcmVhazoKLSAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQ2xvbmUg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNsaWNlKQotICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGly
ZWN0aW9uOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUmV2ZXJzZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlU2luZ2xlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNdWx0aXBsZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVIb3Jpem9udGFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVWZXJ0aWNhbCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlSW5saW5lQXhpcyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmxvY2tBeGlzKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hQYWNrOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXJ0IHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbmQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNlbnRlciB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSnVzdGlmeSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCYWxhbmNlKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlGbGV4RGlyZWN0aW9uOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVJvdyB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlUm93UmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29s
dW1uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW5SZXZlcnNlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoK
LSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3dyYXAgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZVdyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdyYXBSZXZlcnNlKQotICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Rm9udEtlcm5pbmc6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRGb250U21vb3RoaW5nOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8g
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFudGlhbGlh
c2VkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdWJwaXhlbEFudGlhbGlhc2VkKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5zOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU1hbnVhbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TGluZUFsaWduOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUVkZ2VzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6IC8vIGF1dG8gfCBs
b29zZSB8IG5vcm1hbCB8IHN0cmljdCB8IGFmdGVyLXdoaXRlLXNwYWNlCi0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTG9vc2UgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3RyaWN0IHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBZnRlcldoaXRlU3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUJhc2VsaW5lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250YWluKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5BZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVD
b2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgICAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUNvbGxhcHNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTZXBh
cmF0ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlzY2FyZCkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURp
cmVjdGlvbjoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlQmFja3dhcmRzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBaGVhZCB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURvd24KLSAgICAg
ICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVVcCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNsaWRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVTY3JvbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJz
cE1vZGU6IC8vIG5vcm1hbCB8IHNwYWNlCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
Tm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTcGFjZSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NS
T0xMSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVU
b3VjaCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotICAgICAgICBpZiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZUV4YWN0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFY29ub215KQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1Nf
UkVHSU9OUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWx3YXlzIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBdm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlUmlnaHQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2
b2lkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRSZWdpb25GcmFnbWVudDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCcmVhaykKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRSdGxPcmRlcmluZzoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMb2dpY2Fs
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXN1YWwpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9u
OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUJlZm9yZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQWZ0ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUludGVyQ2hhcmFjdGVyKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0jaWYgRU5BQkxFKENTUzNfVEVY
VCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSAgICAgICAgLy8g
YXV0byB8IHN0YXJ0IHwgZW5kIHwgbGVmdCB8IHJpZ2h0IHwgY2VudGVyIHwganVzdGlmeQotICAg
ICAgICBpZiAoKHZhbHVlSUQgPj0gQ1NTVmFsdWVMZWZ0ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVK
dXN0aWZ5KSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUVuZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBicmVhazsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dENvbWJpbmU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9u
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSG9yaXpvbnRhbCkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeToKLSAgICAgICAgLy8gYXV0byB8IG5vbmUgfCBpbnRl
ci13b3JkIHwgZGlzdHJpYnV0ZQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUludGVy
V29yZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlzdHJpYnV0ZSB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dFNlY3VyaXR5OgotICAgICAgICAvLyBkaXNjIHwgY2lyY2xlIHwgc3F1
YXJlIHwgbm9uZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVEaXNj
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDaXJjbGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNxdWFy
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6Ci0gICAgICAgIGlmICghcGFyc2VyQ29u
dGV4dC50ZXh0QXV0b3NpemluZ0VuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVG
bGF0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVzZXJ2ZTNkKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJh
ZzogLy8gYXV0byB8IG5vbmUgfCBlbGVtZW50Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeTogLy8gcmVhZC1vbmx5IHwgcmVhZC13cml0
ZQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRPbmx5IHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVSZWFkV3JpdGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRXcml0ZVBsYWludGV4
dE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0Q29udGVudHMpCi0gICAgICAgICAg
ICAgICAgc3R5bGVTaGVldENvbnRlbnRzLT5wYXJzZXJTZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmls
aXR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDogLy8gYXV0byB8IG5vbmUg
fCB0ZXh0IHwgYWxsCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlVGV4dCkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUFsbCkgewot
ICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXRDb250ZW50cykKLSAgICAgICAgICAgICAgICBzdHls
ZVNoZWV0Q29udGVudHMtPnBhcnNlclNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPj0g
Q1NTVmFsdWVIb3Jpem9udGFsVGIgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUhvcml6b250YWxCdCkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
b3BlcnR5V2hpdGVTcGFjZTogLy8gbm9ybWFsIHwgcHJlIHwgbm93cmFwIHwgaW5oZXJpdAotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
UHJlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVXcmFwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQ
cmVMaW5lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3dyYXApCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazogLy8g
bm9ybWFsIHwgYnJlYWstYWxsIHwga2VlcC1hbGwgfCBicmVhay13b3JkICh0aGlzIGlzIGEgY3Vz
dG9tIGV4dGVuc2lvbikKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZUJyZWFrQWxsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVLZWVwQWxs
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCcmVha1dvcmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19UUkFJTElOR19XT1JEKQotICAgIGNh
c2UgQ1NTUHJvcGVydHlBcHBsZVRyYWlsaW5nV29yZDogLy8gYXV0byB8IC1hcHBsZS1wYXJ0aWFs
bHktYmFsYW5jZWQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVXZWJraXRQYXJ0aWFsbHlCYWxhbmNlZCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
VmFyaWFudFBvc2l0aW9uOiAvLyBub3JtYWwgfCBzdWIgfCBzdXBlcgotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3ViIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVTdXBlcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzOiAvLyBub3JtYWwgfCBz
bWFsbC1jYXBzIHwgYWxsLXNtYWxsLWNhcHMgfCBwZXRpdGUtY2FwcyB8IGFsbC1wZXRpdGUtY2Fw
cyB8IHVuaWNhc2UgfCB0aXRsaW5nLWNhcHMKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcyB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQWxsU21hbGxDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQZXRpdGVDYXBzIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBbGxQZXRpdGVDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVVbmlj
YXNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUaXRsaW5nQ2FwcykKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRB
bHRlcm5hdGVzOiAvLyBXZSBvbmx5IHN1cHBvcnQgdGhlIG5vcm1hbCBhbmQgaGlzdG9yaWNhbC1m
b3JtcyB2YWx1ZXMuCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVIaXN0b3JpY2FsRm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJl
YWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtCZWZvcmU6Ci0gICAgICAgIC8vIGF1
dG8gfCBhdm9pZCB8IGxlZnQgfCByaWdodCB8IHJlY3RvIHwgdmVyc28gfCBjb2x1bW4gfCBwYWdl
IHwgcmVnaW9uIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiB8IGF2b2lkLXJlZ2lvbgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2
b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdo
dAotICAgICAgICAgICAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlY3RvIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVWZXJzbyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sdW1uIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVQYWdlCi0gICAgICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVnaW9uIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZENvbHVtbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZv
aWRQYWdlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFJlZ2lvbikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtJbnNp
ZGU6Ci0gICAgICAgIC8vIGF1dG8gfCBhdm9pZCB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4g
fCBhdm9pZC1yZWdpb24KLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBdm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRDb2x1bW4g
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkUGFnZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZv
aWRSZWdpb24pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0jaWYgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgVU5VU0VEX1BB
UkFNKHBhcnNlckNvbnRleHQpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNLZXl3b3JkUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SWQpCi17Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJSaWdodFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0Fm
dGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDbGVhcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxz
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0
eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBjYXNlIENTU1By
b3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5
cGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
T3V0bGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBv
c2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVNwZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVU
aHJvdWdoU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKLSAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92
ZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRl
cmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFw
cGVhcmFuY2U6Ci0jaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKLSAgICBjYXNlIENTU1Byb3Bl
cnR5TWl4QmxlbmRNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlJc29sYXRpb246Ci0jZW5kaWYK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJCZWZvcmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
RW5kU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94QWxpZ246Ci0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFrOgotI2VuZGlmCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94TGluZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJl
YWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5SdWxlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZsZXhXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2Vy
bmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5BZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVD
b2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZyYWdt
ZW50OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246Ci0jaWYgRU5BQkxFKENTUzNfVEVY
VCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSNlbmRpZiAvLyBD
U1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0jaWYgRU5B
QkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6Ci0j
ZW5kaWYgLy8gQ1NTM19URVhUCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0
eToKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2Vy
RHJhZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3Jp
dGluZ01vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0jaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5VG91Y2hBY3Rpb246Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRTY3JvbGxTbmFwVHlwZToKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfVFJBSUxJTkdfV09SRCkK
LSAgICBjYXNlIENTU1Byb3BlcnR5QXBwbGVUcmFpbGluZ1dvcmQ6Ci0jZW5kaWYKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnRDYXBzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGlzVW5pdmVyc2FsS2V5d29yZChjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICAvLyBUaGVzZSBrZXl3b3JkcyBjYW4gYmUgdXNlZCBmb3IgYWxs
IHByb3BlcnRpZXMuCi0gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZywgImluaXRpYWwiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcsICJpbmhlcml0IikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nLCAidW5zZXQiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsICJyZXZlcnQiKTsKLX0KLQotc3RhdGljIENTU1BhcnNlcjo6UGFyc2VS
ZXN1bHQgcGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRp
b24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wg
aW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0LCBTdHlsZVNo
ZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cykKLXsKLSAgICBBU1NFUlQoIXN0cmluZy5p
c0VtcHR5KCkpOwotCi0gICAgaWYgKCFpc0tleXdvcmRQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKSB7
Ci0gICAgICAgIGlmICghaXNVbml2ZXJzYWxLZXl3b3JkKHN0cmluZykpCi0gICAgICAgICAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICAgICAgLy8gRG9uJ3Qg
dHJ5IHRvIHBhcnNlIGluaXRpYWwvaW5oZXJpdC91bnNldC9yZXZlcnQgc2hvcnRoYW5kczsgcmV0
dXJuIGFuIGVycm9yIHNvIHRoZSBjYWxsZXIgd2lsbCB1c2UgdGhlIGZ1bGwgQ1NTIHBhcnNlci4K
LSAgICAgICAgaWYgKHNob3J0aGFuZEZvclByb3BlcnR5KHByb3BlcnR5SWQpLmxlbmd0aCgpKQot
ICAgICAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotICAgIH0K
LQotICAgIENTU1BhcnNlclN0cmluZyBjc3NTdHJpbmc7Ci0gICAgY3NzU3RyaW5nLmluaXQoc3Ry
aW5nKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NTdHJp
bmcpOwotCi0gICAgaWYgKCF2YWx1ZUlEKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJz
ZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUluaXRpYWwpCi0gICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVVbnNldCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVVuc2V0VmFsdWUoKTsKLSAgICBlbHNlIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlUmV2ZXJ0KQotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlUmV2ZXJ0VmFsdWUoKTsKLSAgICBlbHNlIGlmIChpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5k
VmFsdWUocHJvcGVydHlJZCwgdmFsdWVJRCwgcGFyc2VyQ29udGV4dCwgc3R5bGVTaGVldENvbnRl
bnRzKSkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBDU1NQYXJz
ZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIHJldHVybiBkZWNsYXJhdGlvbi5hZGRQYXJz
ZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgp
LCBpbXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJz
ZXI6OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHMo
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVlLCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBleHBl
Y3RlZENvdW50KQotewotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCk7Ci0gICAgd2hpbGUgKGV4cGVjdGVkQ291bnQpIHsKLSAgICAgICAgc2l6ZV90IGVu
ZCA9IFdURjo6ZmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGV4cGVjdGVkQ291bnQgPT0gMSA/ICcp
JyA6ICcsJywgc3RhcnQpOwotICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5kIHx8IChleHBlY3Rl
ZENvdW50ID09IDEgJiYgZW5kICE9IGxlbmd0aCAtIDEpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudExlbmd0aCA9IGVuZCAtIHN0YXJ0OwotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUjsKLSAgICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJz
ZVNpbXBsZUxlbmd0aChjaGFyYWN0ZXJzICsgc3RhcnQsIGFyZ3VtZW50TGVuZ3RoLCB1bml0LCBu
dW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodW5pdCAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYICYmIChudW1iZXIgfHwgdW5pdCAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHRyYW5zZm9ybVZhbHVlLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUobnVtYmVyLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7Ci0gICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKLSAg
ICAgICAgLS1leHBlY3RlZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAocHJv
cGVydHlJRCAhPSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIENTU1BhcnNl
cjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0
ZXN0VmFsaWRUcmFuc2Zvcm1TdHJpbmdMZW5ndGggPSAxMjsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbGlrZWx5TXVsdGlwYXJ0VHJhbnNmb3JtU3RyaW5nTGVuZ3RoQ3V0b2ZmID0gMzI7Ci0g
ICAgaWYgKHN0cmluZy5sZW5ndGgoKSA8IHNob3J0ZXN0VmFsaWRUcmFuc2Zvcm1TdHJpbmdMZW5n
dGggfHwgc3RyaW5nLmxlbmd0aCgpID4gbGlrZWx5TXVsdGlwYXJ0VHJhbnNmb3JtU3RyaW5nTGVu
Z3RoQ3V0b2ZmKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7
Ci0KLSAgICBpZiAoIXN0cmluZy5zdGFydHNXaXRoKCJ0cmFuc2xhdGUiLCBmYWxzZSkpCi0gICAg
ICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIFVDaGFyIGM5
ID0gdG9BU0NJSUxvd2VyKHN0cmluZ1s5XSk7Ci0gICAgVUNoYXIgYzEwID0gdG9BU0NJSUxvd2Vy
KHN0cmluZ1sxMF0pOwotCi0gICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZTsKLSAgICB1bnNpZ25lZCBleHBlY3RlZEFyZ3VtZW50
Q291bnQgPSAxOwotICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhcnQgPSAxMTsKLSAgICBpZiAoYzkg
PT0gJ3gnICYmIGMxMCA9PSAnKCcpCi0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBlbHNlIGlm
IChjOSA9PSAneScgJiYgYzEwID09ICcoJykKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGVs
c2UgaWYgKGM5ID09ICd6JyAmJiBjMTAgPT0gJygnKQotICAgICAgICB0cmFuc2Zvcm1UeXBlID0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247Ci0g
ICAgZWxzZSBpZiAoYzkgPT0gJygnKSB7Ci0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICBl
eHBlY3RlZEFyZ3VtZW50Q291bnQgPSAyOwotICAgICAgICBhcmd1bWVudFN0YXJ0ID0gMTA7Ci0g
ICAgfSBlbHNlIGlmIChjOSA9PSAnMycgJiYgYzEwID09ICdkJyAmJiBzdHJpbmdbMTFdID09ICco
JykgewotICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICBleHBlY3RlZEFyZ3VtZW50Q291
bnQgPSAzOwotICAgICAgICBhcmd1bWVudFN0YXJ0ID0gMTI7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGF1dG8gdHJhbnNm
b3JtVmFsdWUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3JlYXRlKHRyYW5zZm9ybVR5cGUp
OwotICAgIGJvb2wgc3VjY2VzczsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBz
dWNjZXNzID0gcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHModHJhbnNmb3JtVmFsdWUs
IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4
cGVjdGVkQXJndW1lbnRDb3VudCk7Ci0gICAgZWxzZQotICAgICAgICBzdWNjZXNzID0gcGFyc2VU
cmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHModHJhbnNmb3JtVmFsdWUsIHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBhcmd1bWVudFN0YXJ0LCBleHBlY3RlZEFyZ3VtZW50
Q291bnQpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFy
c2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm1W
YWx1ZSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzLmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3Bl
cnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCkpID8g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OlVuY2hhbmdlZDsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZv
bnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgaWYgKHN0cmlu
Zy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1ZUxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICBWZWN0b3I8
U3RyaW5nPiBmYW1pbHlOYW1lczsKLSAgICBzdHJpbmcuc3RyaW5nKCkuc3BsaXQoJywnLCB0cnVl
LCBmYW1pbHlOYW1lcyk7Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpOwotICAgIGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5hbWVzKSB7
Ci0gICAgICAgIFN0cmluZyBzdHJpcHBlZCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhmYW1pbHlOYW1lKTsKLSAgICAgICAgaWYgKHN0cmlwcGVkLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7
Ci0gICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogeyBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1
ZVNhbnNTZXJpZiwgQ1NTVmFsdWVDdXJzaXZlLCBDU1NWYWx1ZUZhbnRhc3ksIENTU1ZhbHVlTW9u
b3NwYWNlLCBDU1NWYWx1ZVdlYmtpdEJvZHkgfSkgewotICAgICAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaXBwZWQsIGdldFZhbHVlTmFtZShwcm9wZXJ0eUlEKSkpIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
cHJvcGVydHlJRCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShzdHJpcHBlZCk7Ci0gICAgICAgIHZhbHVlTGlzdC0+
YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBXVEZN
b3ZlKHZhbHVlTGlzdCk7Ci19Ci0KLUNTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KQotewotICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgQ1NTUGFyc2Vy
OjpQYXJzZVJlc3VsdCByZXN1bHQgPSBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xhcmF0aW9u
LCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBQYXJzZVJlc3VsdDo6RXJyb3IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICByZXN1bHQgPSBwYXJzZUNvbG9yVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0
cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNl
UmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIENTU1BhcnNlckNv
bnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAoY29udGV4dFN0eWxlU2hlZXQp
IHsKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250ZXh0KCk7
Ci0gICAgICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7Ci0gICAgfQotCi0gICAgcmVz
dWx0ID0gcGFyc2VLZXl3b3JkVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywg
aW1wb3J0YW50LCBjb250ZXh0LCBjb250ZXh0U3R5bGVTaGVldCk7Ci0gICAgaWYgKHJlc3VsdCAh
PSBQYXJzZVJlc3VsdDo6RXJyb3IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXN1
bHQgPSBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlE
LCBzdHJpbmcsIGltcG9ydGFudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBQYXJzZVJlc3VsdDo6RXJy
b3IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRl
eHQpOwotICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJ
RCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotQ1NTUGFyc2Vy
OjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQot
ewotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAo
Y29udGV4dFN0eWxlU2hlZXQpIHsKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0
LT5wYXJzZXJDb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7
Ci0gICAgfQotCi0gICAgQ1NTUGFyc2VyIHBhcnNlcihjb250ZXh0KTsKLSAgICBwYXJzZXIuc2V0
Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJz
ZVZhbHVlKGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUN1c3RvbSwgc3RyaW5nLCBpbXBvcnRhbnQs
IGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50
LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIHNldFN0eWxl
U2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXZh
bHVleyIsIHN0cmluZywgIn0gIik7Ci0KLSAgICBtX2lkID0gcHJvcGVydHlJRDsKLSAgICBtX2lt
cG9ydGFudCA9IGltcG9ydGFudDsKLQotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0KLSAgICBtX3J1
bGUgPSBudWxscHRyOwotCi0gICAgUGFyc2VSZXN1bHQgcmVzdWx0ID0gUGFyc2VSZXN1bHQ6OkVy
cm9yOwotCi0gICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IHJlc3VsdCA9IGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0
aWVzKSA/IFBhcnNlUmVzdWx0OjpDaGFuZ2VkIDogUGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLSAg
ICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotLy8gVGhlIGNvbG9yIHdpbGwgb25seSBiZSBjaGFuZ2VkIHdoZW4gc3RyaW5nIGNvbnRhaW5z
IGEgdmFsaWQgQ1NTIGNvbG9yLCBzbyBjYWxsZXJzCi0vLyBjYW4gc2V0IGl0IHRvIGEgZGVmYXVs
dCBjb2xvciBhbmQgaWdub3JlIHRoZSBib29sZWFuIHJlc3VsdC4KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmlj
dCkKLXsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRmlyc3QgdHJ5IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUsIHJn
YmEoKSwgcmdiKCkgb3IgIiMiIHN5bnRheC4KLSAgICBpZiAoZmFzdFBhcnNlQ29sb3IoY29sb3Is
IHN0cmluZywgc3RyaWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBDU1NQYXJzZXIg
cGFyc2VyKENTU1N0cmljdE1vZGUpOwotCi0gICAgLy8gSW4gY2FzZSB0aGUgZmFzdC1wYXRoIHBh
cnNlciBkaWRuJ3QgdW5kZXJzdGFuZCB0aGUgY29sb3IsIHRyeSB0aGUgZnVsbCBwYXJzZXIuCi0g
ICAgaWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBDU1NWYWx1ZSYgdmFsdWUgPSAqcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJz
dCgpLnZhbHVlKCk7Ci0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmICghcHJpbWl0
aXZlVmFsdWUuaXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb2xv
ciA9IHByaW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3tjb2xvcjoiLCBzdHJpbmcsICJ9ICIpOwot
ICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxlID0gbnVsbHB0cjsKLQotICAgIHJldHVy
biAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMuZmly
c3QoKS5pZCgpID09IENTU1Byb3BlcnR5Q29sb3I7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyU3RyaW5nIGNzc0NvbG9yOwot
ICAgIGNzc0NvbG9yLmluaXQoc3RyaW5nKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gY3NzVmFsdWVL
ZXl3b3JkSUQoY3NzQ29sb3IpOwotICAgIGlmICghdmFsaWRQcmltaXRpdmVWYWx1ZUNvbG9yKGlk
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgcGFyc2VkQ29sb3IgPSBkb2N1
bWVudC0+cGFnZSgpLT50aGVtZSgpLnN5c3RlbUNvbG9yKGlkKTsKLSAgICBpZiAoIXBhcnNlZENv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29sb3IgPSBwYXJz
ZWRDb2xvci5yZ2IoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBh
cnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0
b3JMaXN0KQotewotICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rv
ckxpc3Q7Ci0KLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2VsZWN0b3J7Iiwgc3RyaW5nLCAi
fSIpOwotCi0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLQotICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFy
c2VTZWxlY3RvciA9IG51bGxwdHI7Ci19Ci0KLVJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+
IENTU1BhcnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9
IGVsZW1lbnQtPmRvY3VtZW50KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKS5wYXJzZXJDb250
ZXh0KCk7Ci0gICAgY29udGV4dC5tb2RlID0gc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7
Ci0gICAgcmV0dXJuIENTU1BhcnNlcihjb250ZXh0KS5wYXJzZURlY2xhcmF0aW9uKHN0cmluZywg
JmVsZW1lbnQtPmRvY3VtZW50KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKSk7Ci19Ci0KLVJl
ZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihj
b25zdCBTdHJpbmcmIHN0cmluZywgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVl
dCkKLXsKLSAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKLQotICAgIHNldHVw
UGFyc2VyKCJALXdlYmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2Uo
dGhpcyk7Ci0gICAgbV9ydWxlID0gbnVsbHB0cjsKLQotICAgIFJlZjxJbW11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IHN0eWxlID0gY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0gICAgY2xlYXJQcm9w
ZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBjb25zdCBT
dHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGVTb3VyY2VEYXRh
LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIC8vIExlbmd0
aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBwcmVmaXhMZW5ndGggPSAxNTsKLQotICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxl
U2hlZXQpOwotCi0gICAgaWYgKHJ1bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bGVTb3VyY2VEYXRhTGlzdD4oKTsKLSAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKCpydWxlU291cmNlRGF0YSk7Ci0g
ICAgfQotCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWRlY2xzeyIsIHN0cmluZywgIn0gIik7
Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBtX3J1bGUgPSBudWxscHRyOwotCi0gICAgYm9v
bCBvayA9IGZhbHNlOwotICAgIGlmICghbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgewot
ICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnRp
ZXMobV9wYXJzZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAg
fQotCi0gICAgaWYgKHJ1bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5zaXplKCkgPT0gMSk7Ci0gICAgICAgIHJ1bGVTb3VyY2VEYXRhLT5ydWxl
Qm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAgICAgcnVsZVNvdXJjZURhdGEtPnJ1bGVCb2R5UmFu
Z2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IHJ1bGVTb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5zaXplKCk7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJv
cGVydHlEYXRhID0gcnVsZVNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRh
LmF0KGkpOwotICAgICAgICAgICAgcHJvcGVydHlEYXRhLnJhbmdlLnN0YXJ0IC09IHByZWZpeExl
bmd0aDsKLSAgICAgICAgICAgIHByb3BlcnR5RGF0YS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3Ro
OwotICAgICAgICB9Ci0KLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcygqcnVsZVNv
dXJjZURhdGEpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlc2V0KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG9rOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gQ1NT
UGFyc2VyOjpwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgaWYg
KHN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJU
KCFtX21lZGlhUXVlcnkpOwotCi0gICAgLy8gY2FuJ3QgdXNlIHsgYmVjYXVzZSB0b2tlbml6ZXIg
c3RhdGUgc3dpdGNoZXMgZnJvbSBtZWRpYXF1ZXJ5IHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBz
ZWVzIHsgdG9rZW4uCi0gICAgLy8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJ
VEVTUEFDRSBpbiBDU1NHcmFtbWFyLnkpCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LW1lZGlh
cXVlcnkgIiwgc3RyaW5nLCAifSAiKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwotCi0gICAgcmV0
dXJuIFdURk1vdmUobV9tZWRpYVF1ZXJ5KTsKLX0KLQotVmVjdG9yPENTU1BhcnNlcjo6U291cmNl
U2l6ZT4gQ1NTUGFyc2VyOjpwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQot
ewotICAgIFZlY3RvcjxTb3VyY2VTaXplPiByZXN1bHQ7Ci0KLSAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEFTU0VSVCghbV9zb3VyY2VTaXpl
TGlzdCk7Ci0KLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2l6ZXNhdHRyICIsIHN0cmluZywg
In0iKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwotCi0gICAgaWYgKCFtX3NvdXJjZVNpemVMaXN0
KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgcmVzdWx0ID0gV1RGTW92ZSgqbV9zb3Vy
Y2VTaXplTGlzdCk7Ci0gICAgbV9zb3VyY2VTaXplTGlzdCA9IG51bGxwdHI7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLy8gRklYTUUoMTQxMjg5KTogVGhlIGZvbGxvd2luZyB0d28gY29uc3Ry
dWN0b3JzIGFyZSBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGEgYnVnIGluIE1TVkMgMjAxMyAoYW5k
IHByaW9yKS4KLS8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBjb2RlIGFzIHNvb24gYXMgYSBWaXN1
YWwgU3R1ZGlvIHVwZGF0ZSB0aGF0IGZpeGVzIHRoaXMgcHJvYmxlbSBpcyByZWxlYXNlZC4KLQot
Q1NTUGFyc2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKENTU1BhcnNlcjo6U291cmNlU2l6ZSYm
IG9yaWdpbmFsKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbmFsLmV4cHJlc3Npb24p
KQotICAgICwgbGVuZ3RoKFdURk1vdmUob3JpZ2luYWwubGVuZ3RoKSkKLXsKLX0KLQotQ1NTUGFy
c2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVz
c2lvbiwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKGV4
cHJlc3Npb24pKQotICAgICwgbGVuZ3RoKFdURk1vdmUodmFsdWUpKQotewotfQotCi1PcHRpb25h
bDxDU1NQYXJzZXI6OlNvdXJjZVNpemU+IENTU1BhcnNlcjo6c291cmNlU2l6ZShNZWRpYVF1ZXJ5
RXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSkKLXsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGlmIChpc0NhbGN1bGF0aW9uKHBhcnNl
clZhbHVlKSkgewotICAgICAgICBhdXRvKiBhcmdzID0gcGFyc2VyVmFsdWUuZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgICAgIGlmIChhcmdzICYmIGFyZ3MtPnNpemUoKSkKLSAgICAgICAgICAg
IHZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUs
ICphcmdzLCBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUpOwotICAgIH0KLSAgICBpZiAoIXZh
bHVlKQotICAgICAgICB2YWx1ZSA9IHBhcnNlclZhbHVlLmNyZWF0ZUNTU1ZhbHVlKCk7Ci0gICAg
ZGVzdHJveShwYXJzZXJWYWx1ZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIE51
bGxvcHQ7Ci0gICAgLy8gRklYTUU6IENhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkg
aGVyZSB0byB3b3JrIGFyb3VuZCBhbiBNU1ZDIGJ1Zy4KLSAgICAvLyBGb3Igb3RoZXIgY29tcGls
ZXJzLCB3ZSBkaWQgbm90IG5lZWQgdG8gZGVmaW5lIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIHdlIGNv
dWxkIHVzZSBhZ2dyZWdhdGUgaW5pdGlhbGl6YXRpb24gc3ludGF4LgotICAgIHJldHVybiBTb3Vy
Y2VTaXplKFdURk1vdmUoZXhwcmVzc2lvbiksIHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFudCwgY29u
c3QgUGFyc2VkUHJvcGVydHlWZWN0b3ImIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4m
IG91dHB1dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0
aWVzPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlbkN1c3RvbVBy
b3BlcnRpZXMpCi17Ci0gICAgLy8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0
aGF0IGhpZ2hlc3QgcHJpb3JpdHkgZGVmaW5pdGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxp
Y2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQuCi0gICAgZm9y
IChpbnQgaSA9IGlucHV0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IGlucHV0W2ldOwotICAgICAgICBpZiAocHJvcGVydHku
aXNJbXBvcnRhbnQoKSAhPSBpbXBvcnRhbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7Ci0g
ICAgICAgICAgICBpZiAocHJvcGVydHkudmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8m
IG5hbWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkudmFsdWUo
KSkubmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRk
KG5hbWUpLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIG91dHB1dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIHByb3BlcnR5SURJbmRleCA9IHByb3BlcnR5LmlkKCkgLSBmaXJzdENTU1Byb3BlcnR5
OwotICAgICAgICBBU1NFUlQocHJvcGVydHlJREluZGV4IDwgc2VlblByb3BlcnRpZXMuc2l6ZSgp
KTsKLSAgICAgICAgaWYgKHNlZW5Qcm9wZXJ0aWVzW3Byb3BlcnR5SURJbmRleF0pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgc2VlblByb3BlcnRpZXMuc2V0KHByb3BlcnR5SURJbmRl
eCk7Ci0gICAgICAgIG91dHB1dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7Ci0gICAgfQot
fQotCi1SZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxl
UHJvcGVydGllcygpCi17Ci0gICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4gc2VlblBy
b3BlcnRpZXM7Ci0gICAgc2l6ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMu
c2l6ZSgpOwotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiByZXN1bHRzKHVudXNlZEVudHJp
ZXMpOwotCi0gICAgLy8gSW1wb3J0YW50IHByb3BlcnRpZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHks
IHNvIGFkZCB0aGVtIGZpcnN0LiBEdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2FuIHRoZW4gYmUgaWdu
b3JlZCB3aGVuIGZvdW5kLgotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZWVuQ3VzdG9tUHJv
cGVydGllczsKLSAgICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywg
cmVzdWx0cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5DdXN0b21Qcm9wZXJ0
aWVzKTsKLSAgICBmaWx0ZXJQcm9wZXJ0aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMsIHJl
c3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuQ3VzdG9tUHJvcGVydGll
cyk7Ci0gICAgaWYgKHVudXNlZEVudHJpZXMpCi0gICAgICAgIHJlc3VsdHMucmVtb3ZlKDAsIHVu
dXNlZEVudHJpZXMpOwotCi0gICAgcmV0dXJuIEltbXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3Jl
YXRlKHJlc3VsdHMuZGF0YSgpLCByZXN1bHRzLnNpemUoKSwgbV9jb250ZXh0Lm1vZGUpOwotfQot
Ci12b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0
cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCi17Ci0g
ICAgLy8gVGhpcyBwcm9wZXJ0eSBkb2Vzbid0IGJlbG9uZyB0byBhIHNob3J0aGFuZCBvciBpcyBh
IENTUyB2YXJpYWJsZSAod2hpY2ggd2lsbCBiZSByZXNvbHZlZCBsYXRlcikuCi0gICAgaWYgKCFt
X2N1cnJlbnRTaG9ydGhhbmQpIHsKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChD
U1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQ
cm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2hvcnRoYW5kcyA9IG1hdGNoaW5nU2hvcnRo
YW5kc0ZvckxvbmdoYW5kKHByb3BJZCk7Ci0gICAgaWYgKHNob3J0aGFuZHMuc2l6ZSgpID09IDEp
Ci0gICAgICAgIG1fcGFyc2VkUHJvcGVydGllcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcElkLCBX
VEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCB0cnVlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1faW1w
bGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFyc2Vk
UHJvcGVydGllcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1w
b3J0YW50LCB0cnVlLCBpbmRleE9mU2hvcnRoYW5kRm9yTG9uZ2hhbmQobV9jdXJyZW50U2hvcnRo
YW5kLCBzaG9ydGhhbmRzKSwgbV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOwotfQot
Ci12b2lkIENTU1BhcnNlcjo6cm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKQotewotICAg
IEFTU0VSVChudW0gPj0gMCk7Ci0gICAgQVNTRVJUKG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkg
Pj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bSkpOwotICAgIG1fcGFyc2VkUHJvcGVydGllcy5z
aHJpbmsobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG51bSk7Ci19Ci0KLXZvaWQgQ1NTUGFy
c2VyOjpjbGVhclByb3BlcnRpZXMoKQotewotICAgIG1fcGFyc2VkUHJvcGVydGllcy5jbGVhcigp
OwotICAgIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IGludmFsaWRQYXJz
ZWRQcm9wZXJ0aWVzQ291bnQ7Ci19Ci0KLVVSTCBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlm
ICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBVUkwoKTsKLSAgICBpZiAoY29udGV4dC5j
aGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFVSTChjb250ZXh0LmJhc2VVUkwsIHVy
bCk7Ci0gICAgcmV0dXJuIFVSTChjb250ZXh0LmJhc2VVUkwsIHVybCwgY29udGV4dC5jaGFyc2V0
KTsKLX0KLQotVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1bGF0aW9u
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgVW5pdHMgdW5pdEZsYWdzKQotewotICAgIGJvb2wgbXVz
dEJlTm9uTmVnYXRpdmUgPSB1bml0RmxhZ3MgJiBGTm9uTmVnOwotCi0gICAgUmVmUHRyPENTU0Nh
bGNWYWx1ZT4gY2FsY3VsYXRpb247Ci0gICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1
bGF0aW9uKCkpIHsKLSAgICAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIHZhbHVlIHdhcyBhbHJlYWR5
IHBhcnNlZCBzbyB3ZSByZXVzZSBpdC4gSG93ZXZlciwgd2UgbWF5IG5lZWQgdG8gdXBkYXRlIGl0
cyByYW5nZS4KLSAgICAgICAgY2FsY3VsYXRpb24gPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxj
dWxhdGlvbigpOwotICAgICAgICBjYWxjdWxhdGlvbi0+c2V0UGVybWl0dGVkVmFsdWVSYW5nZSht
dXN0QmVOb25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0
aW9uUmFuZ2VBbGwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9u
LnNldENhbGN1bGF0aW9uKHBhcnNlQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24sIG11
c3RCZU5vbk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRp
b25SYW5nZUFsbCkpOwotICAgICAgICBjYWxjdWxhdGlvbiA9IHZhbHVlV2l0aENhbGN1bGF0aW9u
LmNhbGN1bGF0aW9uKCk7Ci0gICAgICAgIGlmICghY2FsY3VsYXRpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgc3dp
dGNoIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSkgewotICAgIGNhc2UgQ2FsY051bWJlcjoKLSAg
ICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGTnVtYmVyKTsKLSAgICAgICAgaWYgKCFpc1Zh
bGlkICYmICh1bml0RmxhZ3MgJiBGSW50ZWdlcikgJiYgY2FsY3VsYXRpb24tPmlzSW50KCkpCi0g
ICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkICYmICh1bml0
RmxhZ3MgJiBGUG9zaXRpdmVJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSAmJiBjYWxj
dWxhdGlvbi0+aXNQb3NpdGl2ZSgpKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2FsY0xlbmd0aDoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0
RmxhZ3MgJiBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxjUGVyY2VudDoK
LSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ2FsY1BlcmNlbnRMZW5ndGg6Ci0gICAgICAgIGlzVmFsaWQgPSAodW5pdEZs
YWdzICYgRlBlcmNlbnQpICYmICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0Rmxh
Z3MgJiBGUGVyY2VudCkgJiYgKHVuaXRGbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENhbGNBbmdsZToKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGQW5n
bGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNUaW1lOgotICAgICAgICBpc1ZhbGlk
ID0gKHVuaXRGbGFncyAmIEZUaW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxjRnJl
cXVlbmN5OgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZGcmVxdWVuY3kpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENhbGNPdGhlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGlzVmFsaWQ7Ci19Ci0KLWlubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxk
QWNjZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0Rmxh
Z3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICAvLyBRaXJrcyBtb2RlIGFu
ZCBzdmcgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgYWNjZXB0IHVuaXQgbGVzcyB2YWx1ZXMuCi0g
ICAgcmV0dXJuICh1bml0RmxhZ3MgJiAoRkxlbmd0aCB8IEZBbmdsZSB8IEZUaW1lKSkgJiYgKCF2
YWx1ZS5mVmFsdWUgfHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1BhcnNl
ck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0
ZVVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1
bml0RmxhZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBpZiAoaXNDYWxj
dWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCi0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNh
bGN1bGF0aW9uVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzKTsKLSAgICAgICAg
Ci0gICAgYm9vbCBiID0gZmFsc2U7Ci0gICAgc3dpdGNoICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQpIHsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgot
ICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgc2hv
dWxkQWNjZXB0VW5pdExlc3NWYWx1ZXModmFsdWVXaXRoQ2FsY3VsYXRpb24sIHVuaXRGbGFncywg
Y3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFggOgotICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuaXRGbGFncyAmIEZBbmdsZSkgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpOwot
ICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFiICYmICh1bml0
RmxhZ3MgJiBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCkK
LSAgICAgICAgICAgIGIgPSB0cnVlOwotICAgICAgICBpZiAoIWIgJiYgKHVuaXRGbGFncyAmIEZQ
b3NpdGl2ZUludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaXNJbnQgJiYg
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUgPiAwKQotICAgICAgICAgICAgYiA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFOgotICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVM6Ci0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVN
UzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
OgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DTToKLSAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WSDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVk1JTjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWDoKLSAg
ICAgICAgYiA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TOgotICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZUaW1lKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUkFEOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFE
OgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgotICAgICAgICBiID0gKHVu
aXRGbGFncyAmIEZBbmdsZSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfSU1BR0Vf
UkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RQSToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToKLSAgICAgICAg
YiA9ICh1bml0RmxhZ3MgJiBGUmVzb2x1dGlvbik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0haOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19LSFo6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lP
TjoKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGIgJiYgdW5p
dEZsYWdzICYgRk5vbk5lZyAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8
IDApCi0gICAgICAgIGIgPSBmYWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSkKLSAgICAgICAgYiA9IGZhbHNlOwotICAgIHJl
dHVybiBiOwotfQotCi1pbmxpbmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRo
Q2FsY3VsYXRpb24pCi17Ci0gICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9u
KCkpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENh
bGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0g
dmFsdWVXaXRoQ2FsY3VsYXRpb247Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8
fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBBU1NFUlQoKHZhbHVlLnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DSFMpCi0gICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpCi0gICAgICAg
IHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZS51
bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTSkpOwotI2Vsc2UKLSAgICBBU1NFUlQo
KHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5p
dCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZN
QVgpKTsKLSNlbmRpZgotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcz4odmFsdWUudW5pdCkpOwotfQotCi1pbmxpbmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBD
U1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORyB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOwotICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLnN0cmlu
ZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNDb21tYShDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCi17IAotICAgIHJldHVybiB2YWx1ZSAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1
ZSA9PSAnLCc7IAotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRv
cihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAnLyc7Ci19Ci0KLWJvb2wg
Q1NTUGFyc2VyOjppc1ZhbGlkU2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pCi17Ci0gICAgaW50IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5p
ZDsKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5J
bnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGlkID09IENTU1Zh
bHVlV2Via2l0TWF4Q29udGVudCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUg
fHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7Ci19Ci0KLWlubGluZSBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50
aWZpZXIsIFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsKLSAg
ICBpZiAoaWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpOwotCi0gICAgaWYgKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAg
aWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1RVUk4gJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfQ0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1B
WCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbik7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUo
UkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQotICAg
ICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKLSNlbmRpZgotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQg
Pj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKLSAgICBpZiAodmFsdWVXaXRo
Q2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlG
b3JWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlLCBib29s
IGltcG9ydGFudCkKLXsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhh
bmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wSWQpOwotICAgIHVuc2lnbmVkIHNob3J0aGFu
ZExlbmd0aCA9IHNob3J0aGFuZC5sZW5ndGgoKTsKLSAgICBpZiAoIXNob3J0aGFuZExlbmd0aCkg
ewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgcHJvcElkKTsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eUlEKiBsb25naGFuZHMgPSBzaG9ydGhh
bmQucHJvcGVydGllcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmRM
ZW5ndGg7ICsraSkKLSAgICAgICAgYWRkUHJvcGVydHkobG9uZ2hhbmRzW2ldLCB2YWx1ZS5jb3B5
UmVmKCksIGltcG9ydGFudCk7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUmIGRlcGVuZGVudFZhbHVlLCBjb25zdCBDdXN0b21Qcm9wZXJ0
eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgbV92YWx1ZUxpc3QucmVzZXQobmV3IENTU1Bh
cnNlclZhbHVlTGlzdCgpKTsKLSAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVlTGlzdCgpLmJ1
aWxkUGFyc2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVMaXN0LmdldCgp
LCBjdXN0b21Qcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDU1NQ
cm9wZXJ0eUlEIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IGRlcGVuZGVudFZhbHVlLnByb3Bl
cnR5SUQoKTsKLSAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShk
ZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQpKQotICAgICAgICBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5
SUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5kZW50
VmFsdWVQcm9wZXJ0eUlELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLQotICAgIGlmICghcGFy
c2VWYWx1ZShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IHByb3BJRCkKLSAgICAgICAgICAgIHJl
dHVybiBwcm9wZXJ0eS52YWx1ZSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
c3RhdGljIGJvb2wgaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUoY29uc3QgQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbiAmJiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICJpbWFnZS1zZXQoIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWltYWdlLXNldCgiKSk7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsK
LSAgICBpZiAoIW1fdmFsdWVMaXN0IHx8ICFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQg
PSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIAotICAgIGlmIChwcm9wSWQg
PT0gQ1NTUHJvcGVydHlDdXN0b20pCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbVByb3BlcnR5
RGVjbGFyYXRpb24oaW1wb3J0YW50LCBpZCk7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPmNvbnRh
aW5zVmFyaWFibGVzKCkpIHsKLSAgICAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgYWRkRXhw
YW5kZWRQcm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6
Y3JlYXRlKFdURk1vdmUodmFsdWVMaXN0KSwgcHJvcElkKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKTsKLSAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6
IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0KLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KSB7
Ci0gICAgICAgIGlmIChudW0gIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0
ZUluaGVyaXRlZFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUluaXRpYWwpIHsKLSAgICAgICAgaWYgKG51
bSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRFeHBhbmRlZFBy
b3BlcnR5Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJbml0aWFs
VmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlm
IChpZCA9PSBDU1NWYWx1ZVVuc2V0KSB7Ci0gICAgICAgIGlmIChudW0gIT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKHBy
b3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZVVuc2V0VmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJldmVydCkgewot
ICAgICAgICBpZiAobnVtICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShwcm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVS
ZXZlcnRWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUFsbCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyAiYWxsIiBkb2Vzbid0IGFsbG93IHlvdSB0byBzcGVjaWZ5IGFueXRoaW5nIG90aGVy
IHRoYW4gaW5oZXJpdC9pbml0aWFsL3Vuc2V0LgotCi0gICAgaWYgKGlzS2V5d29yZFByb3BlcnR5
SUQocHJvcElkKSkgewotICAgICAgICBpZiAoIWlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1
ZShwcm9wSWQsIGlkLCBtX2NvbnRleHQsIG1fc3R5bGVTaGVldCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpICYmICFpblNob3J0aGFu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpLCBpbXBvcnRhbnQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIGlmIChpblZpZXdwb3J0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZVZpZXdw
b3J0UHJvcGVydHkocHJvcElkLCBpbXBvcnRhbnQpOwotI2VuZGlmCi0KLSAgICBib29sIHZhbGlk
UHJpbWl0aXZlID0gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLQot
ICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNpemU6ICAgICAgICAg
ICAgICAgICAvLyA8bGVuZ3RoPnsxLDJ9IHwgYXV0byB8IFsgPHBhZ2Utc2l6ZT4gfHwgWyBwb3J0
cmFpdCB8IGxhbmRzY2FwZV0gXQotICAgICAgICByZXR1cm4gcGFyc2VTaXplKHByb3BJZCwgaW1w
b3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6ICAgICAgICAgICAgICAgLy8g
WzxzdHJpbmc+IDxzdHJpbmc+XSsgfCBub25lIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VRdW90ZXMocHJvcElkLCBpbXBvcnRhbnQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6IC8vIG5v
cm1hbCB8IGVtYmVkIHwgYmlkaS1vdmVycmlkZSB8IGlzb2xhdGUgfCBpc29sYXRlLW92ZXJyaWRl
IHwgcGxhaW50ZXh0IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwK
LSAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlRW1iZWQKLSAgICAgICAgICAgIHx8IGlkID09
IENTU1ZhbHVlQmlkaU92ZXJyaWRlCi0gICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtp
dElzb2xhdGUKLSAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlV2Via2l0SXNvbGF0ZU92ZXJy
aWRlCi0gICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dCkKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5Q29udGVudDogICAgICAgICAgICAgIC8vIFsgPHN0cmluZz4gfCA8dXJpPiB8
IDxjb3VudGVyPiB8IGF0dHIoWCkgfCBvcGVuLXF1b3RlIHwKLSAgICAgICAgLy8gY2xvc2UtcXVv
dGUgfCBuby1vcGVuLXF1b3RlIHwgbm8tY2xvc2UtcXVvdGUgXSsgfCBpbmhlcml0Ci0gICAgICAg
IHJldHVybiBwYXJzZUNvbnRlbnQocHJvcElkLCBpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUFsdDogLy8gWyA8c3RyaW5nPiB8IGF0dHIoWCkgXQotICAgICAgICByZXR1cm4gcGFy
c2VBbHQocHJvcElkLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUNsaXA6ICAgICAgICAgICAgICAgICAvLyA8c2hhcGU+IHwgYXV0byB8IGluaGVyaXQKLSAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBwYXJz
ZUNsaXBTaGFwZShwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLyog
U3RhcnQgb2Ygc3VwcG9ydGVkIENTUyBwcm9wZXJ0aWVzIHdpdGggdmFsaWRhdGlvbi4gVGhpcyBp
cyBuZWVkZWQgZm9yIHBhcnNlU2hvcnRoYW5kIHRvIHdvcmsKLSAgICAgKiBjb3JyZWN0bHkgYW5k
IGFsbG93cyBvcHRpbWl6YXRpb24gaW4gV2ViQ29yZTo6YXBwbHlSdWxlKC4uKQotICAgICAqLwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzogewotICAgICAgICBTaG9ydGhhbmRTY29wZSBz
Y29wZSh0aGlzLCBwcm9wSWQpOwotICAgICAgICBpZiAobnVtICE9IDEgfHwgIXBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlPdmVyZmxvd1ksIGltcG9ydGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBvdmVyZmxvd1hWYWx1ZTsKLQotICAgICAg
ICAvLyBGSVhNRTogLXdlYmtpdC1wYWdlZC14IG9yIC13ZWJraXQtcGFnZWQteSBvbmx5IGFwcGx5
IHRvIG92ZXJmbG93LXkuIElmIHRoaXMgdmFsdWUgaGFzIGJlZW4KLSAgICAgICAgLy8gc2V0IHVz
aW5nIHRoZSBzaG9ydGhhbmQsIHRoZW4gZm9yIG5vdyBvdmVyZmxvdy14IHdpbGwgZGVmYXVsdCB0
byBhdXRvLCBidXQgb25jZSB3ZSBpbXBsZW1lbnQKLSAgICAgICAgLy8gcGFnaW5hdGlvbiBjb250
cm9scywgaXQgc2hvdWxkIGRlZmF1bHQgdG8gaGlkZGVuLiBJZiB0aGUgb3ZlcmZsb3cteSB2YWx1
ZSBpcyBhbnl0aGluZyBidXQKLSAgICAgICAgLy8gcGFnZWQteCBvciBwYWdlZC15LCB0aGVuIG92
ZXJmbG93LXggYW5kIG92ZXJmbG93LXkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUuCi0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtp
dFBhZ2VkWSkKLSAgICAgICAgICAgIG92ZXJmbG93WFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvdmVyZmxvd1hWYWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKLSAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlPdmVyZmxvd1gsIFdURk1vdmUob3ZlcmZsb3dY
VmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgotICAgICAgICAvLyBsZWZ0IHwgcmlnaHQgfCBjZW50
ZXIgfCBqdXN0aWZ5IHwgLXdlYmtpdC1sZWZ0IHwgLXdlYmtpdC1yaWdodCB8IC13ZWJraXQtY2Vu
dGVyIHwgLXdlYmtpdC1tYXRjaC1wYXJlbnQKLSAgICAgICAgLy8gfCBzdGFydCB8IGVuZCB8IGlu
aGVyaXQgfCAtd2Via2l0LWF1dG8gKGNvbnZlcnRlZCB0byBzdGFydCkKLSAgICAgICAgLy8gTk9U
RTogPHN0cmluZz4gaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgaWYgKChpZCA+PSBDU1NWYWx1
ZVdlYmtpdEF1dG8gJiYgaWQgPD0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkgfHwgaWQgPT0g
Q1NTVmFsdWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCkKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFdlaWdodDogIHsgLy8gbm9ybWFsIHwgYm9sZCB8IGJvbGRlciB8IGxpZ2h0ZXIgfCAxMDAgfCAy
MDAgfCAzMDAgfCA0MDAgfCA1MDAgfCA2MDAgfCA3MDAgfCA4MDAgfCA5MDAgfCBpbmhlcml0Ci0g
ICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnRXZWlnaHQoaW1wb3J0YW50KTsKLSAgICB9
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpczogLy8gbm9uZSB8IFsgd2VpZ2h0
IHx8IHN0eWxlIF0KLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udFN5bnRoZXNpcyhpbXBvcnRhbnQp
OwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsKLSAgICAgICAgaWYgKG51
bSA9PSAxKSB7Ci0gICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmcpOwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGltcG9ydGFudCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJz
ZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZhbHVlLCBpbXBvcnRhbnQpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobnVt
ID09IDIpIHsKLSAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3Bl
cnR5Qm9yZGVyU3BhY2luZyk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1
ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgaW1wb3J0YW50KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOiAgICAgICAgLy8gPGNv
bG9yPiB8IGludmVydCB8IGluaGVyaXQKLSAgICAgICAgLy8gT3V0bGluZSBjb2xvciBoYXMgImlu
dmVydCIgYXMgYWRkaXRpb25hbCBrZXl3b3JkLgotICAgICAgICAvLyBBbHNvLCB3ZSB3YW50IHRv
IGFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gc3RyaWN0IHBhcnNpbmcgbW9k
ZS4KLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW52ZXJ0IHx8IGlkID09IENTU1ZhbHVlV2Vi
a2l0Rm9jdXNSaW5nQ29sb3IpIHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJpdAot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQmVmb3JlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFm
dGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJp
dAotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjogLy8gQ1NTMyB0ZXh0
IGRlY29yYXRpb24gY29sb3JzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb25Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlV2Via2l0VGV4dCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsgLy8gQWx3
YXlzIGFsbG93IHRoaXMsIGV2ZW4gd2hlbiBzdHJpY3QgcGFyc2luZyBpcyBvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHVzZSB0aGlzIGluIG91ciBV
QSBzaGVldHMuCi0gICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChpc1Zh
bGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgICAg
ICB8fCAoaWQgPj0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiBpZCA8IENTU1ZhbHVl
V2Via2l0VGV4dCAmJiBpblF1aXJrc01vZGUoKSkpIHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
cGFyc2VDb2xvcigpOwotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgIC8vIEdyYW1tYXIgZGVmaW5lZCBi
eSBDU1MzIFVJIGFuZCBtb2RpZmllZCBieSBDU1M0IGltYWdlczoKLSAgICAgICAgLy8gWyBbPGlt
YWdlPiBbPHg+IDx5Pl0/LF0qCi0gICAgICAgIC8vIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1
bHQgfCBwb2ludGVyIHwgcHJvZ3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAot
ICAgICAgICAvLyBudy1yZXNpemUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6ZSB8
IHMtcmVzaXplIHwgdy1yZXNpemUgfCBldy1yZXNpemUgfAotICAgICAgICAvLyBucy1yZXNpemUg
fCBuZXN3LXJlc2l6ZSB8IG53c2UtcmVzaXplIHwgY29sLXJlc2l6ZSB8IHJvdy1yZXNpemUgfCB0
ZXh0IHwgd2FpdCB8IGhlbHAgfAotICAgICAgICAvLyB2ZXJ0aWNhbC10ZXh0IHwgY2VsbCB8IGNv
bnRleHQtbWVudSB8IGFsaWFzIHwgY29weSB8IG5vLWRyb3AgfCBub3QtYWxsb3dlZCB8Ci0gICAg
ICAgIC8vIHpvb20taW4gfCB6b29tLW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAt
d2Via2l0LWdyYWJiaW5nIHwgLXdlYmtpdC16b29tLWluIHwKLSAgICAgICAgLy8gLXdlYmtpdC16
b29tLW91dCBdIF0gfCBpbmhlcml0Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7
Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpOwotICAgICAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gaW1hZ2U7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gdmFsdWUtPnN0
cmluZzsKLSAgICAgICAgICAgICAgICBpZiAoIXVyaS5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgaW1hZ2UgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodXJpKSk7Ci0j
aWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bWFnZVNldEZ1bmN0aW9uVmFsdWUoKnZhbHVlKSkgewotICAgICAgICAgICAgICAgIGltYWdlID0g
cGFyc2VJbWFnZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICghaW1hZ2UpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgVmVjdG9yPGludD4gY29vcmRzOwotICAgICAgICAg
ICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgd2hpbGUgKHZhbHVl
ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAg
ICAgICAgICAgICAgY29vcmRzLmFwcGVuZChpbnQodmFsdWUtPmZWYWx1ZSkpOwotICAgICAgICAg
ICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJvb2wgaGFzSG90U3BvdCA9IGZhbHNlOwotICAgICAgICAgICAgSW50UG9pbnQgaG90
U3BvdCgtMSwgLTEpOwotICAgICAgICAgICAgaW50IG5yY29vcmRzID0gY29vcmRzLnNpemUoKTsK
LSAgICAgICAgICAgIGlmIChucmNvb3JkcyA+IDAgJiYgbnJjb29yZHMgIT0gMikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobnJjb29yZHMgPT0gMikgewot
ICAgICAgICAgICAgICAgIGhhc0hvdFNwb3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIGhvdFNw
b3QgPSBJbnRQb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghbGlzdCkKLSAgICAgICAgICAgICAgICBsaXN0ID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAg
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU0N1cnNvckltYWdlVmFsdWU6OmNyZWF0ZShpbWFn
ZS5yZWxlYXNlTm9uTnVsbCgpLCBoYXNIb3RTcG90LCBob3RTcG90KSk7Ci0KLSAgICAgICAgICAg
IGlmICgoaW5TdHJpY3RNb2RlKCkgJiYgIXZhbHVlKSB8fCAodmFsdWUgJiYgISh2YWx1ZS0+dW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7IC8vIGNvbW1hCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpc3QpIHsK
LSAgICAgICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSBh
ZnRlciB1cmwgbGlzdCAoTVNJRSA1IGNvbXBhdGliaWxpdHkpCi0gICAgICAgICAgICAgICAgaWYg
KGxpc3QtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENT
U1ZhbHVlSGFuZCkgLy8gTVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBv
aW50ZXIpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRv
ICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUNvcHkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IFdURk1vdmUobGlzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAg
ICBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgewotICAg
ICAgICAgICAgICAgIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCi0gICAgICAgICAgICAgICAg
aWQgPSBDU1NWYWx1ZVBvaW50ZXI7Ci0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmICgodmFsdWUtPmlkID49IENTU1ZhbHVlQXV0byAm
JiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRab29tT3V0KSB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb3B5IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDdXJzb3JWaXNpYmlsaXR5OgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlQXV0b0hpZGUpCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRCbGVuZE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlw
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZEltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVh
dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
Q2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXpl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU291cmNlVHlwZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1JlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgotICAgIHsK
LSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwxOwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbDI7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElkMSwgcHJvcElkMjsKLSAgICAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHBhcnNlRmlsbFByb3BlcnR5KHByb3BJ
ZCwgcHJvcElkMSwgcHJvcElkMiwgdmFsMSwgdmFsMikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTaG9ydGhhbmRTY29wZT4gc2hvcnRoYW5kU2NvcGU7Ci0gICAgICAgICAgICBpZiAo
cHJvcElkID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8Ci0gICAgICAgICAgICAg
ICAgcHJvcElkID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fAotICAgICAgICAgICAg
ICAgIHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiB8fAotICAgICAgICAg
ICAgICAgIHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpIHsKLSAgICAgICAg
ICAgICAgICBzaG9ydGhhbmRTY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hvcnRoYW5kU2NvcGU+
KHRoaXMsIHByb3BJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQxLCB2YWwxLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBp
ZiAodmFsMikKLSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCB2YWwyLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiAg
ICAgLy8gPHVyaT4gfCBub25lIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVNvdXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNl
OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
LSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShj
b21wbGV0ZVVSTCh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZykpOwotICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0dlbmVyYXRl
ZEltYWdlVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7Ci0gICAgICAgICAgICBpZiAocGFy
c2VHZW5lcmF0ZWRJbWFnZSgqbV92YWx1ZUxpc3QsIHBhcnNlZFZhbHVlKSkKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25W
YWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpKSkgewotICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6
ICAgICAgICAvLyA8Ym9yZGVyLXdpZHRoPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyVG9wV2lkdGg6ICAgICAvLy8vIDxib3JkZXItd2lkdGg+IHwgaW5oZXJpdAotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOiAgIC8vICAgV2hpY2ggaXMgZGVmaW5lZCBh
cwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDogIC8vICAgdGhpbiB8IG1l
ZGl1bSB8IHRoaWNrIHwgPGxlbmd0aD4KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFdpZHRoOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyQmVmb3JlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckFmdGVyV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aDoKLSAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlVGhpbiB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBpZCA9
PSBDU1NWYWx1ZVRoaWNrKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOiAgICAgICAvLyBub3JtYWwgfCA8bGVu
Z3RoPiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOiAg
ICAgICAgIC8vIG5vcm1hbCB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OgotICAgICAgICBw
YXJzZWRWYWx1ZSA9IHBhcnNlVGV4dEluZGVudCgpOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nVG9wOiAgICAgICAgICAvLy8vIDxwYWRkaW5nLXdpZHRoPiB8
IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OiAgICAgICAgLy8gICBX
aGljaCBpcyBkZWZpbmVkIGFzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206ICAg
ICAgIC8vICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5UGFk
ZGluZ0xlZnQ6ICAgICAgICAgLy8vLwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5n
U3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFBhZGRpbmdBZnRlcjoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykp
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXhIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCBpc1ZhbGlk
U2l6ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNaW5XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNh
bFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gaWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IGlzVmFsaWRTaXplKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaXNWYWxpZFNpemUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNp
emU6Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnRTaXplKGltcG9ydGFudCk7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKLSAgICAgICAgLy8gYmFzZWxpbmUgfCBzdWIgfCBz
dXBlciB8IHRvcCB8IHRleHQtdG9wIHwgbWlkZGxlIHwgYm90dG9tIHwgdGV4dC1ib3R0b20gfAot
ICAgICAgICAvLyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiB8IGluaGVyaXQKLQotICAgICAgICBp
ZiAoaWQgPj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1ZVdlYmtpdEJhc2VsaW5l
TWlkZGxlKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOiAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwg
PHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDog
ICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVy
aXQKLSAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6ICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+
IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5VG9w
OiAgICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGlu
aGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOiAgICAgICAgICAgLy8vLyA8bWFy
Z2luLXdpZHRoPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6ICAg
ICAgICAgLy8gICBXaGljaCBpcyBkZWZpbmVkIGFzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbTogICAgICAgIC8vICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5o
ZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OiAgICAgICAgICAvLy8vCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJnaW5FbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6Ci0gICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6ICAgICAgICAgICAgICAvLyBhdXRv
IHwgPGludGVnZXI+IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAo
V2UndmUgYWRkZWQgc3VwcG9ydCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkp
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93czogLy8gPGludGVnZXI+IHwgaW5oZXJpdCB8IGF1
dG8gKERpdHRvKQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9z
aXRpdmVJbnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUxpbmVIZWlnaHQo
aW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDogICAgLy8g
WyA8aWRlbnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlm
IChpZCAhPSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHBy
b3BJZCwgMSwgaW1wb3J0YW50KTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OiAgICAgICAgLy8g
WyA8aWRlbnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlm
IChpZCAhPSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHBy
b3BJZCwgMCwgaW1wb3J0YW50KTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICAgICAgLy8g
W1sgPGZhbWlseS1uYW1lPiB8IDxnZW5lcmljLWZhbWlseT4gXSxdKiBbPGZhbWlseS1uYW1lPiB8
IDxnZW5lcmljLWZhbWlseT5dIHwgaW5oZXJpdAotICAgIHsKLSAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZUZvbnRGYW1pbHkoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uOgotICAgICAgICAvLyBbIDx0ZXh0LWRlY29y
YXRpb24tbGluZT4gfHwgPHRleHQtZGVjb3JhdGlvbi1zdHlsZT4gfHwgPHRleHQtZGVjb3JhdGlv
bi1jb2xvcj4gXSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKENTU1By
b3BlcnR5V2Via2l0VGV4dERlY29yYXRpb24sIHdlYmtpdFRleHREZWNvcmF0aW9uU2hvcnRoYW5k
KCksIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkxpbmU6Ci0gICAgICAgIC8vIG5vbmUg
fCBbIHVuZGVybGluZSB8fCBvdmVybGluZSB8fCBsaW5lLXRocm91Z2ggfHwgYmxpbmsgXSB8IGlu
aGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlVGV4dERlY29yYXRpb24ocHJvcElkLCBpbXBvcnRh
bnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGU6Ci0g
ICAgICAgIC8vIHNvbGlkIHwgZG91YmxlIHwgZG90dGVkIHwgZGFzaGVkIHwgd2F2eQotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVTb2xpZCB8fCBpZCA9PSBDU1NWYWx1ZURvdWJsZSB8fCBpZCA9
PSBDU1NWYWx1ZURvdHRlZCB8fCBpZCA9PSBDU1NWYWx1ZURhc2hlZCB8fCBpZCA9PSBDU1NWYWx1
ZVdhdnkpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcDoKLSAgICAg
ICAgLy8gbm9uZSB8IFsgb2JqZWN0cyB8fCBzcGFjZXMgfHwgaW5rIHx8IGVkZ2VzIHx8IGJveC1k
ZWNvcmF0aW9uIF0KLSAgICAgICAgcmV0dXJuIHBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGltcG9y
dGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9u
OgotICAgICAgICAvLyBhdXRvIHwgYWxwaGFiZXRpYyB8IHVuZGVyCi0gICAgICAgIHJldHVybiBw
YXJzZVRleHRVbmRlcmxpbmVQb3NpdGlvbihpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVpvb206Ci0gICAgICAgIC8vIG5vcm1hbCB8IHJlc2V0IHwgZG9jdW1lbnQgfCA8bnVtYmVy
PiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9y
bWFsIHx8IGlkID09IENTU1ZhbHVlUmVzZXQgfHwgaWQgPT0gQ1NTVmFsdWVEb2N1bWVudCkKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpOwotICAg
ICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFpvb206Ci0g
ICAgICAgIC8vIG5vcm1hbCB8IHJlc2V0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1h
bCB8fCBpZCA9PSBDU1NWYWx1ZVJlc2V0KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkg
dXNlZCB3aXRoaW4gQGZvbnQtZmFjZSBhbmQgQC13ZWJraXQtZmlsdGVyLCBzbyBjYW5ub3QgdXNl
IGluaGVyaXQgfCBpbml0aWFsIG9yIGJlICFpbXBvcnRhbnQuIFRoaXMgaXMgYSBsaXN0IG9mIHVy
bHMgb3IgbG9jYWwgcmVmZXJlbmNlcy4KLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udEZhY2VTcmMo
KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBw
YXJzZUZvbnRGYWNlVW5pY29kZVJhbmdlKCk7Ci0KLSAgICAvKiBDU1MzIHByb3BlcnRpZXMgKi8K
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZTogewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCBy
ZXN1bHQsIGltcG9ydGFudCk7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOiB7Ci0gICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFn
ZShwcm9wSWQsIHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShyZXN1bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZU91dHNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0
OiB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OwotICAgICAgICBp
ZiAocGFyc2VCb3JkZXJJbWFnZU91dHNldChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVJlcGVhdDogewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKLSAg
ICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQocmVzdWx0KSkgewotICAgICAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZVNsaWNlOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9w
SWQsIHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShy
ZXN1bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDogewotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHBhcnNl
Qm9yZGVySW1hZ2VXaWR0aChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyVG9wUmlnaHRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRS
YWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7Ci0gICAgICAgIGlmIChu
dW0gIT0gMSAmJiBudW0gIT0gMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwotICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHBhcnNlZFZhbHVlMSA9IGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwotICAgICAgICBpZiAobnVt
ID09IDIpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhD
YWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7Ci0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkYXRlVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTEucHRy
KCk7Ci0KLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBh
aXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZU5vbk51bGwoKSks
IGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIENTU1By
b3BlcnR5VGFiU2l6ZToKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbzoKLSAgICAgICAgcmV0dXJuIHBh
cnNlQXNwZWN0UmF0aW8oaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFk
aXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6Ci0gICAgICAgIHJl
dHVybiBwYXJzZUJvcmRlclJhZGl1cyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU91dGxpbmVPZmZzZXQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4g
Q1NTMi4xLCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm94U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
c2hhZG93VmFsdWVMaXN0ID0gcGFyc2VTaGFkb3coKm1fdmFsdWVMaXN0LCBwcm9wSWQpOwotICAg
ICAgICAgICAgaWYgKHNoYWRvd1ZhbHVlTGlzdCkgewotICAgICAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgc2hhZG93VmFsdWVMaXN0LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SW5pdGlh
bExldHRlcjogewotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYg
KG51bSAhPSAxICYmIG51bSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byBoZWlnaHQg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb3NpdGlvbjsKLSAgICAgICAgICAg
IGlmIChudW0gPT0gMikgewotICAgICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5l
eHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7Ci0gICAgICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0
aXZlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
cG9zaXRpb24gPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBvc2l0aW9uID0g
aGVpZ2h0LnB0cigpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmlt
aXRpdmVWYWx1ZVBhaXIocG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShoZWlnaHQp
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDoK
LSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVmbGVj
dChwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlPcGFjaXR5OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk51bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hGbGV4OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1N0cmljdE1vZGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm94T3JkaW5hbEdyb3VwOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2Rl
KSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8y
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKLSNlbmRpZgotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGN1cnJWYWx1ZTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGaWx0ZXIoKm1fdmFsdWVMaXN0LCBj
dXJyVmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShjdXJyVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxF
KENTU19DT01QT1NJVElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlJc29sYXRpb246Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5RmxleDogewotICAgICAgICBT
aG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93
LCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4
U2hyaW5rLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGbGV4QmFzaXMsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVB
dXRvKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBwYXJzZUZsZXgoKm1fdmFsdWVMaXN0LCBpbXBvcnRhbnQpOwotICAgIH0K
LSAgICBjYXNlIENTU1Byb3BlcnR5RmxleEJhc2lzOgotICAgICAgICAvLyBGSVhNRTogU3VwcG9y
dCBpbnRyaW5zaWMgZGltZW5zaW9ucyB0b28uCi0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlG
bGV4U2hyaW5rOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5T3JkZXI6Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICAgICAgLy8g
V2UgcmVzdHJpY3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2Ug
dXNlIGludCBtaW4gYW5kIGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBz
ZXQuCi0gICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKSk7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFu
ZChwcm9wSWQsIHdlYmtpdE1hcnF1ZWVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDoKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlU21hbGwgfHwgaWQgPT0gQ1NTVmFsdWVMYXJnZSB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1
bSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZMZW5ndGggfCBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
SW5maW5pdGUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTbG93IHx8IGlkID09IENTU1ZhbHVlRmFzdCkKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZU
aW1lIHwgRkludGVnZXIgfCBGTm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENT
U19SRUdJT05TKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKLSAgICAgICAg
cmV0dXJuIHBhcnNlRmxvd1RocmVhZChwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZsb3dGcm9tOgotICAgICAgICByZXR1cm4gcGFyc2VSZWdpb25UaHJlYWQo
cHJvcElkLCBpbXBvcnRhbnQpOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9y
bToKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPENT
U1ZhbHVlPiB0cmFuc2Zvcm1WYWx1ZSA9IHBhcnNlVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCks
IGltcG9ydGFudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWToK
LSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWjogewotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmFsMjsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwzOwotICAgICAgICBDU1NQcm9w
ZXJ0eUlEIHByb3BJZDEsIHByb3BJZDIsIHByb3BJZDM7Ci0gICAgICAgIGlmIChwYXJzZVRyYW5z
Zm9ybU9yaWdpbihwcm9wSWQsIHByb3BJZDEsIHByb3BJZDIsIHByb3BJZDMsIHZhbDEsIHZhbDIs
IHZhbDMpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQxLCBXVEZNb3ZlKHZhbDEp
LCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgaWYgKHZhbDIpCi0gICAgICAgICAgICAgICAgYWRk
UHJvcGVydHkocHJvcElkMiwgV1RGTW92ZSh2YWwyKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAg
IGlmICh2YWwzKQotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDMsIFdURk1vdmUo
dmFsMyksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZToKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBBY2NlcHRp
bmcgdmFsdWVsZXNzIG51bWJlcnMgaXMgYSBxdWlyayBvZiB0aGUgLXdlYmtpdCBwcmVmaXhlZCB2
ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZykpIHsKLSAgICAg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQ
ZXJzcGVjdGl2ZU9yaWdpblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2lu
WTogewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMjsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9w
SWQxLCBwcm9wSWQyOwotICAgICAgICBpZiAocGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihwcm9wSWQs
IHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wSWQxLCBXVEZNb3ZlKHZhbDEpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgaWYgKHZh
bDIpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMiwgV1RGTW92ZSh2YWwyKSwg
aW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkRlbGF5
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25G
aWxsTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5QW5pbWF0aW9uUGxheVN0YXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRp
b25JdGVyYXRpb25Db3VudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25GaWxsTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFt
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246Ci0jaWYgRU5BQkxFKENTU19B
TklNQVRJT05TX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRy
aWdnZXI6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkRlbGF5OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlv
blByb3BlcnR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6IHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWw7Ci0gICAgICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCBjb250ZXh0OwotICAgICAgICBp
ZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wSWQsIHZhbCwgY29udGV4dCkpIHsKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWwpLCBpbXBvcnRhbnQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5SnVzdGlmeUNvbnRlbnQ6Ci0gICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5SnVzdGlmeVNlbGY6Ci0gICAgICAgIHJl
dHVybiBwYXJzZUl0ZW1Qb3NpdGlvbk92ZXJmbG93UG9zaXRpb24ocHJvcElkLCBpbXBvcnRhbnQp
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlKdXN0aWZ5SXRlbXM6Ci0gICAgICAgIGlmIChwYXJzZUxl
Z2FjeVBvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgICAgICByZXR1
cm4gcGFyc2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsK
LSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXV0
b0NvbHVtbnM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvUm93czoKLSAgICAgICAgaWYg
KCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRBdXRvKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1uczoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlUm93czoKLSAgICAgICAgaWYgKCFpc0NTU0dy
aWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRUZW1wbGF0ZSk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5R3JpZENvbHVtbkVuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFJvd1N0YXJ0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93RW5kOgotICAgICAgICBpZiAoIWlzQ1NTR3Jp
ZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFy
c2VkVmFsdWUgPSBwYXJzZUdyaWRQb3NpdGlvbigpOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93
R2FwOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZEdhcDoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBw
YXJzZUdyaWRHYXBTaG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlH
cmlkQ29sdW1uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93OgotICAgICAgICBpZiAoIWlz
Q1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIHBhcnNlR3JpZEl0ZW1Qb3NpdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFu
dCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlOgotICAgICAgICBpZiAoIWlz
Q1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIHBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGltcG9ydGFudCk7Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5R3JpZDoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZUdyaWRT
aG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXJlYToKLSAg
ICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGltcG9ydGFudCk7
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQXJlYXM6Ci0gICAgICAgIGlmICgh
aXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXMoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvRmxvdzoKLSAgICAgICAgaWYgKCFpc0NT
U0dyaWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHBhcnNlZFZhbHVlID0gcGFyc2VHcmlkQXV0b0Zsb3coKm1fdmFsdWVMaXN0KTsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2U6IHsKLSAgICAgICAgaWYgKG51bSA9PSAxKSB7
Ci0gICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtp
dE1hcmdpbkNvbGxhcHNlKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZSh3ZWJraXRNYXJn
aW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVswXSwgaW1wb3J0YW50KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBt
X3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0
eSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVsxXSwgdmFsdWUs
IGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChudW0gPT0gMikgewotICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUo
dGhpcywgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZSk7Ci0gICAgICAgICAgICBpZiAo
IXBhcnNlVmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClb
MF0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhh
bmQoKS5wcm9wZXJ0aWVzKClbMV0sIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoV2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lV2lkdGg6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVUaGluIHx8Ci0gICAg
ICAgICAgICBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBpZCA9PSBDU1NWYWx1ZVRoaWNrKQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VD
b2x1bW5Db3VudCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1u
R2FwOiAvLyBub3JtYWwgfCA8bGVuZ3RoPgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5BeGlzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9u
dGFsIHx8IGlkID09IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uUHJvZ3Jlc3Npb246Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVJldmVyc2UpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5T
cGFuOiAvLyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZpeGVk
IHByb3BlcnR5KQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFs
dWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNl
IGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVn
KSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pID09IDEpIHsKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29sLmNyZWF0
ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2x1bW5XaWR0aDogLy8gYXV0byB8IDxsZW5ndGg+Ci0gICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VDb2x1bW5XaWR0aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5T2JqZWN0UG9zaXRpb246IHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YWwxOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDI7Ci0g
ICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKCptX3ZhbHVlTGlzdCwgdmFsMSwgdmFsMik7Ci0gICAg
ICAgIGlmICh2YWwxKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9iamVj
dFBvc2l0aW9uLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIodmFsMS5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKHZhbDIpKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIC8vIEVuZCBv
ZiBDU1MzIHByb3BlcnRpZXMKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXaWxsQ2hhbmdlOiAvLyBh
dXRvIHwgW3Njcm9sbC1wb3NpdGlvbiB8IGNvbnRlbnRzIHwgPGN1c3RvbS1pZGVudD5dIwotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VXaWxsQ2hhbmdl
KGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8gQXBwbGUgc3BlY2lmaWMgcHJv
cGVydGllcy4gIFRoZXNlIHdpbGwgbmV2ZXIgYmUgc3RhbmRhcmRpemVkIGFuZCBhcmUgcHVyZWx5
IHRvCi0gICAgLy8gc3VwcG9ydCBjdXN0b20gV2ViS2l0LWJhc2VkIEFwcGxlIGFwcGxpY2F0aW9u
cy4KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgotICAgICAgICAvLyBXaGVu
IHNwZWNpZnlpbmcgbnVtYmVyIG9mIGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFs
dWUKLSAgICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVp
cmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkg
JiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50
IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUo
SU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVB
ZGp1c3Q6Ci0gICAgICAgIGlmICghaXNUZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlk
ID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNh
c2Ugd2hlcmUgd2UgYWxsb3cgcmVsYXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2Vu
dCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSNlbmRpZgotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAg
ICAgICAvLyA8bGVuZ3RoPgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlQXV0byB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhl
bmF0ZUxpbWl0QmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1p
dEFmdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlTm9MaW1pdCB8fCB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExpbmVHcmlkOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkg
ewotICAgICAgICAgICAgU3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5zdHJpbmcpOwotICAgICAgICAgICAgaWYgKCFsaW5lR3JpZFZhbHVl
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKGxpbmVHcmlkVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TG9jYWxlOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dERhc2hib2FyZFJlZ2lvbjogLy8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdp
b24+Ci0gICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAg
IHJldHVybiBwYXJzZURhc2hib2FyZFJlZ2lvbnMocHJvcElkLCBpbXBvcnRhbnQpOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUb3VjaENhbGxvdXQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZURlZmF1bHQg
fHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOgotICAgICAgICBpZiAoaXNW
YWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudQotICAgICAgICAg
ICAgfHwgKGlkID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgaWQgPCBDU1NWYWx1
ZVdlYmtpdFRleHQgJiYgaW5RdWlya3NNb2RlKCkpKSB7Ci0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlQ29sb3IoKTsKLSAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgLy8gRW5kIEFwcGxlLXNwZWNpZmljIHByb3BlcnRpZXMKLQotICAgICAgICAvKiBz
aG9ydGhhbmQgcHJvcGVydGllcyAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7
Ci0gICAgICAgIC8vIFBvc2l0aW9uIG11c3QgY29tZSBiZWZvcmUgY29sb3IgaW4gdGhpcyBhcnJh
eSBiZWNhdXNlIGEgcGxhaW4gb2xkICIwIiBpcyBhIGxlZ2FsIGNvbG9yCi0gICAgICAgIC8vIGlu
IHF1aXJrcyBtb2RlIGJ1dCBpdCdzIHVzdWFsbHkgdGhlIFggY29vcmRpbmF0ZSBvZiBhIHBvc2l0
aW9uLgotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNo
bWVudCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZE9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ2xpcCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFNpemUgfTsKLSAgICAgICAgcmV0dXJuIHBhcnNlRmlsbFNob3J0aGFuZChwcm9wSWQs
IHByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgocHJvcGVydGllcyksIGltcG9ydGFudCk7Ci0g
ICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOiB7Ci0gICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5SUQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwg
Q1NTUHJvcGVydHlXZWJraXRNYXNrU291cmNlVHlwZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVw
ZWF0LAotICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIENTU1Byb3Bl
cnR5V2Via2l0TWFza09yaWdpbiwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrU2l6ZSB9OwotICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHBy
b3BJZCwgcHJvcGVydGllcywgV1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKSwgaW1wb3J0YW50
KTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKLSAgICAgICAgLy8gWyAnYm9y
ZGVyLXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAg
ewotICAgICAgICBpZiAocGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJBYnJpZGdlZFNob3J0
aGFuZCgpLCBpbXBvcnRhbnQpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgQ1NTMyBCb3JkZXJzIGFu
ZCBCYWNrZ3JvdW5kcyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBib3JkZXIgYWxzbyByZXNldHMg
Ym9yZGVyLWltYWdlLiBJdCdzIGFzCi0gICAgICAgICAgICAvLyB0aG91Z2ggYSB2YWx1ZSBvZiBu
b25lIHdhcyBzcGVjaWZpZWQgZm9yIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIGFkZEV4cGFuZGVk
UHJvcGVydHlGb3JWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckltYWdlLCBjc3NWYWx1ZVBvb2wuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKLSAgICAgICAgLy8gWyAnYm9yZGVyLXRvcC13aWR0aCcg
fHwgJ2JvcmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAgICAgICByZXR1cm4g
cGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJUb3BTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsK
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6Ci0gICAgICAgIC8vIFsgJ2JvcmRlci1y
aWdodC13aWR0aCcgfHwgJ2JvcmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAg
ICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJSaWdodFNob3J0aGFuZCgp
LCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206Ci0gICAgICAg
IC8vIFsgJ2JvcmRlci1ib3R0b20td2lkdGgnIHx8ICdib3JkZXItc3R5bGUnIHx8IDxjb2xvcj4g
XSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgYm9yZGVy
Qm90dG9tU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnQ6Ci0gICAgICAgIC8vIFsgJ2JvcmRlci1sZWZ0LXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxl
JyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChw
cm9wSWQsIGJvcmRlckxlZnRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyU3RhcnQ6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChw
cm9wSWQsIHdlYmtpdEJvcmRlclN0YXJ0U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRo
YW5kKHByb3BJZCwgd2Via2l0Qm9yZGVyRW5kU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZToKLSAgICAgICAgcmV0dXJuIHBhcnNl
U2hvcnRoYW5kKHByb3BJZCwgd2Via2l0Qm9yZGVyQmVmb3JlU2hvcnRoYW5kKCksIGltcG9ydGFu
dCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyOgotICAgICAgICByZXR1
cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCB3ZWJraXRCb3JkZXJBZnRlclNob3J0aGFuZCgpLCBp
bXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgotICAgICAgICAvLyBbICdv
dXRsaW5lLWNvbG9yJyB8fCAnb3V0bGluZS1zdHlsZScgfHwgJ291dGxpbmUtd2lkdGgnIF0gfCBp
bmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIG91dGxpbmVTaG9y
dGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6Ci0g
ICAgICAgIC8vIDxjb2xvcj57MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlNFZh
bHVlcyhwcm9wSWQsIGJvcmRlckNvbG9yU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRh
bnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDoKLSAgICAgICAgLy8gPGJvcmRl
ci13aWR0aD57MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9w
SWQsIGJvcmRlcldpZHRoU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKLSAgICAgICAgLy8gPGJvcmRlci1zdHlsZT57
MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJvcmRl
clN0eWxlU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXJnaW46Ci0gICAgICAgIC8vIDxtYXJnaW4td2lkdGg+ezEsNH0gfCBpbmhlcml0
Ci0gICAgICAgIHJldHVybiBwYXJzZTRWYWx1ZXMocHJvcElkLCBtYXJnaW5TaG9ydGhhbmQoKS5w
cm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0g
ICAgICAgIC8vIDxwYWRkaW5nLXdpZHRoPnsxLDR9IHwgaW5oZXJpdAotICAgICAgICByZXR1cm4g
cGFyc2U0VmFsdWVzKHByb3BJZCwgcGFkZGluZ1Nob3J0aGFuZCgpLnByb3BlcnRpZXMoKSwgaW1w
b3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmxleEZsb3c6Ci0gICAgICAgIHJldHVybiBw
YXJzZVNob3J0aGFuZChwcm9wSWQsIGZsZXhGbG93U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6Ci0gICAgICAgIC8vIFsgWyAnZm9udC1zdHlsZScgfHwg
J2ZvbnQtdmFyaWFudCcgfHwgJ2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXplJyBbIC8gJ2xpbmUt
aGVpZ2h0JyBdPwotICAgICAgICAvLyAnZm9udC1mYW1pbHknIF0gfCBjYXB0aW9uIHwgaWNvbiB8
IG1lbnUgfCBtZXNzYWdlLWJveCB8IHNtYWxsLWNhcHRpb24gfCBzdGF0dXMtYmFyIHwgaW5oZXJp
dAotICAgICAgICBpZiAobnVtID09IDEgJiYgaWQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIGlkIDw9
IENTU1ZhbHVlU3RhdHVzQmFyKSB7Ci0gICAgICAgICAgICBwYXJzZVN5c3RlbUZvbnQoaW1wb3J0
YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBwYXJzZUZvbnQoaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOgot
ICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBsaXN0U3R5bGVTaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uczoKLSAgICAgICAgcmV0
dXJuIHBhcnNlQ29sdW1uc1Nob3J0aGFuZChpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlDb2x1bW5SdWxlOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBjb2x1
bW5SdWxlU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTdHJva2U6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtp
dFRleHRTdHJva2VTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
QW5pbWF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246Ci0gICAgICAg
IHJldHVybiBwYXJzZUFuaW1hdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb246Ci0gICAgICAgIHJldHVybiBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQocHJvcElk
LCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6Ci0gICAgICAgIHJldHVybiBwYXJz
ZVBhZ2UocHJvcElkLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRj
aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0T3ZlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVs
IDM6IFZlcnRpY2FsIHdyaXRpbmcgc3VwcG9ydAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RW1waGFzaXM6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtp
dFRleHRFbXBoYXNpc1Nob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlOgotICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1w
aGFzaXNTdHlsZShpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRF
bXBoYXNpc1Bvc2l0aW9uOgotICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlv
bihpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlv
bjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU2lkZXdheXMgfHwgaWQgPT0gQ1NTVmFsdWVT
aWRld2F5c1JpZ2h0IHx8IGlkID09IENTU1ZhbHVlVmVydGljYWxSaWdodCB8fCBpZCA9PSBDU1NW
YWx1ZU1peGVkIHx8IGlkID09IENTU1ZhbHVlVXByaWdodCkKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5SGFu
Z2luZ1B1bmN0dWF0aW9uOgotICAgICAgICByZXR1cm4gcGFyc2VIYW5naW5nUHVuY3R1YXRpb24o
aW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46Ci0g
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxpbmVCb3hD
b250YWluKGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmVhdHVyZVNldHRpbmdzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoaW1wb3J0YW50KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOgotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gcGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyhpbXBvcnRhbnQsIHRydWUsIGZhbHNlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVtZXJpYzoK
LSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VGb250
VmFyaWFudE51bWVyaWMoaW1wb3J0YW50LCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEVhc3RBc2lhbjoKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudEVhc3RBc2lh
bihpbXBvcnRhbnQsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsK
LSAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExp
Z2F0dXJlcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1
ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fwcywg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250VmFyaWFudE51bWVyaWMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50RWFzdEFzaWFuLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lKSB7Ci0gICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50KTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZh
cmlhbnRMaWdhdHVyZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudChpbXBv
cnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOgotICAgICAgICBw
YXJzZWRWYWx1ZSA9IHBhcnNlQ2xpcFBhdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKLSAg
ICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNoYXBlUHJvcGVydHkocHJvcElkKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgotICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbWFnZVRocmVzaG9sZDoKLSAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSAhaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFU
SU9OKQotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZB
bmdsZSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNP
TFVUSU9OKQotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlc29sdXRpb246Ci0gICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VJbWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5k
aWYKLSAgICBjYXNlIENTU1Byb3BlcnR5QWxpZ25Db250ZW50OgotICAgICAgICBwYXJzZWRWYWx1
ZSA9IHBhcnNlQ29udGVudERpc3RyaWJ1dGlvbk92ZXJmbG93UG9zaXRpb24oKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFsaWduU2VsZjoKLSAgICAgICAgcmV0dXJuIHBh
cnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5QWxpZ25JdGVtczoKLSAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBv
c2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xs
YXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5QnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0
aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlF
bXB0eUNlbGxzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxp
c3RTdHlsZVR5cGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3dZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJ
bnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVNwZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFwcGVhcmFuY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlz
aWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJGaXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgotI2lmIEVOQUJMRShDU1NfQk9YX0RF
Q09SQVRJT05fQlJFQUspCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25C
cmVhazoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hPcmllbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5CcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sdW1uUnVsZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4
RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRT
bW9vdGhpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVBbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUJyZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpbkJvdHRvbUNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BD
b2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXROYnNwTW9kZToKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xM
SU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKLSNlbmRp
ZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotI2lmIEVOQUJM
RShDU1NfUkVHSU9OUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRl
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25GcmFnbWVudDoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRSdGxPcmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgot
I2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRBbGln
bkxhc3Q6Ci0jZW5kaWYgLy8gQ1NTM19URVhUCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRDb21iaW5lOgotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRKdXN0aWZ5OgotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U2VjdXJpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJN
b2RpZnk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNw
YWNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdvcmRXcmFwOgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRvdWNoQWN0aW9uOgotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcFR5cGU6Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
Q1NTX1RSQUlMSU5HX1dPUkQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFwcGxlVHJhaWxpbmdXb3Jk
OgotI2VuZGlmCi0gICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGJlIGhhbmRsZWQg
YmVmb3JlIGluIGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZSgpLgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShDU1Nf
REVWSUNFX0FEQVBUQVRJT04pCi0gICAgLy8gUHJvcGVydGllcyBiZWxsb3cgYXJlIHZhbGlkYXRl
ZCBpbnNpZGUgcGFyc2VWaWV3cG9ydFByb3BlcnR5LCBiZWNhdXNlIHdlCi0gICAgLy8gY2hlY2sg
Zm9yIHBhcnNlciBzdGF0ZSBpblZpZXdwb3J0U2NvcGUuIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSBp
ZiBzb21lb25lCi0gICAgLy8gYWRkcyB0aGVtIG91dHNpZGUgYSBAdmlld3BvcnQgcnVsZS4KLSAg
ICBjYXNlIENTU1Byb3BlcnR5TWF4Wm9vbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluWm9vbToK
LSAgICBjYXNlIENTU1Byb3BlcnR5T3JpZW50YXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVz
ZXJab29tOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFNjcm9sbFNuYXBQb2ludHNYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3Jv
bGxTbmFwUG9pbnRzWToKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlRWxlbWVudHMpIHsKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJzZU5vbkVsZW1lbnRTbmFwUG9pbnRzKHByb3BJZCwg
aW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcERlc3RpbmF0
aW9uOiAvLyA8bGVuZ3RoPnsyfQotICAgICAgICByZXR1cm4gcGFyc2VTY3JvbGxTbmFwRGVzdGlu
YXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3Jv
bGxTbmFwQ29vcmRpbmF0ZToKLSAgICAgICAgcmV0dXJuIHBhcnNlU2Nyb2xsU25hcENvb3JkaW5h
dGUocHJvcElkLCBpbXBvcnRhbnQpOwotI2VuZGlmCi0KLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gcGFyc2VTVkdWYWx1ZShwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgfQotCi0gICAgaWYg
KHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1p
dGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgIH0KLQotICAgIGlmIChwYXJzZWRWYWx1ZSAmJiAoIW1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkgfHwgaW5TaG9ydGhhbmQoKSkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBw
YXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU1BhcnNlcjo6YWRk
RmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKQot
ewotICAgIGlmICghbHZhbCkgewotICAgICAgICBsdmFsID0gV1RGTW92ZShydmFsKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChsdmFsLT5pc0Jhc2VWYWx1ZUxpc3QoKSkgewot
ICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGTW92ZShydmFs
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgbGlzdC5nZXQoKS5hcHBlbmQobHZhbC5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBsaXN0LmdldCgpLmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsK
LSAgICBsdmFsID0gV1RGTW92ZShsaXN0KTsKLX0KLQotc3RhdGljIGJvb2wgaXNDb250ZW50RGlz
dHJpYnV0aW9uS2V5d29yZChDU1NWYWx1ZUlEIGlkKQotewotICAgIHJldHVybiBpZCA9PSBDU1NW
YWx1ZVNwYWNlQmV0d2VlbiB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlQXJvdW5kCi0gICAgICAgIHx8
IGlkID09IENTU1ZhbHVlU3BhY2VFdmVubHkgfHwgaWQgPT0gQ1NTVmFsdWVTdHJldGNoOwotfQot
Ci1zdGF0aWMgYm9vbCBpc0NvbnRlbnRQb3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsK
LSAgICByZXR1cm4gaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBp
ZCA9PSBDU1NWYWx1ZUNlbnRlcgotICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUZsZXhTdGFydCB8
fCBpZCA9PSBDU1NWYWx1ZUZsZXhFbmQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8
IGlkID09IENTU1ZhbHVlUmlnaHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2VsaW5l
UG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1Zh
bHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVMYXN0QmFzZWxpbmU7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzQWxpZ25tZW50T3ZlcmZsb3dLZXl3b3JkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0
dXJuIGlkID09IENTU1ZhbHVlVW5zYWZlIHx8IGlkID09IENTU1ZhbHVlU2FmZTsKLX0KLQotc3Rh
dGljIGJvb2wgaXNJdGVtUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0
dXJuIGlkID09IENTU1ZhbHVlU3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVFbmQgfHwgaWQgPT0gQ1NT
VmFsdWVDZW50ZXIKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVTZWxmU3RhcnQgfHwgaWQgPT0g
Q1NTVmFsdWVTZWxmRW5kIHx8IGlkID09IENTU1ZhbHVlRmxleFN0YXJ0Ci0gICAgICAgIHx8IGlk
ID09IENTU1ZhbHVlRmxleEVuZCB8fCBpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFs
dWVSaWdodDsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGVnYWN5UG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIFsgbGVnYWN5ICYmIFsg
bGVmdCB8IHJpZ2h0IHwgY2VudGVyIF0KLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxlZ2FjeSkgewotICAgICAgICB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVDZW50
ZXIgJiYgdmFsdWUtPmlkICE9IENTU1ZhbHVlTGVmdCAmJiB2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVS
aWdodCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUNlbnRlciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVJpZ2h0KSB7Ci0gICAgICAgIGlmICghbV92YWx1ZUxpc3QtPm5leHQo
KSB8fCBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCAhPSBDU1NWYWx1ZUxlZ2FjeSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKLSAg
ICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBv
b2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGVnYWN5KSwgY3NzVmFsdWVQb29sLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4g
IW1fdmFsdWVMaXN0LT5uZXh0KCk7Ci19Ci0KLVJlZlB0cjxDU1NDb250ZW50RGlzdHJpYnV0aW9u
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlv
bigpCi17Ci0gICAgLy8gbm9ybWFsIHwgPGJhc2VsaW5lLXBvc2l0aW9uPiB8IDxjb250ZW50LWRp
c3RyaWJ1dGlvbj4gfHwgWyA8b3ZlcmZsb3ctcG9zaXRpb24+PyAmJiA8Y29udGVudC1wb3NpdGlv
bj4gXQotICAgIC8vIDxiYXNlbGluZS1wb3NpdGlvbj4gPSBiYXNlbGluZSB8IGxhc3QtYmFzZWxp
bmU7Ci0gICAgLy8gPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiA9IHNwYWNlLWJldHdlZW4gfCBzcGFj
ZS1hcm91bmQgfCBzcGFjZS1ldmVubHkgfCBzdHJldGNoOwotICAgIC8vIDxjb250ZW50LXBvc2l0
aW9uPiA9IGNlbnRlciB8IHN0YXJ0IHwgZW5kIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgbGVm
dCB8IHJpZ2h0OwotICAgIC8vIDxvdmVyZmxvdy1wb3NpdGlvbj4gPSB1bnNhZmUgfCBzYWZlCi0K
LSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
IGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gYXV0byB8IDxi
YXNlbGluZS1wb3NpdGlvbj4KLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8
IGlzQmFzZWxpbmVQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVl
OjpjcmVhdGUoQ1NTVmFsdWVJbnZhbGlkLCB2YWx1ZS0+aWQsIENTU1ZhbHVlSW52YWxpZCk7Ci0g
ICAgfQotCi0gICAgQ1NTVmFsdWVJRCBkaXN0cmlidXRpb24gPSBDU1NWYWx1ZUludmFsaWQ7Ci0g
ICAgQ1NTVmFsdWVJRCBwb3NpdGlvbiA9IENTU1ZhbHVlSW52YWxpZDsKLSAgICBDU1NWYWx1ZUlE
IG92ZXJmbG93ID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAg
ICBpZiAoaXNDb250ZW50RGlzdHJpYnV0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAg
ICAgICBpZiAoZGlzdHJpYnV0aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiA9IHZhbHVlLT5pZDsK
LSAgICAgICAgfSBlbHNlIGlmIChpc0NvbnRlbnRQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkg
ewotICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHBvc2l0aW9uID0gdmFsdWUtPmlk
OwotICAgICAgICB9IGVsc2UgaWYgKGlzQWxpZ25tZW50T3ZlcmZsb3dLZXl3b3JkKHZhbHVlLT5p
ZCkpIHsKLSAgICAgICAgICAgIGlmIChvdmVyZmxvdyAhPSBDU1NWYWx1ZUludmFsaWQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBvdmVyZmxvdyA9IHZhbHVl
LT5pZDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIC8vIFRoZSBncmFt
bWFyIHN0YXRlcyB0aGF0IHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IDxjb250ZW50LWRpc3RyaWJ1
dGlvbj4gb3IKLSAgICAvLyA8Y29udGVudC1wb3NpdGlvbj4gKCA8Y29udGVudC1kaXN0cmlidXRp
b24+IHx8IDxjb250ZW50LXBvc2l0aW9uPiApLgotICAgIGlmIChwb3NpdGlvbiA9PSBDU1NWYWx1
ZUludmFsaWQgJiYgZGlzdHJpYnV0aW9uID09IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgZ3JhbW1hciBzdGF0ZXMgdGhhdCA8b3ZlcmZsb3ct
cG9zaXRpb24+IG11c3QgYmUgYXNzb2NpYXRlZCB0byA8Y29udGVudC1wb3NpdGlvbj4uCi0gICAg
aWYgKG92ZXJmbG93ICE9IENTU1ZhbHVlSW52YWxpZCAmJiBwb3NpdGlvbiA9PSBDU1NWYWx1ZUlu
dmFsaWQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIENTU0NvbnRlbnRE
aXN0cmlidXRpb25WYWx1ZTo6Y3JlYXRlKGRpc3RyaWJ1dGlvbiwgcG9zaXRpb24sIG92ZXJmbG93
KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlv
bihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gYXV0byB8
IG5vcm1hbCB8IHN0cmV0Y2ggfCA8YmFzZWxpbmUtcG9zaXRpb24+IHwgWzxpdGVtLXBvc2l0aW9u
PiAmJiA8b3ZlcmZsb3ctcG9zaXRpb24+PyBdCi0gICAgLy8gPGJhc2VsaW5lLXBvc2l0aW9uPiA9
IGJhc2VsaW5lIHwgbGFzdC1iYXNlbGluZTsKLSAgICAvLyA8aXRlbS1wb3NpdGlvbj4gPSBjZW50
ZXIgfCBzdGFydCB8IGVuZCB8IHNlbGYtc3RhcnQgfCBzZWxmLWVuZCB8IGZsZXgtc3RhcnQgfCBm
bGV4LWVuZCB8IGxlZnQgfCByaWdodDsKLSAgICAvLyA8b3ZlcmZsb3ctcG9zaXRpb24+ID0gdW5z
YWZlIHwgc2FmZQotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU3RyZXRjaCB8fCBpc0Jhc2VsaW5lUG9zaXRpb25L
ZXl3b3JkKHZhbHVlLT5pZCkpIHsKLSAgICAgICAgLy8gYWxpZ24taXRlbXMgcHJvcGVydHkgZG9l
cyBub3QgYWxsb3cgdGhlICdhdXRvJyB2YWx1ZS4KLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUF1dG8gJiYgcHJvcElkID09IENTU1Byb3BlcnR5QWxpZ25JdGVtcykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBp
bXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBvc2l0aW9uOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
b3ZlcmZsb3dBbGlnbm1lbnRLZXl3b3JkOwotICAgIGlmIChpc0l0ZW1Qb3NpdGlvbktleXdvcmQo
dmFsdWUtPmlkKSkgewotICAgICAgICBwb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgIHZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUtPmlkICE9IENTU1ZhbHVlVW5zYWZlICYmIHZhbHVlLT5pZCAhPSBDU1NWYWx1ZVNhZmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgb3ZlcmZsb3dBbGln
bm1lbnRLZXl3b3JkID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXNBbGlnbm1lbnRP
dmVyZmxvd0tleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICBvdmVyZmxvd0FsaWdubWVudEtl
eXdvcmQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
IGlmICh2YWx1ZSAmJiBpc0l0ZW1Qb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkKLSAgICAgICAg
ICAgIHBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxp
c3QtPm5leHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHBvc2l0aW9u
KTsKLSAgICBpZiAob3ZlcmZsb3dBbGlnbm1lbnRLZXl3b3JkKQotICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihwb3NpdGlvbi5yZWxlYXNlTm9uTnVs
bCgpLCBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQucmVsZWFzZU5vbk51bGwoKSksIGltcG9ydGFu
dCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBvc2l0aW9uLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgcGFyc2VCYWNrZ3JvdW5kQ2xpcChDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUsIFJl
ZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlKQotewotICAgIGlmIChwYXJzZXJWYWx1ZS5pZCA9PSBD
U1NWYWx1ZUJvcmRlckJveCB8fCBwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gK
LSAgICAgICAgfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94IHx8IHBhcnNl
clZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0VGV4dCkgewotICAgICAgICBjc3NWYWx1ZSA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBhcnNlclZhbHVl
LmlkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBDU1NQYXJzZXI6OnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZp
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQudXNlTGVnYWN5QmFja2dyb3VuZFNp
emVTaG9ydGhhbmRCZWhhdmlvcjsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAgICAgICAgICAg
IHZhbHVlcy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbikpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24KLSAgICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncwotICAgICAg
ICAgICAgJiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQotICAgICAgICAgICAg
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAi
cmVwZWF0KCIpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbigqdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCkpOwot
ICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6
Y3JlYXRlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bikpKSk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYWRk
UHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlcyksIGltcG9ydGFudCk7Ci0gICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9sbFNuYXBQb3NpdGlvbnMo
UmVmUHRyPENTU1ZhbHVlPiYgY3NzVmFsdWVYLCBSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZVkp
Ci17Ci0gICAgY3NzVmFsdWVYID0gcGFyc2VQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKLSAgICBp
ZiAoIWNzc1ZhbHVlWCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgYWNj
ZXB0IG9kZC1sZW5ndGggbGlzdHMgb2YgcG9zaXRpb25zIChtdXN0IGFsd2F5cyBoYXZlIGFuIFgg
YW5kIGEgWSk6Ci0gICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjc3NWYWx1ZVkgPSBwYXJzZVBvc2l0aW9uWSgqbV92YWx1ZUxpc3QpOwot
ICAgIGlmICghY3NzVmFsdWVZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBhdXRvIHBvc2l0aW9u
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGlmIChtX3ZhbHVl
TGlzdC0+c2l6ZSgpICE9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY3NzVmFsdWVYLCBjc3NWYWx1ZVk7Ci0gICAgaWYgKCFwYXJzZVNjcm9sbFNuYXBQ
b3NpdGlvbnMoY3NzVmFsdWVYLCBjc3NWYWx1ZVkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBwb3NpdGlvbi0+YXBwZW5kKGNzc1ZhbHVlWC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBw
b3NpdGlvbi0+YXBwZW5kKGNzc1ZhbHVlWS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUocG9zaXRpb24pLCBpbXBvcnRhbnQpOwotICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVNjcm9sbFNuYXBDb29yZGluYXRlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKLXsKLSAgICBhdXRvIHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlWCwgY3NzVmFsdWVZOwotICAgICAgICBpZiAoIXBhcnNl
U2Nyb2xsU25hcFBvc2l0aW9ucyhjc3NWYWx1ZVgsIGNzc1ZhbHVlWSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3NzVmFsdWVYLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFz
ZU5vbk51bGwoKSk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAg
aWYgKHBvc2l0aW9ucy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBX
VEZNb3ZlKHBvc2l0aW9ucyksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotY29uc3QgaW50IGNNYXhGaWxsUHJv
cGVydGllcyA9IDk7Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByb3BlcnRpZXMsIGludCBudW1Q
cm9wZXJ0aWVzLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA8
PSBjTWF4RmlsbFByb3BlcnRpZXMpOwotICAgIGlmIChudW1Qcm9wZXJ0aWVzID4gY01heEZpbGxQ
cm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBz
Y29wZSh0aGlzLCBwcm9wSWQpOwotCi0gICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtjTWF4RmlsbFBy
b3BlcnRpZXNdID0geyBmYWxzZSB9OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW2NNYXhG
aWxsUHJvcGVydGllc107Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjbGlwVmFsdWU7Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiBwb3NpdGlvbllWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlcGVh
dFlWYWx1ZTsKLSAgICBib29sIGZvdW5kQ2xpcCA9IGZhbHNlOwotICAgIGludCBpOwotICAgIGJv
b2wgZm91bmRQb3NpdGlvbkNTU1Byb3BlcnR5ID0gZmFsc2U7Ci0KLSAgICBhdXRvJiBjc3NWYWx1
ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIHdoaWxlIChtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUgPSAq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09
IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50VmFsdWUuaVZhbHVlID09ICcsJykg
ewotICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQuICBGaWxsIGluIGFsbCByZW1haW5pbmcg
dmFsdWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yICYmIHBhcnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgICAgICAgICAvLyBD
b2xvciBpcyBub3QgYWxsb3dlZCBleGNlcHQgYXMgdGhlIGxhc3QgaXRlbSBpbiBhIGxpc3QgZm9y
IGJhY2tncm91bmRzLgotICAgICAgICAgICAgICAgICAgICAvLyBSZWplY3QgdGhlIGVudGlyZSBw
cm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2
YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb24gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1
ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVy
dGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4pICYmICFwYXJzZWRQcm9wZXJ0
eVtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmlnaW4g
d2Fzbid0IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2l6ZUNT
U1Byb3BlcnR5RXhwZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzRm9yd2FyZFNsYXNoT3Bl
cmF0b3IoY3VycmVudFZhbHVlKSAmJiBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkpIHsKLSAgICAg
ICAgICAgIHNpemVDU1NQcm9wZXJ0eUV4cGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3VuZFBvc2l0aW9uQ1NTUHJv
cGVydHkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotCi0gICAgICAgICAg
ICBpZiAoc2l6ZUNTU1Byb3BlcnR5RXhwZWN0ZWQgJiYgKHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kU2l6ZSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFz
aXplQ1NTUHJvcGVydHlFeHBlY3RlZCAmJiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRTaXplIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6
ZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghcGFyc2Vk
UHJvcGVydHlbaV0pIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDE7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwyOwotICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5SUQgcHJvcElkMSwgcHJvcElkMjsKLSAgICAgICAgICAgICAgICBDU1NQYXJzZXJW
YWx1ZSYgcGFyc2VyVmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChwYXJzZUZpbGxQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBwcm9wSWQxLCBwcm9w
SWQyLCB2YWwxLCB2YWwyKSkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtp
XSA9IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVl
c1tpXSwgdmFsMS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwgcHJvcGVydGll
c1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgdmFsMi5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNr
UmVwZWF0KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1
ZSwgdmFsMi5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8IHByb3BlcnRpZXNbaV0g
PT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXBhcnNlIHRoZSB2YWx1ZSBhcyBhIGNsaXAsIGFuZCBzZWUgaWYgd2Ugc3VjY2VlZC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKHBhcnNlclZh
bHVlLCB2YWwxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xp
cFZhbHVlLCB2YWwxLnJlbGVhc2VOb25OdWxsKCkpOyAvLyBUaGUgcHJvcGVydHkgcGFyc2VkIHN1
Y2Nlc3NmdWxseS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRl
SW1wbGljaXRJbml0aWFsVmFsdWUoKSk7IC8vIFNvbWUgdmFsdWUgd2FzIHVzZWQgZm9yIG9yaWdp
biB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY2xpcC4gSnVzdCByZXNldCBjbGlwIGluc3RlYWQu
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRp
ZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5V2Via2l0TWFza0NsaXApCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZENs
aXAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRQb3NpdGlv
bkNTU1Byb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0
Y2gsIHRoaXMgaXMgYW4KLSAgICAgICAgLy8gaW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUg
dG8gaWdub3JlIGl0Ci0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91
bmQuCi0gICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAv
LyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVl
LgotICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7Ci0gICAgICAgICAgICBhZGRGaWxs
VmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUo
KSk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uKQotICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFs
dWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAgICAgaWYgKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNb
aV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KQotICAgICAgICAgICAgICAgIGFkZEZp
bGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza09y
aWdpbikgewotICAgICAgICAgICAgICAgIC8vIElmIGJhY2tncm91bmQtb3JpZ2luIHdhc24ndCBw
cmVzZW50LCB0aGVuIHJlc2V0IGJhY2tncm91bmQtY2xpcCBhbHNvLgotICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVy
dGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikgewotICAgICAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBXVEZNb3ZlKHZhbHVl
c1tpXSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92
ZShwb3NpdGlvbllWYWx1ZSkgc2luY2Ugd2Ugb25seSBzZWUgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb24gb25jZQotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb25ZLCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvblgsIFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIC8vIGl0
J3MgT0sgdG8gY2FsbCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVlKSBzaW5jZSB3ZSBvbmx5IHNlZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiBvbmNlCi0gICAgICAgICAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIFdURk1vdmUocG9zaXRpb25ZVmFsdWUp
LCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUmVwZWF0KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShyZXBlYXRZVmFsdWUpIHNpbmNl
IHdlIG9ubHkgc2VlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIG9uY2UKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIFdURk1vdmUocmVw
ZWF0WVZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkgewotICAgICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgV1RGTW92ZSh2YWx1ZXNbaV0pLCBpbXBv
cnRhbnQpOwotICAgICAgICAgICAgLy8gaXQncyBPSyB0byBjYWxsIFdURk1vdmUocmVwZWF0WVZh
bHVlKSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiBvbmNl
Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZLCBX
VEZNb3ZlKHJlcGVhdFlWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXApICYmICFmb3VuZENsaXApCi0gICAgICAgICAg
ICAvLyBWYWx1ZSBpcyBhbHJlYWR5IHNldCB3aGlsZSB1cGRhdGluZyBvcmlnaW4KLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemUgJiYgIXBhcnNlZFByb3BlcnR5W2ldICYmIHVzZUxlZ2FjeUJhY2tn
cm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBXVEZNb3Zl
KHZhbHVlc1tpXSksIGltcG9ydGFudCk7Ci0KLSAgICAgICAgLy8gQWRkIGluIGNsaXAgdmFsdWVz
IHdoZW4gd2UgaGl0IHRoZSBjb3JyZXNwb25kaW5nIG9yaWdpbiBwcm9wZXJ0eS4KLSAgICAgICAg
aWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luICYmICFmb3Vu
ZENsaXApCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlw
LCBXVEZNb3ZlKGNsaXBWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIGVsc2UgaWYgKHByb3Bl
cnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luICYmICFmb3VuZENsaXApCi0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLCBXVEZNb3Zl
KGNsaXBWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFs
LCBSZWY8Q1NTVmFsdWU+JiYgcnZhbCkKLXsKLSAgICBpZiAoIWx2YWwpIHsKLSAgICAgICAgbHZh
bCA9IFdURk1vdmUocnZhbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXM8
Q1NTVmFsdWVMaXN0PigqbHZhbCkpIHsKLSAgICAgICAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
bHZhbCkuYXBwZW5kKFdURk1vdmUocnZhbCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAg
IGxpc3QtPmFwcGVuZChsdmFsLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIGxpc3QtPmFwcGVuZChX
VEZNb3ZlKHJ2YWwpKTsKLSAgICBsdmFsID0gV1RGTW92ZShsaXN0KTsKLX0KLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJvcElkID09IENTU1Byb3BlcnR5QW5pbWF0aW9u
IHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbik7Ci0KLSAgICBjb25zdCB1
bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gODsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRo
YW5kJiBzaG9ydGhhbmQgPSBhbmltYXRpb25TaG9ydGhhbmRGb3JQYXJzaW5nKHByb3BJZCk7Ci0K
LSAgICAvLyBUaGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGluIHRoZSBzaG9ydGhhbmQgc2hvdWxkIGJl
IHRoZSBzYW1lCi0gICAgLy8gbGVuZ3RoIGFzIHRoZSBsaXN0IHdpdGggYW5pbWF0aW9uIG5hbWUg
aW4gbGFzdCBwb3NpdGlvbiwgZXZlbiB0aG91Z2ggdGhleSBhcmUKLSAgICAvLyBpbiBhIGRpZmZl
cmVudCBvcmRlci4KLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhhbmQubGVuZ3Ro
KCkpOwotICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IGFuaW1hdGlvblNob3J0aGFuZCgpLmxl
bmd0aCgpKTsKLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSB3ZWJraXRBbmltYXRpb25TaG9y
dGhhbmQoKS5sZW5ndGgoKSk7Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9w
SWQpOwotCi0gICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2Ug
fTsKLSAgICBBbmltYXRpb25QYXJzZUNvbnRleHQgY29udGV4dDsKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlc1tudW1Qcm9wZXJ0aWVzXTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgdW5zaWduZWQgaTsKLSAgICB3aGlsZSAobV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5p
dGlhbCB2YWx1ZS4KLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9u
VmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9y
IChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwot
ICAgICAgICAgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHNob3J0aGFuZC5wcm9w
ZXJ0aWVzKClbaV0sIHZhbCwgY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
UHJvcGVydHlbaV0gPSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEFuaW1h
dGlvblZhbHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHZhbHVlcyB0byBwcm9jZXNzIGJ1dCAnbm9uZScgb3Ig
J2FsbCcgd2VyZSBhbHJlYWR5IGRlZmluZWQgYXMgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSwgdGhl
IGRlY2xhcmF0aW9uIGJlY29tZXMgaW52YWxpZC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC5h
bmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxvd2VkKCkgJiYgY29udGV4dC5oYXNDb21taXR0ZWRG
aXJzdEFuaW1hdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhp
cyBpcyBhbgotICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25v
cmUgaXQKLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBp
bml0aWFsIHZhbHVlLgotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsK
LSAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlv
blZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVl
KCkpOwotICAgIH0KLQotICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZv
dW5kLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2
YXJpYW50IGZvcm0gYXMgd2VsbCwKLSAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFu
ZCBjbGVhcnMgYWxsIGV4aXN0aW5nIHByZWZpeGVkIGFuZAotICAgIC8vIHVucHJlZml4ZWQgdmFs
dWVzLgotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIGFk
ZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwg
V1RGTW92ZSh2YWx1ZXNbaV0pLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ1NTUGFyc2VyOjphZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBi
b29sIGltcGxpY2l0KQotewotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsdWUuY29weVJlZigp
LCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLQotICAgIENTU1Byb3BlcnR5SUQgcHJlZml4aW5nVmFy
aWFudCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKHByb3BJZCk7Ci0gICAgaWYgKHBy
ZWZpeGluZ1ZhcmlhbnQgPT0gcHJvcElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9j
dXJyZW50U2hvcnRoYW5kKSB7Ci0gICAgICAgIC8vIFdlIGNhbid0IHVzZSBTaG9ydGhhbmRTY29w
ZSBoZXJlIGFzIHdlIGNhbiBhbHJlYWR5IGJlIGluc2lkZSBvbmUgKGUuZyB3ZSBhcmUgcGFyc2lu
ZyBDU1NUcmFuc2l0aW9uKS4KLSAgICAgICAgbV9jdXJyZW50U2hvcnRoYW5kID0gcHJlZml4aW5n
VmFyaWFudEZvclByb3BlcnR5SWQobV9jdXJyZW50U2hvcnRoYW5kKTsKLSAgICAgICAgYWRkUHJv
cGVydHkocHJlZml4aW5nVmFyaWFudCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgaW1wbGlj
aXQpOwotICAgICAgICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJv
cGVydHlJZChtX2N1cnJlbnRTaG9ydGhhbmQpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRQcm9w
ZXJ0eShwcmVmaXhpbmdWYXJpYW50LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCBpbXBsaWNp
dCk7Ci19Ci0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29s
dW1uV2lkdGgoKQotewotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKLSAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9w
ZXJ0eSBpbiBzdHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lz
ZSB3aGVuIHVzZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgaWYg
KGlkICE9IENTU1ZhbHVlQXV0byAmJiAhKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbikpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
cGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gcGFyc2VkVmFsdWU7Ci19
Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbHVtbkNvdW50
KCkKLXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7Ci0KLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYmICF2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJr
c01vZGUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWUg
PSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gcGFyc2VkVmFsdWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNvbHVtbnNTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiBjb2x1bW5XaWR0aDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbHVtbkNv
dW50OwotICAgIGJvb2wgaGFzUGVuZGluZ0V4cGxpY2l0QXV0byA9IGZhbHNlOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBwcm9wZXJ0aWVzUGFyc2VkID0gMDsgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgKytwcm9wZXJ0aWVzUGFyc2VkKSB7Ci0gICAgICAgIGlm
IChwcm9wZXJ0aWVzUGFyc2VkID49IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRv
byBtYW55IHZhbHVlcyBmb3IgdGhpcyBzaG9ydGhhbmQuIEludmFsaWQgZGVjbGFyYXRpb24uCi0g
ICAgICAgIGlmICghcHJvcGVydGllc1BhcnNlZCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRv
KSB7Ci0gICAgICAgICAgICAvLyAnYXV0bycgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYW55IG9mIHRo
ZSB0d28gbG9uZ2hhbmRzLCBhbmQgYXQgdGhpcyBwb2ludAotICAgICAgICAgICAgLy8gd2UgZG9u
J3Qga25vdyB3aGljaCBvbmUocykgaXQgaXMgbWVhbnQgZm9yLiBXZSBuZWVkIHRvIHNlZSBpZiB0
aGVyZSBhcmUgb3RoZXIgdmFsdWVzIGZpcnN0LgotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgICAgIGhhc1BlbmRpbmdFeHBsaWNpdEF1dG8gPSB0cnVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFjb2x1bW5XaWR0aCkgewotICAgICAgICAgICAg
ICAgIGlmICgoY29sdW1uV2lkdGggPSBwYXJzZUNvbHVtbldpZHRoKCkpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29sdW1u
Q291bnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNvbHVtbkNvdW50ID0gcGFyc2VDb2x1bW5D
b3VudCgpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMg
aXMgYW4gaW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0LgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55IHVuYXNz
aWduZWQgcHJvcGVydHkgYXQgdGhpcyBwb2ludCB3aWxsIGJlY29tZSBpbXBsaWNpdCAnYXV0bycu
Ci0gICAgaWYgKGNvbHVtbldpZHRoKQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNv
bHVtbldpZHRoLCBXVEZNb3ZlKGNvbHVtbldpZHRoKSwgaW1wb3J0YW50KTsKLSAgICBlbHNlIHsK
LSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0
YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0QXV0byAvKiBpbXBsaWNpdCAqLyk7Ci0gICAgICAgIGhh
c1BlbmRpbmdFeHBsaWNpdEF1dG8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoY29sdW1uQ291
bnQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIFdURk1vdmUo
Y29sdW1uQ291bnQpLCBpbXBvcnRhbnQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDb2x1bW5Db3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxp
Y2l0QXV0byAvKiBpbXBsaWNpdCAqLyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtUHJvcGVydGllcyA9IDQ7
Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5k
Rm9yUHJvcGVydHkocHJvcElkKTsKLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhh
bmQubGVuZ3RoKCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsK
LQotICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07Ci0g
ICAgQW5pbWF0aW9uUGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZXNbbnVtUHJvcGVydGllc107Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIHVuc2lnbmVkIGk7Ci0gICAgd2hpbGUgKG1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIHZhbC0+aVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgLy8gV2UgaGl0
IHRoZSBlbmQuIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5pdGlhbCB2
YWx1ZS4KLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
YXJzZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUo
dmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpID0g
MDsgIWZvdW5kICYmIGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
cGFyc2VkUHJvcGVydHlbaV0pIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bDsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShzaG9ydGhhbmQu
cHJvcGVydGllcygpW2ldLCB2YWwsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBhZGRB
bmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIHZhbC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbW9yZSB2YWx1ZXMgdG8g
cHJvY2VzcyBidXQgJ25vbmUnIG9yICdhbGwnIHdlcmUgYWxyZWFkeSBkZWZpbmVkIGFzIHRoZSBh
bmltYXRpb24gcHJvcGVydHksIHRoZSBkZWNsYXJhdGlvbiBiZWNvbWVzIGludmFsaWQuCi0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQo
KSAmJiBjb250ZXh0Lmhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgotICAg
ICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAgICAg
ICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVl
LgotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgaWYg
KCFwYXJzZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVl
c1tpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgIH0K
LQotICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgotICAgIC8v
IEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYW50IGZvcm0g
YXMgd2VsbCwKLSAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFuZCBjbGVhcnMgYWxs
IGV4aXN0aW5nIHByZWZpeGVkIGFuZAotICAgIC8vIHVucHJlZml4ZWQgdmFsdWVzLgotICAgIGZv
ciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIGFkZFByb3BlcnR5V2l0
aFByZWZpeGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgV1RGTW92ZSh2YWx1
ZXNbaV0pLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBXZSB0
cnkgdG8gbWF0Y2ggYXMgbWFueSBwcm9wZXJ0aWVzIGFzIHBvc3NpYmxlCi0gICAgLy8gV2Ugc2V0
IHVwIGFuIGFycmF5IG9mIGJvb2xlYW5zIHRvIG1hcmsgd2hpY2ggcHJvcGVydHkgaGFzIGJlZW4g
Zm91bmQsCi0gICAgLy8gYW5kIHdlIHRyeSB0byBzZWFyY2ggZm9yIHByb3BlcnRpZXMgdW50aWwg
aXQgbWFrZXMgbm8gbG9uZ2VyIGFueSBzZW5zZS4KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0
aGlzLCBwcm9wSWQpOwotCi0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIHBy
b3BlcnRpZXNQYXJzZWQgPSAwOwotICAgIGJvb2wgcHJvcGVydHlGb3VuZFs2XT0geyBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH07IC8vIDYgaXMgZW5vdWdoIHNpemUu
Ci0KLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBmb3VuZCA9
IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BJbmRleCA9IDA7ICFmb3VuZCAmJiBw
cm9wSW5kZXggPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsrcHJvcEluZGV4KSB7Ci0gICAgICAgICAg
ICBpZiAoIXByb3BlcnR5Rm91bmRbcHJvcEluZGV4XSAmJiBwYXJzZVZhbHVlKHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbcHJvcEluZGV4XSwgaW1wb3J0YW50KSkgewotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUZvdW5kW3Byb3BJbmRleF0gPSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXNQYXJzZWQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBh
bgotICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQK
LSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAocHJvcGVydGllc1BhcnNlZCA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMg
d2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhp
cywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCog
cHJvcGVydGllc0ZvckluaXRpYWxpemF0aW9uID0gc2hvcnRoYW5kLnByb3BlcnRpZXNGb3JJbml0
aWFsaXphdGlvbigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmQubGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBpZiAocHJvcGVydHlGb3VuZFtpXSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzRm9ySW5pdGlhbGl6YXRpb24pIHsK
LSAgICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIGluaXRQcm9wZXJ0aWVz
ID0gcHJvcGVydGllc0ZvckluaXRpYWxpemF0aW9uW2ldOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBwcm9wSW5kZXggPSAwOyBwcm9wSW5kZXggPCBpbml0UHJvcGVydGllcy5sZW5ndGgoKTsg
Kytwcm9wSW5kZXgpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkoaW5pdFByb3BlcnRpZXMu
cHJvcGVydGllcygpW3Byb3BJbmRleF0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBjb25zdCBDU1NQcm9wZXJ0eUlEICpwcm9wZXJ0aWVzLCAgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgLyogRnJvbSB0aGUgQ1NTIDIgc3BlY3MsIDguMwotICAgICAqIElmIHRoZXJlIGlzIG9ubHkg
b25lIHZhbHVlLCBpdCBhcHBsaWVzIHRvIGFsbCBzaWRlcy4gSWYgdGhlcmUgYXJlIHR3byB2YWx1
ZXMsIHRoZSB0b3AgYW5kCi0gICAgICogYm90dG9tIG1hcmdpbnMgYXJlIHNldCB0byB0aGUgZmly
c3QgdmFsdWUgYW5kIHRoZSByaWdodCBhbmQgbGVmdCBtYXJnaW5zIGFyZSBzZXQgdG8gdGhlIHNl
Y29uZC4KLSAgICAgKiBJZiB0aGVyZSBhcmUgdGhyZWUgdmFsdWVzLCB0aGUgdG9wIGlzIHNldCB0
byB0aGUgZmlyc3QgdmFsdWUsIHRoZSBsZWZ0IGFuZCByaWdodCBhcmUgc2V0IHRvIHRoZQotICAg
ICAqIHNlY29uZCwgYW5kIHRoZSBib3R0b20gaXMgc2V0IHRvIHRoZSB0aGlyZC4gSWYgdGhlcmUg
YXJlIGZvdXIgdmFsdWVzLCB0aGV5IGFwcGx5IHRvIHRoZSB0b3AsCi0gICAgICogcmlnaHQsIGJv
dHRvbSwgYW5kIGxlZnQsIHJlc3BlY3RpdmVseS4KLSAgICAgKi8KLQotICAgIHVuc2lnbmVkIG51
bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3QtPnNpemUoKTsKLQotICAgIFNob3J0
aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0KLSAgICAvLyB0aGUgb3JkZXIgaXMgdG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0Ci0gICAgc3dpdGNoIChudW0pIHsKLSAgICAgICAgY2FzZSAx
OiB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSog
dmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBJ
bXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwotICAg
ICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1sxXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsK
LSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbM10sIHZhbHVlLCBpbXBvcnRhbnQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAyOiB7Ci0gICAg
ICAgICAgICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFy
c2VWYWx1ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGll
c1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIElt
cGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5z
aXplKCkgLSAyXS52YWx1ZSgpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1sz
XSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIDM6IHsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBd
LCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMV0sIGltcG9ydGFudCkgfHwg
IXBhcnNlVmFsdWUocHJvcGVydGllc1syXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3Bl
cnRpZXNbbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDJdLnZhbHVlKCk7Ci0gICAgICAgICAg
ICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwot
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDQ6IHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJz
ZVZhbHVlKHByb3BlcnRpZXNbMV0sIGltcG9ydGFudCkgfHwKLSAgICAgICAgICAgICAgICAhcGFy
c2VWYWx1ZShwcm9wZXJ0aWVzWzJdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbM10sIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIGF1dG8gfCA8aWRlbnRpZmllcj4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBhZ2UoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChwcm9wSWQgPT0g
Q1NTUHJvcGVydHlQYWdlKTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSAwICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmlt
aXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyA8bGVuZ3RoPnsxLDJ9IHwgYXV0
byB8IFsgPHBhZ2Utc2l6ZT4gfHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0gXQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17
Ci0gICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVNpemUpOwotCi0gICAgaWYgKG1fdmFs
dWVMaXN0LT5zaXplKCkgPiAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWVzID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotCi0gICAgLy8gRmlyc3QgcGFyYW1ldGVy
LgotICAgIFNpemVQYXJhbWV0ZXJUeXBlIHBhcmFtVHlwZSA9IHBhcnNlU2l6ZVBhcmFtZXRlcihw
YXJzZWRWYWx1ZXMsICp2YWx1ZSwgTm9uZSk7Ci0gICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnku
Ci0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICBwYXJhbVR5cGUgPSBwYXJzZVNpemVQYXJhbWV0ZXIocGFyc2VkVmFsdWVzLCAqdmFsdWUs
IHBhcmFtVHlwZSk7Ci0gICAgICAgIGlmIChwYXJhbVR5cGUgPT0gTm9uZSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUo
cGFyc2VkVmFsdWVzKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ1NTUGFy
c2VyOjpTaXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NW
YWx1ZUxpc3QmIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBTaXplUGFyYW1l
dGVyVHlwZSBwcmV2UGFyYW1UeXBlKQotewotICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKLSAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSkgewot
ICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCkpOwotICAgICAgICAgICAgcmV0dXJuIEF1
dG87Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUxh
bmRzY2FwZToKLSAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgIGlmIChwcmV2UGFy
YW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBQYWdlU2l6ZSkgewotICAgICAgICAg
ICAgcGFyc2VkVmFsdWVzLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCkpOwotICAgICAgICAgICAgcmV0dXJuIE9yaWVudGF0aW9u
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb25lOwotICAgIGNhc2UgQ1NTVmFsdWVBMzoK
LSAgICBjYXNlIENTU1ZhbHVlQTQ6Ci0gICAgY2FzZSBDU1NWYWx1ZUE1OgotICAgIGNhc2UgQ1NT
VmFsdWVCNDoKLSAgICBjYXNlIENTU1ZhbHVlQjU6Ci0gICAgY2FzZSBDU1NWYWx1ZUxlZGdlcjoK
LSAgICBjYXNlIENTU1ZhbHVlTGVnYWw6Ci0gICAgY2FzZSBDU1NWYWx1ZUxldHRlcjoKLSAgICAg
ICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IE9yaWVudGF0
aW9uKSB7Ci0gICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gUGFnZSBTaXplIHRoZW4gT3JpZW50
YXRpb24gb3JkZXIgYnkgcHJlcGVuZGluZy4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHNw
ZWNpZmllZCBieSB0aGUgQ1NTMyBQYWdlZCBNZWRpYSBzcGVjaWZpY2F0aW9uLCBidXQgZm9yIHNp
bXBsZXIgcHJvY2Vzc2luZyBsYXRlciAoU3R5bGVSZXNvbHZlcjo6YXBwbHlQYWdlU2l6ZVByb3Bl
cnR5KS4KLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5wcmVwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gUGFnZVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZUludmFsaWQ6IHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVX
aXRoQ2FsY3VsYXRpb24odmFsdWUpOwotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUgPT0gTm9u
ZSB8fCBwcmV2UGFyYW1UeXBlID09IExlbmd0aCkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVl
cy5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7Ci0gICAgICAgICAgICByZXR1cm4gTGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBOb25lOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTm9uZTsKLSAgICB9
Ci19Ci0KLS8vIFsgPHN0cmluZz4gPHN0cmluZz4gXSsgfCBpbmhlcml0IHwgbm9uZQotLy8gaW5o
ZXJpdCBhbmQgbm9uZSBhcmUgaGFuZGxlZCBpbiBwYXJzZVZhbHVlLgotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlUXVvdGVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAg
ICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkg
ewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLSAgICBpZiAodmFs
dWVzLT5sZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFs
dWVzKSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQWx0KENTU1Byb3BlcnR5SUQgcHJvcElELCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSYgY3VycmVudFZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLQotICAgIGlmIChjdXJyZW50VmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcGFyc2Vk
VmFsdWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShjdXJyZW50VmFsdWUpOwotICAgIGVs
c2UgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewot
ICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBjdXJyZW50VmFsdWUuZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7Ci0gICAgICAgIGlmICghYXJncykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGN1cnJlbnRWYWx1
ZS5mdW5jdGlvbi0+bmFtZSwgImF0dHIoIikpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBh
cnNlQXR0cigqYXJncyk7Ci0gICAgfQotICAgIAotICAgIGlmIChwYXJzZWRWYWx1ZSkgewotICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSUQsIHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGlt
cG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihib29sIGltcG9ydGFudCwgQ1NTVmFsdWVJRCBp
ZCkKLXsKLSAgICBpZiAobV9jdXN0b21Qcm9wZXJ0eU5hbWUuaXNFbXB0eSgpIHx8ICFtX3ZhbHVl
TGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8mIGNzc1ZhbHVlUG9v
bCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KQotICAgICAgICB2YWx1ZSA9IGNzc1Zh
bHVlUG9vbC5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKGlkID09IENTU1Zh
bHVlSW5pdGlhbCkKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJ
bml0aWFsVmFsdWUoKTsKLSAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVVuc2V0KQotICAgICAg
ICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVVbnNldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAo
aWQgPT0gQ1NTVmFsdWVSZXZlcnQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0
ZVJldmVydFZhbHVlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KCptX3ZhbHVlTGlzdCk7Ci0gICAg
ICAgIGlmIChtX3ZhbHVlTGlzdC0+Y29udGFpbnNWYXJpYWJsZXMoKSkKLSAgICAgICAgICAgIHZh
bHVlID0gQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodmFsdWVMaXN0
KSwgQ1NTUHJvcGVydHlDdXN0b20pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9
IFdURk1vdmUodmFsdWVMaXN0KTsKLSAgICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUN1c3RvbSwgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKG1fY3VzdG9tUHJvcGVydHlO
YW1lLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIFsgPHN0cmluZz4gfCA8dXJpPiB8IDxjb3VudGVyPiB8IGF0dHIo
WCkgfCBvcGVuLXF1b3RlIHwgY2xvc2UtcXVvdGUgfCBuby1vcGVuLXF1b3RlIHwgbm8tY2xvc2Ut
cXVvdGUgXSsgfCBpbmhlcml0Ci0vLyBpbiBDU1MgMi4xIHRoaXMgZ290IHNvbWV3aGF0IHJlZHVj
ZWQ6Ci0vLyBbIDxzdHJpbmc+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUgfCBjbG9zZS1xdW90ZSB8
IG5vLW9wZW4tcXVvdGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNvbnRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQot
ewotICAgIGF1dG8gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OwotCi0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICAgICAg
aWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAg
ICAgICAvLyB1cmwKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3Jl
YXRlKGNvbXBsZXRlVVJMKHZhbHVlLT5zdHJpbmcpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIGF0
dHIoWCkgfCBjb3VudGVyKFggWyxZXSkgfCBjb3VudGVycyhYLCBZLCBbLFpdKSB8IC13ZWJraXQt
Z3JhZGllbnQoLi4uKQotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgICAgICAgICAgaWYgKCFhcmdzKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJhdHRyKCIpKSB7Ci0gICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUF0dHIoKmFyZ3MpOwotICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUt
PmZ1bmN0aW9uLT5uYW1lLCAiY291bnRlcigiKSkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gcGFyc2VDb3VudGVyQ29udGVudCgqYXJncywgZmFsc2UpOwotICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUt
PmZ1bmN0aW9uLT5uYW1lLCAiY291bnRlcnMoIikpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IHBhcnNlQ291bnRlckNvbnRlbnQoKmFyZ3MsIHRydWUpOwotICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUoKnZhbHVlKSkgewot
ICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VJbWFnZVNldCgpOwotICAgICAgICAg
ICAgICAgIGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0
LCBwYXJzZWRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0g
ICAgICAgICAgICAvLyBvcGVuLXF1b3RlCi0gICAgICAgICAgICAvLyBjbG9zZS1xdW90ZQotICAg
ICAgICAgICAgLy8gbm8tb3Blbi1xdW90ZQotICAgICAgICAgICAgLy8gbm8tY2xvc2UtcXVvdGUK
LSAgICAgICAgICAgIC8vIGluaGVyaXQKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUg
bm90IHlldCBpbXBsZW1lbnRlZCAoaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjUwMykuCi0gICAgICAgICAgICAvLyBub25lCi0gICAgICAgICAgICAvLyBub3JtYWwKLSAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
T3BlblF1b3RlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Tm9DbG9zZVF1b3RlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHZh
bHVlcy0+YXBwZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQpOwot
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIGlmIChh
cmdzLnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1BhcnNl
clZhbHVlJiBhcmd1bWVudCA9ICphcmdzLmN1cnJlbnQoKTsKLQotICAgIGlmIChhcmd1bWVudC51
bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQVNTRVJUKGFyZ3VtZW50LnN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICAvLyBD
U1MgYWxsb3dzIGlkZW50aWZpZXJzIHdpdGggIi0iIGF0IHRoZSBzdGFydCwgbGlrZSAiLXdlYmtp
dC1tYXNrLWltYWdlIi4KLSAgICAvLyBCdXQgSFRNTCBhdHRyaWJ1dGUgbmFtZXMgY2FuJ3QgaGF2
ZSB0aG9zZSBjaGFyYWN0ZXJzLCBhbmQgd2Ugc2hvdWxkIG5vdAotICAgIC8vIGV2ZW4gcGFyc2Ug
dGhlbSBpbnNpZGUgYXR0cigpLgotICAgIGlmIChhcmd1bWVudC5zdHJpbmdbMF0gPT0gJy0nKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2NvbnRleHQuaXNIVE1MRG9jdW1l
bnQpCi0gICAgICAgIGFyZ3VtZW50LnN0cmluZy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxh
Y2UoKTsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBzb21lIHNtYWxsIGJlbmVmaXQgdG8gY3Jl
YXRpbmcgYW4gQXRvbWljU3RyaW5nIGhlcmUgaW5zdGVhZCBvZiBhIFN0cmluZz8KLSAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShTdHJpbmcoYXJndW1lbnQu
c3RyaW5nKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKTsKLX0KLQotUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBD
U1NWYWx1ZUlEIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09
IENTU1ZhbHVlV2Via2l0VGV4dCB8fCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQg
PT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yCi0gICAgICAgIHx8
IChpZCA+PSBDU1NWYWx1ZUdyZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgaW5RdWly
a3NNb2RlKCkpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoaWQpOwotICAgIHJldHVybiBwYXJzZUNvbG9yKCk7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlz
dCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlTGlzdC5jdXJyZW50
KCktPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodmFsdWVMaXN0LmN1cnJlbnQoKS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICB2YWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZUxpc3QuY3VycmVudCgpLT5zdHJpbmcpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzR2VuZXJhdGVkSW1hZ2VW
YWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSkpCi0gICAgICAgIHJldHVybiBwYXJzZUdlbmVyYXRl
ZEltYWdlKHZhbHVlTGlzdCwgdmFsdWUpOwotICAgIAotICAgIGlmIChpc0ltYWdlU2V0RnVuY3Rp
b25WYWx1ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgdmFsdWUgPSBwYXJzZUlt
YWdlU2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlUG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0
KQotewotICAgIGludCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZUNl
bnRlcikgewotICAgICAgICBpbnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZVJpZ2h0KQotICAgICAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgZWxzZSBpZiAo
aWQgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgfQotICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKLSAg
ICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYg
dmFsdWVMaXN0KQotewotICAgIGludCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAg
IGlmIChpZCA9PSBDU1NWYWx1ZVRvcCB8fCBpZCA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZCA9PSBD
U1NWYWx1ZUNlbnRlcikgewotICAgICAgICBpbnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZUJvdHRvbSkKLSAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAg
IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICAgICAgcGVyY2VudCA9IDUw
OwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShw
ZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgIH0KLSAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJl
bnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNl
bnQgfCBGTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVu
dChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgdW5zaWduZWQmIGN1bXVsYXRpdmVGbGFn
cywgRmlsbFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQb3NpdGlvblBhcnNpbmdN
b2RlIHBhcnNpbmdNb2RlKQotewotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZUxpc3QuY3VycmVu
dCgpLT5pZDsKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlVG9w
IHx8IGlkID09IENTU1ZhbHVlUmlnaHQgfHwgaWQgPT0gQ1NTVmFsdWVCb3R0b20gfHwgaWQgPT0g
Q1NTVmFsdWVDZW50ZXIpIHsKLSAgICAgICAgaW50IHBlcmNlbnQgPSAwOwotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlUmlnaHQpIHsKLSAgICAgICAgICAg
IGlmIChjdW11bGF0aXZlRmxhZ3MgJiBYRmlsbFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFhGaWxsUG9zaXRp
b247Ci0gICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9zaXRpb247Ci0gICAgICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSaWdodCkKLSAgICAgICAgICAgICAgICBwZXJjZW50ID0g
MTAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlVG9wIHx8IGlk
ID09IENTU1ZhbHVlQm90dG9tKSB7Ci0gICAgICAgICAgICBpZiAoY3VtdWxhdGl2ZUZsYWdzICYg
WUZpbGxQb3NpdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGN1bXVsYXRpdmVGbGFncyB8PSBZRmlsbFBvc2l0aW9uOwotICAgICAgICAgICAgaW5kaXZp
ZHVhbEZsYWcgPSBZRmlsbFBvc2l0aW9uOwotICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
Qm90dG9tKQotICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaWQgPT0gQ1NTVmFsdWVDZW50ZXIpIHsKLSAgICAgICAgICAgIC8vIENlbnRlciBpcyBhbWJp
Z3VvdXMsIHNvIHdlJ3JlIG5vdCBzdXJlIHdoaWNoIHBvc2l0aW9uIHdlJ3ZlIGZvdW5kIHlldCwg
YW4geCBvciBhIHkuCi0gICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgICAgICBjdW11
bGF0aXZlRmxhZ3MgfD0gQW1iaWd1b3VzRmlsbFBvc2l0aW9uOwotICAgICAgICAgICAgaW5kaXZp
ZHVhbEZsYWcgPSBBbWJpZ3VvdXNGaWxsUG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocGFyc2luZ01vZGUgPT0gUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCkKLSAgICAgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7
Ci0KLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
cGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9Ci0gICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJy
ZW50KCkpOwotICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCB8IEZMZW5ndGgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY3Vt
dWxhdGl2ZUZsYWdzKSB7Ci0gICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9u
OwotICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlm
IChjdW11bGF0aXZlRmxhZ3MgJiAoWEZpbGxQb3NpdGlvbiB8IEFtYmlndW91c0ZpbGxQb3NpdGlv
bikpIHsKLSAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247Ci0gICAgICAg
IGluZGl2aWR1YWxGbGFnID0gWUZpbGxQb3NpdGlvbjsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7Ci19Ci0KLXN0YXRpYyBib29sIGlzVmFsdWVDb25mbGljdGluZ1dp
dGhDdXJyZW50RWRnZShpbnQgdmFsdWUxLCBpbnQgdmFsdWUyKQotewotICAgIGlmICgodmFsdWUx
ID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZTEgPT0gQ1NTVmFsdWVSaWdodCkgJiYgKHZhbHVlMiA9
PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWUyID09IENTU1ZhbHVlUmlnaHQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmICgodmFsdWUxID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlMSA9PSBD
U1NWYWx1ZUJvdHRvbSkgJiYgKHZhbHVlMiA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZTIgPT0gQ1NT
VmFsdWVCb3R0b20pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGJvb2wgaXNGaWxsUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHZhbHVlID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZSA9PSBDU1NWYWx1
ZVRvcCB8fCB2YWx1ZSA9PSBDU1NWYWx1ZUJvdHRvbSB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVJpZ2h0
IHx8IHZhbHVlID09IENTU1ZhbHVlQ2VudGVyOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2U0
VmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZh
bHVlMiwgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMikKLXsKLSAgICAvLyBbIGxlZnQgfCByaWdodCBdIFsg
PHBlcmNlbnRhZ2VdIHwgPGxlbmd0aD4gXSAmJiBbIHRvcCB8IGJvdHRvbSBdIFsgPHBlcmNlbnRh
Z2U+IHwgPGxlbmd0aD4gXQotICAgIC8vIEluIHRoZSBjYXNlIG9mIDQgdmFsdWVzIDxwb3NpdGlv
bj4gcmVxdWlyZXMgdGhlIHNlY29uZCB2YWx1ZSB0byBiZSBhIGxlbmd0aCBvciBhIHBlcmNlbnRh
Z2UuCi0gICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZChwYXJzZWRWYWx1ZTItPmdldFZhbHVl
SUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9
IDA7Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTNGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlv
bjsKLSAgICBhdXRvIHZhbHVlMyA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlz
dCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTNGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKTsK
LSAgICBpZiAoIXZhbHVlMykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFsdWVJRCBpZGVu
dDEgPSBwYXJzZWRWYWx1ZTEtPmdldFZhbHVlSUQoKTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MyA9
IHZhbHVlMy0+Z2V0VmFsdWVJRCgpOwotCi0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNlbnRl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRl
bnQzKSB8fCBpZGVudDMgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHZhbHVlcyBhcmUgbm90IGNvbmZsaWN0aW5nLCBl
LmcuIHRoZXkgYXJlIG5vdCBvbiB0aGUgc2FtZSBlZGdlLiBJdCBpcwotICAgIC8vIG5lZWRlZCBh
cyB0aGUgc2Vjb25kIGNhbGwgdG8gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQgd2FzIG9uIHB1
cnBvc2Ugbm90IGNoZWNraW5nIGl0LiBJbiB0aGUKLSAgICAvLyBjYXNlIG9mIHR3byB2YWx1ZXMg
dG9wIDIwcHggaXMgaW52YWxpZCBidXQgaW4gdGhlIGNhc2Ugb2YgNCB2YWx1ZXMgaXQgYmVjb21l
cyB2YWxpZC4KLSAgICBpZiAoaXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlkZW50
MSwgaWRlbnQzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFsdWVMaXN0Lm5leHQoKTsKLQot
ICAgIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTRGbGFn
ID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBhdXRvIHZhbHVlNCA9IHBhcnNlRmlsbFBvc2l0
aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTRGbGFnLCBSZXNv
bHZlVmFsdWVzQXNLZXl3b3JkKTsKLSAgICBpZiAoIXZhbHVlNCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gNHRoIHZhbHVlIG11c3QgYmUgYSBsZW5ndGggb3IgYSBwZXJjZW50YWdlLgotICAg
IGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWU0LT5nZXRWYWx1ZUlEKCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92
ZShwYXJzZWRWYWx1ZTEpLCBXVEZNb3ZlKHBhcnNlZFZhbHVlMikpOwotICAgIHZhbHVlMiA9IGNy
ZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcih2YWx1ZTMucmVsZWFzZU5vbk51bGwoKSwgdmFsdWU0LnJl
bGVhc2VOb25OdWxsKCkpOwotCi0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVu
dDEgPT0gQ1NTVmFsdWVCb3R0b20pCi0gICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7Ci0KLSAg
ICB2YWx1ZUxpc3QubmV4dCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmls
bFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMiwgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmIHBhcnNlZFZhbHVlMikKLXsKLSAgICB1bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOwot
ICAgIEZpbGxQb3NpdGlvbkZsYWcgdmFsdWUzRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0g
ICAgYXV0byB2YWx1ZTMgPSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1
bXVsYXRpdmVGbGFncywgdmFsdWUzRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7Ci0KLSAg
ICAvLyB2YWx1ZTMgaXMgbm90IGFuIGV4cGVjdGVkIHZhbHVlLCB3ZSByZXR1cm4uCi0gICAgaWYg
KCF2YWx1ZTMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhbHVlTGlzdC5uZXh0KCk7Ci0KLSAg
ICBib29sIHN3YXBOZWVkZWQgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNl
ZFZhbHVlMS0+Z2V0VmFsdWVJRCgpOwotICAgIENTU1ZhbHVlSUQgaWRlbnQyID0gcGFyc2VkVmFs
dWUyLT5nZXRWYWx1ZUlEKCk7Ci0gICAgQ1NTVmFsdWVJRCBpZGVudDMgPSB2YWx1ZTMtPmdldFZh
bHVlSUQoKTsKLQotICAgIENTU1ZhbHVlSUQgZmlyc3RQb3NpdGlvbktleXdvcmQ7Ci0gICAgQ1NT
VmFsdWVJRCBzZWNvbmRQb3NpdGlvbktleXdvcmQ7Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVD
ZW50ZXIpIHsKLSAgICAgICAgLy8gPHBvc2l0aW9uPiByZXF1aXJlcyB0aGUgZmlyc3QgJ2NlbnRl
cicgdG8gYmUgZm9sbG93ZWQgYnkgYSBrZXl3b3JkLgotICAgICAgICBpZiAoIWlzRmlsbFBvc2l0
aW9uS2V5d29yZChpZGVudDIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElm
ICdjZW50ZXInIGlzIHRoZSBmaXJzdCBrZXl3b3JkIHRoZW4gdGhlIGxhc3Qgb25lIG5lZWRzIHRv
IGJlIGEgbGVuZ3RoLgotICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50Mykp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZmlyc3RQb3NpdGlvbktleXdvcmQgPSBD
U1NWYWx1ZUxlZnQ7Ci0gICAgICAgIGlmIChpZGVudDIgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50
MiA9PSBDU1NWYWx1ZVJpZ2h0KSB7Ci0gICAgICAgICAgICBmaXJzdFBvc2l0aW9uS2V5d29yZCA9
IENTU1ZhbHVlVG9wOwotICAgICAgICAgICAgc3dhcE5lZWRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgdmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RQb3NpdGlvbktleXdvcmQpLCBjc3NWYWx1ZVBvb2wu
Y3JlYXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOwotICAg
ICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1
ZTIpLCB2YWx1ZTMuY29weVJlZigpKTsKLSAgICB9IGVsc2UgaWYgKGlkZW50MyA9PSBDU1NWYWx1
ZUNlbnRlcikgewotICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gQ1NT
VmFsdWVUb3A7Ci0gICAgICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09
IENTU1ZhbHVlQm90dG9tKSB7Ci0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBD
U1NWYWx1ZUxlZnQ7Ci0gICAgICAgICAgICBzd2FwTmVlZGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRW
YWx1ZTEpLCBwYXJzZWRWYWx1ZTIuY29weVJlZigpKTsKLSAgICAgICAgdmFsdWUyID0gY3JlYXRl
UHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc2Vj
b25kUG9zaXRpb25LZXl3b3JkKSwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDUwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0UG9zaXRpb25WYWx1ZTsKLSAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmRQb3NpdGlvblZhbHVlOwotCi0gICAgICAgIGlmIChp
c0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQyKSkgewotICAgICAgICAgICAgLy8gVG8gbWF0Y2gg
Q1NTIGdyYW1tYXIsIHdlIHNob3VsZCBvbmx5IGFjY2VwdDogWyBjZW50ZXIgfCBsZWZ0IHwgcmln
aHQgfCBib3R0b20gfCB0b3AgXSBbIGxlZnQgfCByaWdodCB8IHRvcCB8IGJvdHRvbSBdIFsgPHBl
cmNlbnRhZ2U+IHwgPGxlbmd0aD4gXS4KLSAgICAgICAgICAgIEFTU0VSVChpZGVudDIgIT0gQ1NT
VmFsdWVDZW50ZXIpOwotCi0gICAgICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlk
ZW50MykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBzZWNvbmRQb3Np
dGlvblZhbHVlID0gdmFsdWUzOwotICAgICAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0g
aWRlbnQyOwotICAgICAgICAgICAgZmlyc3RQb3NpdGlvblZhbHVlID0gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBQZXIgQ1NTLCB3ZSBzaG91bGQgb25seSBhY2NlcHQ6
IFsgcmlnaHQgfCBsZWZ0IHwgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3Ro
PiBdIFsgY2VudGVyIHwgbGVmdCB8IHJpZ2h0IHwgYm90dG9tIHwgdG9wIF0uCi0gICAgICAgICAg
ICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDMpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgZmlyc3RQb3NpdGlvblZhbHVlID0gcGFyc2VkVmFsdWUyLnB0
cigpOwotICAgICAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gaWRlbnQzOwotICAgICAg
ICAgICAgc2Vjb25kUG9zaXRpb25WYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgwLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGlzVmFsdWVDb25mbGljdGluZ1dpdGhDdXJyZW50RWRnZShpZGVudDEsIHNlY29uZFBvc2l0
aW9uS2V5d29yZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFsdWUxID0gY3Jl
YXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocGFyc2VkVmFsdWUxKSwgZmlyc3RQb3NpdGlv
blZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRp
dmVWYWx1ZVBhaXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3Np
dGlvbktleXdvcmQpLCBzZWNvbmRQb3NpdGlvblZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
IH0KLQotICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09IENTU1ZhbHVl
Qm90dG9tIHx8IHN3YXBOZWVkZWQpCi0gICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gKnZhbHVlMTsKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgc2Vjb25kID0gKnZhbHVlMjsKLSAgICBpZGVudDEgPSBmaXJz
dC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwotICAgIGlkZW50MiA9IHNl
Y29uZC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwotICAgIEFTU0VSVChp
ZGVudDEgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MSA9PSBDU1NWYWx1ZVJpZ2h0KTsKLSAgICBB
U1NFUlQoaWRlbnQyID09IENTU1ZhbHVlQm90dG9tIHx8IGlkZW50MiA9PSBDU1NWYWx1ZVRvcCk7
Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjppc1BvdGVudGlhbFBvc2l0aW9u
VmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlmIChpc0ZpbGxQb3NpdGlvbktl
eXdvcmQodmFsdWUuaWQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKTsKLX0KLQotdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mIHZhbHVlMikKLXsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWVMaXN0LmN1cnJlbnRJbmRleCgpOyBpIDwgdmFsdWVM
aXN0LnNpemUoKTsgKytpLCArK251bWJlck9mVmFsdWVzKSB7Ci0gICAgICAgIENTU1BhcnNlclZh
bHVlKiBjdXJyZW50ID0gdmFsdWVMaXN0LnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmICghY3VycmVu
dCB8fCBpc0NvbW1hKGN1cnJlbnQpIHx8IGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKmN1cnJlbnQp
IHx8ICFpc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoKmN1cnJlbnQpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgaWYgKG51bWJlck9mVmFsdWVzID4gNCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgd2UgYXJlIHBhcnNpbmcgdHdvIHZhbHVlcywgd2UgY2FuIHNhZmVseSBj
YWxsIHRoZSBDU1MgMi4xIHBhcnNpbmcgZnVuY3Rpb24gYW5kIHJldHVybi4KLSAgICBpZiAobnVt
YmVyT2ZWYWx1ZXMgPD0gMikgewotICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24odmFs
dWVMaXN0LCB2YWx1ZTEsIHZhbHVlMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobnVtYmVyT2ZWYWx1ZXMgPiAyICYmIG51bWJlck9mVmFsdWVzIDw9IDQpOwotCi0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKLQotICAgIC8vIDxw
b3NpdGlvbj4gcmVxdWlyZXMgdGhlIGZpcnN0IHZhbHVlIHRvIGJlIGEgYmFja2dyb3VuZCBrZXl3
b3JkLgotICAgIGlmICghaXNGaWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLT5pZCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gV2UncmUganVzdCBtYWtp
bmcgc3VyZSB0aGF0IGl0IGlzIG9uZSBvZiB0aGUgdmFsaWQga2V5d29yZHMgb3IgYSBwZXJjZW50
YWdlL2xlbmd0aC4KLSAgICB1bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOwotICAgIEZpbGxQ
b3NpdGlvbkZsYWcgdmFsdWUxRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0gICAgRmlsbFBv
c2l0aW9uRmxhZyB2YWx1ZTJGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICB2YWx1ZTEg
PSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRpdmVGbGFncywg
dmFsdWUxRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7Ci0gICAgaWYgKCF2YWx1ZTEpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIC8v
IEluIGNhc2Ugd2UgYXJlIHBhcnNpbmcgbW9yZSB0aGFuIHR3byB2YWx1ZXMsIHJlbGF4IHRoZSBj
aGVjayBpbnNpZGUgb2YgcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQuIHRvcCAyMHB4IGlzCi0g
ICAgLy8gYSB2YWxpZCBzdGFydCBmb3IgPHBvc2l0aW9uPi4KLSAgICBjdW11bGF0aXZlRmxhZ3Mg
PSBBbWJpZ3VvdXNGaWxsUG9zaXRpb247Ci0gICAgdmFsdWUyID0gcGFyc2VGaWxsUG9zaXRpb25D
b21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlMkZsYWcsIFJlc29sdmVW
YWx1ZXNBc0tleXdvcmQpOwotICAgIGlmICh2YWx1ZTIpCi0gICAgICAgIHZhbHVlTGlzdC5uZXh0
KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlMSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvIHBhcnNlZFZhbHVlMSA9IHZhbHVlMS5yZWxlYXNlTm9uTnVs
bCgpOwotICAgIGF1dG8gcGFyc2VkVmFsdWUyID0gdmFsdWUyLnJlbGVhc2VOb25OdWxsKCk7Ci0K
LSAgICAvLyBQZXIgQ1NTMyBzeW50YXgsIDxwb3NpdGlvbj4gY2FuJ3QgaGF2ZSAnY2VudGVyJyBh
cyBpdHMgc2Vjb25kIGtleXdvcmQgYXMgd2UgaGF2ZSBtb3JlIGFyZ3VtZW50cyB0byBmb2xsb3cu
Ci0gICAgaWYgKHBhcnNlZFZhbHVlMi0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ2VudGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobnVtYmVyT2ZWYWx1ZXMgPT0gMykKLSAgICAgICAg
cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKHZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIsIFdURk1v
dmUocGFyc2VkVmFsdWUxKSwgV1RGTW92ZShwYXJzZWRWYWx1ZTIpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHBhcnNlNFZhbHVlc0ZpbGxQb3NpdGlvbih2YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyLCBX
VEZNb3ZlKHBhcnNlZFZhbHVlMSksIFdURk1vdmUocGFyc2VkVmFsdWUyKSk7Ci19Ci0KLXZvaWQg
Q1NTUGFyc2VyOjpwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYgdmFsdWUyKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZh
bHVlTGlzdC5jdXJyZW50KCk7Ci0KLSAgICAvLyBQYXJzZSB0aGUgZmlyc3QgdmFsdWUuICBXZSdy
ZSBqdXN0IG1ha2luZyBzdXJlIHRoYXQgaXQgaXMgb25lIG9mIHRoZSB2YWxpZCBrZXl3b3JkcyBv
ciBhIHBlcmNlbnRhZ2UvbGVuZ3RoLgotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7
Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTFGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsK
LSAgICBGaWxsUG9zaXRpb25GbGFnIHZhbHVlMkZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwot
ICAgIHZhbHVlMSA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxh
dGl2ZUZsYWdzLCB2YWx1ZTFGbGFnKTsKLSAgICBpZiAoIXZhbHVlMSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSXQgb25seSB0YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRp
b24gdG8gYmUgY29ycmVjdGx5IHBhcnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRo
YW5kIChzaW5jZSB3ZQotICAgIC8vIGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJl
bG9uZyB0byB0aGUgcmVzdCBvZiB0aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5n
IGEgc2hvcnRoYW5kLCB0aG91Z2gsIHRoZQotICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNw
ZWNpZmllZCBmb3Igb3VyIHByb3BlcnR5LgotICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsK
LQotICAgIC8vIEZpcnN0IGNoZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJlIGZpbmlz
aGVkIHBhcnNpbmcgdGhpcyB2YWx1ZSBvciB2YWx1ZSBwYWlyLgotICAgIGlmIChpc0NvbW1hKHZh
bHVlKSkKLSAgICAgICAgdmFsdWUgPSBudWxscHRyOwotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAg
ICAgIHZhbHVlMiA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxh
dGl2ZUZsYWdzLCB2YWx1ZTJGbGFnKTsKLSAgICAgICAgaWYgKHZhbHVlMikKLSAgICAgICAgICAg
IHZhbHVlTGlzdC5uZXh0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFpblNo
b3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbHVlMikKLSAgICAgICAgLy8gT25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZC4gSWYg
dGhhdCB2YWx1ZSB3YXMgbm90IGEga2V5d29yZCwgdGhlbiBpdCBzZXRzIHRoZSB4IHBvc2l0aW9u
LCBhbmQgdGhlIHkgcG9zaXRpb24KLSAgICAgICAgLy8gaXMgc2ltcGx5IDUwJS4gVGhpcyBpcyBv
dXIgZGVmYXVsdC4KLSAgICAgICAgLy8gRm9yIGtleXdvcmRzLCB0aGUga2V5d29yZCB3YXMgZWl0
aGVyIGFuIHgta2V5d29yZCAobGVmdC9yaWdodCksIGEgeS1rZXl3b3JkICh0b3AvYm90dG9tKSwg
b3IgYW4gYW1iaWd1b3VzIGtleXdvcmQgKGNlbnRlcikuCi0gICAgICAgIC8vIEZvciBsZWZ0L3Jp
Z2h0L2NlbnRlciwgdGhlIGRlZmF1bHQgb2YgNTAlIGluIHRoZSB5IGlzIHN0aWxsIGNvcnJlY3Qu
Ci0gICAgICAgIHZhbHVlMiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
NTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0KLSAgICBpZiAodmFsdWUx
RmxhZyA9PSBZRmlsbFBvc2l0aW9uIHx8IHZhbHVlMkZsYWcgPT0gWEZpbGxQb3NpdGlvbikKLSAg
ICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmls
bFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVl
MikKLXsKLSAgICBDU1NWYWx1ZUlEIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0g
ICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0WCkgewotICAgICAgICBtX2ltcGxpY2l0U2hvcnRo
YW5kID0gdHJ1ZTsKLSAgICAgICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXQpOwotICAgICAgICB2YWx1ZTIgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
UmVwZWF0KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRZKSB7Ci0gICAgICAgIG1faW1wbGlj
aXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0KTsKLSAgICAgICAg
dmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVSZXBlYXQpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NW
YWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFj
ZSkKLSAgICAgICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoaWQpOwotICAgIGVsc2UgewotICAgICAgICB2YWx1ZTEgPSBudWxscHRyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKTsKLQotICAgIC8vIFBhcnNlIHRoZSBzZWNvbmQgdmFsdWUgaWYgb25l
IGlzIGF2YWlsYWJsZQotICAgIGlmICh2YWx1ZSAmJiAhaXNDb21tYSh2YWx1ZSkpIHsKLSAgICAg
ICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBp
ZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NT
VmFsdWVTcGFjZSkgewotICAgICAgICAgICAgdmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IElmIG9ubHkgb25lIHZhbHVlIHdhcyBzcGVjaWZpZWQsIHZhbHVlMiBpcyB0aGUgc2FtZSBhcyB2
YWx1ZTEuCi0gICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7Ci0gICAgdmFsdWUyID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZTEpLmdldFZhbHVlSUQoKSk7Ci19Ci0KLVJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sJiBhbGxvd0NvbW1hKQotewotICAgIGFsbG93Q29tbWEgPSB0cnVlOwotICAgIENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGFpbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3Zl
cikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlZFZhbHVlMTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAg
ICBwYXJzZWRWYWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgIGVsc2UgewotICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIXZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgIH0KLQotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwotICAgIGlmICgodmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpKSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQotICAgICAgICAgICAg
YWxsb3dDb21tYSA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFs
dWVBdXRvKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqdmFsdWUpOwotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWluU2hvcnRoYW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0
IHdoZW4gaXQgaXMgYWR2YW5jZWQgd2UnbGwgZW5kIHVwIGJhY2sgYXQgdGhpcyB2YWx1ZS4KLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFw
YXJzZWRWYWx1ZTIgJiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUp
IHsKLSAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHNldCB0aGUgc2Vj
b25kIHZhbHVlIHRvIHRoZSBmaXJzdCBpZiBpdCBpcyBvbWl0dGVkLgotICAgICAgICAvLyBXZSBv
bmx5IG5lZWQgdG8gZG8gdGhpcyBmb3IgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUuIEl0IHNob3Vs
ZCBiZSBzYWZlIHRvIGxldCBtYXNrcyBtYXRjaAotICAgICAgICAvLyB0aGUgcmVhbCBwcm9wZXJ0
eS4KLSAgICAgICAgcGFyc2VkVmFsdWUyID0gcGFyc2VkVmFsdWUxOwotICAgIH0KLQotICAgIGlm
ICghcGFyc2VkVmFsdWUyKQotICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWUxOwotICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIocGFyc2VkVmFsdWUxLnJlbGVhc2VOb25OdWxsKCks
IHBhcnNlZFZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpLCBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kU2l6ZSA/IFBhaXI6OklkZW50aWNhbFZhbHVlRW5jb2Rpbmc6OkNvYWxlc2Nl
IDogUGFpcjo6SWRlbnRpY2FsVmFsdWVFbmNvZGluZzo6RG9Ob3RDb2FsZXNjZSk7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NT
UHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+JiByZXRWYWx1ZTEsIFJlZlB0
cjxDU1NWYWx1ZT4mIHJldFZhbHVlMikKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1
ZXM7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzMjsKLSAgICBDU1NQYXJzZXJWYWx1
ZSogY3VycmVudFZhbHVlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZTI7Ci0KLSAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKLQotICAg
IHJldFZhbHVlMSA9IHJldFZhbHVlMiA9IG51bGxwdHI7Ci0gICAgcHJvcElkMSA9IHByb3BJZDsK
LSAgICBwcm9wSWQyID0gcHJvcElkOwotICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUG9zaXRpb24pIHsKLSAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWDsKLSAgICAgICAgcHJvcElkMiA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWTsKLSAgICB9IGVsc2UgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvbikgewotICAgICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25Y
OwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOwotICAg
IH0gZWxzZSBpZiAocHJvcElkID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCkgewotICAg
ICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDsKLSAgICAgICAgcHJv
cElkMiA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk7Ci0gICAgfSBlbHNlIGlmIChwcm9w
SWQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KSB7Ci0gICAgICAgIHByb3BJZDEgPSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUmVwZWF0WTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoKGN1cnJlbnRWYWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Vy
clZhbHVlOwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTI7Ci0KLSAgICAgICAg
aWYgKGFsbG93Q29tbWEpIHsKLSAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgICAgICBhbGxvd0NvbW1hID0gZmFsc2U7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAo
cHJvcElkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cjoKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VCYWNrZ3JvdW5kQ29sb3Io
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVTY3JvbGwg
fHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpeGVkIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZh
bHVlLT5pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcnNlRmlsbEltYWdlKCptX3ZhbHVlTGlzdCwgY3VyclZhbHVlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xp
cDoKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdp
bjoKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBmaXJzdCB0aHJlZSB2YWx1ZXMgaGVyZSBhcmUgZGVwcmVjYXRlZCBh
bmQgZG8gbm90IGFwcGx5IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcwot
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgLXdlYmtpdC0gcHJlZml4IHJlbW92ZWQuCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQm9yZGVyIHx8
IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVDb250ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFs
dWUtPmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVQYWRkaW5nQm94IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB8fCAoKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRDbGlwIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwKQotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVUZXh0
IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZENsaXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlw
KCpjdXJyZW50VmFsdWUsIGN1cnJWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVudFZh
bHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUNvbnRlbnRCb3gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1
ZS0+aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246IHsKLSAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTE7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUyOwotICAgICAgICAgICAgICAgICAg
ICBwYXJzZUZpbGxQb3NpdGlvbigqbV92YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyKTsKLSAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gV1RGTW92ZSh2YWx1ZTEpOwotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUyID0gV1RGTW92ZSh2YWx1ZTIpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBwYXJzZUZpbGxQb3NpdGlvbiBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlci4K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
blk6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6
IHsKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFs
dWVMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0NvbXBvc2l0ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRW
YWx1ZS0+aWQgPj0gQ1NTVmFsdWVDbGVhciAmJiBjdXJyZW50VmFsdWUtPmlkIDw9IENTU1ZhbHVl
UGx1c0xpZ2h0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+
aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEJsZW5kTW9kZToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgY3VycmVudFZh
bHVlLT5pZCA9PSBDU1NWYWx1ZU11bHRpcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBj
dXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlU2NyZWVuIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0g
Q1NTVmFsdWVPdmVybGF5IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVEYXJrZW4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaWdo
dGVuIHx8ICBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29sb3JEb2RnZSB8fCBjdXJyZW50
VmFsdWUtPmlkID09IENTU1ZhbHVlQ29sb3JCdXJuCi0gICAgICAgICAgICAgICAgICAgICAgICB8
fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlSGFyZExpZ2h0IHx8IGN1cnJlbnRWYWx1ZS0+
aWQgPT0gQ1NTVmFsdWVTb2Z0TGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURp
ZmZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0g
Q1NTVmFsdWVFeGNsdXNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRW
YWx1ZS0+aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICAgICAgICAgICAgICAg
ICAgcGFyc2VGaWxsUmVwZWF0KGN1cnJWYWx1ZSwgY3VyclZhbHVlMik7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHBhcnNlRmlsbFJlcGVhdCBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRl
cgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tncm91bmRTaXplOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrU2l6ZTogewotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxT
aXplKHByb3BJZCwgYWxsb3dDb21tYSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFs
dWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTb3VyY2VUeXBlOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCBjdXJyZW50VmFsdWUt
PmlkID09IENTU1ZhbHVlQWxwaGEgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUx1bWlu
YW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKLSAgICAgICAg
ICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZTIgJiYgIXZhbHVlczIpIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZXMyID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwotICAgICAgICAgICAgICAgIHZhbHVlczItPmFwcGVuZCh2YWx1ZTIucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAg
ICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZShjdXJyVmFsdWUp
OwotICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZTIpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFs
dWVzMikKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKGN1cnJWYWx1ZTIucmVs
ZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZTIgPSBXVEZNb3ZlKGN1cnJWYWx1ZTIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2hlbiBwYXJzaW5nIGFueSBmaWxsIHNob3J0aGFuZCBwcm9wZXJ0eSwg
d2UgbGV0IGl0IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAotICAgICAgICAv
LyBwcm9wZXJ0aWVzLgotICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgewotICAg
ICAgICByZXRWYWx1ZTEgPSBXVEZNb3ZlKHZhbHVlcyk7Ci0gICAgICAgIGlmICh2YWx1ZXMyICYm
IHZhbHVlczItPmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0VmFsdWUyID0gV1RGTW92ZSh2YWx1
ZXMyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICByZXRWYWx1ZTEgPSBXVEZNb3ZlKHZhbHVlKTsKLSAgICAgICAgcmV0VmFsdWUyID0gV1RG
TW92ZSh2YWx1ZTIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmlt
YXRpb25EZWxheSgpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotICAgIGlmICh2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlv
bkRpcmVjdGlvbigpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXZlcnNl
IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZVJldmVyc2UpCi0gICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCi17Ci0gICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwot
ICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwgRk5vbk5l
ZykpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRo
Q2FsY3VsYXRpb24pOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25GaWxsTW9kZSgpCi17Ci0gICAgQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8
fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVCYWNrd2FyZHMgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
Qm90aCkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNv
dW50KCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
LmlkKTsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1
ZSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZOb25OZWcpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCi17Ci0gICAg
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
ZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJub25lIikp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5p
bWF0aW9uUGxheVN0YXRlKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8
IHZhbHVlLmlkID09IENTU1ZhbHVlUGF1c2VkKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi0jaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi1SZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25UcmlnZ2VyKCkKLXsKLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLQotICAgIGlm
ICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzLmdldCgpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNvbnRhaW5lci1zY3JvbGwoIikpIHsKLSAgICAgICAg
aWYgKCFhcmdzIHx8IChhcmdzLT5zaXplKCkgIT0gMSAmJiBhcmdzLT5zaXplKCkgIT0gMykpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJn
dW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZp
cnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHN0YXJ0VmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0KLSAg
ICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKCFhcmd1bWVudCkK
LSAgICAgICAgICAgIHJldHVybiBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmNyZWF0
ZShXVEZNb3ZlKHN0YXJ0VmFsdWUpKTsKLQotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHNlY29uZEFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHNlY29u
ZEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgIGF1dG8gZW5kVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoc2Vjb25kQXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgIHJldHVybiBD
U1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKHN0YXJ0VmFsdWUp
LCBXVEZNb3ZlKGVuZFZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0j
ZW5kaWYKLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uUGFyc2VDb250ZXh0JiBjb250ZXh0KQotewotICAgIENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1
ZS51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIENTU1Byb3BlcnR5SUQgcmVzdWx0ID0gY3NzUHJvcGVydHlJRCh2YWx1ZS5z
dHJpbmcpOwotICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IENTU1Byb3BlcnR5QWxsKSAvLyAi
YWxsIiB2YWx1ZSBpbiBhbmltYXRpb24gaXMgbm90IGVxdWl2YWxlbnQgdG8gdGhlIGFsbCBwcm9w
ZXJ0eS4KLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHJlc3VsdCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLCAiYWxsIikpIHsKLSAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0
eUtleXdvcmQoKTsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm9uZSIpKSB7Ci0gICAgICAgIGNvbnRleHQu
Y29tbWl0QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCk7Ci0gICAgICAgIGNvbnRleHQuc2F3QW5p
bWF0aW9uUHJvcGVydHlLZXl3b3JkKCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotLyogc3RhdGljICovCi1WZWN0b3I8ZG91YmxlPiBDU1NQ
YXJzZXI6OnBhcnNlS2V5ZnJhbWVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKSB7Ci0g
ICAgVmVjdG9yPGRvdWJsZT4ga2V5czsKLSAgICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOwotICAg
IHNlbGVjdG9yLnNwbGl0KCcsJywgc3RyaW5ncyk7Ci0KLSAgICBrZXlzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc3RyaW5ncy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Ry
aW5ncy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUga2V5ID0gLTE7Ci0gICAgICAgIFN0
cmluZyBjdXIgPSBzdHJpbmdzW2ldLnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgICAgIC8vIEZv
ciBub3cgdGhlIHN5bnRheCBNVVNUIGJlICd4eHglJyBvciAnZnJvbScgb3IgJ3RvJywgd2hlcmUg
eHh4IGlzIGEgbGVnYWwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCi0gICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXIsICJmcm9tIikpCi0gICAgICAgICAgICBrZXkgPSAw
OwotICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXIsICJ0
byIpKQotICAgICAgICAgICAga2V5ID0gMTsKLSAgICAgICAgZWxzZSBpZiAoY3VyLmVuZHNXaXRo
KCclJykpIHsKLSAgICAgICAgICAgIGRvdWJsZSBrID0gY3VyLnN1YnN0cmluZygwLCBjdXIubGVu
Z3RoKCkgLSAxKS50b0RvdWJsZSgpOwotICAgICAgICAgICAgaWYgKGsgPj0gMCAmJiBrIDw9IDEw
MCkKLSAgICAgICAgICAgICAgICBrZXkgPSBrIC8gMTAwOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChrZXkgPCAwKSB7Ci0gICAgICAgICAgICBrZXlzLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChrZXkpOwotICAgIH0K
LQotICAgIHJldHVybiBrZXlzOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1P
cmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMykKLXsK
LSAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWx1ZTEsIHZhbHVl
Mik7Ci0KLSAgICAvLyBub3cgZ2V0IHoKLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkg
ewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGgpKSB7Ci0gICAgICAgICAgICB2YWx1ZTMgPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFsdWUzID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6aXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVk
OwotfQotCi1PcHRpb25hbDxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpKQot
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICBPcHRpb25hbDxkb3VibGU+IHJlc3VsdCA9IHBh
cnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgQ1NTUGFyc2VyVmFsdWUq
IG5leHRWYWx1ZSA9IGFyZ3MubmV4dCgpOwotICAgIGlmICghbmV4dFZhbHVlKSB7Ci0gICAgICAg
IC8vIFRoZSBsYXN0IG51bWJlciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0
LCBzbyB3ZSdyZSBkb25lLgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAo
IWlzQ29tbWEobmV4dFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgYXJncy5u
ZXh0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotT3B0aW9uYWw8ZG91YmxlPiBDU1NQYXJz
ZXI6OnBhcnNlU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MuY3VycmVudCgpKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbiwgRk51bWJlcikpCi0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gcmVzdWx0ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsK
LSAgICBhcmdzLm5leHQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCi17Ci0gICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZh
bHVlLmlkID09IENTU1ZhbHVlRWFzZSB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2
YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQK
LSAgICAgICAgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQgfHwgdmFsdWUuaWQgPT0g
Q1NTVmFsdWVTdGVwU3RhcnQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVTdGVwRW5kKQotICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUuaWQpOwotCi0gICAgLy8gV2UgbXVzdCBiZSBhIGZ1bmN0aW9uLgotICAgIGlmICh2YWx1
ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5m
dW5jdGlvbi0+bmFtZSwgInN0ZXBzKCIpKSB7Ci0gICAgICAgIC8vIEZvciBzdGVwcywgMSBvciAy
IHBhcmFtcyBtdXN0IGJlIHNwZWNpZmllZCAoY29tbWEtc2VwYXJhdGVkKQotICAgICAgICBpZiAo
IWFyZ3MgfHwgKGFyZ3MtPnNpemUoKSAhPSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gdmFsdWVz
LgotICAgICAgICBpbnQgbnVtU3RlcHM7Ci0gICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxz
ZTsKLQotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7
Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlcikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbnVt
U3RlcHMgPSBjbGFtcFRvSW50ZWdlcihwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pKTsKLSAgICAgICAgaWYgKG51bVN0ZXBzIDwgMSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICBpZiAoYXJn
dW1lbnQpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgY29tbWEgc28gd2UgbmVlZCB0byBw
YXJzZSB0aGUgc2Vjb25kIHZhbHVlCi0gICAgICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1ZhbHVl
U3RhcnQgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlRW5kKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0g
Q1NTVmFsdWVTdGFydDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWlu
Z0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwotICAgIH0KLQot
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFt
ZSwgImN1YmljLWJlemllcigiKSkgewotICAgICAgICAvLyBGb3IgY3ViaWMgYmV6aWVyLCA0IHZh
bHVlcyBtdXN0IGJlIHNwZWNpZmllZCAoY29tbWEtc2VwYXJhdGVkKS4KLSAgICAgICAgaWYgKCFh
cmdzIHx8IGFyZ3MtPnNpemUoKSAhPSA3KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBwb2ludHMgc3BlY2lmaWVkLiBUaGUgeCB2YWx1ZXMg
bXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEgYnV0IHRoZSB5IHZhbHVlcyBjYW4gZXhjZWVkIHRoaXMg
cmFuZ2UuCi0KLSAgICAgICAgYXV0byB4MSA9IHBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCF4MSB8fCB4MS52YWx1ZSgpIDwgMCB8fCB4MS52
YWx1ZSgpID4gMSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1dG8g
eTEgPSBwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAg
IGlmICgheTEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHgy
ID0gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwotICAgICAgICBp
ZiAoIXgyIHx8IHgyLnZhbHVlKCkgPCAwIHx8IHgyLnZhbHVlKCkgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byB5MiA9IHBhcnNlQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCF5MikKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uVmFsdWU6OmNyZWF0ZSh4MS52YWx1ZSgpLCB5MS52YWx1ZSgpLCB4Mi52YWx1ZSgpLCB5Mi52
YWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQo
KSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwg
InNwcmluZygiKSkgewotICAgICAgICAvLyBGb3IgYSBzcHJpbmcsIDQgdmFsdWVzIG11c3QgYmUg
c3BlY2lmaWVkIChzcGFjZS1zZXBhcmF0ZWQpLgotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGUg
YXJndW1lbnRzIGFsbCBvcHRpb25hbC4KLSAgICAgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUo
KSAhPSA0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICAv
LyBNYXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCi0gICAgICAgIGF1dG8gbWFzcyA9IHBhcnNl
U3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICghbWFzcyB8fCBt
YXNzLnZhbHVlKCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IC8vIFN0aWZmbmVzcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLgotICAgICAgICBhdXRvIHN0aWZm
bmVzcyA9IHBhcnNlU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlm
ICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy52YWx1ZSgpIDw9IDApCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBEYW1waW5nIGNvZWZmaWNpZW50IG11c3QgYmUgZ3Jl
YXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuCi0gICAgICAgIGF1dG8gZGFtcGluZyA9IHBhcnNlU3By
aW5nVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICghZGFtcGluZyB8fCBk
YW1waW5nLnZhbHVlKCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgLy8gSW5pdGlhbCB2ZWxvY2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCi0gICAgICAgIGF1dG8g
aW5pdGlhbFZlbG9jaXR5ID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsK
LSAgICAgICAgaWYgKCFpbml0aWFsVmVsb2NpdHkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICByZXR1cm4gQ1NTU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRl
KG1hc3MudmFsdWUoKSwgc3RpZmZuZXNzLnZhbHVlKCksIGRhbXBpbmcudmFsdWUoKSwgaW5pdGlh
bFZlbG9jaXR5LnZhbHVlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0LCBBbmltYXRpb25QYXJzZUNvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOwotICAgIENTU1BhcnNlclZh
bHVlKiB2YWw7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICBib29sIGFsbG93Q29t
bWEgPSBmYWxzZTsKLQotICAgIHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICB3aGlsZSAoKHZhbCA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Vy
clZhbHVlOwotICAgICAgICBpZiAoYWxsb3dDb21tYSkgewotICAgICAgICAgICAgaWYgKCFpc0Nv
bW1hKHZhbCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uRGVsYXk6Ci0gICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6Ci0gICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNpdGlvbkRlbGF5OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25EZWxheToKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1h
dGlvbkRlbGF5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgotICAgICAgICAgICAg
ICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlB
bmltYXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVy
YXRpb246Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0
aW9uOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRHVyYXRpb24o
KTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkZpbGxNb2RlOgotICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1
ZSA9IHBhcnNlQW5pbWF0aW9uRmlsbE1vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZh
bHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0
ZXJhdGlvbkNvdW50OgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbk5hbWU6Ci0gICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKLSAgICAgICAgICAgICAgICBj
dXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbk5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3Vy
clZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblBs
YXlTdGF0ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5
U3RhdGU6Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25QbGF5U3Rh
dGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgICAgICAgICAgY3Vy
clZhbHVlID0gcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShjb250ZXh0KTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgJiYgIWNvbnRleHQuYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRp
b25UaW1pbmdGdW5jdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNl
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVl
KQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQotICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRyaWdnZXI6Ci0gICAgICAgICAgICAg
ICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25UcmlnZ2VyKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICYm
ICF2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1
ZXMpCi0gICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92
ZShjdXJyVmFsdWUpOwotCi0gICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFdoZW4gcGFyc2luZyB0aGUgJ3RyYW5zaXRpb24nIHNob3J0aGFuZCBw
cm9wZXJ0eSwgd2UgbGV0IGl0IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAot
ICAgICAgICAvLyBwcm9wZXJ0aWVzLgotICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgo
KSkgewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHZhbHVlcyk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgcmVzdWx0ID0gV1RGTW92ZSh2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotc3RhdGljIGlubGluZSBib29sIGlzVmFs
aWRHcmlkUG9zaXRpb25DdXN0b21JZGVudChjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAm
JiB2YWx1ZS5pZCAhPSBDU1NWYWx1ZVNwYW4gJiYgdmFsdWUuaWQgIT0gQ1NTVmFsdWVBdXRvOwot
fQotCi0vLyBUaGUgZnVuY3Rpb24gcGFyc2VzIFsgPGludGVnZXI+IHx8IDxjdXN0b20taWRlbnQ+
IF0gaW4gPGdyaWQtbGluZT4gKHdoaWNoIGNhbiBiZSBzdGFuZCBhbG9uZSBvciB3aXRoICdzcGFu
JykuCi1ib29sIENTU1BhcnNlcjo6cGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZyb21HcmlkUG9z
aXRpb24oUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgbnVtZXJpY1ZhbHVlLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiBncmlkTGluZU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExh
eW91dEVuYWJsZWQoKSk7Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkuZlZhbHVlKSB7Ci0gICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIENTU1BhcnNlclZhbHVl
KiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBpZiAobmV4dFZhbHVl
ICYmIGlzVmFsaWRHcmlkUG9zaXRpb25DdXN0b21JZGVudCgqbmV4dFZhbHVlKSkgewotICAgICAg
ICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1
ZSk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChpc1ZhbGlkR3JpZFBvc2l0aW9uQ3VzdG9t
SWRlbnQodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7Ci0gICAgICAgIGdyaWRMaW5lTmFtZSA9IGNy
ZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAg
aWYgKENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0g
ICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24o
Km5leHRWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KG5leHRWYWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkludGVnZXIpICYmIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LmZWYWx1ZSkgewotICAgICAgICAgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkUG9zaXRpb24oKQotewotICAgIEFTU0VSVChpc0NT
U0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykg
ewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG51bWVyaWNWYWx1ZTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGdyaWRMaW5lTmFtZTsKLSAgICBib29sIGhhc1NlZW5T
cGFuS2V5d29yZCA9IGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNwYW4p
IHsKLSAgICAgICAgaGFzU2VlblNwYW5LZXl3b3JkID0gdHJ1ZTsKLSAgICAgICAgaWYgKGF1dG8q
IG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNG
b3J3YXJkU2xhc2hPcGVyYXRvcigqbmV4dFZhbHVlKSAmJiAhcGFyc2VJbnRlZ2VyT3JDdXN0b21J
ZGVudEZyb21HcmlkUG9zaXRpb24obnVtZXJpY1ZhbHVlLCBncmlkTGluZU5hbWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChwYXJz
ZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihudW1lcmljVmFsdWUsIGdyaWRM
aW5lTmFtZSkpIHsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
ICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU3BhbikgewotICAgICAgICAg
ICAgaGFzU2VlblNwYW5LZXl3b3JkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgY29u
c3VtZWQgYWxsIHRoZSB2YWx1ZSBsaXN0LiBGb3Igc2hvcnRoYW5kcywgdGhlIHBhcnNlciB3aWxs
IHBhc3MKLSAgICAvLyB0aGUgd2hvbGUgdmFsdWUgbGlzdCAoaW5jbHVkaW5nIHRoZSBvcHBvc2l0
ZSBwb3NpdGlvbikuCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9yd2Fy
ZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBwYXJzZSBhbnl0aGluZywgdGhpcyBpcyBu
b3QgYSB2YWxpZCBncmlkIHBvc2l0aW9uLgotICAgIGlmICghaGFzU2VlblNwYW5LZXl3b3JkICYm
ICFncmlkTGluZU5hbWUgJiYgIW51bWVyaWNWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAvLyBJZiB3ZSBoYXZlICJzcGFuIiBrZXl3b3JkIGFsb25lIGlzIGludmFsaWQuCi0g
ICAgaWYgKGhhc1NlZW5TcGFuS2V5d29yZCAmJiAhZ3JpZExpbmVOYW1lICYmICFudW1lcmljVmFs
dWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gTmVnYXRpdmUgbnVtYmVycyBh
cmUgbm90IGFsbG93ZWQgZm9yIHNwYW4gKGJ1dCBhcmUgZm9yIDxpbnRlZ2VyPikuCi0gICAgaWYg
KGhhc1NlZW5TcGFuS2V5d29yZCAmJiBudW1lcmljVmFsdWUgJiYgbnVtZXJpY1ZhbHVlLT5nZXRJ
bnRWYWx1ZSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGb3IgdGhl
IDxjdXN0b20taWRlbnQ+IGNhc2UuCi0gICAgaWYgKGdyaWRMaW5lTmFtZSAmJiAhbnVtZXJpY1Zh
bHVlICYmICFoYXNTZWVuU3BhbktleXdvcmQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGdyaWRMaW5lTmFtZS0+Z2V0U3RyaW5nVmFsdWUoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotCi0gICAgYXV0byB2YWx1ZXMgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKGhhc1NlZW5TcGFuS2V5
d29yZCkKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTcGFuKSk7Ci0gICAgaWYgKG51bWVyaWNWYWx1
ZSkKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQobnVtZXJpY1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgIGlmIChncmlkTGluZU5hbWUpCi0gICAgICAgIHZhbHVlcy0+YXBwZW5kKGdyaWRMaW5l
TmFtZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuIFdURk1vdmUodmFsdWVzKTsKLX0KLQotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZ3Jp
ZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZShDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlz
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVB
dXRvKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEl0ZW1Qb3NpdGlvblNob3J0aGFu
ZChDU1NQcm9wZXJ0eUlEIHNob3J0aGFuZElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NF
UlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3Bl
KHRoaXMsIHNob3J0aGFuZElkKTsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBz
aG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShzaG9ydGhhbmRJZCk7Ci0gICAgQVNTRVJU
KHNob3J0aGFuZC5sZW5ndGgoKSA9PSAyKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3RhcnRW
YWx1ZSA9IHBhcnNlR3JpZFBvc2l0aW9uKCk7Ci0gICAgaWYgKCFzdGFydFZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGVuZFZhbHVlOwotICAgIGlm
IChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICghaXNGb3J3YXJkU2xhc2hP
cGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGVuZFZhbHVlID0gcGFyc2VHcmlkUG9zaXRpb24oKTsKLSAg
ICAgICAgaWYgKCFlbmRWYWx1ZSB8fCBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICBlbmRWYWx1ZSA9IGdyaWRNaXNz
aW5nR3JpZFBvc2l0aW9uVmFsdWUoKnN0YXJ0VmFsdWUpOwotCi0gICAgYWRkUHJvcGVydHkoc2hv
cnRoYW5kLnByb3BlcnRpZXMoKVswXSwgc3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBv
cnRhbnQpOwotICAgIGFkZFByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMV0sIGVuZFZh
bHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRHYXBTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCi17
Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBTaG9ydGhhbmRT
Y29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUdyaWRHYXApOwotICAgIEFTU0VSVChzaG9ydGhh
bmRGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRHYXApLmxlbmd0aCgpID09IDIpOwotCi0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biByb3dWYWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgIGlmICghdmFsaWRhdGVVbml0
KHJvd1ZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gcm93R2FwID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHJvd1ZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLQotICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZENvbHVtbkdhcCwgcm93R2FwLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkUm93R2FwLCBXVEZNb3ZlKHJvd0dhcCksIGltcG9y
dGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGNvbHVtblZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaXQoY29sdW1uVmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gY29sdW1uR2FwID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKGNvbHVtblZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLQotICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5R3JpZFJvd0dhcCwgV1RGTW92ZShyb3dHYXApLCBpbXBvcnRhbnQp
OwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgV1RGTW92ZShjb2x1
bW5HYXApLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZUNvbHVtbnMoVHJhY2tMaXN0VHlwZSB0
cmFja0xpc3RUeXBlKQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwot
Ci0gICAgaWYgKCEobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiBpc0ZvcndhcmRTbGFzaE9wZXJh
dG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSAmJiBtX3ZhbHVlTGlzdC0+bmV4dCgpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGF1dG8gY29sdW1uc1ZhbHVlID0gcGFyc2VH
cmlkVHJhY2tMaXN0KHRyYWNrTGlzdFR5cGUpKSB7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBj
b2x1bW5zVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoYm9vbCBpbXBv
cnRhbnQpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICAv
LyBBdCBsZWFzdCB0ZW1wbGF0ZS1hcmVhcyBzdHJpbmdzIG11c3QgYmUgZGVmaW5lZC4KLSAgICBp
ZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkgfHwgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5hbWVk
R3JpZEFyZWFNYXAgZ3JpZEFyZWFNYXA7Ci0gICAgdW5zaWduZWQgcm93Q291bnQgPSAwOwotICAg
IHVuc2lnbmVkIGNvbHVtbkNvdW50ID0gMDsKLSAgICBib29sIHRyYWlsaW5nSWRlbnRXYXNBZGRl
ZCA9IGZhbHNlOwotICAgIGF1dG8gdGVtcGxhdGVSb3dzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVT
cGFjZVNlcGFyYXRlZCgpOwotCi0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYg
IWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAg
ICAgIC8vIEhhbmRsZSBsZWFkaW5nIDxjdXN0b20taWRlbnQ+Ki4KLSAgICAgICAgaWYgKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewot
ICAgICAgICAgICAgaWYgKHRyYWlsaW5nSWRlbnRXYXNBZGRlZCkgewotICAgICAgICAgICAgICAg
IC8vIEEgcm93J3MgdHJhaWxpbmcgaWRlbnQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUg
bmV4dCByb3cncyBsZWFkaW5nIG9uZS4KLSAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFt
ZXMoKm1fdmFsdWVMaXN0LCB0ZW1wbGF0ZVJvd3MsIGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNW
YWx1ZT4odGVtcGxhdGVSb3dzLT5pdGVtKHRlbXBsYXRlUm93cy0+bGVuZ3RoKCkgLSAxKSkpOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCpt
X3ZhbHVlTGlzdCwgdGVtcGxhdGVSb3dzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhhbmRs
ZSBhIHRlbXBsYXRlLWFyZWEncyByb3cuCi0gICAgICAgIGlmICghcGFyc2VHcmlkVGVtcGxhdGVB
cmVhc1JvdyhncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgKytyb3dDb3VudDsKLQotICAgICAgICAvLyBIYW5kbGUg
dGVtcGxhdGUtcm93cydzIHRyYWNrLXNpemUuCi0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6OlZhbHVlTGlzdCAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gcGFyc2VHcmlkVHJhY2tTaXplKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgICAgICBpZiAo
IXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHRlbXBs
YXRlUm93cy0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykpOwotCi0gICAgICAgIC8vIFRo
aXMgd2lsbCBoYW5kbGUgdGhlIHRyYWlsaW5nL2xlYWRpbmcgPGN1c3RvbS1pZGVudD4qIGluIHRo
ZSBncmFtbWFyLgotICAgICAgICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICAgICAgdHJhaWxpbmdJ
ZGVudFdhc0FkZGVkID0gcGFyc2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdGVtcGxhdGVS
b3dzKTsKLSAgICB9Ci0KLSAgICAvLyBbLyA8ZXhwbGljaXQtdHJhY2stbGlzdD4gXT8KLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHRlbXBsYXRlQ29sdW1uczsKLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkgewotICAgICAgICBBU1NFUlQoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkpOwotICAgICAgICB0ZW1wbGF0ZUNvbHVtbnMgPSBwYXJzZUdyaWRU
ZW1wbGF0ZUNvbHVtbnMoR3JpZFRlbXBsYXRlTm9SZXBlYXQpOwotICAgICAgICBpZiAoIXRlbXBs
YXRlQ29sdW1ucykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gVGhlIHRl
bXBsYXRlLWNvbHVtbnMgPHRyYWNrLWxpc3Q+IGNhbid0IGJlICdub25lJy4KLSAgICAgICAgaWYg
KHRlbXBsYXRlQ29sdW1ucy0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdGVtcGxhdGVDb2x1bW5zKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZFRlbXBsYXRlUm93cywgV1RGTW92ZSh0ZW1wbGF0ZVJvd3MpLCBpbXBvcnRh
bnQpOwotICAgIGlmICh0ZW1wbGF0ZUNvbHVtbnMpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1ucywgdGVtcGxhdGVDb2x1bW5zLnJlbGVhc2VOb25OdWxs
KCksIGltcG9ydGFudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUdyaWRUZW1wbGF0ZUNvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhcywgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZTo6
Y3JlYXRlKGdyaWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQpLCBpbXBvcnRhbnQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0
ZVNob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5
R3JpZFRlbXBsYXRlKTsKLSAgICBBU1NFUlQoc2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVy
dHlHcmlkVGVtcGxhdGUpLmxlbmd0aCgpID09IDMpOwotCi0gICAgLy8gQXQgbGVhc3QgIm5vbmUi
IG11c3QgYmUgZGVmaW5lZC4KLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZmlyc3RWYWx1ZUlzTm9uZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9uZTsKLQotICAgIC8vIDEtICdub25lJyBj
YXNlLgotICAgIGlmIChmaXJzdFZhbHVlSXNOb25lICYmICFtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7
Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1ucywgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxh
dGVSb3dzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyAyLSA8Z3JpZC10ZW1wbGF0ZS1yb3dzPiAvIDxncmlkLXRlbXBs
YXRlLWNvbHVtbnM+IHN5bnRheC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd3NWYWx1ZTsKLSAg
ICBpZiAoZmlyc3RWYWx1ZUlzTm9uZSkKLSAgICAgICAgcm93c1ZhbHVlID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICBl
bHNlCi0gICAgICAgIHJvd3NWYWx1ZSA9IHBhcnNlR3JpZFRyYWNrTGlzdChHcmlkVGVtcGxhdGUp
OwotCi0gICAgaWYgKHJvd3NWYWx1ZSkgewotICAgICAgICBhdXRvIGNvbHVtbnNWYWx1ZSA9IHBh
cnNlR3JpZFRlbXBsYXRlQ29sdW1ucygpOwotICAgICAgICBpZiAoIWNvbHVtbnNWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUdyaWRUZW1wbGF0ZUNvbHVtbnMsIGNvbHVtbnNWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBv
cnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3Ms
IHJvd3NWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIC8vIDMtIFs8bGluZS1uYW1lcz4/IDxz
dHJpbmc+IDx0cmFjay1zaXplPj8gPGxpbmUtbmFtZXM+PyBdKyBzeW50YXguCi0gICAgLy8gSXQg
cmVxdWlyZXMgdG8gcmV3aW5kIHBhcnNpbmcgZHVlIHRvIHByZXZpb3VzIHN5bnRheCBmYWlsdXJl
cy4KLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgIHJldHVybiBwYXJz
ZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoaW1wb3J0YW50KTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlR3JpZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBB
U1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNj
b3BlKHRoaXMsIENTU1Byb3BlcnR5R3JpZCk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3Bl
cnR5KENTU1Byb3BlcnR5R3JpZCkubGVuZ3RoKCkgPT0gOCk7Ci0KLSAgICAvLyAxLSA8Z3JpZC10
ZW1wbGF0ZT4KLSAgICBpZiAocGFyc2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoaW1wb3J0YW50KSkg
ewotICAgICAgICAvLyBJdCBjYW4gb25seSBiZSBzcGVjaWZpZWQgdGhlIGV4cGxpY2l0IG9yIHRo
ZSBpbXBsaWNpdCBncmlkIHByb3BlcnRpZXMgaW4gYSBzaW5nbGUgZ3JpZCBkZWNsYXJhdGlvbi4K
LSAgICAgICAgLy8gVGhlIHN1Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQgYXJlIHNldCB0byB0
aGVpciBpbml0aWFsIHZhbHVlLCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMuCi0gICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEF1dG9GbG93LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEF1dG9Db2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEF1dG9Sb3dzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRSb3dHYXAsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gTmVlZCB0byByZXdpbmQgcGFyc2luZyB0byBl
eHBsb3JlIHRoZSBhbHRlcm5hdGl2ZSBzeW50YXggb2YgdGhpcyBzaG9ydGhhbmQuCi0gICAgbV92
YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRleCgwKTsKLQotICAgIC8vIDItIDxncmlkLWF1dG8tZmxv
dz4gWyA8Z3JpZC1hdXRvLWNvbHVtbnM+IFsgLyA8Z3JpZC1hdXRvLXJvd3M+IF0/IF0KLSAgICBp
ZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlHcmlkQXV0b0Zsb3csIGltcG9ydGFudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gYXV0b0NvbHVtbnNWYWx1
ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGF1dG9Sb3dzVmFsdWU7Ci0KLSAgICBpZiAobV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBhdXRvUm93c1ZhbHVlID0gcGFyc2VHcmlkVHJh
Y2tMaXN0KEdyaWRBdXRvKTsKLSAgICAgICAgaWYgKCFhdXRvUm93c1ZhbHVlKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewot
ICAgICAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKSB8fCAhbV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBhdXRvQ29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0
KEdyaWRBdXRvKTsKLSAgICAgICAgICAgIGlmICghYXV0b0NvbHVtbnNWYWx1ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gT3RoZXIgb21pdHRlZCB2YWx1ZXMgYXJlIHNldCB0byB0aGVpciBpbml0aWFsIHZh
bHVlcy4KLSAgICAgICAgYXV0b0NvbHVtbnNWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsKLSAgICAgICAgYXV0b1Jvd3NWYWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsK
LSAgICB9Ci0KLSAgICAvLyBpZiA8Z3JpZC1hdXRvLXJvd3M+IHZhbHVlIGlzIG9taXR0ZWQsIGl0
IGlzIHNldCB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciBncmlkLWF1dG8tY29sdW1ucy4KLSAg
ICBpZiAoIWF1dG9Db2x1bW5zVmFsdWUpCi0gICAgICAgIGF1dG9Db2x1bW5zVmFsdWUgPSBhdXRv
Um93c1ZhbHVlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQXV0b0NvbHVtbnMs
IGF1dG9Db2x1bW5zVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRBdXRvUm93cywgYXV0b1Jvd3NWYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpLCBpbXBvcnRhbnQpOwotCi0gICAgLy8gSXQgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHRo
ZSBleHBsaWNpdCBvciB0aGUgaW1wbGljaXQgZ3JpZCBwcm9wZXJ0aWVzIGluIGEgc2luZ2xlIGdy
aWQgZGVjbGFyYXRpb24uCi0gICAgLy8gVGhlIHN1Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQg
YXJlIHNldCB0byB0aGVpciBpbml0aWFsIHZhbHVlLCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMu
Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFu
dCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVSb3dzLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFu
dCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhcywgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRh
bnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQp
OwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFJvd0dhcCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRBcmVhU2hvcnRo
YW5kKGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlHcmlkQXJl
YSk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEFyZWEp
Lmxlbmd0aCgpID09IDQpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiByb3dTdGFydFZhbHVlID0g
cGFyc2VHcmlkUG9zaXRpb24oKTsKLSAgICBpZiAoIXJvd1N0YXJ0VmFsdWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uU3RhcnRWYWx1ZTsKLSAg
ICBpZiAoIXBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChjb2x1bW5TdGFydFZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiByb3dFbmRWYWx1ZTsK
LSAgICBpZiAoIXBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChyb3dFbmRWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uRW5kVmFsdWU7
Ci0gICAgaWYgKCFwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoY29sdW1uRW5kVmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvbHVtblN0YXJ0VmFsdWUpCi0gICAg
ICAgIGNvbHVtblN0YXJ0VmFsdWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKCpyb3dT
dGFydFZhbHVlKTsKLQotICAgIGlmICghcm93RW5kVmFsdWUpCi0gICAgICAgIHJvd0VuZFZhbHVl
ID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZSgqcm93U3RhcnRWYWx1ZSk7Ci0KLSAgICBp
ZiAoIWNvbHVtbkVuZFZhbHVlKQotICAgICAgICBjb2x1bW5FbmRWYWx1ZSA9IGdyaWRNaXNzaW5n
R3JpZFBvc2l0aW9uVmFsdWUoKmNvbHVtblN0YXJ0VmFsdWUpOwotCi0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlHcmlkUm93U3RhcnQsIHJvd1N0YXJ0VmFsdWUucmVsZWFzZU5vbk51bGwoKSwg
aW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydCwg
Y29sdW1uU3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5R3JpZFJvd0VuZCwgcm93RW5kVmFsdWUucmVsZWFzZU5vbk51bGwo
KSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5FbmQs
IGNvbHVtbkVuZFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQo
UmVmUHRyPENTU1ZhbHVlPiYgcHJvcGVydHkpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91
dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3Zh
bHVlTGlzdC0+bmV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcm9wZXJ0eSA9
IHBhcnNlR3JpZFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUdyaWRMaW5lTmFtZXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QsIENT
U1ZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmlkTGluZU5hbWVzVmFsdWUqIHByZXZpb3VzTmFt
ZWRBcmVhVHJhaWxpbmdMaW5lTmFtZXMpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVu
YWJsZWQoKSk7Ci0gICAgQVNTRVJUKGlucHV0TGlzdC5jdXJyZW50KCkgJiYgaW5wdXRMaXN0LmN1
cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KTsKLQotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCYgaWRlbnRMaXN0ID0gKmlucHV0TGlzdC5jdXJyZW50KCktPnZhbHVlTGlz
dDsKLSAgICBpZiAoIWlkZW50TGlzdC5zaXplKCkpIHsKLSAgICAgICAgaW5wdXRMaXN0Lm5leHQo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5lZWQgdG8gZW5zdXJl
IHRoZSBpZGVudExpc3QgaXMgYXQgdGhlIGhlYWRpbmcgaW5kZXgsIHNpbmNlIHRoZSBwYXJzZXJM
aXN0IG1pZ2h0IGhhdmUgYmVlbiByZXdvdW5kLgotICAgIGlkZW50TGlzdC5zZXRDdXJyZW50SW5k
ZXgoMCk7Ci0gICAgUmVmPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4gbGluZU5hbWVzID0gcHJldmlv
dXNOYW1lZEFyZWFUcmFpbGluZ0xpbmVOYW1lcyA/IFJlZjxDU1NHcmlkTGluZU5hbWVzVmFsdWU+
KCpwcmV2aW91c05hbWVkQXJlYVRyYWlsaW5nTGluZU5hbWVzKSA6IENTU0dyaWRMaW5lTmFtZXNW
YWx1ZTo6Y3JlYXRlKCk7Ci0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBpZGVudFZhbHVlID0g
aWRlbnRMaXN0LmN1cnJlbnQoKSkgewotICAgICAgICBBU1NFUlQoaWRlbnRWYWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKTsKLSAgICAgICAgbGluZU5hbWVzLT5hcHBl
bmQoY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmlkZW50VmFsdWUpKTsKLSAgICAgICAgaWRl
bnRMaXN0Lm5leHQoKTsKLSAgICB9Ci0gICAgaWYgKCFwcmV2aW91c05hbWVkQXJlYVRyYWlsaW5n
TGluZU5hbWVzKQotICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUobGluZU5hbWVzKSk7
Ci0KLSAgICBpbnB1dExpc3QubmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
Ym9vbCBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVl
KQotewotICAgIENTU1ZhbHVlSUQgdmFsdWVJRCA9IHZhbHVlLmdldFZhbHVlSUQoKTsKLSAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZVdlYmtpdE1heENvbnRlbnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUu
aXNGbGV4KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVCh2YWx1ZS5pc0xl
bmd0aCgpIHx8IHZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHZhbHVlLmlzQ2FsY3VsYXRlZCgpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgaXNHcmlkVHJhY2tGaXhlZFNpemVk
KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwotCi0gICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb25WYWx1
ZSgpKTsKLSAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3Vt
ZW50cygpKTsKLSAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFy
Z3VtZW50cygpLT5sZW5ndGgoKSA9PSAyKTsKLQotICAgIGF1dG8mIG1pbiA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3Vt
ZW50cygpLT5pdGVtKDApKTsKLSAgICBhdXRvJiBtYXggPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKmRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KHZhbHVlKS5hcmd1bWVudHMoKS0+aXRl
bSgxKSk7Ci0gICAgcmV0dXJuIGlzR3JpZFRyYWNrRml4ZWRTaXplZChtaW4pIHx8IGlzR3JpZFRy
YWNrRml4ZWRTaXplZChtYXgpOwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VHcmlkVHJhY2tMaXN0KFRyYWNrTGlzdFR5cGUgdHJhY2tMaXN0VHlwZSkKLXsKLSAgICBBU1NF
UlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgaWYgKHRyYWNrTGlzdFR5cGUgPT0gR3JpZEF1dG8pCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7Ci0gICAgfQotCi0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgLy8gSGFuZGxlIGxlYWRpbmcgIDxjdXN0b20t
aWRlbnQ+Ki4KLSAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgYm9vbCBh
bGxvd0dyaWRMaW5lTmFtZXMgPSB0cmFja0xpc3RUeXBlICE9IEdyaWRBdXRvOwotICAgIGlmICh2
YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KSB7Ci0gICAg
ICAgIGlmICghYWxsb3dHcmlkTGluZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3QsIHZhbHVlcyk7Ci0gICAg
fQotCi0gICAgYm9vbCBzZWVuVHJhY2tTaXplT3JSZXBlYXRGdW5jdGlvbiA9IGZhbHNlOwotICAg
IGJvb2wgc2VlbkF1dG9SZXBlYXQgPSBmYWxzZTsKLSAgICBib29sIGFsbFRyYWNrc0FyZUZpeGVk
U2l6ZWQgPSB0cnVlOwotICAgIGJvb2wgcmVwZWF0QWxsb3dlZCA9IHRyYWNrTGlzdFR5cGUgPT0g
R3JpZFRlbXBsYXRlOwotICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVy
YXRvcigqY3VycmVudFZhbHVlKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY3Vy
cmVudFZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXJyZW50VmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0
KCIpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlcGVhdEFsbG93ZWQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBib29sIGlzQXV0b1JlcGVhdDsKLSAgICAgICAg
ICAgIGlmICghcGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbih2YWx1ZXMsIGlzQXV0b1JlcGVh
dCwgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvUmVwZWF0ICYmIHNlZW5BdXRvUmVwZWF0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgc2VlbkF1dG9SZXBlYXQg
PSBzZWVuQXV0b1JlcGVhdCB8fCBpc0F1dG9SZXBlYXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VHcmlkVHJhY2tTaXplKCptX3Zh
bHVlTGlzdCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgICAgICBhbGxUcmFja3NBcmVGaXhlZFNpemVkID0gYWxsVHJh
Y2tzQXJlRml4ZWRTaXplZCAmJiBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoKnZhbHVlKTsKLSAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICB9
Ci0gICAgICAgIHNlZW5UcmFja1NpemVPclJlcGVhdEZ1bmN0aW9uID0gdHJ1ZTsKLQotICAgICAg
ICBpZiAoc2VlbkF1dG9SZXBlYXQgJiYgIWFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgaGFuZGxlIHRoZSB0
cmFpbGluZyA8Y3VzdG9tLWlkZW50PiogaW4gdGhlIGdyYW1tYXIuCi0gICAgICAgIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0
ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpIHsKLSAgICAgICAgICAgIGlmICghYWxsb3dH
cmlkTGluZU5hbWVzKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgcGFyc2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdmFsdWVzKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghc2VlblRyYWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24pCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUodmFsdWVzKTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlR3JpZFRyYWNrUmVwZWF0RnVuY3Rpb24oQ1NTVmFsdWVMaXN0JiBs
aXN0LCBib29sJiBpc0F1dG9SZXBlYXQsIGJvb2wmIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCi17
Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5h
cmdzLmdldCgpOwotICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8
fCAhaXNDb21tYShhcmd1bWVudHMtPnZhbHVlQXQoMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudHMtPnZhbHVlQXQoMCkpOwotICAgIENTU1ZhbHVlSUQgZmlyc3RWYWx1ZUlEID0gZmly
c3RWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIGlzQXV0b1JlcGVhdCA9IGZp
cnN0VmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG9GaWxsIHx8IGZpcnN0VmFsdWVJRCA9PSBDU1NWYWx1
ZUF1dG9GaXQ7Ci0gICAgaWYgKCFpc0F1dG9SZXBlYXQgJiYgIXZhbGlkYXRlVW5pdChmaXJzdFZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gSWYgYXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01B
WCB0aGVuIHJlcGV0aXRpb25zIGJlY29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywgdGhh
dCdzIHdoeSB3ZQotICAgIC8vIGNsYW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVmb3Jl
IHRoZSB0eXBlIGNhc3RpbmcuCi0gICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyBmb3Ig
PGF1dG8tcmVwZWF0PiBpcyBub3QgaW1wb3J0YW50IGF0IHBhcnNpbmcgbGV2ZWwKLSAgICAvLyBi
ZWNhdXNlIGl0IHdpbGwgYmUgY29tcHV0ZWQgbGF0ZXIsIGxldCdzIHNldCBpdCB0byAxLgotICAg
IHVuc2lnbmVkIHJlcGV0aXRpb25zID0gaXNBdXRvUmVwZWF0ID8gMSA6IGNsYW1wVG88dW5zaWdu
ZWQ+KHBhcnNlZERvdWJsZShmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKSwgMCwga0dyaWRNYXhU
cmFja3MpOwotCi0gICAgUmVmPENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMgPSBpc0F1dG9S
ZXBlYXQgPyBSZWY8Q1NTVmFsdWVMaXN0PihDU1NHcmlkQXV0b1JlcGVhdFZhbHVlOjpjcmVhdGUo
Zmlyc3RWYWx1ZUlEKSkgOiBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0g
ICAgYXJndW1lbnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCi0gICAg
YXJndW1lbnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIGNvbW1hLgotCi0gICAgLy8gSGFuZGxlIGxl
YWRpbmcgPGN1c3RvbS1pZGVudD4qLgotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUg
PSBhcmd1bWVudHMtPmN1cnJlbnQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRW
YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICBwYXJzZUdy
aWRMaW5lTmFtZXMoKmFyZ3VtZW50cywgcmVwZWF0ZWRWYWx1ZXMpOwotCi0gICAgdW5zaWduZWQg
bnVtYmVyT2ZUcmFja3MgPSAwOwotICAgIHdoaWxlIChhcmd1bWVudHMtPmN1cnJlbnQoKSkgewot
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRyYWNrU2l6ZSA9IHBhcnNlR3JpZFRyYWNrU2l6ZSgq
YXJndW1lbnRzKTsKLSAgICAgICAgaWYgKCF0cmFja1NpemUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCA9IGFsbFRyYWNrc0FyZUZp
eGVkU2l6ZWQgJiYgaXNHcmlkVHJhY2tGaXhlZFNpemVkKCp0cmFja1NpemUpOwotICAgICAgICBy
ZXBlYXRlZFZhbHVlcy0+YXBwZW5kKHRyYWNrU2l6ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAg
ICAgKytudW1iZXJPZlRyYWNrczsKLQotICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUgb2YgYW55
IHRyYWlsaW5nIDxjdXN0b20taWRlbnQ+KiBpbiB0aGUgZ3JhbW1hci4KLSAgICAgICAgY3VycmVu
dFZhbHVlID0gYXJndW1lbnRzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUg
JiYgY3VycmVudFZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAg
ICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKmFyZ3VtZW50cywgcmVwZWF0ZWRWYWx1ZXMpOwot
ICAgIH0KLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIGZvdW5kIGF0IGxlYXN0IG9uZSA8dHJhY2st
c2l6ZT4sIG90aGVyd2lzZSB0aGUgZGVjbGFyYXRpb24gaXMgaW52YWxpZC4KLSAgICBpZiAoIW51
bWJlck9mVHJhY2tzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBjbGFtcCB0
aGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHJlcGVhdCgpIHRy
YWNrIGxpc3QncyBzaXplLCB3aGlsZSBzdGF5aW5nIGJlbG93IHRoZSBtYXgKLSAgICAvLyBncmlk
IHNpemUuCi0gICAgcmVwZXRpdGlvbnMgPSBzdGQ6Om1pbihyZXBldGl0aW9ucywga0dyaWRNYXhU
cmFja3MgLyBudW1iZXJPZlRyYWNrcyk7Ci0KLSAgICBpZiAoaXNBdXRvUmVwZWF0KQotICAgICAg
ICBsaXN0LmFwcGVuZChXVEZNb3ZlKHJlcGVhdGVkVmFsdWVzKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXBldGl0aW9uczsgKytpKSB7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVwZWF0ZWRWYWx1ZXMtPmxlbmd0aCgpOyAr
K2opCi0gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoKnJlcGVhdGVkVmFsdWVzLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKGopKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRUcmFja1NpemUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QpCi17
Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJW
YWx1ZSYgY3VycmVudFZhbHVlID0gKmlucHV0TGlzdC5jdXJyZW50KCk7Ci0gICAgaW5wdXRMaXN0
Lm5leHQoKTsKLQotICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKLQotICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVu
dFZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAibWlubWF4KCIpKSB7Ci0gICAgICAgIC8vIFRoZSBzcGVj
IGRlZmluZXMgdGhlIGZvbGxvd2luZyBncmFtbWFyOiBtaW5tYXgoIDx0cmFjay1icmVhZHRoPiAs
IDx0cmFjay1icmVhZHRoPiApCi0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1lbnRz
ID0gY3VycmVudFZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgICAgICBpZiAoIWFyZ3Vt
ZW50cyB8fCBhcmd1bWVudHMtPnNpemUoKSAhPSAzIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFs
dWVBdCgxKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1pblRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJyZWFkdGgoKmFy
Z3VtZW50cy0+dmFsdWVBdCgwKSk7Ci0gICAgICAgIGlmICghbWluVHJhY2tCcmVhZHRoIHx8IG1p
blRyYWNrQnJlYWR0aC0+aXNGbGV4KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1heFRyYWNrQnJlYWR0aCA9IHBhcnNl
R3JpZEJyZWFkdGgoKmFyZ3VtZW50cy0+dmFsdWVBdCgyKSk7Ci0gICAgICAgIGlmICghbWF4VHJh
Y2tCcmVhZHRoKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBw
YXJzZWRBcmd1bWVudHMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0g
ICAgICAgIHBhcnNlZEFyZ3VtZW50cy0+YXBwZW5kKG1pblRyYWNrQnJlYWR0aC5yZWxlYXNlTm9u
TnVsbCgpKTsKLSAgICAgICAgcGFyc2VkQXJndW1lbnRzLT5hcHBlbmQobWF4VHJhY2tCcmVhZHRo
LnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICByZXR1cm4gQ1NTRnVuY3Rpb25WYWx1ZTo6Y3Jl
YXRlKCJtaW5tYXgoIiwgV1RGTW92ZShwYXJzZWRBcmd1bWVudHMpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcGFyc2VHcmlkQnJlYWR0aChjdXJyZW50VmFsdWUpOwotfQotCi1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBp
ZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENT
U1ZhbHVlV2Via2l0TWF4Q29udGVudCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS5pZCk7Ci0KLSAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0ZSKSB7Ci0gICAgICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7Ci0KLSAg
ICAgICAgLy8gRnJhY3Rpb25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KLSAg
ICAgICAgaWYgKGZsZXhWYWx1ZSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoZmxl
eFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKLSAgICB9Ci0KLSAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZEdyaWRBdXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJu
IChpZCA9PSBDU1NWYWx1ZVJvdyB8fCBpZCA9PSBDU1NWYWx1ZUNvbHVtbiB8fCBpZCA9PSBDU1NW
YWx1ZURlbnNlKTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEF1
dG9GbG93KENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KQotewotICAgIEFTU0VSVChpc0NT
U0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0gICAgLy8gWyByb3cgfCBjb2x1bW4gXSB8fCBkZW5z
ZQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGlucHV0TGlzdC5jdXJyZW50KCk7Ci0gICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBhcnNlZFZh
bHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLQotICAgIC8vIEZp
cnN0IHBhcmFtZXRlci4KLSAgICBDU1NWYWx1ZUlEIGZpcnN0SWQgPSB2YWx1ZS0+aWQ7Ci0gICAg
aWYgKCFpc1ZhbGlkR3JpZEF1dG9GbG93SWQoZmlyc3RJZCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgLy8gU2Vjb25kIHBhcmFtZXRlciwgaWYgYW55LgotICAgIC8vIElmIHNlY29u
ZCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIHdlIHNob3VsZCBwcm9jZXNzIGFueXdheSB0aGUgZmly
c3Qgb25lIGFzIHdlIGNhbiBiZSBpbnNpZGUgdGhlICJncmlkIiBzaG9ydGhhbmQuCi0gICAgdmFs
dWUgPSBpbnB1dExpc3QubmV4dCgpOwotICAgIGlmICghdmFsdWUgfHwgIWlzVmFsaWRHcmlkQXV0
b0Zsb3dJZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgIGlmIChmaXJzdElkID09IENTU1ZhbHVlRGVu
c2UpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJvdykpOwotCi0gICAgICAgIHBh
cnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKGZpcnN0SWQpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyc2VkVmFsdWVz
KTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZpcnN0SWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlUm93
OgotICAgIGNhc2UgQ1NTVmFsdWVDb2x1bW46Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQp
KTsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZURlbnNlKSB7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAgICAgIGlucHV0TGlzdC5uZXh0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZURlbnNlOgotICAg
ICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlUm93IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZUNvbHVtbikgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAg
ICAgICBpbnB1dExpc3QubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZp
cnN0SWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3Zl
KHBhcnNlZFZhbHVlcyk7Ci19Ci0jZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8K
LQotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLQotc3RhdGljIGNvbnN0IGludCBkYXNo
Ym9hcmRSZWdpb25QYXJhbWV0ZXJDb3VudCA9IDY7Ci1zdGF0aWMgY29uc3QgaW50IGRhc2hib2Fy
ZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQgPSAyOwotCi1zdGF0aWMgQ1NTUGFyc2VyVmFsdWUq
IHNraXBDb21tYUluRGFzaGJvYXJkUmVnaW9uKENTU1BhcnNlclZhbHVlTGlzdCAqYXJncykKLXsK
LSAgICBpZiAoYXJncy0+c2l6ZSgpID09IChkYXNoYm9hcmRSZWdpb25QYXJhbWV0ZXJDb3VudCAq
IDIgLSAxKSB8fCBhcmdzLT5zaXplKCkgPT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVy
Q291bnQgKiAyIC0gMSkpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnQgPSAqYXJn
cy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoY3VycmVudC51bml0ID09IENTU1BhcnNlclZhbHVl
OjpPcGVyYXRvciAmJiBjdXJyZW50LmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICByZXR1cm4g
YXJncy0+bmV4dCgpOwotICAgIH0KLSAgICByZXR1cm4gYXJncy0+Y3VycmVudCgpOwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKLXsKLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLQotICAgIENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdmFsaWQ7Ci0gICAgfQotCi0gICAgYXV0
byBmaXJzdFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lvbjo6Y3JlYXRlKCk7Ci0gICAgRGFzaGJvYXJk
UmVnaW9uKiByZWdpb24gPSBudWxscHRyOwotCi0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAg
IGlmICghcmVnaW9uKSB7Ci0gICAgICAgICAgICByZWdpb24gPSBmaXJzdFJlZ2lvbi5wdHIoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gbmV4dFJlZ2lvbiA9IERhc2hib2Fy
ZFJlZ2lvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICByZWdpb24tPm1fbmV4dCA9IG5leHRSZWdp
b24uY29weVJlZigpOwotICAgICAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbi5wdHIoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24pIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENvbW1hcyBjb3VudCBhcyB2YWx1ZXMsIHNvIGFsbG93
IChmdW5jdGlvbiBuYW1lIGlzIGRhc2hib2FyZC1yZWdpb24gZm9yIERBU0hCT0FSRF9TVVBQT1JU
IGZlYXR1cmUpOgotICAgICAgICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlLCB0LCBy
LCBiLCBsKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUgdCByIGIgbCkKLSAgICAgICAg
Ly8gZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlwZSwgdCwgciwgYiwgbCkgb3IgZGFzaGJvYXJk
LXJlZ2lvbihsYWJlbCB0eXBlIHQgciBiIGwpCi0gICAgICAgIC8vIGFsc28gYWxsb3cKLSAgICAg
ICAgLy8gZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlwZSkgb3IgZGFzaGJvYXJkLXJlZ2lvbihs
YWJlbCB0eXBlKQotICAgICAgICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlKSBvciBk
YXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUpCi0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCog
YXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICAgICAgaWYgKCFlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJkYXNoYm9hcmQt
cmVnaW9uKCIpIHx8ICFhcmdzKSB7Ci0gICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbnVtQXJncyA9IGFyZ3MtPnNp
emUoKTsKLSAgICAgICAgaWYgKChudW1BcmdzICE9IGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNv
dW50ICYmIG51bUFyZ3MgIT0gKGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50KjItMSkpCi0g
ICAgICAgICAgICAmJiAobnVtQXJncyAhPSBkYXNoYm9hcmRSZWdpb25TaG9ydFBhcmFtZXRlckNv
dW50ICYmIG51bUFyZ3MgIT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQqMi0x
KSkpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZpcnN0IGFyZyBpcyBhIGxhYmVsLgotICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSogYXJnID0gYXJncy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoYXJnLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi0+
bV9sYWJlbCA9IGFyZy0+c3RyaW5nOwotCi0gICAgICAgIC8vIFNlY29uZCBhcmcgaXMgYSB0eXBl
LgotICAgICAgICBhcmcgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGFyZyA9IHNraXBDb21tYUlu
RGFzaGJvYXJkUmVnaW9uKGFyZ3MpOwotICAgICAgICBpZiAoYXJnLT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSgqYXJnLCAiY2lyY2xlIikpCi0gICAgICAgICAgICByZWdpb24tPm1faXND
aXJjbGUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSgqYXJnLCAicmVjdGFuZ2xlIikpCi0gICAgICAgICAgICByZWdpb24tPm1faXNSZWN0YW5n
bGUgPSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi0+bV9nZW9tZXRy
eVR5cGUgPSBhcmctPnN0cmluZzsKLQotICAgICAgICBpZiAobnVtQXJncyA9PSBkYXNoYm9hcmRS
ZWdpb25TaG9ydFBhcmFtZXRlckNvdW50IHx8IG51bUFyZ3MgPT0gKGRhc2hib2FyZFJlZ2lvblNo
b3J0UGFyYW1ldGVyQ291bnQqMi0xKSkgewotICAgICAgICAgICAgLy8gVGhpcyBvcmlnaW5hbGx5
IHVzZWQgQ1NTVmFsdWVJbnZhbGlkIGJ5IGFjY2lkZW50LiBJdCBtaWdodCBiZSBtb3JlIGxvZ2lj
YWwgdG8gdXNlIHNvbWV0aGluZyBlbHNlLgotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBhbW91bnQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUludmFsaWQpOwotCi0gICAgICAgICAgICByZWdpb24tPnNldFRvcChh
bW91bnQuY29weVJlZigpKTsKLSAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmlnaHQoYW1vdW50LmNv
cHlSZWYoKSk7Ci0gICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbShhbW91bnQuY29weVJlZigp
KTsKLSAgICAgICAgICAgIHJlZ2lvbi0+c2V0TGVmdChXVEZNb3ZlKGFtb3VudCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTmV4dCBmb3VyIGFyZ3VtZW50cyBtdXN0IGJlIG9m
ZnNldCBudW1iZXJzCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewot
ICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBhcmcg
PSBza2lwQ29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKLQotICAgICAgICAgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIGFyZ1dpdGhDYWxjdWxhdGlvbigqYXJnKTsKLSAgICAgICAgICAg
ICAgICB2YWxpZCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmdX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJnV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9w
KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQotICAg
ICAgICAgICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAyKQotICAgICAgICAgICAgICAgICAgICByZWdpb24t
PnNldEJvdHRvbShXVEZNb3ZlKGFtb3VudCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRMZWZ0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJncy0+bmV4dCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICB9Ci0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShSZWZQdHI8RGFzaGJvYXJkUmVnaW9u
PihXVEZNb3ZlKGZpcnN0UmVnaW9uKSkpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHZhbGlk
OwotfQotCi0jZW5kaWYgLyogRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKSAqLwotCi0jaWYgRU5B
QkxFKENTU19HUklEX0xBWU9VVCkKLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1w
bGF0ZUFyZWFzQ29sdW1uTmFtZXMoY29uc3QgU3RyaW5nJiBncmlkUm93TmFtZXMpCi17Ci0gICAg
QVNTRVJUKCFncmlkUm93TmFtZXMuaXNFbXB0eSgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb2x1
bW5OYW1lczsKLSAgICAvLyBVc2luZyBTdHJpbmdJbXBsIHRvIGF2b2lkIGNoZWNrcyBhbmQgaW5k
aXJlY3Rpb24gaW4gZXZlcnkgY2FsbCB0byBTdHJpbmc6Om9wZXJhdG9yW10uCi0gICAgU3RyaW5n
SW1wbCYgdGV4dCA9ICpncmlkUm93TmFtZXMuaW1wbCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRleHQubGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIHdoaWxlIChpbmRl
eCA8IGxlbmd0aCkgewotICAgICAgICBpZiAodGV4dFtpbmRleF0gIT0gJyAnICYmIHRleHRbaW5k
ZXhdICE9ICcuJykgewotICAgICAgICAgICAgdW5zaWduZWQgZ3JpZEFyZWFTdGFydCA9IGluZGV4
OwotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHRleHRbaW5kZXhdICE9ICcg
JyAmJiB0ZXh0W2luZGV4XSAhPSAnLicpCi0gICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAg
ICAgICAgIGNvbHVtbk5hbWVzLmFwcGVuZCh0ZXh0LnN1YnN0cmluZyhncmlkQXJlYVN0YXJ0LCBp
bmRleCAtIGdyaWRBcmVhU3RhcnQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRleHRbaW5kZXhdID09ICcuJykgewotICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoICYmIHRleHRbaW5kZXhdID09ICcuJykKLSAgICAgICAgICAgICAgICAr
K2luZGV4OwotICAgICAgICAgICAgY29sdW1uTmFtZXMuYXBwZW5kKCIuIik7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgICsraW5kZXg7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGNvbHVtbk5hbWVzOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxh
dGVBcmVhc1JvdyhOYW1lZEdyaWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgY29uc3QgdW5zaWduZWQg
cm93Q291bnQsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlk
TGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghY3VycmVudFZhbHVlIHx8IGN1cnJlbnRW
YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGdyaWRSb3dOYW1lcyA9IGN1cnJlbnRWYWx1ZS0+c3Ry
aW5nOwotICAgIGlmIChncmlkUm93TmFtZXMuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5OYW1lcyA9IHBh
cnNlR3JpZFRlbXBsYXRlQXJlYXNDb2x1bW5OYW1lcyhncmlkUm93TmFtZXMpOwotICAgIGlmICgh
Y29sdW1uQ291bnQpIHsKLSAgICAgICAgY29sdW1uQ291bnQgPSBjb2x1bW5OYW1lcy5zaXplKCk7
Ci0gICAgICAgIEFTU0VSVChjb2x1bW5Db3VudCk7Ci0gICAgfSBlbHNlIGlmIChjb2x1bW5Db3Vu
dCAhPSBjb2x1bW5OYW1lcy5zaXplKCkpIHsKLSAgICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGlz
IGludmFsaWQgaXMgYWxsIHRoZSByb3dzIGRvbid0IGhhdmUgdGhlIG51bWJlciBvZiBjb2x1bW5z
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBjdXJy
ZW50Q29sdW1uID0gMDsgY3VycmVudENvbHVtbiA8IGNvbHVtbkNvdW50OyArK2N1cnJlbnRDb2x1
bW4pIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBncmlkQXJlYU5hbWUgPSBjb2x1bW5OYW1lc1tj
dXJyZW50Q29sdW1uXTsKLQotICAgICAgICAvLyBVbmFtZWQgYXJlYXMgYXJlIGFsd2F5cyB2YWxp
ZCAod2UgY29uc2lkZXIgdGhlbSB0byBiZSAxeDEpLgotICAgICAgICBpZiAoZ3JpZEFyZWFOYW1l
ID09ICIuIikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGhhbmRsZSBz
ZXZlcmFsIGdyaWQgYXJlYXMgd2l0aCB0aGUgc2FtZSBuYW1lIGF0IG9uY2UgdG8gc2ltcGxpZnkg
dGhlIHZhbGlkYXRpb24gY29kZS4KLSAgICAgICAgdW5zaWduZWQgbG9va0FoZWFkQ29sdW1uOwot
ICAgICAgICBmb3IgKGxvb2tBaGVhZENvbHVtbiA9IGN1cnJlbnRDb2x1bW4gKyAxOyBsb29rQWhl
YWRDb2x1bW4gPCBjb2x1bW5Db3VudDsgKytsb29rQWhlYWRDb2x1bW4pIHsKLSAgICAgICAgICAg
IGlmIChjb2x1bW5OYW1lc1tsb29rQWhlYWRDb2x1bW5dICE9IGdyaWRBcmVhTmFtZSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZ3JpZEFyZWFJdGVy
YXRvciA9IGdyaWRBcmVhTWFwLmZpbmQoZ3JpZEFyZWFOYW1lKTsKLSAgICAgICAgaWYgKGdyaWRB
cmVhSXRlcmF0b3IgPT0gZ3JpZEFyZWFNYXAuZW5kKCkpCi0gICAgICAgICAgICBncmlkQXJlYU1h
cC5hZGQoZ3JpZEFyZWFOYW1lLCBHcmlkQXJlYShHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRl
R3JpZFNwYW4ocm93Q291bnQsIHJvd0NvdW50ICsgMSksIEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVm
aW5pdGVHcmlkU3BhbihjdXJyZW50Q29sdW1uLCBsb29rQWhlYWRDb2x1bW4pKSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgR3JpZEFyZWEmIGdyaWRBcmVhID0gZ3JpZEFyZWFJdGVyYXRv
ci0+dmFsdWU7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2tzIHRlc3QgdGhh
dCB0aGUgZ3JpZCBhcmVhIGlzIGEgc2luZ2xlIGZpbGxlZC1pbiByZWN0YW5nbGUuCi0gICAgICAg
ICAgICAvLyAxLiBUaGUgbmV3IHJvdyBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXNseSBwYXJz
ZWQgcm93LgotICAgICAgICAgICAgaWYgKHJvd0NvdW50ICE9IGdyaWRBcmVhLnJvd3MuZW5kTGlu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gMi4g
VGhlIG5ldyBhcmVhIHN0YXJ0cyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNs
eSBwYXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRBcmVh
LmNvbHVtbnMuc3RhcnRMaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICAvLyAzLiBUaGUgbmV3IGFyZWEgZW5kcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBh
cyB0aGUgcHJldmlvdXNseSBwYXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChsb29rQWhlYWRD
b2x1bW4gIT0gZ3JpZEFyZWEuY29sdW1ucy5lbmRMaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBncmlkQXJlYS5yb3dzID0gR3JpZFNwYW46OnRyYW5z
bGF0ZWREZWZpbml0ZUdyaWRTcGFuKGdyaWRBcmVhLnJvd3Muc3RhcnRMaW5lKCksIGdyaWRBcmVh
LnJvd3MuZW5kTGluZSgpICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudENvbHVtbiA9
IGxvb2tBaGVhZENvbHVtbiAtIDE7Ci0gICAgfQotCi0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
R3JpZFRlbXBsYXRlQXJlYXMoKQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIH0KLQotICAgIE5hbWVkR3JpZEFyZWFNYXAg
Z3JpZEFyZWFNYXA7Ci0gICAgdW5zaWduZWQgcm93Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNv
bHVtbkNvdW50ID0gMDsKLQotICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0g
ICAgICAgIGlmICghcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhncmlkQXJlYU1hcCwgcm93Q291
bnQsIGNvbHVtbkNvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAr
K3Jvd0NvdW50OwotICAgIH0KLQotICAgIGlmICghcm93Q291bnQgfHwgIWNvbHVtbkNvdW50KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBDU1NHcmlkVGVtcGxhdGVBcmVh
c1ZhbHVlOjpjcmVhdGUoZ3JpZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCk7Ci19Ci0j
ZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KLQotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0
JiBhcmdzLCBib29sIGNvdW50ZXJzKQotewotICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBhcmdzLnNp
emUoKTsKLSAgICBpZiAoY291bnRlcnMgJiYgbnVtQXJncyAhPSAzICYmIG51bUFyZ3MgIT0gNSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFjb3VudGVycyAmJiBudW1BcmdzICE9
IDEgJiYgbnVtQXJncyAhPSAzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1Bh
cnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOwotICAgIGlmIChhcmd1bWVudC0+
dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBhdXRvIGlkZW50aWZpZXIgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgq
YXJndW1lbnQpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZXBhcmF0b3I7Ci0g
ICAgaWYgKCFjb3VudGVycykKLSAgICAgICAgc2VwYXJhdG9yID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShTdHJpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpOwotICAgIGVsc2UgewotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgICAg
ICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3Vt
ZW50LT5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgc2VwYXJhdG9yID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmFy
Z3VtZW50KTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RTdHls
ZTsKLSAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgIGlmICghYXJndW1lbnQpIC8vIE1h
a2UgdGhlIGxpc3Qgc3R5bGUgZGVmYXVsdCBkZWNpbWFsCi0gICAgICAgIGxpc3RTdHlsZSA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGVj
aW1hbCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAg
ICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIENTU1ZhbHVlSUQgbGlzdFN0
eWxlSUQgPSBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NT
VmFsdWVOb25lIHx8IChhcmd1bWVudC0+aWQgPj0gQ1NTVmFsdWVEaXNjICYmIGFyZ3VtZW50LT5p
ZCA8PSBDU1NWYWx1ZUthdGFrYW5hSXJvaGEpKQotICAgICAgICAgICAgbGlzdFN0eWxlSUQgPSBh
cmd1bWVudC0+aWQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIGxpc3RTdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGxpc3RTdHlsZUlEKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoV1RGTW92ZShpZGVu
dGlmaWVyKSwgbGlzdFN0eWxlLnJlbGVhc2VOb25OdWxsKCksIHNlcGFyYXRvci5yZWxlYXNlTm9u
TnVsbCgpKSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdz
ID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0KLSAgICBpZiAoIWVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcmVjdCh0LCByLCBiLCBsKSB8fCByZWN0
KHQgciBiIGwpCi0gICAgaWYgKGFyZ3MtPnNpemUoKSAhPSA0ICYmIGFyZ3MtPnNpemUoKSAhPSA3
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7
Ci0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgaW50IGkgPSAwOwotICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICB3aGlsZSAoYXJndW1lbnQpIHsK
LSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFy
Z3VtZW50KTsKLSAgICAgICAgdmFsaWQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7Ci0gICAgICAg
IGlmICghdmFsaWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBsZW5ndGggPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAg
ICAgIGlmIChpID09IDApCi0gICAgICAgICAgICByZWN0LT5zZXRUb3AoV1RGTW92ZShsZW5ndGgp
KTsKLSAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQotICAgICAgICAgICAgcmVjdC0+c2V0UmlnaHQo
V1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgZWxzZSBpZiAoaSA9PSAyKQotICAgICAgICAgICAg
cmVjdC0+c2V0Qm90dG9tKFdURk1vdmUobGVuZ3RoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlY3QtPnNldExlZnQoV1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykg
ewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0gICAgaWYgKHZhbGlkKSB7Ci0gICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShXVEZNb3ZlKHJlY3QpKSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIHZvaWQgY29tcGxldGVCb3JkZXJSYWRpaShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJhZGlpWzRdKQotewotICAgIGlmIChyYWRpaVszXSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghcmFkaWlbMl0pIHsKLSAgICAgICAgaWYgKCFyYWRpaVsxXSkKLSAgICAgICAgICAgIHJhZGlp
WzFdID0gcmFkaWlbMF07Ci0gICAgICAgIHJhZGlpWzJdID0gcmFkaWlbMF07Ci0gICAgfQotICAg
IHJhZGlpWzNdID0gcmFkaWlbMV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZWZh
Y3RvcmVkIHdpdGggQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cy4KLS8vIENTU1BhcnNlcjo6
cGFyc2VCb3JkZXJSYWRpdXMgY29udGFpbnMgc3VwcG9ydCBmb3Igc29tZSBsZWdhY3kgcmFkaXVz
IGNvbnN0cnVjdGlvbi4KLVJlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IENTU1BhcnNlcjo6cGFy
c2VJbnNldFJvdW5kZWRDb3JuZXJzKFJlZjxDU1NCYXNpY1NoYXBlSW5zZXQ+JiYgc2hhcGUsIENT
U1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQg
PSBhcmdzLm5leHQoKTsKLQotICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVmVjdG9yPENTU1BhcnNlclZhbHVlKj4gcmFkaXVzQXJndW1lbnRzOwotICAg
IHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICByYWRpdXNBcmd1bWVudHMuYXBwZW5kKGFyZ3Vt
ZW50KTsKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBudW0gPSByYWRpdXNBcmd1bWVudHMuc2l6ZSgpOwotICAgIGlmICghbnVtIHx8IG51bSA+
IDkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiByYWRpaVsyXVs0XTsKLQotICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJTbGFzaCA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgIENTU1BhcnNl
clZhbHVlJiB2YWx1ZSA9ICpyYWRpdXNBcmd1bWVudHMuYXQoaSk7Ci0gICAgICAgIGlmICh2YWx1
ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcikgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlWYWx1ZSAhPSAnLycpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgICAgIGlmICghaSB8fCBpbmRleEFmdGVyU2xhc2ggfHwgaSArIDEgPT0gbnVtIHx8IG51
bSA+IGkgKyA1KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAg
ICBpbmRleEFmdGVyU2xhc2ggPSBpICsgMTsKLSAgICAgICAgICAgIGNvbXBsZXRlQm9yZGVyUmFk
aWkocmFkaWlbMF0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
dmFsdWUpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBhdXRvIHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpCi0g
ICAgICAgICAgICByYWRpaVswXVtpXSA9IFdURk1vdmUocmFkaXVzKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmFkaWlbMV1baSAtIGluZGV4QWZ0ZXJTbGFzaF0gPSBXVEZNb3ZlKHJhZGl1
cyk7Ci0gICAgfQotCi0gICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpIHsKLSAgICAgICAgY29tcGxl
dGVCb3JkZXJSYWRpaShyYWRpaVswXSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA0OyArK2kpCi0gICAgICAgICAgICByYWRpaVsxXVtpXSA9IHJhZGlpWzBdW2ldOwotICAgIH0g
ZWxzZQotICAgICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzFdKTsKLQotICAgIHNoYXBl
LT5zZXRUb3BMZWZ0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlp
WzBdWzBdKSwgV1RGTW92ZShyYWRpaVsxXVswXSkpKTsKLSAgICBzaGFwZS0+c2V0VG9wUmlnaHRS
YWRpdXMoY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMV0pLCBXVEZN
b3ZlKHJhZGlpWzFdWzFdKSkpOwotICAgIHNoYXBlLT5zZXRCb3R0b21SaWdodFJhZGl1cyhjcmVh
dGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShyYWRpaVswXVsyXSksIFdURk1vdmUocmFkaWlb
MV1bMl0pKSk7Ci0gICAgc2hhcGUtPnNldEJvdHRvbUxlZnRSYWRpdXMoY3JlYXRlUHJpbWl0aXZl
VmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlpWzFdWzNdKSkpOwot
Ci0gICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZUlu
c2V0PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYg
YXJncykKLXsKLSAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNTaGFwZUluc2V0OjpjcmVhdGUoKTsK
LQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOwotICAgIFZl
Y3RvcjxSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+ID4gd2lkdGhBcmd1bWVudHM7Ci0gICAgYm9vbCBo
YXNSb3VuZGVkSW5zZXQgPSBmYWxzZTsKLSAgICB3aGlsZSAoYXJndW1lbnQpIHsKLSAgICAgICAg
aWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYXJndW1lbnQtPnN0cmluZywgInJvdW5kIikpIHsK
LSAgICAgICAgICAgIGhhc1JvdW5kZWRJbnNldCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIFVuaXRzIHVuaXRGbGFncyA9IEZMZW5ndGggfCBGUGVyY2Vu
dDsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIHVuaXRGbGFncykgfHwgd2lkdGhBcmd1bWVudHMuc2l6ZSgpID4gNCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHdpZHRoQXJndW1lbnRzLmFwcGVuZChjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAg
ICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHdpZHRoQXJn
dW1lbnRzLnNpemUoKSkgewotICAgIGNhc2UgMTogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hh
cGVTaXplMVZhbHVlKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgMjogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXplMlZh
bHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1sx
XSkpOwotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIGNhc2UgMzogewotICAgICAgICBz
aGFwZS0+dXBkYXRlU2hhcGVTaXplM1ZhbHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwg
V1RGTW92ZSh3aWR0aEFyZ3VtZW50c1sxXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgNDogewotICAgICAgICBzaGFwZS0+dXBk
YXRlU2hhcGVTaXplNFZhbHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3
aWR0aEFyZ3VtZW50c1sxXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pLCBXVEZNb3ZlKHdp
ZHRoQXJndW1lbnRzWzNdKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzUm91bmRlZEluc2V0
KQotICAgICAgICByZXR1cm4gcGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFdURk1vdmUoc2hhcGUp
LCBhcmdzKTsKLSAgICByZXR1cm4gV1RGTW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNoYXBlUmFkaXVzKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVDbG9zZXN0U2lkZSB8fCB2YWx1
ZS5pZCA9PSBDU1NWYWx1ZUZhcnRoZXN0U2lkZSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLQotICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAo
IXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci19Ci0KLVJlZlB0cjxD
U1NCYXNpY1NoYXBlQ2lyY2xlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQ
YXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgLy8gY2lyY2xlKHJhZGl1cykKLSAgICAvLyBj
aXJjbGUocmFkaXVzIGF0IDxwb3NpdGlvbj4pCi0gICAgLy8gY2lyY2xlKGF0IDxwb3NpdGlvbj4p
Ci0gICAgLy8gd2hlcmUgcG9zaXRpb24gZGVmaW5lcyBjZW50ZXJYIGFuZCBjZW50ZXJZIHVzaW5n
IGEgQ1NTIDxwb3NpdGlvbj4gZGF0YSB0eXBlLgotICAgIGF1dG8gc2hhcGUgPSBDU1NCYXNpY1No
YXBlQ2lyY2xlOjpjcmVhdGUoKTsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50
ID0gYXJncy5jdXJyZW50KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBjYWxsIHRvIHBhcnNlRmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25z
dW1lIGFsbCBvZiB0aGUKLSAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdHdv
LiBUaHVzLCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQotICAgICAgICAvLyBpbmRpY2F0ZXMg
YW4gaW52YWxpZCBwcm9kdWN0aW9uLgotICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAoIWFyZ3MuY3Vy
cmVudEluZGV4KCkgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKLSAgICAgICAgICAg
IGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMo
KmFyZ3VtZW50KSkgewotICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXMocmFkaXVzLnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdCAmJiBhcmdzLm5leHQoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOwotICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwotICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRp
b24oYXJncywgY2VudGVyWCwgY2VudGVyWSk7Ci0gICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBj
ZW50ZXJZICYmICFhcmdzLmN1cnJlbnQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRD
ZW50ZXJYKGNlbnRlclgucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUt
PnNldENlbnRlclkoY2VudGVyWS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHNoYXBl
KTsKLX0KLQotUmVmUHRyPENTU0Jhc2ljU2hhcGVFbGxpcHNlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIC8vIGVsbGlw
c2UocmFkaXVzWCkKLSAgICAvLyBlbGxpcHNlKHJhZGl1c1ggYXQgPHBvc2l0aW9uPikKLSAgICAv
LyBlbGxpcHNlKHJhZGl1c1ggcmFkaXVzWSkKLSAgICAvLyBlbGxpcHNlKHJhZGl1c1ggcmFkaXVz
WSBhdCA8cG9zaXRpb24+KQotICAgIC8vIGVsbGlwc2UoYXQgPHBvc2l0aW9uPikKLSAgICAvLyB3
aGVyZSBwb3NpdGlvbiBkZWZpbmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBv
c2l0aW9uPiBkYXRhIHR5cGUuCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVFbGxpcHNl
OjpjcmVhdGUoKTsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy5j
dXJyZW50KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBjYWxsIHRvIHBhcnNlRmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25zdW1lIGFsbCBv
ZiB0aGUKLSAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdGhyZWUuIFRodXMs
IGFuIGluZGV4IGdyZWF0ZXIgdGhhbiB0d28KLSAgICAgICAgLy8gaW5kaWNhdGVzIGFuIGludmFs
aWQgcHJvZHVjdGlvbi4KLSAgICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4KCkgPiAyKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4
KCkgPCAyICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZUF0KSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKCphcmd1
bWVudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNoYXBlLT5yYWRpdXNYKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXNYKHJhZGl1cy5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRp
dXNZKHJhZGl1cy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQgfHwgIWFyZ3MubmV4dCgp
KSAvLyBleHBlY3RpbmcgZWxsaXBzZSguLiBhdCA8cG9zaXRpb24+KQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJY
OwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAgICAgIHBh
cnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgsIGNlbnRlclkpOwotICAgICAgICBpZiAoIWNl
bnRlclggfHwgIWNlbnRlclkgfHwgYXJncy5jdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWChjZW50ZXJYLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShjZW50ZXJZLnJlbGVhc2VOb25OdWxs
KCkpOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHNoYXBlKTsKLX0KLQotUmVmUHRyPENT
U0Jhc2ljU2hhcGVQb2x5Z29uPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NT
UGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLnNpemUo
KTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBz
aGFwZSA9IENTU0Jhc2ljU2hhcGVQb2x5Z29uOjpjcmVhdGUoKTsKLQotICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOwotICAgIGlmIChhcmd1bWVudC0+aWQgPT0g
Q1NTVmFsdWVFdmVub2RkIHx8IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbnplcm8pIHsKLSAg
ICAgICAgc2hhcGUtPnNldFdpbmRSdWxlKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQg
PyBSVUxFX0VWRU5PREQgOiBSVUxFX05PTlpFUk8pOwotCi0gICAgICAgIGlmICghaXNDb21tYShh
cmdzLm5leHQoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1
bWVudCA9IGFyZ3MubmV4dCgpOwotICAgICAgICBzaXplIC09IDI7Ci0gICAgfQotCi0gICAgLy8g
PGxlbmd0aD4gPGxlbmd0aD4sIC4uLiA8bGVuZ3RoPiA8bGVuZ3RoPiAtPiBlYWNoIHBhaXIgaGFz
IDMgZWxlbWVudHMgZXhjZXB0IHRoZSBsYXN0IG9uZQotICAgIGlmICghc2l6ZSB8fCAoc2l6ZSAl
IDMpIC0gMikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnRYID0gYXJndW1lbnQ7Ci0gICAgd2hpbGUgKGFyZ3VtZW50WCkgewotCi0gICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnRY
KTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGF1dG8geExlbmd0aCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFhXaXRo
Q2FsY3VsYXRpb24pOwotCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFkgPSBhcmdz
Lm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudFkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0
aW9uKCphcmd1bWVudFkpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFlXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgYXV0byB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50WVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgc2hhcGUtPmFwcGVuZFBvaW50
KFdURk1vdmUoeExlbmd0aCksIFdURk1vdmUoeUxlbmd0aCkpOwotCi0gICAgICAgIENTU1BhcnNl
clZhbHVlKiBjb21tYU9yTnVsbCA9IGFyZ3MubmV4dCgpOwotICAgICAgICBpZiAoIWNvbW1hT3JO
dWxsKQotICAgICAgICAgICAgYXJndW1lbnRYID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSBpZiAo
IWlzQ29tbWEoY29tbWFPck51bGwpKSAKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBlbHNlIAotICAgICAgICAgICAgYXJndW1lbnRYID0gYXJncy5uZXh0KCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZVBh
dGg+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUGF0aChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmIChzaXplICE9
IDEgJiYgc2l6ZSAhPSAzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFdpbmRSdWxl
IHdpbmRSdWxlID0gUlVMRV9OT05aRVJPOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50
ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5v
ZGQgfHwgYXJndW1lbnQtPmlkID09IENTU1ZhbHVlTm9uemVybykgewotICAgICAgICB3aW5kUnVs
ZSA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgPyBSVUxFX0VWRU5PREQgOiBSVUxF
X05PTlpFUk87Ci0KLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3MubmV4dCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAg
IH0KLQotICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJ5dGVTdHJlYW0gPSBz
dGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOwotICAgIGlmICghYnVpbGRTVkdQ
YXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcoYXJndW1lbnQtPnN0cmluZywgKmJ5dGVTdHJlYW0sIFVu
YWx0ZXJlZFBhcnNpbmcpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gc2hh
cGUgPSBDU1NCYXNpY1NoYXBlUGF0aDo6Y3JlYXRlKFdURk1vdmUoYnl0ZVN0cmVhbSkpOwotICAg
IHNoYXBlLT5zZXRXaW5kUnVsZSh3aW5kUnVsZSk7Ci0KLSAgICBhcmdzLm5leHQoKTsKLSAgICBy
ZXR1cm4gV1RGTW92ZShzaGFwZSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQm94VmFsdWUoQ1NTVmFs
dWVJRCB2YWx1ZUlkLCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAgICBzd2l0Y2ggKHZhbHVl
SWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQ29udGVudEJveDoKLSAgICBjYXNlIENTU1ZhbHVlUGFk
ZGluZ0JveDoKLSAgICBjYXNlIENTU1ZhbHVlQm9yZGVyQm94OgotICAgIGNhc2UgQ1NTVmFsdWVN
YXJnaW5Cb3g6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ1NTVmFsdWVGaWxsOgot
ICAgIGNhc2UgQ1NTVmFsdWVTdHJva2U6Ci0gICAgY2FzZSBDU1NWYWx1ZVZpZXdCb3g6Ci0gICAg
ICAgIHJldHVybiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aDsKLSAgICBkZWZh
dWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQW5kT3JCb3goQ1NTUHJvcGVydHlJ
RCBwcm9wSWQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKTsKLQotICAgIGJvb2wgc2hhcGVGb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgYm94Rm91
bmQgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlSWQ7Ci0KLSAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIHZhbHVlSWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgIXNoYXBlRm91bmQpIHsKLSAgICAgICAg
ICAgIC8vIHBhcnNlQmFzaWNTaGFwZSBhbHJlYWR5IGFza3MgZm9yIHRoZSBuZXh0IHZhbHVlIGxp
c3QgaXRlbS4KLSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1
ZSA9IHBhcnNlQmFzaWNTaGFwZSgpOwotICAgICAgICAgICAgaWYgKCFzaGFwZVZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHNo
YXBlVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICBzaGFwZUZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0JveFZhbHVlKHZhbHVlSWQsIHByb3BJZCkgJiYgIWJv
eEZvdW5kKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZh
bHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWVJZCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgfQotCi0gICAg
aWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi1SZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcElkKQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotCi0gICAgaWYgKHZh
bHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZUlkKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7
Ci0gICAgaWYgKHZhbHVlSWQgIT0gQ1NTVmFsdWVOb25lICYmIHBhcnNlRmlsbEltYWdlKCptX3Zh
bHVlTGlzdCwgaW1hZ2VWYWx1ZSkpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgcmV0dXJuIGltYWdlVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlQmFzaWNT
aGFwZUFuZE9yQm94KHByb3BJZCk7Ci19Ci0jZW5kaWYKLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQ2xpcFBhdGgoKQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICpt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlk
OwotCi0gICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlLnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuc3Ry
aW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBh
cnNlQmFzaWNTaGFwZUFuZE9yQm94KENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgpOwotfQotCi1S
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlKCkKLXsK
LSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pOwotICAgIENT
U1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotCi0g
ICAgaWYgKCFhcmdzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxDU1NC
YXNpY1NoYXBlPiBzaGFwZTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjaXJjbGUoIikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VC
YXNpY1NoYXBlQ2lyY2xlKCphcmdzKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImVsbGlwc2UoIikpCi0gICAgICAgIHNo
YXBlID0gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZSgqYXJncyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwb2x5Z29uKCIp
KQotICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oKmFyZ3MpOwotICAgIGVs
c2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAicGF0aCgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVQYXRoKCphcmdzKTsK
LSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgImluc2V0KCIpKQotICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZUluc2V0
KCphcmdzKTsKLQotICAgIGlmICghc2hhcGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShzaGFwZS5yZWxlYXNlTm9uTnVsbCgpKTsKLX0KLQotLy8gWyAnZm9u
dC1zdHlsZScgfHwgJ2ZvbnQtdmFyaWFudCcgfHwgJ2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXpl
JyBbIC8gJ2xpbmUtaGVpZ2h0JyBdPyAnZm9udC1mYW1pbHknCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VGb250KGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlz
IGFuIGluaGVyaXQgb3IgaW5pdGlhbCBzb21ld2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YWx1ZUxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX3ZhbHVlTGlzdC0+dmFsdWVBdChpKS0+aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8
IG1fdmFsdWVMaXN0LT52YWx1ZUF0KGkpLT5pZCA9PSBDU1NWYWx1ZUluaXRpYWwpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgQ1NTUHJvcGVydHlGb250KTsKLSAgICAvLyBPcHRpb25hbCBmb250LXN0eWxlLCBmb250LXZh
cmlhbnQgYW5kIGZvbnQtd2VpZ2h0LgotICAgIGJvb2wgZm9udFN0eWxlUGFyc2VkID0gZmFsc2U7
Ci0gICAgYm9vbCBmb250VmFyaWFudFBhcnNlZCA9IGZhbHNlOwotICAgIGJvb2wgZm9udFdlaWdo
dFBhcnNlZCA9IGZhbHNlOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAgICB3aGlsZSAo
KHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKCFmb250U3R5
bGVQYXJzZWQgJiYgaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKENTU1Byb3BlcnR5Rm9u
dFN0eWxlLCB2YWx1ZS0+aWQsIG1fY29udGV4dCwgbV9zdHlsZVNoZWV0KSkgewotICAgICAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7Ci0gICAg
ICAgICAgICBmb250U3R5bGVQYXJzZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFmb250
VmFyaWFudFBhcnNlZCAmJiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykpIHsKLSAgICAgICAgICAgIC8vIEZvbnQgdmFyaWFudCBp
biB0aGUgc2hvcnRoYW5kIGlzIHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0cyBub3JtYWwgb3Ig
c21hbGwtY2Fwcy4KLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlh
bnRDYXBzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgZm9udFZhcmlhbnRQYXJzZWQgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFmb250V2VpZ2h0UGFyc2VkICYmIHBhcnNlRm9udFdl
aWdodChpbXBvcnRhbnQpKQotICAgICAgICAgICAgZm9udFdlaWdodFBhcnNlZCA9IHRydWU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgIH0KLQotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghZm9udFN0eWxlUGFyc2VkKQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotICAgIGlmICghZm9udFZhcmlh
bnRQYXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBz
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgaWYgKCFmb250V2VpZ2h0UGFyc2VkKQot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0
YW50LCB0cnVlKTsKLQotICAgIC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KLSAgICAv
LyA8YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50
YWdlPiB8IGluaGVyaXQKLSAgICBpZiAoIXBhcnNlRm9udFNpemUoaW1wb3J0YW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0Zvcndh
cmRTbGFzaE9wZXJhdG9yKCp2YWx1ZSkpIHsKLSAgICAgICAgLy8gVGhlIGxpbmUtaGVpZ2h0IHBy
b3BlcnR5LgotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VM
aW5lSGVpZ2h0KGltcG9ydGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBp
bXBvcnRhbnQsIHRydWUpOwotCi0gICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZEZhbWlseVZhbHVlID0gcGFyc2VGb250RmFtaWx5KCk7
Ci0gICAgaWYgKCFwYXJzZWRGYW1pbHlWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRGYW1pbHlWYWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotCi0gICAgLy8gRklYTUU6IGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMDMyNC8jZm9udC1wcm9wIHJlcXVpcmVz
IHRoYXQKLSAgICAvLyAiZm9udC1zdHJldGNoIiwgImZvbnQtc2l6ZS1hZGp1c3QiLCBhbmQgImZv
bnQta2VybmluZyIgYmUgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMKLSAgICAvLyBidXQg
d2UgZG9uJ3Qgc2VlbSB0byBzdXBwb3J0IHRoZW0gYXQgdGhlIG1vbWVudC4gVGhleSBzaG91bGQg
YWxzbyBiZSBhZGRlZCBoZXJlIG9uY2UgaW1wbGVtZW50ZWQuCi0gICAgaWYgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wb3J0YW50KQotewot
ICAgIEFTU0VSVChtX3ZhbHVlTGlzdC0+c2l6ZSgpID09IDEpOwotICAgIENTU1ZhbHVlSUQgc3lz
dGVtRm9udElEID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCktPmlkOwotICAgIEFTU0VSVChzeXN0
ZW1Gb250SUQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIHN5c3RlbUZvbnRJRCA8PSBDU1NWYWx1ZVN0
YXR1c0Jhcik7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLQotICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KS0+c3lzdGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7Ci0gICAgaWYgKCFm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gV2UgbXVzdCBzZXQgZm9udCdzIGNvbnN0aXR1ZW50IHByb3BlcnRpZXMsIGV2ZW4gZm9yIHN5
c3RlbSBmb250cywgc28gdGhlIGNhc2NhZGUgZnVuY3Rpb25zIGNvcnJlY3RseS4KLSAgICBTaG9y
dGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZvbnQpOwotICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShmb250RGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uID8g
Q1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSksIGltcG9ydGFudCk7Ci0gICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKSwgaW1wb3J0YW50KTsKLSAgICBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFt
aWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb250
RmFtaWx5TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZh
bWlseVZhbHVlKGZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdCgwKSwgRnJvbVN5c3RlbUZvbnRJRDo6
WWVzKSk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBXVEZNb3ZlKGZv
bnRGYW1pbHlMaXN0KSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOwotfQotCi1jbGFzcyBGb250RmFt
aWx5VmFsdWVCdWlsZGVyIHsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyKENT
U1ZhbHVlTGlzdCYgbGlzdCkKLSAgICAgICAgOiBtX2xpc3QobGlzdCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhZGQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAg
ICAgICBpZiAoIW1fYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2J1aWxkZXIuYXBw
ZW5kKCcgJyk7Ci0KLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAg
bV9idWlsZGVyLmFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYnVpbGRlci5hcHBl
bmQoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAg
IHZvaWQgY29tbWl0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2J1aWxkZXIuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2xpc3QuYXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKG1fYnVpbGRlci50b1N0cmluZygpKSk7
Ci0gICAgICAgIG1fYnVpbGRlci5jbGVhcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJp
bmdCdWlsZGVyIG1fYnVpbGRlcjsKLSAgICBDU1NWYWx1ZUxpc3QmIG1fbGlzdDsKLX07Ci0KLXN0
YXRpYyBib29sIHZhbHVlSXNDU1NLZXl3b3JkKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
LXsKLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBhZGQgInVuc2V0Iiwgd2Ugc2hvdWxkIGhhbmRsZSBp
dCBoZXJlLgotICAgIHJldHVybiB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgdmFsdWUu
aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRGVmYXVsdDsKLX0K
LQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQotewot
ICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAg
Rm9udEZhbWlseVZhbHVlQnVpbGRlciBmYW1pbHlCdWlsZGVyKGxpc3QpOwotICAgIGJvb2wgaW5G
YW1pbHkgPSBmYWxzZTsKLQotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBDU1NQYXJzZXJW
YWx1ZSogbmV4dFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgYm9vbCBuZXh0
VmFsQnJlYWtzRm9udCA9ICFuZXh0VmFsdWUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChuZXh0VmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG5l
eHRWYWx1ZS0+aVZhbHVlID09ICcsJyk7Ci0gICAgICAgIGJvb2wgbmV4dFZhbElzRm9udE5hbWUg
PSBuZXh0VmFsdWUgJiYKLSAgICAgICAgICAgICgobmV4dFZhbHVlLT5pZCA+PSBDU1NWYWx1ZVNl
cmlmICYmIG5leHRWYWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRCb2R5KSB8fAotICAgICAgICAg
ICAgKG5leHRWYWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBu
ZXh0VmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkpOwotCi0gICAg
ICAgIGJvb2wgdmFsdWVJc0tleXdvcmQgPSB2YWx1ZUlzQ1NTS2V5d29yZCgqdmFsdWUpOwotICAg
ICAgICBpZiAodmFsdWVJc0tleXdvcmQgJiYgIWluRmFtaWx5KSB7Ci0gICAgICAgICAgICBpZiAo
bmV4dFZhbEJyZWFrc0ZvbnQpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBuZXh0VmFsdWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVTZXJpZiAmJiB2YWx1ZS0+
aWQgPD0gQ1NTVmFsdWVXZWJraXRCb2R5KSB7Ci0gICAgICAgICAgICBpZiAoaW5GYW1pbHkpCi0g
ICAgICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQoKTsKLSAgICAgICAgICAgICAgICBmYW1p
bHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpbkZhbWlseSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIC8vIFN0cmluZ3Mg
bmV2ZXIgc2hhcmUgaW4gYSBmYW1pbHkgbmFtZS4KLSAgICAgICAgICAgIGluRmFtaWx5ID0gZmFs
c2U7Ci0gICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVl
KHZhbHVlLT5zdHJpbmcpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgICAgICBpZiAoaW5GYW1pbHkpCi0g
ICAgICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlRm9udEZhbWlseVZhbHVlKHZhbHVlLT5zdHJpbmcpKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaW5GYW1p
bHkgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5leHRWYWx1ZSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGlmIChuZXh0VmFsQnJlYWtzRm9udCkgewotICAgICAgICAgICAg
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5j
b21taXQoKTsKLSAgICAgICAgICAgIGluRmFtaWx5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAobmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAgICAgICB2YWx1ZSA9IG5leHRW
YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZhbWls
eUJ1aWxkZXIuY29tbWl0KCk7Ci0KLSAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKLX0KLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlTGluZUhlaWdodChib29sIGltcG9ydGFudCkKLXsKLSAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7
Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7Ci0g
ICAgYm9vbCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwotICAgIC8vIG5vcm1hbCB8IDxudW1iZXI+
IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0Ci0gICAgaWYgKGlkID09IENTU1Zh
bHVlTm9ybWFsKQotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgZWxzZQotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgIGlm
ICh2YWxpZFByaW1pdGl2ZSAmJiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkgfHwgaW5TaG9ydGhhbmQo
KSkpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxp
ZFByaW1pdGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwotICAgIHJl
dHVybiB2YWxpZFByaW1pdGl2ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUo
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIGJvb2wgdmFsaWRQcmltaXRpdmUg
PSBmYWxzZTsKLSAgICAvLyA8YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVu
Z3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKLSAgICBpZiAoaWQgPj0gQ1NTVmFsdWVYeFNt
YWxsICYmIGlkIDw9IENTU1ZhbHVlTGFyZ2VyKQotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7Ci0gICAgZWxzZQotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7Ci0gICAgaWYg
KHZhbGlkUHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgp
KSkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFBy
aW1pdGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwotICAgIHJldHVy
biB2YWxpZFByaW1pdGl2ZTsKLX0KLQotc3RhdGljIENTU1ZhbHVlSUQgY3JlYXRlRm9udFdlaWdo
dFZhbHVlS2V5d29yZChpbnQgd2VpZ2h0KQotewotICAgIEFTU0VSVCghKHdlaWdodCAlIDEwMCkg
JiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oQ1NTVmFsdWUxMDAgKyB3ZWlnaHQgLyAxMDAgLSAx
KTsKLSAgICBBU1NFUlQodmFsdWUgPj0gQ1NTVmFsdWUxMDAgJiYgdmFsdWUgPD0gQ1NTVmFsdWU5
MDApOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFdl
aWdodChib29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoKHZhbHVlLmlkID49IENTU1ZhbHVlTm9ybWFs
KSAmJiAodmFsdWUuaWQgPD0gQ1NTVmFsdWU5MDApKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUuaWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFs
dWUpOwotICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2Vy
IHwgRk5vbk5lZywgQ1NTUXVpcmtzTW9kZSkpIHsKLSAgICAgICAgaW50IHdlaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAg
IGlmICghKHdlaWdodCAlIDEwMCkgJiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7
Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNyZWF0ZUZvbnRXZWlnaHRW
YWx1ZUtleXdvcmQod2VpZ2h0KSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUZvbnRTeW50aGVzaXMoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gbm9uZSB8
IFsgd2VpZ2h0IHx8IHN0eWxlIF0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVO
b25lKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpcywgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBlbmNvdW50ZXJlZFdlaWdodCA9IGZhbHNlOwot
ICAgIGJvb2wgZW5jb3VudGVyZWRTdHlsZSA9IGZhbHNlOwotICAgIHdoaWxlICh2YWx1ZSkgewot
ICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0
OgotICAgICAgICAgICAgZW5jb3VudGVyZWRXZWlnaHQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdHlsZToKLSAgICAgICAgICAgIGVuY291bnRlcmVk
U3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBpZiAoZW5jb3VudGVyZWRXZWlnaHQpCi0gICAgICAg
IGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVdlaWdodCkpOwotICAgIGlmIChlbmNvdW50ZXJlZFN0eWxlKQotICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTdHlsZSkpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5
bnRoZXNpcywgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0JiB2YWx1
ZUxpc3QpCi17Ci0gICAgYXV0byB1cmlWYWx1ZSA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0
ZShjb21wbGV0ZVVSTChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5zdHJpbmcpKTsKLQotICAgIENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1
ZSkgewotICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUodXJpVmFsdWUpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpIHsKLSAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgdmFsdWVMaXN0LmFwcGVuZChXVEZNb3ZlKHVyaVZhbHVl
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+dW5pdCAh
PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImZvcm1hdCgiKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gRklYTUU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy1m
b250cy0yMDExMTAwNC8gc2F5cyB0aGF0IGZvcm1hdCgpIGNvbnRhaW5zIGEgY29tbWEtc2VwYXJh
dGVkIGxpc3Qgb2Ygc3RyaW5ncywKLSAgICAvLyBidXQgQ1NTRm9udEZhY2VTcmNWYWx1ZSBzdG9y
ZXMgb25seSBvbmUgZm9ybWF0LiBBbGxvd2luZyBvbmUgZm9ybWF0IGZvciBub3cuCi0gICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAg
IGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSB8fCAoYXJncy0+Y3VycmVudCgpLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HICYmIGFyZ3MtPmN1cnJlbnQoKS0+dW5p
dCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJncy0+Y3VycmVudCgpLT5zdHJpbmcpOwotICAg
IHZhbHVlTGlzdC5hcHBlbmQoV1RGTW92ZSh1cmlWYWx1ZSkpOwotICAgIHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQotICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VGb250RmFjZVNyY0xvY2FsKENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0KQotewotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5h
cmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXJncy0+c2l6ZSgpID09IDEgJiYgYXJncy0+Y3VycmVudCgp
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICB2YWx1ZUxp
c3QuYXBwZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZ3MtPmN1cnJlbnQo
KS0+c3RyaW5nKSk7Ci0gICAgZWxzZSBpZiAoYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiBsb2NhbFZhbHVlID0gYXJncy0+Y3VycmVu
dCgpOyBsb2NhbFZhbHVlOyBsb2NhbFZhbHVlID0gYXJncy0+bmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAobG9jYWxWYWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghYnVpbGRlci5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGxvY2FsVmFsdWUtPnN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdmFsdWVMaXN0LmFwcGVuZChDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChidWls
ZGVyLnRvU3RyaW5nKCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAg
ICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1
ZS0+aVZhbHVlID09ICcsJykKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNy
YygpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7Ci0KLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VGb250RmFjZVNyY1VSSSh2YWx1
ZXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAibG9jYWwoIikpIHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VGb250RmFjZVNyY0xvY2FsKHZhbHVlcykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVNyYywgV1RGTW92ZSh2YWx1ZXMpLCBt
X2ltcG9ydGFudCk7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKQotewotICAg
IGF1dG8gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAg
IGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gICAgYm9vbCBvcGVyYXRvckV4cGVjdGVkID0gZmFsc2U7
Ci0gICAgZm9yICg7IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IG1fdmFsdWVMaXN0LT5uZXh0KCks
IG9wZXJhdG9yRXhwZWN0ZWQgPSAhb3BlcmF0b3JFeHBlY3RlZCkgewotICAgICAgICBpZiAob3Bl
cmF0b3JFeHBlY3RlZCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50
KCktPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VTklDT0RFX1JBTkdFKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpLT5zdHJpbmc7Ci0gICAgICAgIFVDaGFyMzIgZnJvbSA9IDA7Ci0g
ICAgICAgIFVDaGFyMzIgdG8gPSAwOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSByYW5nZVN0
cmluZy5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobGVuZ3RoIDwgMykgewotICAgICAgICAgICAg
ZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
dW5zaWduZWQgaSA9IDI7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBVQ2hhciBjID0gcmFuZ2VTdHJpbmdbaV07Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLScgfHwg
YyA9PSAnPycpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmcm9tICo9IDE2
OwotICAgICAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgICAg
IGZyb20gKz0gYyAtICcwJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0g
J0YnKQotICAgICAgICAgICAgICAgIGZyb20gKz0gMTAgKyBjIC0gJ0EnOwotICAgICAgICAgICAg
ZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0gICAgICAgICAgICAgICAgZnJvbSArPSAx
MCArIGMgLSAnYSc7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmYWlsZWQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBpZiAoaSA9PSBsZW5ndGgpCi0gICAgICAgICAgICB0byA9IGZyb207Ci0g
ICAgICAgIGVsc2UgaWYgKHJhbmdlU3RyaW5nW2ldID09ICc/JykgewotICAgICAgICAgICAgdW5z
aWduZWQgc3BhbiA9IDE7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiByYW5nZVN0
cmluZ1tpXSA9PSAnPycpIHsKLSAgICAgICAgICAgICAgICBzcGFuICo9IDE2OwotICAgICAgICAg
ICAgICAgIGZyb20gKj0gMTY7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGkgPCBsZW5ndGgpCi0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIHRvID0gZnJvbSArIHNwYW4gLSAxOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKGxlbmd0aCA8IGkgKyAyKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGkrKzsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgVUNoYXIgYyA9IHJhbmdlU3RyaW5nW2ldOwotICAgICAgICAgICAgICAgIHRvICo9IDE2Owot
ICAgICAgICAgICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgICAgICAgICAg
ICAgICAgdG8gKz0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICdBJyAm
JiBjIDw9ICdGJykKLSAgICAgICAgICAgICAgICAgICAgdG8gKz0gMTAgKyBjIC0gJ0EnOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAgICAgICAg
ICAgICAgICB0byArPSAxMCArIGMgLSAnYSc7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChmcm9tIDw9IHRvKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShmcm9tLCB0bykpOwotICAgIH0KLSAgICBpZiAo
ZmFpbGVkIHx8ICF2YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UsIFdURk1vdmUodmFsdWVzKSwgbV9p
bXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyB3aGljaCBmb3JtIGEgdmFsaWQgZG91YmxlCi0vLyBhbmQgYXJlIHRlcm1p
bmF0ZWQgYnkgdGhlIGdpdmVuIHRlcm1pbmF0b3IgY2hhcmFjdGVyCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbnQgY2hlY2tGb3JWYWxpZERvdWJsZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hh
ciB0ZXJtaW5hdG9yKQotewotICAgIGludCBsZW5ndGggPSBlbmQgLSBzdHJpbmc7Ci0gICAgaWYg
KGxlbmd0aCA8IDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCBkZWNpbWFsTWFya1Nl
ZW4gPSBmYWxzZTsKLSAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJt
aW5hdG9yKSB7Ci0gICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkg
ewotICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykK
LSAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGRlY2ltYWxNYXJrU2VlbiAmJiBwcm9jZXNzZWRMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gcHJvY2Vzc2VkTGVuZ3RoOwotfQotCi0vLyBSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBmb3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQot
Ly8gdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGludCBwYXJzZURvdWJsZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hh
ciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZhbHVlKQotewotICAgIGludCBsZW5ndGggPSBjaGVja0Zv
clZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKTsKLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgcG9zaXRpb24gPSAwOwotICAgIGRvdWJsZSBs
b2NhbFZhbHVlID0gMDsKLQotICAgIC8vIFRoZSBjb25zdW1lZCBjaGFyYWN0ZXJzIGhlcmUgYXJl
IGd1YXJhbnRlZWQgdG8gYmUKLSAgICAvLyBBU0NJSSBkaWdpdHMgd2l0aCBvciB3aXRob3V0IGEg
ZGVjaW1hbCBtYXJrCi0gICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoOyArK3Bvc2l0aW9uKSB7
Ci0gICAgICAgIGlmIChzdHJpbmdbcG9zaXRpb25dID09ICcuJykKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1ZSAqIDEwICsgc3RyaW5nW3Bvc2l0aW9u
XSAtICcwJzsKLSAgICB9Ci0KLSAgICBpZiAoKytwb3NpdGlvbiA9PSBsZW5ndGgpIHsKLSAgICAg
ICAgdmFsdWUgPSBsb2NhbFZhbHVlOwotICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLQot
ICAgIGRvdWJsZSBmcmFjdGlvbiA9IDA7Ci0gICAgZG91YmxlIHNjYWxlID0gMTsKLQotICAgIHdo
aWxlIChwb3NpdGlvbiA8IGxlbmd0aCAmJiBzY2FsZSA8IE1BWF9TQ0FMRSkgewotICAgICAgICBm
cmFjdGlvbiA9IGZyYWN0aW9uICogMTAgKyBzdHJpbmdbcG9zaXRpb24rK10gLSAnMCc7Ci0gICAg
ICAgIHNjYWxlICo9IDEwOwotICAgIH0KLQotICAgIHZhbHVlID0gbG9jYWxWYWx1ZSArIGZyYWN0
aW9uIC8gc2NhbGU7Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNv
bnN0IENoYXJhY3RlclR5cGUqJiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29u
c3QgY2hhciB0ZXJtaW5hdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBleHBlY3Qs
IGludCYgdmFsdWUpCi17Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHN0cmlu
ZzsKLSAgICBkb3VibGUgbG9jYWxWYWx1ZSA9IDA7Ci0gICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNl
OwotICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCi0g
ICAgICAgIGN1cnJlbnQrKzsKLSAgICBpZiAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPT0g
Jy0nKSB7Ci0gICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAgICAgY3VycmVudCsrOwotICAg
IH0KLSAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpjdXJyZW50KSkgewotICAgICAgICBkb3VibGUgbmV3VmFsdWUgPSBsb2NhbFZhbHVl
ICogMTAgKyAqY3VycmVudCsrIC0gJzAnOwotICAgICAgICBpZiAobmV3VmFsdWUgPj0gMjU1KSB7
Ci0gICAgICAgICAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMjU1LgotICAgICAgICAgICAgbG9jYWxW
YWx1ZSA9IDI1NTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0FTQ0lJ
RGlnaXQoKmN1cnJlbnQpKQotICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGxvY2FsVmFsdWUgPSBuZXdWYWx1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoY3VycmVudCA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChleHBlY3QgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50
ID09ICcuJyB8fCAqY3VycmVudCA9PSAnJScpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoKmN1cnJlbnQgPT0gJy4nKSB7Ci0gICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRo
ZSBpbnRlZ3JhbCBwYXJ0LCB0cnkgdG8gcGFyc2UKLSAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBh
cnQgb2YgdGhlIHBlcmNlbnRhZ2UgdmFsdWUuCi0gICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0g
MDsKLSAgICAgICAgaW50IG51bUNoYXJhY3RlcnNQYXJzZWQgPSBwYXJzZURvdWJsZShjdXJyZW50
LCBlbmQsICclJywgcGVyY2VudGFnZSk7Ci0gICAgICAgIGlmICghbnVtQ2hhcmFjdGVyc1BhcnNl
ZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudCArPSBudW1DaGFy
YWN0ZXJzUGFyc2VkOwotICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRhZ2U7Ci0gICAgfQot
Ci0gICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYg
KmN1cnJlbnQgIT0gJyUnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKmN1cnJl
bnQgPT0gJyUnKSB7Ci0gICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRTsKLSAgICAgICAgbG9jYWxWYWx1ZSA9IGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4w
OwotICAgICAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMjU1IGZvciBwZXJjZW50YWdlcyBvdmVyIDEw
MCUKLSAgICAgICAgaWYgKGxvY2FsVmFsdWUgPiAyNTUpCi0gICAgICAgICAgICBsb2NhbFZhbHVl
ID0gMjU1OwotICAgICAgICBjdXJyZW50Kys7Ci0gICAgfSBlbHNlCi0gICAgICAgIGV4cGVjdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwotCi0gICAgd2hpbGUgKGN1cnJlbnQgIT0g
ZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKLSAgICAgICAgY3VycmVudCsrOwotICAgIGlm
IChjdXJyZW50ID09IGVuZCB8fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAvLyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVyby4KLSAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4obG9jYWxWYWx1ZSk7Ci0gICAg
c3RyaW5nID0gY3VycmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50aEFscGhhKGNvbnN0
IENoYXJhY3RlclR5cGUqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKLXsKLSAgICAvLyAiMC5Y
IgotICAgIGlmIChsZW5ndGggPT0gMyAmJiBzdHJpbmdbMF0gPT0gJzAnICYmIHN0cmluZ1sxXSA9
PSAnLicgJiYgaXNBU0NJSURpZ2l0KHN0cmluZ1syXSkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gIi5YIgotICAgIGlmIChsZW5ndGggPT0gMiAmJiBzdHJpbmdbMF0gPT0gJy4nICYm
IGlzQVNDSUlEaWdpdChzdHJpbmdbMV0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IENoYXJhY3RlclR5cGUqJiBzdHJp
bmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBpbnQm
IHZhbHVlKQotewotICAgIHdoaWxlIChzdHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJp
bmcpKQotICAgICAgICArK3N0cmluZzsKLQotICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKLQot
ICAgIGlmIChzdHJpbmcgIT0gZW5kICYmICpzdHJpbmcgPT0gJy0nKSB7Ci0gICAgICAgIG5lZ2F0
aXZlID0gdHJ1ZTsKLSAgICAgICAgKytzdHJpbmc7Ci0gICAgfQotCi0gICAgdmFsdWUgPSAwOwot
Ci0gICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKLSAgICBpZiAobGVuZ3RoIDwgMikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmluZ1tsZW5ndGggLSAxXSAhPSB0ZXJt
aW5hdG9yIHx8ICFpc0FTQ0lJRGlnaXQoc3RyaW5nW2xlbmd0aCAtIDJdKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcx
JyAmJiBzdHJpbmdbMF0gIT0gJy4nKSB7Ci0gICAgICAgIGlmIChjaGVja0ZvclZhbGlkRG91Ymxl
KHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKSkgewotICAgICAgICAgICAgdmFsdWUgPSBuZWdhdGl2
ZSA/IDAgOiAyNTU7Ci0gICAgICAgICAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKGxlbmd0aCA9PSAyICYmIHN0cmluZ1swXSAhPSAnLicpIHsKLSAgICAgICAgdmFsdWUgPSAh
bmVnYXRpdmUgJiYgc3RyaW5nWzBdID09ICcxJyA/IDI1NSA6IDA7Ci0gICAgICAgIHN0cmluZyA9
IGVuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzVGVudGhBbHBo
YShzdHJpbmcsIGxlbmd0aCAtIDEpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgdGVudGhB
bHBoYVZhbHVlc1tdID0geyAwLCAyNSwgNTEsIDc2LCAxMDIsIDEyNywgMTUzLCAxNzksIDIwNCwg
MjMwIH07Ci0gICAgICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogdGVudGhBbHBoYVZhbHVlc1tz
dHJpbmdbbGVuZ3RoIC0gMl0gLSAnMCddOwotICAgICAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGRvdWJsZSBhbHBoYSA9IDA7Ci0gICAgaWYgKCFw
YXJzZURvdWJsZShzdHJpbmcsIGVuZCwgdGVybWluYXRvciwgYWxwaGEpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGFs
cGhhICogbmV4dGFmdGVyKDI1Ni4wLCAwLjApKTsKLSAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAobGVuZ3RoIDwgNSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBjaGFyYWN0ZXJzWzRdID09ICcoJwotICAgICAgICAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMF0sICdyJykKLSAgICAgICAgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCi0gICAgICAgICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQotICAgICAgICAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbM10sICdhJyk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVS
R0IoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIGlmIChsZW5ndGggPCA0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNo
YXJhY3RlcnNbM10gPT0gJygnCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
Y2hhcmFjdGVyc1swXSwgJ3InKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGNoYXJhY3RlcnNbMV0sICdnJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bChjaGFyYWN0ZXJzWzJdLCAnYicpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBmYXN0UGFyc2VDb2xvckludGVybmFsKFJHQkEzMiYg
cmdiLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGggLCBi
b29sIHN0cmljdCkKLXsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV4cGVjdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKLSAgICAKLSAgICBpZiAoIXN0cmljdCAm
JiBsZW5ndGggPj0gMykgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAg
ICAgICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3Ro
IC0gMSwgcmdiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5n
dGgsIHJnYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBUcnkgcmdiYSgpIHN5bnRheC4KLSAgICBpZiAobWlnaHRCZVJHQkEoY2hhcmFj
dGVycywgbGVuZ3RoKSkgewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0g
Y2hhcmFjdGVycyArIDU7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJh
Y3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgIGludCByZWQ7Ci0gICAgICAgIGludCBncmVlbjsKLSAg
ICAgICAgaW50IGJsdWU7Ci0gICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBy
ZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBh
bHBoYSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50ICE9
IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmdiID0gbWFrZVJHQkEo
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBUcnkgcmdiKCkgc3ludGF4LgotICAgIGlmIChtaWdodEJlUkdCKGNoYXJhY3RlcnMs
IGxlbmd0aCkpIHsKLSAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IGNoYXJh
Y3RlcnMgKyA0OwotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBjaGFyYWN0ZXJz
ICsgbGVuZ3RoOwotICAgICAgICBpbnQgcmVkOwotICAgICAgICBpbnQgZ3JlZW47Ci0gICAgICAg
IGludCBibHVlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVu
dCwgZW5kLCAnLCcsIGV4cGVjdCwgcmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBl
eHBlY3QsIGdyZWVuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFw
YXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJnYiA9IG1ha2VSR0IocmVkLCBn
cmVlbiwgYmx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLWJvb2wgQ1NTUGFyc2Vy
OjpmYXN0UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlwZSYgbmFtZSwgYm9v
bCBzdHJpY3QpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBi
b29sIHBhcnNlUmVzdWx0OwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICBwYXJzZVJlc3VsdCA9IGZhc3RQ
YXJzZUNvbG9ySW50ZXJuYWwocmdiLCBuYW1lLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgc3RyaWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhcnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChyZ2IsIG5hbWUuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgc3RyaWN0KTsKLQotICAgIGlmIChw
YXJzZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUcnkgbmFtZWQgY29s
b3JzLgotICAgIENvbG9yIHRjOwotICAgIHRjLnNldE5hbWVkQ29sb3IobmFtZSk7Ci0gICAgaWYg
KHRjLmlzVmFsaWQoKSkgewotICAgICAgICByZ2IgPSB0Yy5yZ2IoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWlubGluZSBkb3VibGUg
Q1NTUGFyc2VyOjpwYXJzZWREb3VibGUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENh
bGN1bGF0aW9uKQotewotICAgIHJldHVybiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpID8gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKS0+ZG91YmxlVmFsdWUoKSA6
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6aXNDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZh
bHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICYmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImNhbGMoIikKLSAg
ICAgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiLXdlYmtpdC1jYWxjKCIpKTsKLX0KLQotaW5saW5lIGludCBDU1NQYXJzZXI6OmNv
bG9ySW50RnJvbVZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bikKLXsKLSAgICBib29sIGlzUGVyY2VudDsKLSAgICAKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3Vs
YXRpb24uY2FsY3VsYXRpb24oKSkKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24uY2FsY3VsYXRpb24oKS0+Y2F0ZWdvcnkoKSA9PSBDYWxjUGVyY2VudDsKLSAgICBlbHNl
Ci0gICAgICAgIGlzUGVyY2VudCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7Ci0KLSAgICBjb25zdCBkb3VibGUg
ZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgIAot
ICAgIGlmIChkb3VibGVWYWx1ZSA8PSAwLjApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYg
KGlzUGVyY2VudCkgewotICAgICAgICBpZiAoZG91YmxlVmFsdWUgPj0gMTAwLjApCi0gICAgICAg
ICAgICByZXR1cm4gMjU1OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihkb3VibGVW
YWx1ZSAqIDI1Ni4wIC8gMTAwLjApOwotICAgIH0KLQotICAgIGlmIChkb3VibGVWYWx1ZSA+PSAy
NTUuMCkKLSAgICAgICAgcmV0dXJuIDI1NTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGRvdWJsZVZhbHVlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJz
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEp
Ci17Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxh
dGlvbigqYXJncy0+Y3VycmVudCgpKTsKLSAgICBVbml0cyB1bml0VHlwZSA9IEZVbmtub3duOwot
ICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUgYW5kIGl0cyB0eXBlCi0gICAgaWYgKHZhbGlkYXRl
VW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9k
ZSkpCi0gICAgICAgIHVuaXRUeXBlID0gRkludGVnZXI7Ci0gICAgZWxzZSBpZiAodmFsaWRhdGVV
bml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2Rl
KSkKLSAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoZmly
c3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBp
KyspIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+
bmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZh
bHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRG
cm9tVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgIH0KLSAgICBpZiAocGFyc2VB
bHBoYSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdz
LT5uZXh0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVV
bml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFy
c2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgLy8gQ29udmVydCB0
aGUgZmxvYXRpbmcgcG9pbnRlciBudW1iZXIgb2YgYWxwaGEgdG8gYW4gaW50ZWdlciBpbiB0aGUg
cmFuZ2UgWzAsIDI1NiksCi0gICAgICAgIC8vIHdpdGggYW4gZXF1YWwgZGlzdHJpYnV0aW9uIGFj
cm9zcyBhbGwgMjU2IHZhbHVlcy4KLSAgICAgICAgY29sb3JBcnJheVszXSA9IHN0YXRpY19jYXN0
PGludD4oc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIGRvdWJsZVZhbHVl
KSkgKiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIENTUzMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgYSBIU0wg
Y29sb3IgYXMKLS8vIGhzbCg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2VudD4pCi0vLyBhbmQg
d2l0aCBhbHBoYSwgdGhlIGZvcm1hdCBpcwotLy8gaHNsYSg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8
cGVyY2VudD4sIDxudW1iZXI+KQotLy8gVGhlIGZpcnN0IHZhbHVlLCBIVUUsIGlzIGluIGFuIGFu
Z2xlIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MAotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
SFNMUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwg
Ym9vbCBwYXJzZUFscGhhKQotewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVl
LmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7Ci0gICAgLy8gR2V0IHRoZSBm
aXJzdCB2YWx1ZQotICAgIGlmICghdmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gbm9ybWFsaXplIHRoZSBIdWUgdmFsdWUgYW5kIGNoYW5nZSBpdCB0byBiZSBiZXR3ZWVu
IDAgYW5kIDEuMAotICAgIGNvbG9yQXJyYXlbMF0gPSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNl
ZERvdWJsZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgJSAzNjApICsgMzYwKSAlIDM2
MCkgLyAzNjAuMDsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7ICsraSkgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Ci0gICAgICAg
IGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6
bWluPGRvdWJsZT4oMTAwLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkg
LyAxMDAuMDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKLSAgICB9Ci0g
ICAgaWYgKHBhcnNlQWxwaGEpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJn
dW1lbnQgPSAqYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0
ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAh
PSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOwotICAgICAgICBp
ZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NTU3Ry
aWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlb
M10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91Ymxl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlKQotewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50Owot
ICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZSA/ICp2YWx1ZSA6ICptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjKTsKLX0KLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBSR0JB
MzImIGMpCi17Ci0gICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIKLSAgICAgICAgJiYgdmFsdWUuZlZhbHVlID49IDAuICYm
IHZhbHVlLmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6
OmZvcm1hdCgiJTA2ZCIsIHN0YXRpY19jYXN0PGludD4oKHZhbHVlLmZWYWx1ZSsuNSkpKTsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHN0cmljdCBwYXJzaW5nIGZvciBTVkcgYXMg
d2VsbC4KLSAgICAgICAgaWYgKCFmYXN0UGFyc2VDb2xvcihjLCBzdHIsIGluU3RyaWN0TW9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSEVYQ09MT1IKLSAgICAgICAgfHwgdmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UCi0gICAgICAgIHx8IChpblF1
aXJrc01vZGUoKSAmJiB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5T
SU9OKSkgewotICAgICAgICBpZiAoIWZhc3RQYXJzZUNvbG9yKGMsIHZhbHVlLnN0cmluZywgaW5T
dHJpY3RNb2RlKCkgJiYgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5h
cmdzCi0gICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiByZ2Ig
KyB0d28gY29tbWFzICovCi0gICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmdiKCIpKSB7Ci0gICAgICAgIGludCBjb2xvclZhbHVl
c1szXTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1
ZXMsIGZhbHNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYyA9IG1ha2VS
R0IoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0
aW9uCi0gICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncwotICAgICAgICAgICAgJiYg
dmFsdWUuZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA3IC8qIHJnYmEgKyB0aHJlZSBjb21tYXMg
Ki8KLSAgICAgICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAicmdiYSgiKSkgewotICAgICAgICAgICAgaW50IGNvbG9yVmFsdWVzWzRd
OwotICAgICAgICAgICAgaWYgKCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1
ZXMsIHRydWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGMg
PSBtYWtlUkdCQShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJd
LCBjb2xvclZhbHVlc1szXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdz
Ci0gICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDUgLyogaHNs
ICsgdHdvIGNvbW1hcyAqLwotICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2woIikpIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBjb2xvclZhbHVlc1szXTsKLSAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0ZXJzKHZh
bHVlLCBjb2xvclZhbHVlcywgZmFsc2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZh
bHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIDEuMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUu
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAgICYmIHZhbHVlLmZ1
bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgp
ID09IDcgLyogaHNsYSArIHRocmVlIGNvbW1hcyAqLwotICAgICAgICAgICAgJiYgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2xhKCIpKSB7Ci0g
ICAgICAgICAgICBkb3VibGUgY29sb3JWYWx1ZXNbNF07Ci0gICAgICAgICAgICBpZiAoIXBhcnNl
SFNMUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFs
dWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgY2xhc3MgdHJhY2tzIHBhcnNpbmcgc3RhdGUgZm9y
IHNoYWRvdyB2YWx1ZXMuICBJZiBpdCBnb2VzIG91dCBvZiBzY29wZSAoZS5nLiwgZHVlIHRvIGFu
IGVhcmx5IHJldHVybikKLS8vIHdpdGhvdXQgdGhlIGFsbG93QnJlYWsgYml0IGJlaW5nIHNldCwg
dGhlbiBpdCB3aWxsIGNsZWFuIHVwIGFsbCBvZiB0aGUgb2JqZWN0cyBhbmQgZGVzdHJveSB0aGVt
Lgotc3RydWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7Ci0gICAgU2hhZG93UGFyc2VDb250ZXh0KENT
U1Byb3BlcnR5SUQgcHJvcCwgQ1NTUGFyc2VyJiBwYXJzZXIpCi0gICAgICAgIDogcHJvcGVydHko
cHJvcCkKLSAgICAgICAgLCBtX3BhcnNlcihwYXJzZXIpCi0gICAgICAgICwgYWxsb3dYKHRydWUp
Ci0gICAgICAgICwgYWxsb3dZKGZhbHNlKQotICAgICAgICAsIGFsbG93Qmx1cihmYWxzZSkKLSAg
ICAgICAgLCBhbGxvd1NwcmVhZChmYWxzZSkKLSAgICAgICAgLCBhbGxvd0NvbG9yKHRydWUpCi0g
ICAgICAgICwgYWxsb3dTdHlsZShwcm9wID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8
IHByb3AgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cpCi0gICAgICAgICwgYWxsb3dCcmVhayh0cnVl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFsbG93TGVuZ3RoKCkgeyByZXR1cm4gYWxsb3dY
IHx8IGFsbG93WSB8fCBhbGxvd0JsdXIgfHwgYWxsb3dTcHJlYWQ7IH0KLQotICAgIHZvaWQgY29t
bWl0VmFsdWUoKQotICAgIHsKLSAgICAgICAgLy8gSGFuZGxlIHRoZSAsLCBjYXNlIGdyYWNlZnVs
bHkgYnkgZG9pbmcgbm90aGluZy4KLSAgICAgICAgaWYgKHggfHwgeSB8fCBibHVyIHx8IHNwcmVh
ZCB8fCBjb2xvciB8fCBzdHlsZSkgewotICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCi0gICAgICAg
ICAgICAgICAgdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwot
Ci0gICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGN1cnJlbnQgc2hhZG93IHZhbHVlIGFuZCBh
ZGQgaXQgdG8gdGhlIGxpc3QuCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NTaGFkb3dW
YWx1ZTo6Y3JlYXRlKFdURk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoYmx1ciksIFdURk1v
dmUoc3ByZWFkKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBOb3cgcmVzZXQgZm9yIHRoZSBuZXh0IHNoYWRvdyB2YWx1ZS4KLSAgICAg
ICAgeCA9IG51bGxwdHI7Ci0gICAgICAgIHkgPSBudWxscHRyOwotICAgICAgICBibHVyID0gbnVs
bHB0cjsKLSAgICAgICAgc3ByZWFkID0gbnVsbHB0cjsKLSAgICAgICAgc3R5bGUgPSBudWxscHRy
OwotICAgICAgICBjb2xvciA9IG51bGxwdHI7Ci0KLSAgICAgICAgYWxsb3dYID0gdHJ1ZTsKLSAg
ICAgICAgYWxsb3dDb2xvciA9IHRydWU7Ci0gICAgICAgIGFsbG93QnJlYWsgPSB0cnVlOwotICAg
ICAgICBhbGxvd1kgPSBmYWxzZTsKLSAgICAgICAgYWxsb3dCbHVyID0gZmFsc2U7Ci0gICAgICAg
IGFsbG93U3ByZWFkID0gZmFsc2U7Ci0gICAgICAgIGFsbG93U3R5bGUgPSBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNo
YWRvdzsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdExlbmd0aChDU1NQYXJzZXI6OlZhbHVlV2l0
aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIGF1dG8g
cHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgIGlmIChhbGxvd1gpIHsKLSAgICAgICAgICAg
IHggPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93WCA9IGZhbHNl
OwotICAgICAgICAgICAgYWxsb3dZID0gdHJ1ZTsKLSAgICAgICAgICAgIGFsbG93Q29sb3IgPSBm
YWxzZTsKLSAgICAgICAgICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93
QnJlYWsgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvd1kpIHsKLSAgICAgICAgICAg
IHkgPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93WSA9IGZhbHNl
OwotICAgICAgICAgICAgYWxsb3dCbHVyID0gdHJ1ZTsKLSAgICAgICAgICAgIGFsbG93Q29sb3Ig
PSB0cnVlOwotICAgICAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5
V2Via2l0Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OwotICAg
ICAgICAgICAgYWxsb3dCcmVhayA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dCbHVy
KSB7Ci0gICAgICAgICAgICBibHVyID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
ICAgICBhbGxvd0JsdXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93U3ByZWFkID0gcHJvcGVy
dHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlCb3hTaGFkb3c7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dTcHJlYWQpIHsKLSAgICAgICAg
ICAgIHNwcmVhZCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dT
cHJlYWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Q29sb3Io
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkKLSAgICB7Ci0gICAgICAgIGNvbG9yID0g
dmFsOwotICAgICAgICBhbGxvd0NvbG9yID0gZmFsc2U7Ci0gICAgICAgIGlmIChhbGxvd1gpIHsK
LSAgICAgICAgICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93QnJlYWsg
PSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9IGZhbHNl
OwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93U3R5
bGUgPSBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9
PSBDU1NQcm9wZXJ0eUJveFNoYWRvdzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29t
bWl0U3R5bGUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc3R5bGUgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7
Ci0gICAgICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKGFsbG93WCkKLSAgICAg
ICAgICAgIGFsbG93QnJlYWsgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBh
bGxvd0JsdXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93U3ByZWFkID0gZmFsc2U7Ci0gICAg
ICAgICAgICBhbGxvd0NvbG9yID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5OwotICAgIENTU1BhcnNlciYgbV9wYXJzZXI7Ci0KLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzcHJlYWQ7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbG9yOwotCi0gICAgYm9vbCBhbGxvd1g7Ci0gICAgYm9vbCBhbGxvd1k7Ci0g
ICAgYm9vbCBhbGxvd0JsdXI7Ci0gICAgYm9vbCBhbGxvd1NwcmVhZDsKLSAgICBib29sIGFsbG93
Q29sb3I7Ci0gICAgYm9vbCBhbGxvd1N0eWxlOyAvLyBpbnNldCBvciBub3QuCi0gICAgYm9vbCBh
bGxvd0JyZWFrOwotfTsKLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNo
YWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQ1NTUHJvcGVydHlJRCBwcm9wSWQp
Ci17Ci0gICAgU2hhZG93UGFyc2VDb250ZXh0IGNvbnRleHQocHJvcElkLCAqdGhpcyk7Ci0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlOwotICAgIHdoaWxlICgodmFsdWUgPSB2YWx1ZUxpc3QuY3Vy
cmVudCgpKSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbigqdmFsdWUpOwotICAgICAgICAvLyBDaGVjayBmb3IgYSBjb21tYSBicmVhayBmaXJzdC4K
LSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcikgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pVmFsdWUgIT0gJywnIHx8ICFjb250ZXh0LmFsbG93QnJl
YWspIHsKLSAgICAgICAgICAgICAgICAvLyBPdGhlciBvcGVyYXRvcnMgYXJlbid0IGxlZ2FsIG9y
IHdlIGFyZW4ndCBkb25lIHdpdGggdGhlIGN1cnJlbnQgc2hhZG93Ci0gICAgICAgICAgICAgICAg
Ly8gdmFsdWUuICBUcmVhdCBhcyBpbnZhbGlkLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRv
ZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgdmFsdWVzLgotICAgICAgICAgICAgaWYgKHByb3BJZCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0LgotICAg
ICAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsK
LSAgICAgICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3QgZ2V0IG9uZS4g
SW52YWxpZC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAgICAvLyBCbHVyIHJhZGl1cyBt
dXN0IGJlIG5vbi1uZWdhdGl2ZS4KLSAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAm
JiAhdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgICAgIC8vIEEgbGVuZ3RoIGlzIGFsbG93ZWQgaGVyZS4gIENvbnN0cnVjdCB0aGUgdmFsdWUg
YW5kIGFkZCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TGVuZ3RoKHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbnNl
dCkgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFsbG93U3R5bGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0U3R5bGUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhl
IG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4KLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkQ29sb3I7Ci0gICAgICAg
ICAgICBib29sIGlzQ29sb3IgPSAoaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUodmFsdWUtPmlkKSB8
fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5p
ZCA+PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1
ZVdlYmtpdFRleHQgJiYgaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKLSAgICAgICAgICAgIGlmIChpc0NvbG9yKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFsbG93Q29sb3IpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKLSAgICAgICAg
ICAgICAgICAvLyBJdCdzIG5vdCBidWlsdC1pbi4gVHJ5IHRvIHBhcnNlIGl0IGFzIGEgY29sb3Iu
Ci0gICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbHVlKTsKLQotICAg
ICAgICAgICAgaWYgKCFwYXJzZWRDb2xvciB8fCAhY29udGV4dC5hbGxvd0NvbG9yKQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9y
IGxlbmd0aCBhbmQgaXMgaW52YWxpZCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCi0K
LSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOwotICAgIH0KLQot
ICAgIGlmIChjb250ZXh0LmFsbG93QnJlYWspIHsKLSAgICAgICAgY29udGV4dC5jb21taXRWYWx1
ZSgpOwotICAgICAgICBpZiAoY29udGV4dC52YWx1ZXMgJiYgY29udGV4dC52YWx1ZXMtPmxlbmd0
aCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29udGV4dC52YWx1ZXMpOwotICAgIH0K
LQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VSZWZsZWN0
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBib3gtcmVm
bGVjdDogPGRpcmVjdGlvbj4gPG9mZnNldD4gPG1hc2s+Ci0KLSAgICAvLyBEaXJlY3Rpb24gY29t
ZXMgZmlyc3QuCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlQWJvdmU6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVCZWxvdzoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxlZnQ6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGUgb2Zmc2V0IGNvbWVzIG5leHQuCi0gICAgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0OwotICAg
IGlmICghdmFsdWUpCi0gICAgICAgIG9mZnNldCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7
Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvZmZzZXQg
PSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
IH0KLQotICAgIC8vIE5vdyBmb3IgdGhlIG1hc2suCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtYXNr
OwotICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsdWUpIHsKLSAg
ICAgICAgaWYgKCFwYXJzZUJvcmRlckltYWdlKHByb3BJZCwgbWFzaykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NSZWZsZWN0
VmFsdWU6OmNyZWF0ZShkaXJlY3Rpb24ucmVsZWFzZU5vbk51bGwoKSwgb2Zmc2V0LnJlbGVhc2VO
b25OdWxsKCksIFdURk1vdmUobWFzaykpLCBpbXBvcnRhbnQpOwotICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsZXgo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAoIWFy
Z3Muc2l6ZSgpIHx8IGFyZ3Muc2l6ZSgpID4gMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgdW5zZXRWYWx1ZSA9IC0xOwotICAgIGRvdWJsZSBmbGV4R3Jv
dyA9IHVuc2V0VmFsdWU7Ci0gICAgZG91YmxlIGZsZXhTaHJpbmsgPSB1bnNldFZhbHVlOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmxleEJhc2lzOwotCi0gICAgd2hpbGUgKENTU1Bh
cnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpKSB7Ci0gICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAg
IGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9u
TmVnKSkgewotICAgICAgICAgICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCi0gICAgICAg
ICAgICAgICAgZmxleEdyb3cgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24p
OwotICAgICAgICAgICAgZWxzZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQotICAgICAg
ICAgICAgICAgIGZsZXhTaHJpbmsgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pOwotICAgICAgICAgICAgZWxzZSBpZiAoIXBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMg
b2YgMCAoc2FucyB1bml0cykgaWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2
ZSBhbHJlYWR5IGJlZW4gc2V0LgotICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxs
b3cgMyBudW1iZXJzIHdpdGhvdXQgdW5pdHMgaWYgdGhlIGxhc3QgdmFsdWUgaXMgMC4gRS5nLiwg
ZmxleDoxIDEgMSBpcyBpbnZhbGlkLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKSkK
LSAgICAgICAgICAgIGZsZXhCYXNpcyA9IHBhcnNlVmFsaWRQcmltaXRpdmUoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS5pZCwgYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vdCBhIHZhbGlkIGFyZyBmb3IgZmxleC4KLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBhcmdzLm5leHQoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgZmxleEdyb3cg
PSAxOwotICAgIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgIGZsZXhTaHJp
bmsgPSAxOwotICAgIGlmICghZmxleEJhc2lzKQotICAgICAgICBmbGV4QmFzaXMgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4R3JvdywgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvRmxvYXQoZmxleEdyb3cpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlGbGV4U2hyaW5rLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KGNsYW1wVG9GbG9hdChmbGV4U2hyaW5rKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
LCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEJhc2lzLCBmbGV4
QmFzaXMucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKLSAgICBCb3JkZXJJbWFnZVBhcnNl
Q29udGV4dCgpCi0gICAgOiBtX2NhbkFkdmFuY2UoZmFsc2UpCi0gICAgLCBtX2FsbG93Q29tbWl0
KHRydWUpCi0gICAgLCBtX2FsbG93SW1hZ2UodHJ1ZSkKLSAgICAsIG1fYWxsb3dJbWFnZVNsaWNl
KHRydWUpCi0gICAgLCBtX2FsbG93UmVwZWF0KHRydWUpCi0gICAgLCBtX2FsbG93Rm9yd2FyZFNs
YXNoT3BlcmF0b3IoZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVXaWR0aChmYWxzZSkKLSAgICAsIG1f
cmVxdWlyZU91dHNldChmYWxzZSkKLSAgICB7fQotCi0gICAgYm9vbCBjYW5BZHZhbmNlKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5BZHZhbmNlOyB9Ci0gICAgdm9pZCBzZXRDYW5BZHZhbmNlKGJvb2wg
Y2FuQWR2YW5jZSkgeyBtX2NhbkFkdmFuY2UgPSBjYW5BZHZhbmNlOyB9Ci0KLSAgICBib29sIGFs
bG93Q29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0NvbW1pdDsgfQotICAgIGJvb2wgYWxs
b3dJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dJbWFnZTsgfQotICAgIGJvb2wgYWxsb3dJ
bWFnZVNsaWNlKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ltYWdlU2xpY2U7IH0KLSAgICBib29s
IGFsbG93UmVwZWF0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1JlcGVhdDsgfQotICAgIGJvb2wg
YWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGb3J3YXJk
U2xhc2hPcGVyYXRvcjsgfQotCi0gICAgYm9vbCByZXF1aXJlV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3JlcXVpcmVXaWR0aDsgfQotICAgIGJvb2wgcmVxdWlyZU91dHNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVxdWlyZU91dHNldDsgfQotCi0gICAgdm9pZCBjb21taXRJbWFnZShSZWZQdHI8Q1NT
VmFsdWU+JiYgaW1hZ2UpCi0gICAgewotICAgICAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7
Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dDb21taXQgPSB0
cnVlOwotICAgICAgICBtX2FsbG93SW1hZ2UgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3Ig
PSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICBtX2Fs
bG93SW1hZ2VTbGljZSA9ICFtX2ltYWdlU2xpY2U7Ci0gICAgICAgIG1fYWxsb3dSZXBlYXQgPSAh
bV9yZXBlYXQ7Ci0gICAgfQotICAgIHZvaWQgY29tbWl0SW1hZ2VTbGljZShSZWZQdHI8Q1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlPiYmIHNsaWNlKQotICAgIHsKLSAgICAgICAgbV9pbWFnZVNsaWNl
ID0gV1RGTW92ZShzbGljZSk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAg
IG1fYWxsb3dDb21taXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSB0cnVlOwotICAg
ICAgICBtX2FsbG93SW1hZ2VTbGljZSA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0
ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBtX2Fs
bG93UmVwZWF0ID0gIW1fcmVwZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdEZvcndhcmRTbGFz
aE9wZXJhdG9yKCkKLSAgICB7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAg
IG1fYWxsb3dDb21taXQgPSBtX2FsbG93SW1hZ2UgPSBtX2FsbG93SW1hZ2VTbGljZSA9IG1fYWxs
b3dSZXBlYXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBmYWxzZTsKLSAgICAgICAg
aWYgKCFtX2JvcmRlclNsaWNlKSB7Ci0gICAgICAgICAgICBtX3JlcXVpcmVXaWR0aCA9IHRydWU7
Ci0gICAgICAgICAgICBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fcmVxdWlyZU91dHNldCA9IHRydWU7Ci0gICAgICAgICAgICBtX3JlcXVp
cmVXaWR0aCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgY29tbWl0Qm9yZGVy
V2lkdGgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHNsaWNlKQotICAgIHsKLSAgICAgICAg
bV9ib3JkZXJTbGljZSA9IFdURk1vdmUoc2xpY2UpOwotICAgICAgICBtX2NhbkFkdmFuY2UgPSB0
cnVlOwotICAgICAgICBtX2FsbG93Q29tbWl0ID0gbV9hbGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9y
ID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSBtX3JlcXVpcmVXaWR0aCA9IG1f
cmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsK
LSAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9Ci0gICAgdm9pZCBjb21t
aXRCb3JkZXJPdXRzZXQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIG91dHNldCkKLSAgICB7
Ci0gICAgICAgIG1fb3V0c2V0ID0gV1RGTW92ZShvdXRzZXQpOwotICAgICAgICBtX2NhbkFkdmFu
Y2UgPSB0cnVlOwotICAgICAgICBtX2FsbG93Q29tbWl0ID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxv
d0ltYWdlU2xpY2UgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3JlcXVpcmVXaWR0
aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9p
bWFnZTsKLSAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9Ci0gICAgdm9p
ZCBjb21taXRSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYmIHJlcGVhdCkKLSAgICB7Ci0gICAgICAg
IG1fcmVwZWF0ID0gV1RGTW92ZShyZXBlYXQpOwotICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVl
OwotICAgICAgICBtX2FsbG93Q29tbWl0ID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd1JlcGVhdCA9
IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJl
T3V0c2V0ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gIW1faW1hZ2VTbGlj
ZTsKLSAgICAgICAgbV9hbGxvd0ltYWdlID0gIW1faW1hZ2U7Ci0gICAgfQotCi0gICAgUmVmPENT
U1ZhbHVlPiBjb21taXRXZWJLaXRCb3JkZXJJbWFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQm9yZGVySW1hZ2VWYWx1ZShtX2ltYWdlLmNvcHlSZWYoKSwgbV9pbWFnZVNsaWNlLmNv
cHlSZWYoKSwgbV9ib3JkZXJTbGljZS5jb3B5UmVmKCksIG1fb3V0c2V0LmNvcHlSZWYoKSwgbV9y
ZXBlYXQuY29weVJlZigpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdEJvcmRlckltYWdlKENT
U1BhcnNlciYgcGFyc2VyLCBib29sIGltcG9ydGFudCkKLSAgICB7Ci0gICAgICAgIGNvbW1pdEJv
cmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwgcGFyc2VyLCBX
VEZNb3ZlKG1faW1hZ2UpLCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVBy
b3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgcGFyc2VyLCBtX2ltYWdlU2xpY2Us
IGltcG9ydGFudCk7Ci0gICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVdpZHRoLCBwYXJzZXIsIG1fYm9yZGVyU2xpY2UsIGltcG9ydGFudCk7Ci0g
ICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91
dHNldCwgcGFyc2VyLCBtX291dHNldCwgaW1wb3J0YW50KTsKLSAgICAgICAgY29tbWl0Qm9yZGVy
SW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0LCBwYXJzZXIsIFdURk1v
dmUobV9yZXBlYXQpLCBpbXBvcnRhbnQpOwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Qm9yZGVy
SW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUGFyc2VyJiBwYXJzZXIsIFJl
ZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUpCi0gICAgICAgICAgICBwYXJzZXIuYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
YXJzZXIuYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAg
Ym9vbCBtX2NhbkFkdmFuY2U7Ci0KLSAgICBib29sIG1fYWxsb3dDb21taXQ7Ci0gICAgYm9vbCBt
X2FsbG93SW1hZ2U7Ci0gICAgYm9vbCBtX2FsbG93SW1hZ2VTbGljZTsKLSAgICBib29sIG1fYWxs
b3dSZXBlYXQ7Ci0gICAgYm9vbCBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3I7Ci0KLSAgICBi
b29sIG1fcmVxdWlyZVdpZHRoOwotICAgIGJvb2wgbV9yZXF1aXJlT3V0c2V0OwotCi0gICAgUmVm
UHRyPENTU1ZhbHVlPiBtX2ltYWdlOwotICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+IG1faW1hZ2VTbGljZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm9yZGVy
U2xpY2U7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX291dHNldDsKLQotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gbV9yZXBlYXQ7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3Jk
ZXJJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0LCBi
b29sIGltcG9ydGFudCkKLXsKLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQp
OwotICAgIEJvcmRlckltYWdlUGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgd2hpbGUgKENTU1Bh
cnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAg
ICAgIGNvbnRleHQuc2V0Q2FuQWR2YW5jZShmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0
LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IoKSAmJiBp
c0ZvcndhcmRTbGFzaE9wZXJhdG9yKCpjdXJyZW50VmFsdWUpKQotICAgICAgICAgICAgY29udGV4
dC5jb21taXRGb3J3YXJkU2xhc2hPcGVyYXRvcigpOwotCi0gICAgICAgIGlmICghY29udGV4dC5j
YW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdlKCkpIHsKLSAgICAgICAgICAgIGlmIChj
dXJyZW50VmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCi0gICAgICAg
ICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxl
dGVVUkwoY3VycmVudFZhbHVlLT5zdHJpbmcpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0dl
bmVyYXRlZEltYWdlVmFsdWUoKmN1cnJlbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZElt
YWdlKCptX3ZhbHVlTGlzdCwgdmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNv
bW1pdEltYWdlKFdURk1vdmUodmFsdWUpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFn
ZVNldEZ1bmN0aW9uVmFsdWUoKmN1cnJlbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VJbWFnZVNldCgpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZSh2YWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYg
Y29udGV4dC5hbGxvd0ltYWdlU2xpY2UoKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZT4gaW1hZ2VTbGljZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRl
ckltYWdlU2xpY2UocHJvcElkLCBpbWFnZVNsaWNlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmNvbW1pdEltYWdlU2xpY2UoV1RGTW92ZShpbWFnZVNsaWNlKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQuYWxsb3dSZXBlYXQoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXBlYXQ7Ci0gICAgICAgICAgICBpZiAo
cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChyZXBlYXQpKQotICAgICAgICAgICAgICAgIGNvbnRleHQu
Y29tbWl0UmVwZWF0KFdURk1vdmUocmVwZWF0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQucmVxdWlyZVdpZHRoKCkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm9yZGVyU2xpY2U7Ci0gICAgICAgICAg
ICBpZiAocGFyc2VCb3JkZXJJbWFnZVdpZHRoKGJvcmRlclNsaWNlKSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LmNvbW1pdEJvcmRlcldpZHRoKFdURk1vdmUoYm9yZGVyU2xpY2UpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5yZXF1
aXJlT3V0c2V0KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm9y
ZGVyT3V0c2V0OwotICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VPdXRzZXQoYm9yZGVy
T3V0c2V0KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEJvcmRlck91dHNldChXVEZN
b3ZlKGJvcmRlck91dHNldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNh
bkFkdmFuY2UoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LmFsbG93Q29tbWl0KCkpIHsK
LSAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlKQotICAgICAgICAg
ICAgY29udGV4dC5jb21taXRCb3JkZXJJbWFnZSgqdGhpcywgaW1wb3J0YW50KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgLy8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFs
dWUuCi0gICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNvbW1pdFdlYktpdEJvcmRlckltYWdl
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIGJvb2wgaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQoaW50IGlkKQotewotICAg
IHJldHVybiBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwg
aWQgPT0gQ1NTVmFsdWVTcGFjZSB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kOwotfQotCi1ib29sIENT
U1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQp
Ci17Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdFZhbHVlOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kVmFsdWU7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWwpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkpCi0g
ICAgICAgIGZpcnN0VmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWwtPmlkKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHZhbCA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKHZhbCkgewotICAgICAgICBp
ZiAoaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkpCi0gICAgICAgICAgICBzZWNv
bmRWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbC0+aWQpOwotICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgewotICAgICAgICAg
ICAgLy8gSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxp
ZC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4gaXRz
IGFkdmFuY2VkIHdlJ2xsCi0gICAgICAgICAgICAvLyBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVl
LgotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7Ci0gICAgICAgICAgICBzZWNv
bmRWYWx1ZSA9IGZpcnN0VmFsdWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc2Vj
b25kVmFsdWUgPSBmaXJzdFZhbHVlOwotCi0gICAgcmVzdWx0ID0gY3JlYXRlUHJpbWl0aXZlVmFs
dWVQYWlyKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSwgc2Vjb25kVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIEJvcmRlckltYWdlU2xpY2VQ
YXJzZUNvbnRleHQgewotcHVibGljOgotICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQo
Q1NTUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgLCBtX2FsbG93
TnVtYmVyKHRydWUpCi0gICAgLCBtX2FsbG93RmlsbCh0cnVlKQotICAgICwgbV9hbGxvd0ZpbmFs
Q29tbWl0KGZhbHNlKQotICAgICwgbV9maWxsKGZhbHNlKQotICAgIHsgfQotCi0gICAgYm9vbCBh
bGxvd051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dOdW1iZXI7IH0KLSAgICBib29sIGFs
bG93RmlsbCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGaWxsOyB9Ci0gICAgYm9vbCBhbGxvd0Zp
bmFsQ29tbWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9Ci0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0KLSAg
ICB2b2lkIGNvbW1pdE51bWJlcihDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBt
X3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwotICAgICAgICBpZiAoIW1fdG9wKQotICAgICAgICAgICAgbV90b3AgPSBXVEZNb3ZlKHByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoIW1fcmlnaHQpCi0gICAgICAgICAgICBtX3Jp
Z2h0ID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2JvdHRv
bSkKLSAgICAgICAgICAgIG1fYm90dG9tID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCFtX2xlZnQpOwotICAgICAgICAgICAgbV9s
ZWZ0ID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Fs
bG93TnVtYmVyID0gIW1fbGVmdDsKLSAgICAgICAgbV9hbGxvd0ZpbmFsQ29tbWl0ID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdEZpbGwoKSB7IG1fZmlsbCA9IHRydWU7IG1fYWxsb3dG
aWxsID0gZmFsc2U7IG1fYWxsb3dOdW1iZXIgPSAhbV90b3A7IH0KLQotICAgIFJlZjxDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWU+IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQotICAgIHsKLSAgICAg
ICAgLy8gV2UgbmVlZCB0byBjbG9uZSBhbmQgcmVwZWF0IHZhbHVlcyBmb3IgYW55IG9taXNzaW9u
cy4KLSAgICAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICAgICAgaWYgKCFtX3JpZ2h0KSB7Ci0gICAg
ICAgICAgICBtX3JpZ2h0ID0gbV90b3A7Ci0gICAgICAgICAgICBtX2JvdHRvbSA9IG1fdG9wOwot
ICAgICAgICAgICAgbV9sZWZ0ID0gbV90b3A7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2Jv
dHRvbSkgewotICAgICAgICAgICAgbV9ib3R0b20gPSBtX3RvcDsKLSAgICAgICAgICAgIG1fbGVm
dCA9IG1fcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2xlZnQpCi0gICAgICAgICAg
ICBtX2xlZnQgPSBtX3JpZ2h0OwotCi0gICAgICAgIC8vIE5vdyBidWlsZCBhIHJlY3QgdmFsdWUg
dG8gaG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICAgICAgYXV0byBx
dWFkID0gUXVhZDo6Y3JlYXRlKCk7Ci0gICAgICAgIHF1YWQtPnNldFRvcChtX3RvcC5jb3B5UmVm
KCkpOwotICAgICAgICBxdWFkLT5zZXRSaWdodChtX3JpZ2h0LmNvcHlSZWYoKSk7Ci0gICAgICAg
IHF1YWQtPnNldEJvdHRvbShtX2JvdHRvbS5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRM
ZWZ0KG1fbGVmdC5jb3B5UmVmKCkpOwotCi0gICAgICAgIC8vIE1ha2Ugb3VyIG5ldyBib3JkZXIg
aW1hZ2UgdmFsdWUgbm93LgotICAgICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
OjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1
YWQpKSwgbV9maWxsKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNl
cjsKLQotICAgIGJvb2wgbV9hbGxvd051bWJlcjsKLSAgICBib29sIG1fYWxsb3dGaWxsOwotICAg
IGJvb2wgbV9hbGxvd0ZpbmFsQ29tbWl0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBtX3RvcDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fbGVmdDsKLQotICAgIGJvb2wgbV9maWxsOwotfTsKLQotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQm9yZGVySW1hZ2VTbGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZT4mIHJlc3VsdCkKLXsKLSAgICBCb3JkZXJJbWFnZVNsaWNlUGFy
c2VDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAg
ICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAg
Ly8gRklYTUUgY2FsYygpIGh0dHA6Ly93ZWJraXQub3JnL2IvMTY2NjIgOiBjYWxjIGlzIHBhcnNl
ZCBidXQgdmFsdWVzIGFyZSBub3QgY3JlYXRlZCB5ZXQuCi0gICAgICAgIGlmIChjb250ZXh0LmFs
bG93TnVtYmVyKCkgJiYgIWlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pICYmIHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBl
cmNlbnQsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJl
cih2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5hbGxv
d0ZpbGwoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsKQotICAgICAgICAgICAgY29udGV4
dC5jb21taXRGaWxsKCk7Ci0gICAgICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdlIGFyZSBp
bnZhbGlkLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UncmUgZ29pbmcgdG8gc3VjY2Vzc2Z1bGx5IHBhcnNlLCBidXQgd2UgZG9uJ3Qgd2Fu
dCB0byBjb25zdW1lIHRoaXMgdG9rZW4uCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPnBy
ZXZpb3VzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LmFs
bG93RmluYWxDb21taXQoKSkgewotICAgICAgICAvLyBGSVhNRTogRm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5LCAtd2Via2l0LWJvcmRlci1pbWFnZSwgLXdlYmtpdC1tYXNrLWJveC1pbWFnZSBh
bmQgLXdlYmtpdC1ib3gtcmVmbGVjdCBoYXZlIHRvIGRvIGEgZmlsbCBieSBkZWZhdWx0LgotICAg
ICAgICAvLyBGSVhNRTogV2hhdCBkbyB3ZSBkbyB3aXRoIC13ZWJraXQtYm94LXJlZmxlY3QgYW5k
IC13ZWJraXQtbWFzay1ib3gtaW1hZ2U/IFByb2JhYmx5IGp1c3QgaGF2ZSB0byBsZWF2ZSB0aGVt
IGZpbGxpbmcuLi4KLSAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckltYWdlIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSB8fCBwcm9w
SWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0KQotICAgICAgICAgICAgY29udGV4dC5j
b21taXRGaWxsKCk7Ci0KLSAgICAgICAgLy8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5n
bGUgdmFsdWUuCi0gICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY29tbWl0Qm9yZGVySW1hZ2VTbGlj
ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWNsYXNzIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQm9y
ZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0KENTU1BhcnNlciYgcGFyc2VyKQotICAgIDogbV9wYXJz
ZXIocGFyc2VyKQotICAgICwgbV9hbGxvd051bWJlcih0cnVlKQotICAgICwgbV9hbGxvd0ZpbmFs
Q29tbWl0KGZhbHNlKQotICAgIHsgfQotCi0gICAgYm9vbCBhbGxvd051bWJlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYWxsb3dOdW1iZXI7IH0KLSAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLQotICAgIHZvaWQgY29tbWl0TnVt
YmVyKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9u
KQotICAgIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1
ZTsKLSAgICAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFs
dWVBdXRvKQotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNl
ci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotCi0g
ICAgICAgIGlmICghbV90b3ApCi0gICAgICAgICAgICBtX3RvcCA9IFdURk1vdmUocHJpbWl0aXZl
VmFsdWUpOwotICAgICAgICBlbHNlIGlmICghbV9yaWdodCkKLSAgICAgICAgICAgIG1fcmlnaHQg
PSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoIW1fYm90dG9tKQot
ICAgICAgICAgICAgbV9ib3R0b20gPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fbGVmdCk7Ci0gICAgICAgICAgICBtX2xlZnQg
PSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWxsb3dO
dW1iZXIgPSAhbV9sZWZ0OwotICAgICAgICBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOwotICAg
IH0KLQotICAgIHZvaWQgc2V0QWxsb3dGaW5hbENvbW1pdCgpIHsgbV9hbGxvd0ZpbmFsQ29tbWl0
ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0VG9wKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2
YWwpIHsgbV90b3AgPSBXVEZNb3ZlKHZhbCk7IH0KLQotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29tbWl0Qm9yZGVySW1hZ2VRdWFkKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2xvbmUgYW5kIHJlcGVhdCB2YWx1ZXMgZm9yIGFueSBvbWlzc2lvbnMuCi0gICAgICAgIEFTU0VS
VChtX3RvcCk7Ci0gICAgICAgIGlmICghbV9yaWdodCkgewotICAgICAgICAgICAgbV9yaWdodCA9
IG1fdG9wOwotICAgICAgICAgICAgbV9ib3R0b20gPSBtX3RvcDsKLSAgICAgICAgICAgIG1fbGVm
dCA9IG1fdG9wOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9ib3R0b20pIHsKLSAgICAgICAg
ICAgIG1fYm90dG9tID0gbV90b3A7Ci0gICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0OwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghbV9sZWZ0KQotICAgICAgICAgICAgbV9sZWZ0ID0gbV9yaWdo
dDsKLQotICAgICAgICAvLyBOb3cgYnVpbGQgYSBxdWFkIHZhbHVlIHRvIGhvbGQgYWxsIGZvdXIg
b2Ygb3VyIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgICAgIGF1dG8gcXVhZCA9IFF1YWQ6OmNyZWF0
ZSgpOwotICAgICAgICBxdWFkLT5zZXRUb3AobV90b3AuY29weVJlZigpKTsKLSAgICAgICAgcXVh
ZC0+c2V0UmlnaHQobV9yaWdodC5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRCb3R0b20o
bV9ib3R0b20uY29weVJlZigpKTsKLSAgICAgICAgcXVhZC0+c2V0TGVmdChtX2xlZnQuY29weVJl
ZigpKTsKLQotICAgICAgICAvLyBNYWtlIG91ciBuZXcgdmFsdWUgbm93LgotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1YWQpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKLQotICAgIGJvb2wg
bV9hbGxvd051bWJlcjsKLSAgICBib29sIG1fYWxsb3dGaW5hbENvbW1pdDsKLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBtX3JpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYgcmVzdWx0KQotewotICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250
ZXh0KCp0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7Ci0gICAgd2hpbGUgKCh2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmIChjb250ZXh0LmFs
bG93TnVtYmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRV
bml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAg
ICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgewotICAgICAgICAgICAgLy8gSWYgd2Un
cmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LmFsbG93RmluYWxDb21taXQoKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJl
dmlvdXMoKTsgLy8gVGhlIHNob3J0aGFuZCBsb29wIHdpbGwgYWR2YW5jZSBiYWNrIHRvIHRoaXMg
cG9pbnQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LmFsbG93RmluYWxDb21taXQoKSkg
ewotICAgICAgICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAg
ICAgICAgcmVzdWx0ID0gY29udGV4dC5jb21taXRCb3JkZXJJbWFnZVF1YWQoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQm9yZGVySW1hZ2VXaWR0aChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1
bHQpCi17Ci0gICAgcmV0dXJuIHBhcnNlQm9yZGVySW1hZ2VRdWFkKEZMZW5ndGggfCBGSW50ZWdl
ciB8IEZOb25OZWcgfCBGUGVyY2VudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQm9yZGVySW1hZ2VPdXRzZXQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQot
ewotICAgIHJldHVybiBwYXJzZUJvcmRlckltYWdlUXVhZChGTGVuZ3RoIHwgRkludGVnZXIgfCBG
Tm9uTmVnLCByZXN1bHQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVkIG51
bSA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0gICAgaWYgKG51bSA+IDkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpaVsyXVs0XTsKLQotICAgIHVuc2lnbmVkIGlu
ZGV4QWZ0ZXJTbGFzaCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bTsgKytp
KSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVB
dChpKTsKLSAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9y
KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaVZhbHVlICE9ICcvJykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICghaSB8fCBpbmRleEFmdGVyU2xhc2gg
fHwgaSArIDEgPT0gbnVtIHx8IG51bSA+IGkgKyA1KQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgaW5kZXhBZnRlclNsYXNoID0gaSArIDE7Ci0gICAgICAgICAg
ICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGkgLSBpbmRleEFmdGVyU2xhc2ggPj0gNCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgaWYgKCFpbmRl
eEFmdGVyU2xhc2gpIHsKLSAgICAgICAgICAgIHJhZGlpWzBdW2ldID0gV1RGTW92ZShyYWRpdXMp
OwotCi0gICAgICAgICAgICAvLyBMZWdhY3kgc3ludGF4OiAtd2Via2l0LWJvcmRlci1yYWRpdXM6
IGwxIGwyOyBpcyBlcXVpdmFsZW50IHRvIGJvcmRlci1yYWRpdXM6IGwxIC8gbDI7Ci0gICAgICAg
ICAgICBpZiAobnVtID09IDIgJiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFk
aXVzKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXhBZnRlclNsYXNoID0gMTsKLSAgICAgICAgICAg
ICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByYWRpaVsxXVtpIC0gaW5kZXhBZnRlclNsYXNoXSA9IFdU
Rk1vdmUocmFkaXVzKTsKLSAgICB9Ci0KLSAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewotICAg
ICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAgIHJhZGlpWzFdW2ldID0gcmFkaWlbMF1b
aV07Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMV0pOwot
Ci0gICAgSW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0
KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsIGNyZWF0
ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzBdKSwgV1RGTW92ZShyYWRpaVsx
XVswXSkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9w
UmlnaHRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzFd
KSwgV1RGTW92ZShyYWRpaVsxXVsxXSkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFp
cihXVEZNb3ZlKHJhZGlpWzBdWzJdKSwgV1RGTW92ZShyYWRpaVsxXVsyXSkpLCBpbXBvcnRhbnQp
OwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgY3Jl
YXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlp
WzFdWzNdKSksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVkIG51
bSA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0gICAgaWYgKG51bSA9PSAxKSB7Ci0gICAgICAgIENT
U1ZhbHVlSUQgdmFsdWVJZCA9IG1fdmFsdWVMaXN0LT52YWx1ZUF0KDApLT5pZDsKLSAgICAgICAg
aWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSWQgPT0gQ1NTVmFsdWVGcm9tRGlt
ZW5zaW9ucyB8fCB2YWx1ZUlkID09IENTU1ZhbHVlRnJvbUludHJpbnNpYykgewotICAgICAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChu
dW0gIT0gMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIG9w
ID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDEpOwotCi0gICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9w
ZXJhdG9yKG9wKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gbHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKSk7Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gcnZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlz
dC0+dmFsdWVBdCgyKSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaXQobHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkYXRlVW5pdChydmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gRklYTUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCi0gICAgaWYg
KCFsdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUgfHwgIXJ2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTQXNwZWN0UmF0aW9WYWx1
ZTo6Y3JlYXRlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkuZlZhbHVlKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChydmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS5mVmFsdWUpKSwgaW1wb3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQg
ZGVmYXVsdFZhbHVlLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBlbnVtIHsgSUQsIFZBTCB9IHN0
YXRlID0gSUQ7Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb3VudGVyTmFtZTsKLQot
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICAg
IGNhc2UgSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgY291bnRl
ck5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFZBTDsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWQUw6IHsKLSAgICAgICAg
ICAgICAgICBpbnQgaSA9IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUg
JiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaSA9IGNsYW1wVG9JbnRlZ2VyKHZhbHVlLT5mVmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RG
TW92ZShjb3VudGVyTmFtZSksCi0gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlVmFsdWUoaSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSk7
Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBJRDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
ZiAobGlzdC0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShsaXN0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBUaGlzIHNob3VsZCBnbyBhd2F5IG9uY2Ugd2UgZHJv
cCBzdXBwb3J0IGZvciAtd2Via2l0LWdyYWRpZW50Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KENTU1BhcnNlclZhbHVlJiB2YWx1
ZSwgYm9vbCBob3Jpem9udGFsKQotewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVz
dWx0OwotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
IHsKLSAgICAgICAgaWYgKChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImxl
ZnQiKSAmJiBob3Jpem9udGFsKQotICAgICAgICAgICAgfHwgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLCAidG9wIikgJiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVz
dWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgZWxzZSBpZiAoKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAicmlnaHQiKSAmJiBob3Jpem9udGFsKQotICAgICAg
ICAgICAgfHwgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiYm90dG9tIikg
JiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpOwotICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1
ZSwgImNlbnRlciIpKQotICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSIHx8IHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQot
ICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZh
bHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFs
dWUudW5pdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciYgcGFyc2VyLCBDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKQotewotICAgIGlmICh2YWx1ZS51
bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+
bmFtZSwgImZyb20oIikKLSAgICAgICAgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAidG8oIikKLSAgICAgICAgJiYgIWVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJmcm9tKCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAidG8oIikpIHsKLSAgICAgICAgLy8gVGhlICJm
cm9tIiBhbmQgInRvIiBzdG9wcyBleHBlY3QgMSBhcmd1bWVudC4KLSAgICAgICAgaWYgKGFyZ3Mt
PnNpemUoKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZyb20o
IikpCi0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0K
LSAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IGFyZ3MtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29s
b3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQotICAgICAgICAgICAgc3RvcC5tX2Nv
bG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VD
b2xvcihhcmdzLT5jdXJyZW50KCkpOwotICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1
bmN0aW9uIGV4cGVjdHMgMyBhcmd1bWVudHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkgewotICAgICAg
ICBpZiAoYXJncy0+c2l6ZSgpICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgQ1NTUGFyc2VyVmFsdWUqIHN0b3BBcmcgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAg
IGlmIChzdG9wQXJnLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkK
LSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0b3BBcmctPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHN0b3BBcmctPmZWYWx1ZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgc3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKHN0
b3BBcmctPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IHN0b3BBcmctPmlWYWx1
ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcEFyZyA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHN0b3BBcmctPmlkOwotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0IHx8IENTU1BhcnNlcjo6aXNWYWxpZFN5
c3RlbUNvbG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKLSAgICAgICAgICAgIHN0
b3AubV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2Vy
LnBhcnNlQ29sb3Ioc3RvcEFyZyk7Ci0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQotewotICAgIC8vIFdhbGsgdGhl
IGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3Vy
cmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6
ZSgpID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1
bWVudCBpcyB0aGUgZ3JhZGllbnQgdHlwZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCi0gICAgQ1NT
R3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImxpbmVhciIp
KQotICAgICAgICBncmFkaWVudFR5cGUgPSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQ7Ci0g
ICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAicmFk
aWFsIikpCi0gICAgICAgIGdyYWRpZW50VHlwZSA9IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVu
dDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NHcmFk
aWVudFZhbHVlPiByZXN1bHQ7Ci0gICAgc3dpdGNoIChncmFkaWVudFR5cGUpIHsKLSAgICBjYXNl
IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlKE5vblJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQ6Ci0gICAgICAg
IHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShOb25SZXBlYXRpbmcsIGdy
YWRpZW50VHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRo
ZSByZXN0IG9mIHRoZSBncmFkaWVudCB0eXBlcyBzaG91bGRuJ3QgYXBwZWFyIGhlcmUuCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIC8vIENvbW1hLgotICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5leHQgY29tZXMgdGhlIHN0YXJ0aW5nIHBvaW50
IGZvciB0aGUgZ3JhZGllbnQgYXMgYW4geCB5IHBhaXIuICBUaGVyZSBpcyBubwotICAgIC8vIGNv
bW1hIGJldHdlZW4gdGhlIHggYW5kIHRoZSB5IHZhbHVlcy4KLSAgICAvLyBGaXJzdCBYLiAgSXQg
Y2FuIGJlIGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFy
Z3MtPm5leHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRp
ZW50UG9pbnQoKmFyZ3VtZW50LCB0cnVlKTsKLSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7
Ci0KLSAgICAvLyBGaXJzdCBZLiAgSXQgY2FuIGJlIHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVy
Y2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVu
dFBvaW50KCphcmd1bWVudCwgZmFsc2UpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXN1bHQtPnNldEZpcnN0WShwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsK
LQotICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCBwb2ludC4KLSAgICBhcmd1bWVudCA9IGFy
Z3MtPm5leHQoKTsKLSAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0
IGEgbnVtZXJpYyByYWRpdXMuCi0gICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVk
UmFkaWFsR3JhZGllbnQpIHsKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMuCi0g
ICAgICAgIGlmICghYXJndW1lbnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAg
ICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFk
aXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikp
OwotCi0gICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCi0gICAgICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5leHQgaXMgdGhlIGVu
ZGluZyBwb2ludCBmb3IgdGhlIGdyYWRpZW50IGFzIGFuIHgsIHkgcGFpci4KLSAgICAvLyBTZWNv
bmQgWC4gIEl0IGNhbiBiZSBsZWZ0LCByaWdodCwgbnVtYmVyIG9yIHBlcmNlbnQuCi0gICAgYXJn
dW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1l
bnQsIHRydWUpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXN1bHQtPnNldFNlY29uZFgocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBTZWNv
bmQgWS4gIEl0IGNhbiBiZSB0b3AsIGJvdHRvbSwgbnVtYmVyIG9yIHBlcmNlbnQuCi0gICAgYXJn
dW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1l
bnQsIGZhbHNlKTsKLSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmVzdWx0LT5zZXRTZWNvbmRZKHBvaW50LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gRm9y
IHJhZGlhbCBncmFkaWVudHMgb25seSwgd2Ugbm93IGV4cGVjdCB0aGUgc2Vjb25kIHJhZGl1cy4K
LSAgICBpZiAoZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewot
ICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgc2Vjb25kIHBvaW50LgotICAgICAgICBhcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVl
cy4KLSAgICAgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsK
LSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vj
b25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbikpOwotICAgIH0KLQotICAgIC8vIFdlIG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9m
IHN0b3BzICgwIG9yIG1vcmUpLgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgIHdo
aWxlIChhcmd1bWVudCkgewotICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRo
ZSBuZXh0IHN0b3AuCi0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTm93IGV4YW1pbmUgdGhlIHN0b3AgaXRzZWxm
LgotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVu
dCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBUaGUgZnVuY3Rpb24g
bmFtZSBuZWVkcyB0byBiZSBvbmUgb2YgImZyb20iLCAidG8iLCBvciAiY29sb3Itc3RvcC4iCi0g
ICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIGlmICghcGFyc2VEZXBy
ZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoKnRoaXMsICphcmd1bWVudCwgc3RvcCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC0+YWRkU3RvcChzdG9wKTsKLQotICAg
ICAgICAvLyBBZHZhbmNlCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgIH0K
LQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGJvb2wmIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAodmFs
dWUudW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUxlZnQ6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGlzSG9yaXpv
bnRhbCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRv
cDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUJvdHRvbToKLSAgICAgICAgICAgIGlzSG9yaXpvbnRh
bCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLX0KLQotc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1Bh
cnNlciYgcGFyc2VyLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQ1NTVmFsdWVJRCBp
ZCA9IHZhbHVlLmlkOwotICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFy
c2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8
IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwotCi0gICAgcmV0dXJuIHBh
cnNlci5wYXJzZUNvbG9yKCZ2YWx1ZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJl
Y2F0ZWRMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcs
IENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwotCi0gICAgLy8gV2FsayB0aGUgYXJndW1lbnRz
LgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdz
LT5jdXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7Ci0KLSAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7Ci0gICAgLy8gTG9vayBmb3IgYW5n
bGUuCi0gICAgaWYgKHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xl
LCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIExvb2sgb25lIG9yIHR3byBvcHRpb25hbCBrZXl3b3JkcyB0aGF0IGluZGljYXRl
IGEgc2lkZSBvciBjb3JuZXIuCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3Rh
cnRYLCBzdGFydFk7Ci0gICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gICAgICAg
IGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtl
eXdvcmQoKmFyZ3VtZW50LCBpc0hvcml6b250YWwpKSB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKQotICAgICAgICAgICAgICAgIHN0YXJ0WCA9IFdURk1vdmUobG9jYXRpb24pOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1vdmUobG9jYXRpb24p
OwotCi0gICAgICAgICAgICBpZiAoKGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpKSkgewotICAgICAg
ICAgICAgICAgIGlmICgobG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQs
IGlzSG9yaXpvbnRhbCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRY
ID0gV1RGTW92ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRZKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1v
dmUobG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFz
dGFydFggJiYgIXN0YXJ0WSkKLSAgICAgICAgICAgIHN0YXJ0WSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKLQotICAgICAgICBy
ZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKHN0YXJ0WCkpOwotICAgICAgICByZXN1bHQtPnNldEZp
cnN0WShXVEZNb3ZlKHN0YXJ0WSkpOwotICAgIH0KLQotICAgIGlmICghcGFyc2VHcmFkaWVudENv
bG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXJlc3VsdC0+c3RvcENvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFy
c2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NH
cmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCi17Ci0gICAgYXV0byByZXN1bHQgPSBDU1NSYWRpYWxH
cmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZFJhZGlhbEdyYWRpZW50
KTsKLQotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBp
ZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Q1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYXJn
dW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBm
YWxzZTsKLQotICAgIC8vIE9wdGlvbmFsIGJhY2tncm91bmQtcG9zaXRpb24KLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjZW50ZXJZOwotICAgIC8vIHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbiBhZHZhbmNlcyB0aGUg
YXJncyBuZXh0IHBvaW50ZXIuCi0gICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCphcmdzLCBj
ZW50ZXJYLCBjZW50ZXJZKTsKLSAgICBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBp
ZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2VudGVyWCB8
fCBjZW50ZXJZKSB7Ci0gICAgICAgIC8vIENvbW1hCi0gICAgICAgIGlmICghaXNDb21tYShhcmd1
bWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkp
OwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgpKTsKLSAgICAvLyBDU1Mz
IHJhZGlhbCBncmFkaWVudHMgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgcG9p
bnQuCi0gICAgcmVzdWx0LT5zZXRGaXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgIHJlc3Vs
dC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gc2hhcGVWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemVW
YWx1ZTsKLQotICAgIC8vIE9wdGlvbmFsIHNoYXBlIGFuZC9vciBzaXplIGluIGFueSBvcmRlci4K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBpZiAoYXJndW1lbnQt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGJvb2wgZm91bmRWYWx1ZSA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGFy
Z3VtZW50LT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgotICAgICAgICBjYXNl
IENTU1ZhbHVlRWxsaXBzZToKLSAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAg
ICAgICAgZm91bmRWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUNsb3Nlc3RTaWRlOgotICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VzdENvcm5l
cjoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0U2lkZToKLSAgICAgICAgY2FzZSBDU1NW
YWx1ZUZhcnRoZXN0Q29ybmVyOgotICAgICAgICBjYXNlIENTU1ZhbHVlQ29udGFpbjoKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUNvdmVyOgotICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKLSAg
ICAgICAgICAgIGZvdW5kVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChm
b3VuZFZhbHVlKSB7Ci0gICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXN1bHQtPnNldFNoYXBlKHNoYXBlVmFsdWUuY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNp
emluZ0JlaGF2aW9yKHNpemVWYWx1ZS5jb3B5UmVmKCkpOwotCi0gICAgLy8gT3IsIHR3byBsZW5n
dGhzIG9yIHBlcmNlbnRhZ2VzCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9u
dGFsU2l6ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKLQot
ICAgIGlmICghc2hhcGVWYWx1ZSAmJiAhc2l6ZVZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGhTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGlmICh2
YWxpZGF0ZVVuaXQoaFNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
LSAgICAgICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGhTaXplV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodlNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNdXN0IGhhdmUgbmVpdGhlciBvciBib3RoLgot
ICAgIGlmICghaG9yaXpvbnRhbFNpemUgIT0gIXZlcnRpY2FsU2l6ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmVzdWx0LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShXVEZNb3ZlKGhvcml6
b250YWxTaXplKSk7Ci0gICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUoV1RGTW92ZSh2ZXJ0
aWNhbFNpemUpKTsKLQotICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJl
c3VsdCwgZXhwZWN0Q29tbWEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBncmFkaWVu
dCA9IFdURk1vdmUocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCi17
Ci0gICAgYXV0byByZXN1bHQgPSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0
aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3Mg
PSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFy
Z3MgfHwgIWFyZ3MtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFh
cmdzLT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7
Ci0KLSAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7Ci0gICAgLy8gTG9vayBmb3IgYW5nbGUu
Ci0gICAgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5n
bGUsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLQotICAg
ICAgICBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
Zmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgInRvIikpIHsKLSAgICAgICAgLy8gdG8gWyBb
bGVmdCB8IHJpZ2h0XSB8fCBbdG9wIHwgYm90dG9tXSBdCi0gICAgICAgIENTU1BhcnNlclZhbHVl
KiBuZXh0QXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghbmV4dEFyZ3VtZW50
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb24gPSB2
YWx1ZUZyb21TaWRlS2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOwotICAgICAg
ICBpZiAoIWxvY2F0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZW5kWCwgZW5kWTsKLSAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbCkKLSAgICAgICAgICAgIGVuZFggPSBXVEZNb3ZlKGxvY2F0aW9uKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZW5kWSA9IFdURk1vdmUobG9jYXRpb24pOwotCi0gICAgICAgIG5leHRB
cmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRl
S2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOwotICAgICAgICBpZiAobG9jYXRp
b24pIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZW5kWCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGVuZFggPSBXVEZNb3ZlKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVuZFkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBlbmRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGFyZ3MtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVj
dENvbW1hID0gdHJ1ZTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoV1RGTW92ZShlbmRYKSk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1vdmUoZW5kWSkpOwotICAgIH0KLQotICAg
IGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlc3VsdC0+c3RvcENvdW50KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3Jh
ZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3VsdCA9
IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1JhZGlhbEdyYWRp
ZW50KTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50
KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBzaGFwZVZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
c2l6ZVZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaG9yaXpvbnRhbFNpemU7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7Ci0KLSAgICAvLyBG
aXJzdCBwYXJ0IG9mIGdyYW1tYXIsIHRoZSBzaXplL3NoYXBlIGNsYXVzZToKLSAgICAvLyBbIGNp
cmNsZSB8fCA8bGVuZ3RoPiBdIHwKLSAgICAvLyBbIGVsbGlwc2UgfHwgWyA8bGVuZ3RoPiB8IDxw
ZXJjZW50YWdlPiBdezJ9IF0gfAotICAgIC8vIFsgWyBjaXJjbGUgfCBlbGxpcHNlXSB8fCA8c2l6
ZS1rZXl3b3JkPiBdCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsK
LSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpIHsKLSAgICAgICAgICAgIGJvb2wgYmFkSWRlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN3
aXRjaCAoYXJndW1lbnQtPmlkKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgot
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVsbGlwc2U6Ci0gICAgICAgICAgICAgICAgaWYgKHNo
YXBlVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBzaGFwZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVDbG9zZXN0U2lkZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVD
bG9zZXN0Q29ybmVyOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0U2lkZToKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXJ0aGVzdENvcm5lcjoKLSAgICAgICAgICAgICAgICBp
ZiAoc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYmFkSWRl
bnQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYmFkSWRlbnQpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0KLSAgICAgICAgICAgIGlmIChzaXplVmFs
dWUgfHwgaG9yaXpvbnRhbFNpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2U2l6ZVdpdGhDYWxj
dWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2U2l6ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZl
cnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxh
dGlvbik7Ci0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBZb3UgY2FuIHNwZWNpZnkgc2l6ZSBh
cyBhIGtleXdvcmQgb3IgYSBsZW5ndGgvcGVyY2VudGFnZSwgbm90IGJvdGguCi0gICAgaWYgKHNp
emVWYWx1ZSAmJiBob3Jpem9udGFsU2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8v
IENpcmNsZXMgbXVzdCBoYXZlIDAgb3IgMSBsZW5ndGhzLgotICAgIGlmIChzaGFwZVZhbHVlICYm
IHNoYXBlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNpcmNsZSAmJiB2ZXJ0aWNhbFNp
emUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBFbGxpcHNlcyBtdXN0IGhhdmUgMCBv
ciAyIGxlbmd0aC9wZXJjZW50YWdlcy4KLSAgICBpZiAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVl
LT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVFbGxpcHNlICYmIGhvcml6b250YWxTaXplICYmICF2
ZXJ0aWNhbFNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBJZiB0aGVyZSdzIG9u
bHkgb25lIHNpemUsIGl0IG11c3QgYmUgYSBsZW5ndGguCi0gICAgaWYgKCF2ZXJ0aWNhbFNpemUg
JiYgaG9yaXpvbnRhbFNpemUgJiYgaG9yaXpvbnRhbFNpemUtPmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlVmFsdWUuY29w
eVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVWYWx1ZS5jb3B5UmVm
KCkpOwotICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29w
eVJlZigpKTsKLSAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29w
eVJlZigpKTsKLQotICAgIC8vIFNlY29uZCBwYXJ0IG9mIGdyYW1tYXIsIHRoZSBjZW50ZXItcG9z
aXRpb24gY2xhdXNlOgotICAgIC8vIGF0IDxwb3NpdGlvbj4KLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZ
OwotICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
ICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImF0IikpIHsKLSAg
ICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oKmFy
Z3MsIGNlbnRlclgsIGNlbnRlclkpOwotICAgICAgICBpZiAoIShjZW50ZXJYICYmIGNlbnRlclkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+
Y3VycmVudCgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgICAgICAvLyBS
aWdodCBub3csIENTUyByYWRpYWwgZ3JhZGllbnRzIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVu
ZCBjZW50ZXJzLgotICAgICAgICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5UmVmKCkp
OwotICAgICAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgIH0K
LQotICAgIGlmIChzaGFwZVZhbHVlIHx8IHNpemVWYWx1ZSB8fCBob3Jpem9udGFsU2l6ZSB8fCBj
ZW50ZXJYIHx8IGNlbnRlclkpCi0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLQotICAgIGlm
ICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBncmFkaWVudCA9IFdURk1vdmUocmVzdWx0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xv
clN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmFkaWVudFZhbHVlJiBn
cmFkaWVudCwgYm9vbCBleHBlY3RDb21tYSkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSB2YWx1ZUxpc3QuY3VycmVudCgpOwotICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQg
PSB0cnVlOwotCi0gICAgLy8gTm93IGxvb2sgZm9yIGNvbG9yIHN0b3BzLgotICAgIHdoaWxlICh2
YWx1ZSkgewotICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0
b3AuCi0gICAgICAgIGlmIChleHBlY3RDb21tYSkgewotICAgICAgICAgICAgaWYgKCFpc0NvbW1h
KHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHZh
bHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGNvbG9yLXN0
b3A+ID0gPGNvbG9yPiBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0/Ci0gICAgICAgIENTU0dy
YWRpZW50Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3JhZGll
bnRDb2xvck9yS2V5d29yZCgqdGhpcywgKnZhbHVlKTsKLSAgICAgICAgaWYgKCFzdG9wLm1fY29s
b3IpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1N0b3BXYXNNaWRwb2ludCkgLy8gMiBtaWRw
b2ludHMgaW4gYSByb3cgaXMgbm90IGFsbG93ZWQuIFRoaXMgYWxzbyBjYXRjaGVzIHN0YXJ0aW5n
IHdpdGggYSBtaWRwb2ludC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIHN0b3AuaXNNaWRwb2ludCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgICAgIHByZXZpb3VzU3RvcFdhc01p
ZHBvaW50ID0gc3RvcC5pc01pZHBvaW50OwotCi0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsK
LSAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RvcC5pc01pZHBvaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdyYWRpZW50LmFkZFN0b3Aoc3RvcCk7Ci0gICAgICAgIGV4cGVjdENvbW1h
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4ndCBlbmQgb24gYSBtaWRwb2ludC4KLSAg
ICBpZiAocHJldmlvdXNTdG9wV2FzTWlkcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIE11c3QgaGF2ZSAyIG9yIG1vcmUgc3RvcHMgdG8gYmUgdmFsaWQuCi0gICAgcmV0dXJu
IGdyYWRpZW50LnN0b3BDb3VudCgpID49IDI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0dlbmVy
YXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKSBjb25zdAotewotICAgIGlmICh2
YWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbGluZWFy
LWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAibGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1y
ZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFk
aWVudCgiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5m
dW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmFkaWFs
LWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2Fu
dmFzKCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAiY3Jvc3MtZmFkZSgiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3MtZmFkZSgi
KQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgImZpbHRlcigiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtZmlsdGVyKCIpCi0gICAgICAgIHx8
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1uYW1lZC1pbWFnZSgiKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR2VuZXJhdGVk
SW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZh
bHVlKQotewotICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSA9ICp2YWx1ZUxpc3QuY3Vy
cmVudCgpOwotCi0gICAgaWYgKHBhcnNlclZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWdyYWRp
ZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnQodmFsdWVMaXN0
LCB2YWx1ZSk7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2Vy
VmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAg
ICAgcmV0dXJuIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUs
IE5vblJlcGVhdGluZyk7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICJsaW5lYXItZ3JhZGllbnQoIikpCi0gICAgICAg
IHJldHVybiBwYXJzZUxpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGlu
Zyk7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIikpCi0g
ICAgICAgIHJldHVybiBwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZh
bHVlLCBSZXBlYXRpbmcpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgi
KSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTGluZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwg
UmVwZWF0aW5nKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJz
ZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpKQotICAg
ICAgICByZXR1cm4gcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1
ZSwgTm9uUmVwZWF0aW5nKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgInJhZGlhbC1ncmFkaWVudCgiKSkKLSAgICAg
ICAgcmV0dXJuIHBhcnNlUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0
aW5nKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1
ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwg
dmFsdWUsIFJlcGVhdGluZyk7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50
KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVl
LCBSZXBlYXRpbmcpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBh
cnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jYW52YXMoIikpCi0gICAgICAgIHJl
dHVybiBwYXJzZUNhbnZhcyh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQt
Y3Jvc3MtZmFkZSgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3Jvc3NmYWRlKHZhbHVlTGlzdCwg
dmFsdWUsIHRydWUpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBh
cnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3Jvc3MtZmFkZSgiKSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlQ3Jvc3NmYWRlKHZhbHVlTGlzdCwgdmFsdWUsIGZhbHNlKTsKLQotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZp
bHRlcigiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgIi13ZWJraXQtZmlsdGVyKCIpKQotICAgICAgICByZXR1cm4gcGFyc2VGaWx0
ZXJJbWFnZSh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbmFtZWQtaW1h
Z2UoIikpCi0gICAgICAgIHJldHVybiBwYXJzZU5hbWVkSW1hZ2UodmFsdWVMaXN0LCB2YWx1ZSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbHRlcklt
YWdlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBmaWx0
ZXIpCi17Ci0gICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlz
dCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAg
IGlmICghYXJncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGltYWdlLiBJdCBpcyBh
IGZpbGwgaW1hZ2UuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwotICAgIGlmICgh
cGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIGltYWdlVmFsdWUpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIGltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUtPnN0cmluZykp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
dmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAvLyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlz
Q29tbWEodmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBhcmdzLT5u
ZXh0KCk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmaWx0ZXJWYWx1ZTsKLSAgICBpZiAo
IXZhbHVlIHx8ICFwYXJzZUZpbHRlcigqYXJncywgZmlsdGVyVmFsdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICBmaWx0ZXIgPSBDU1NG
aWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoaW1hZ2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBmaWx0
ZXJWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDU1NWYWx1ZT4mIGNyb3NzZmFkZSwgYm9vbCBwcmVmaXhlZCkKLXsKLSAgICAvLyBX
YWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVM
aXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8IGFy
Z3MtPnNpemUoKSAhPSA1KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJW
YWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0KLSAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgaXMgdGhlICJmcm9tIiBpbWFnZS4gSXQgaXMgYSBmaWxsIGltYWdlLgotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gZnJvbUltYWdlVmFsdWU7Ci0gICAgaWYgKCFhcmd1bWVudCB8fCAhcGFyc2VG
aWxsSW1hZ2UoKmFyZ3MsIGZyb21JbWFnZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotCi0gICAgLy8gU2tpcCBhIGNvbW1hCi0gICAg
aWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotCi0gICAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUg
InRvIiBpbWFnZS4gSXQgaXMgYSBmaWxsIGltYWdlLgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9J
bWFnZVZhbHVlOwotICAgIGlmICghYXJndW1lbnQgfHwgIXBhcnNlRmlsbEltYWdlKCphcmdzLCB0
b0ltYWdlVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7Ci0KLSAgICAvLyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlzQ29tbWEoYXJndW1l
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7
Ci0KLSAgICAvLyBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGNyb3NzZmFkZSB2YWx1ZS4gSXQg
aXMgYSBwZXJjZW50YWdlIG9yIGEgZnJhY3Rpb25hbCBudW1iZXIuCi0gICAgaWYgKCFhcmd1bWVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGVyY2VudGFnZTsKLSAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICBwZXJjZW50YWdlID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oYXJndW1lbnQtPmZWYWx1
ZSAvIDEwMCwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICBlbHNl
IGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAg
ICAgICAgcGVyY2VudGFnZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
Y2xhbXBUbzxkb3VibGU+KGFyZ3VtZW50LT5mVmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
cm9zc2ZhZGUgPSBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKGZyb21JbWFnZVZhbHVlLnJlbGVh
c2VOb25OdWxsKCksIHRvSW1hZ2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBwZXJjZW50YWdlLnJl
bGVhc2VOb25OdWxsKCksIHByZWZpeGVkKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VDYW52YXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZlB0cjxDU1NWYWx1ZT4mIGNhbnZhcykKLXsKLSAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0g
ICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rp
b24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNh
bnZhcyBuYW1lLiAgSXQgaXMgYW4gaWRlbnRpZmllci4KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS0+dW5pdCAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjYW52YXMgPSBDU1NDYW52YXNWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VOYW1lZEltYWdlKENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBuYW1lZEltYWdlKQotewot
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0
aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIGlt
YWdlIG5hbWUuCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy0+Y3VycmVudCgpOwot
ICAgIGlmICghdmFsdWUgfHwgdmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
REVOVCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbmFtZWRJbWFnZSA9IENTU05hbWVk
SW1hZ2VWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQotUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZUltYWdlUmVzb2x1dGlvbigpCi17Ci0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGJvb2wgaGF2ZVJlc29sdXRp
b24gPSBmYWxzZTsKLSAgICBib29sIGhhdmVGcm9tSW1hZ2UgPSBmYWxzZTsKLSAgICBib29sIGhh
dmVTbmFwID0gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIWhhdmVG
cm9tSW1hZ2UgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRnJvbUltYWdlKSB7Ci0gICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIGlmICghaGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25hcCkg
ewotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAgICAgaGF2ZVNuYXAgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZW
YWx1ZSA+IDApIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAgIGhhdmVSZXNvbHV0
aW9uID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLSAgICBpZiAoIWxp
c3QtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWhhdmVGcm9t
SW1hZ2UgJiYgIWhhdmVSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gV1RGTW92ZShsaXN0KTsKLX0KLSNlbmRpZgotCi1SZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUltYWdlU2V0KCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBmdW5j
dGlvbkFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWZ1bmN0aW9u
QXJncyB8fCAhZnVuY3Rpb25BcmdzLT5zaXplKCkgfHwgIWZ1bmN0aW9uQXJncy0+Y3VycmVudCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaW1hZ2VTZXQgPSBDU1NJbWFn
ZVNldFZhbHVlOjpjcmVhdGUoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJnID0gZnVuY3Rpb25B
cmdzLT5jdXJyZW50KCk7Ci0gICAgd2hpbGUgKGFyZykgewotICAgICAgICBpZiAoYXJnLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgaW1hZ2VTZXQtPmFwcGVuZChDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29t
cGxldGVVUkwoYXJnLT5zdHJpbmcpKSk7Ci0gICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4
dCgpOwotICAgICAgICBpZiAoIWFyZyB8fCBhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ESU1FTlNJT04pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBk
b3VibGUgaW1hZ2VTY2FsZUZhY3RvciA9IDA7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
ID0gYXJnLT5zdHJpbmc7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKLSAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIHN0
YXJ0ID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgICAgICBwYXJzZURvdWJsZShzdGFy
dCwgc3RhcnQgKyBsZW5ndGgsICd4JywgaW1hZ2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBzdHJpbmcuY2hhcmFjdGVyczE2
KCk7Ci0gICAgICAgICAgICBwYXJzZURvdWJsZShzdGFydCwgc3RhcnQgKyBsZW5ndGgsICd4Jywg
aW1hZ2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGltYWdlU2NhbGVGYWN0
b3IgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbWFnZVNldC0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW1hZ2VTY2FsZUZh
Y3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLQotICAgICAgICAvLyBJZiB0
aGVyZSBhcmUgbm8gbW9yZSBhcmd1bWVudHMsIHdlJ3JlIGRvbmUuCi0gICAgICAgIGFyZyA9IGZ1
bmN0aW9uQXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFyZykKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIGFyZ3VtZW50cywgdGhleSBzaG91bGQg
YmUgYWZ0ZXIgYSBjb21tYS4KLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZykpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSBhbmQgbW92ZSBv
biB0byB0aGUgbmV4dCBhcmd1bWVudC4KLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VTZXQpOwotfQotCi1jbGFzcyBU
cmFuc2Zvcm1PcGVyYXRpb25JbmZvIHsKLXB1YmxpYzoKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25J
bmZvKGNvbnN0IENTU1BhcnNlclN0cmluZyYgbmFtZSkKLSAgICAgICAgOiBtX3R5cGUoV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICwg
bV9hcmdDb3VudCgxKQotICAgICAgICAsIG1fYWxsb3dTaW5nbGVBcmd1bWVudChmYWxzZSkKLSAg
ICAgICAgLCBtX3VuaXQoQ1NTUGFyc2VyOjpGVW5rbm93bikKLSAgICB7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzOwotICAgICAgICB1bnNpZ25lZCBuYW1lTGVuZ3RoID0gbmFtZS5s
ZW5ndGgoKTsKLQotICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nZXN0TmFtZUxlbmd0aCA9IDEy
OwotICAgICAgICBVQ2hhciBjaGFyYWN0ZXJCdWZmZXJbbG9uZ2VzdE5hbWVMZW5ndGhdOwotICAg
ICAgICBpZiAobmFtZS5pczhCaXQoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RkOjptaW4obG9uZ2VzdE5hbWVMZW5ndGgsIG5hbWVMZW5ndGgpOwotICAgICAgICAgICAgY29u
c3QgTENoYXIqIGNoYXJhY3RlcnM4ID0gbmFtZS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGNo
YXJhY3RlckJ1ZmZlcltpXSA9IGNoYXJhY3RlcnM4W2ldOwotICAgICAgICAgICAgY2hhcmFjdGVy
cyA9IGNoYXJhY3RlckJ1ZmZlcjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaGFyYWN0
ZXJzID0gbmFtZS5jaGFyYWN0ZXJzMTYoKTsKLQotICAgICAgICBzd2l0Y2ggKG5hbWVMZW5ndGgp
IHsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZTogc2tldyguCi0g
ICAgICAgICAgICBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0g
PT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAnaycpIHx8IChj
aGFyYWN0ZXJzWzFdID09ICdLJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0g
PT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnRScpKQotICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzNdID09ICd3JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKLSAgICAgICAg
ICAgICAgICAmIChjaGFyYWN0ZXJzWzRdID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICBtX3Vu
aXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAg
ICBtX2FsbG93U2luZ2xlQXJndW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fYXJnQ291
bnQgPSAzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
NjoKLSAgICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBza2V3eCgsIHNrZXd5KCwgc2NhbGUoLgot
ICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0g
PT0gJ0MnKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8
fCAoY2hhcmFjdGVyc1swXSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wn
KSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hh
cmFjdGVyc1s0XSA9PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzVd
ID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVt
YmVyOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIG1fYWxsb3dT
aW5nbGVBcmd1bWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAz
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJz
WzBdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbMV0gPT0gJ2snKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnSycp
KQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnZScpIHx8IChj
aGFyYWN0ZXJzWzJdID09ICdFJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzNdID09ICd3JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgJiAoY2hhcmFjdGVyc1s1XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KChjaGFyYWN0ZXJzWzRdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1gnKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAg
ICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3Jt
T3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbNF0gPT0g
J3knKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnWScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgNzoKLSAgICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBtYXRyaXgoLCByb3RhdGUoLCBzY2Fs
ZXgoLCBzY2FsZXkoLCBzY2FsZXooLgotICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09
ICdtJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ00nKSkgewotICAgICAgICAgICAgICAgIGlmICgo
KGNoYXJhY3RlcnNbMV0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQotICAgICAg
ICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJd
ID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykg
fHwgKGNoYXJhY3RlcnNbM10gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbNF0gPT0gJ2knKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnSScpKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdY
JykpCi0gICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAxMTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdy
JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1InKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNo
YXJhY3RlcnNbMV0gPT0gJ28nKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQotICAgICAgICAg
ICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09
ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdhJykgfHwg
KGNoYXJhY3RlcnNbM10gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbNF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnVCcpKQotICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdFJykp
Ci0gICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgewotICAgICAg
ICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAg
ICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCgoY2hh
cmFjdGVyc1swXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzBdID09ICdTJykpCi0gICAgICAgICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0g
PT0gJ0MnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2En
KSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1szXSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdMJykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09ICdlJykgfHwgKGNoYXJhY3RlcnNb
NF0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAn
KCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzVdID09ICd4JykgfHwgKGNo
YXJhY3RlcnNbNV0gPT0gJ1gnKSkgewotICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQ
YXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICgoY2hhcmFjdGVyc1s1XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdZ
JykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwot
ICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVZVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJh
Y3RlcnNbNV0gPT0gJ3onKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnWicpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAg
ICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJh
dGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IHJvdGF0ZXgo
LCByb3RhdGV5KCwgcm90YXRleigsIHNjYWxlM2QoLgotICAgICAgICAgICAgaWYgKChjaGFyYWN0
ZXJzWzBdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkgewotICAgICAgICAgICAg
ICAgIGlmICgoKGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycp
KQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFy
YWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNd
ID09ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKLSAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScpKQotICAg
ICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzVdID09ICczJykKLSAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2QnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnRCcp
KQotICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzddID09ICcoJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAg
ICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9y
bU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3In
KSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1sxXSA9PSAnbycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNb
Ml0gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0g
J2EnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s0XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAg
ICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3Rl
cnNbNV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s3XSA9
PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzZdID09ICd4JykgfHwg
KGNoYXJhY3RlcnNbNl0gPT0gJ1gnKSkgewotICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBD
U1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s2XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzZdID09
ICdZJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpS
b3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNo
YXJhY3RlcnNbNl0gPT0gJ3onKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnWicpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAg
ICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IG1hdHJp
eDNkKCwgcm90YXRlM2QoLgotICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdtJykg
fHwgKGNoYXJhY3RlcnNbMF0gPT0gJ00nKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJh
Y3RlcnNbMV0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdU
JykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykgfHwgKGNo
YXJhY3RlcnNbM10gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNb
NF0gPT0gJ2knKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnSScpKQotICAgICAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1s1XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdYJykpCi0g
ICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJzMnKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdE
JykpCi0gICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbOF0gPT0gJygnKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDMxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09
ICdyJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMV0gPT0gJ28nKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQotICAg
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0
ZXJzWzJdID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNd
ID09ICdhJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnVCcpKQot
ICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnZScpIHx8IChjaGFy
YWN0ZXJzWzVdID09ICdFJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNb
Nl0gPT0gJzMnKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAn
ZCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdEJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYg
KGNoYXJhY3RlcnNbOF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1Bh
cnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgbV9h
cmdDb3VudCA9IDc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAxMDoKLSAgICAgICAgICAgIC8vIFZhbGlkIG5hbWU6IHRyYW5zbGF0ZSguCi0gICAgICAg
ICAgICBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1Qn
KSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAncicpIHx8IChjaGFyYWN0
ZXJzWzFdID09ICdSJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2En
KSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzNdID09ICduJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ04nKSkKLSAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1s0XSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdTJykpCi0g
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1
XSA9PSAnTCcpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzZdID09ICdhJykgfHwg
KGNoYXJhY3RlcnNbNl0gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3
XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdUJykpCi0gICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbOF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnRScpKQotICAgICAg
ICAgICAgICAgICYgKGNoYXJhY3RlcnNbOV0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIG1f
dW5pdCA9IENTU1BhcnNlcjo6Rkxlbmd0aCB8IENTU1BhcnNlcjo6RlBlcmNlbnQ7Ci0gICAgICAg
ICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICBtX2FsbG93U2luZ2xlQXJndW1lbnQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTE6Ci0gICAgICAgICAgICAvLyBWYWxpZCBu
YW1lczogdHJhbnNsYXRleCgsIHRyYW5zbGF0ZXkoLCB0cmFuc2xhdGV6KC4KLSAgICAgICAgICAg
IGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnVCcpKQot
ICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNb
MV0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8
IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNb
M10gPT0gJ24nKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnTicpKQotICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzRdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAg
ICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09
ICdMJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2EnKSB8fCAoY2hh
cmFjdGVyc1s2XSA9PSAnQScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09
ICd0JykgfHwgKGNoYXJhY3RlcnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s4XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAgICAg
ICAgICAgJiAoY2hhcmFjdGVyc1sxMF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIGlmICgo
Y2hhcmFjdGVyc1s5XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzldID09ICdYJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpG
UGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICgoY2hhcmFjdGVyc1s5XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzldID09ICdZJykp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NT
UGFyc2VyOjpGUGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s5XSA9PSAneicpIHx8IChjaGFyYWN0ZXJzWzld
ID09ICdaJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVu
Z3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgMTI6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogcGVyc3BlY3RpdmUoLCB0
cmFuc2xhdGUzZCguCi0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3AnKSB8fCAo
Y2hhcmFjdGVyc1swXSA9PSAnUCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVy
c1sxXSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdFJykpCi0gICAgICAgICAgICAgICAg
ICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1InKSkK
LSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3MnKSB8fCAoY2hhcmFj
dGVyc1szXSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9
PSAncCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdQJykpCi0gICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKLSAgICAg
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1s2
XSA9PSAnQycpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAndCcp
IHx8IChjaGFyYWN0ZXJzWzddID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzhdID09ICdpJykgfHwgKGNoYXJhY3RlcnNbOF0gPT0gJ0knKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbOV0gPT0gJ3YnKSB8fCAoY2hhcmFjdGVyc1s5XSA9PSAn
VicpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxMF0gPT0gJ2UnKSB8fCAo
Y2hhcmFjdGVyc1sxMF0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVy
c1sxMV0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6
OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAndCcpIHx8IChjaGFy
YWN0ZXJzWzBdID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnQScp
KQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnbicpIHx8IChj
aGFyYWN0ZXJzWzNdID09ICdOJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzRdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAn
TCcpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s2XSA9PSAnYScpIHx8
IChjaGFyYWN0ZXJzWzZdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzddID09ICd0JykgfHwgKGNoYXJhY3RlcnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbOF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9
PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzldID09ICczJykK
LSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMTBdID09ICdkJykgfHwgKGNo
YXJhY3RlcnNbMTBdID09ICdEJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3Rl
cnNbMTFdID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZM
ZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50OwotICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gNTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9IC8vIGVuZCBzd2l0Y2ggKCkKLSAgICB9Ci0KLSAgICBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgdW5zaWduZWQgYXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2FyZ0NvdW50OyB9Ci0gICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0KCkgY29uc3QgeyByZXR1cm4g
bV91bml0OyB9Ci0KLSAgICBib29sIHVua25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KLSAg
ICBib29sIGhhc0NvcnJlY3RBcmdDb3VudCh1bnNpZ25lZCBhcmdDb3VudCkgeyByZXR1cm4gbV9h
cmdDb3VudCA9PSBhcmdDb3VudCB8fCAobV9hbGxvd1NpbmdsZUFyZ3VtZW50ICYmIGFyZ0NvdW50
ID09IDEpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
Zm9ybU9wZXJhdGlvblR5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fYXJnQ291bnQ7Ci0gICAg
Ym9vbCBtX2FsbG93U2luZ2xlQXJndW1lbnQ7Ci0gICAgQ1NTUGFyc2VyOjpVbml0cyBtX3VuaXQ7
Ci19OwotCi1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkK
LXsKLSAgICBpZiAoIW1fdmFsdWVMaXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBm
b3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVl
OyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgYXV0byBwYXJzZWRUcmFu
c2Zvcm1WYWx1ZSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgaWYgKCFw
YXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIGxpc3QtPmFwcGVuZChwYXJzZWRUcmFuc2Zvcm1WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKLX0KLQotUmVmUHRyPFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtVmFsdWUoQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpG
dW5jdGlvbiB8fCAhdmFsdWUuZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gRXZlcnkgcHJpbWl0aXZlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KLSAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
LSAgICBpZiAoIWFyZ3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2VlIGlm
IHRoZSBzcGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5kLgotICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbkluZm8gaW5mbyh2YWx1ZS5mdW5jdGlvbi0+bmFtZSk7Ci0gICAgaWYgKGlu
Zm8udW5rbm93bigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghaW5mby5o
YXNDb3JyZWN0QXJnQ291bnQoYXJncy0+c2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5jdGlvbmFsIHByaW1pdGl2
ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVyYXRpb25zLgotICAgIC8vIFdlIGNvbGxlY3Qg
YSBsaXN0IG9mIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVj
aWZpZXMgYSBzaW5nbGUgb3BlcmF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIHRoZSBuZXcgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUgZm9yIHRoaXMgb3BlcmF0aW9uIGFuZCBhZGQgaXQgdG8gb3VyIGxp
c3QuCi0gICAgYXV0byB0cmFuc2Zvcm1WYWx1ZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpj
cmVhdGUoaW5mby50eXBlKCkpOwotCi0gICAgLy8gU25hZyBvdXIgdmFsdWVzLgotICAgIENTU1Bh
cnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICB1bnNpZ25lZCBhcmdO
dW1iZXIgPSAwOwotICAgIHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBDU1NQ
YXJzZXI6OlVuaXRzIHVuaXQgPSBpbmZvLnVuaXQoKTsKLQotICAgICAgICBpZiAoaW5mby50eXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9u
ICYmIGFyZ051bWJlciA9PSAzKSB7Ci0gICAgICAgICAgICAvLyA0dGggcGFyYW0gb2Ygcm90YXRl
M2QoKSBpcyBhbiBhbmdsZSByYXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVyLCB2YWxpZGF0ZSBpdCBh
cyBzdWNoCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDIp
IHsKLSAgICAgICAgICAgIC8vIDNyZCBwYXJhbSBvZiB0cmFuc2xhdGUzZCgpIGNhbm5vdCBiZSBh
IHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVy
KSB7Ci0gICAgICAgICAgICAvLyAxc3QgcGFyYW0gb2YgdHJhbnNsYXRlWigpIGNhbm5vdCBiZSBh
IHBlcmNlbnRhZ2UKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJl
cikgewotICAgICAgICAgICAgLy8gMXN0IHBhcmFtIG9mIHBlcnNwZWN0aXZlKCkgbXVzdCBiZSBh
IG5vbi1uZWdhdGl2ZSBudW1iZXIgKGRlcHJlY2F0ZWQpIG9yIGxlbmd0aC4KLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxl
bmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIHVuaXQsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0g
b3BlcmF0aW9uLgotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAgICAgKythcmdO
dW1iZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUodHJhbnNmb3JtVmFsdWUpOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6aXNCbGVuZE1vZGUoQ1NTVmFsdWVJRCB2YWx1ZUlEKQotewotICAg
IHJldHVybiAodmFsdWVJRCA+PSBDU1NWYWx1ZU11bHRpcGx5ICYmIHZhbHVlSUQgPD0gQ1NTVmFs
dWVMdW1pbm9zaXR5KQotICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsCi0gICAg
ICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdmVybGF5OwotfQotCi1ib29sIENTU1BhcnNlcjo6
aXNDb21wb3NpdGVPcGVyYXRvcihDU1NWYWx1ZUlEIHZhbHVlSUQpCi17Ci0gICAgLy8gRklYTUU6
IEFkZCBDU1NWYWx1ZURlc3RpbmF0aW9uIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIgd2hlbiB0aGUgQ29t
cG9zaXRpbmcgc3BlYyB1cGRhdGVzLgotICAgIHJldHVybiB2YWx1ZUlEID49IENTU1ZhbHVlQ2xl
YXIgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZVhvcjsKLX0KLQotc3RhdGljIHZvaWQgZmlsdGVySW5m
b0Zvck5hbWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBuYW1lLCBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSYgZmlsdGVyVHlwZSwgdW5zaWduZWQmIG1heGltdW1Bcmd1
bWVudENvdW50KQotewotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiZ3JheXNjYWxlKCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAic2VwaWEoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInNhdHVyYXRlKCIpKQotICAgICAg
ICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0
aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJo
dWUtcm90YXRlKCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCAiaW52ZXJ0KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAib3BhY2l0eSgiKSkKLSAgICAgICAg
ZmlsdGVyVHlwZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9u
OwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJicmln
aHRuZXNzKCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJy
aWdodG5lc3NGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgImNvbnRyYXN0KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJibHVyKCIpKQotICAgICAgICBm
aWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb247Ci0g
ICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImRyb3Atc2hh
ZG93KCIpKSB7Ci0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjsKLSAgICAgICAgbWF4aW11bUFyZ3VtZW50Q291bnQgPSA0
OyAgLy8geC1vZmZzZXQsIHktb2Zmc2V0LCBibHVyLXJhZGl1cywgY29sb3IgLS0gc3ByZWFkIGFu
ZCBpbnNldCBzdHlsZSBub3QgYWxsb3dlZC4KLSAgICB9Ci19Ci0KLVJlZlB0cjxXZWJLaXRDU1NG
aWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFy
c2VyVmFsdWVMaXN0JiBhcmdzLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9u
VHlwZSBmaWx0ZXJUeXBlKQotewotICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6Y3JlYXRlKGZpbHRlclR5cGUpOwotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7
ICAgIAotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJh
dGlvbjoKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlv
bjoKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlv
bjoKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoK
LSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjog
ewotICAgICAgICAvLyBPbmUgb3B0aW9uYWwgYXJndW1lbnQsIDAtMSBvciAwJS0xMDAlLCBpZiBt
aXNzaW5nIHVzZSAxMDAlLgotICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5j
dXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAgICBhdXRvIHByaW1p
dGl2ZVZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKTsKLQotICAgICAgICAgICAgLy8gU2F0dXJhdGUgYW5kIENvbnRyYXN0IGFsbG93IHZh
bHVlcyBvdmVyIDEwMCUuCi0gICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb24KLSAgICAgICAgICAgICAgICAmJiBm
aWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlv
bikgewotICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhBbGxvd2VkID0gcHJpbWl0aXZlVmFsdWUt
PnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAx
MDAuMCA6IDEuMDsKLSAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCkgPiBtYXhBbGxvd2VkKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChXVEZN
b3ZlKHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246
IHsKLSAgICAgICAgLy8gT25lIG9wdGlvbmFsIGFyZ3VtZW50LCBpZiBtaXNzaW5nIHVzZSAxMDAl
LgotICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIgfCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0
ZUZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAvLyBodWUtcm90YXRlKCkgdGFrZXMgb25lIG9w
dGlvbmFsIGFuZ2xlLgotICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmdzLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5k
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYktpdENTU0ZpbHRl
clZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgIC8vIEJsdXIgdGFrZXMgYSBz
aW5nbGUgbGVuZ3RoLiBaZXJvIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQuCi0gICAgICAgIGlmIChh
cmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb246IHsKLSAgICAgICAgLy8gZHJvcC1zaGFkb3coKSB0YWtlcyBhIHNpbmdsZSBzaGFk
b3cuCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNl
U2hhZG93KGFyZ3MsIENTU1Byb3BlcnR5RmlsdGVyKTsKLSAgICAgICAgaWYgKCFzaGFkb3dWYWx1
ZUxpc3QgfHwgc2hhZG93VmFsdWVMaXN0LT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKCpzaGFk
b3dWYWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotICAgIHJldHVybiBXVEZNb3ZlKGZpbHRlclZhbHVlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRmlsdGVyKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiYgcmVzdWx0KQotewotICAgIC8vIFRoZSBmaWx0ZXIgaXMgYSBsaXN0IG9mIGZ1bmN0
aW9uYWwgcHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkgaW5kaXZpZHVhbCBvcGVyYXRpb25zLgotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBm
b3IgKGF1dG8qIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gdmFs
dWVMaXN0Lm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkgJiYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biB8fCAhdmFsdWUtPmZ1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSBmaWx0ZXJUeXBl
ID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb247Ci0KLSAgICAg
ICAgLy8gU2VlIGlmIHRoZSBzcGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5k
LgotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkp
IHsKLSAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlRmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyVmFsdWUtPmFwcGVuZChDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKSk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoV1RGTW92ZShyZWZlcmVuY2VGaWx0ZXJW
YWx1ZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgQ1NTUGFyc2VyU3Ry
aW5nIG5hbWUgPSB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBt
YXhpbXVtQXJndW1lbnRDb3VudCA9IDE7Ci0KLSAgICAgICAgICAgIGZpbHRlckluZm9Gb3JOYW1l
KG5hbWUsIGZpbHRlclR5cGUsIG1heGltdW1Bcmd1bWVudENvdW50KTsKLQotICAgICAgICAgICAg
aWYgKGZpbHRlclR5cGUgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVy
YXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
ICAgICAgICBpZiAoIWFyZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IGZpbHRlclZhbHVlID0gcGFyc2VC
dWlsdGluRmlsdGVyQXJndW1lbnRzKCphcmdzLCBmaWx0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlm
ICghZmlsdGVyVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoZmlsdGVyVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKGxpc3QpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi1zdGF0aWMgYm9v
bCB2YWxpZEZsb3dOYW1lKGNvbnN0IFN0cmluZyYgZmxvd05hbWUpCi17Ci0gICAgcmV0dXJuICEo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJhdXRvIikKLSAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJkZWZhdWx0IikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJpbmhlcml0
IikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJp
bml0aWFsIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05h
bWUsICJub25lIikpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLWJvb2wgQ1NTUGFyc2VyOjppc1RleHRBdXRvc2l6aW5nRW5hYmxlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC50ZXh0QXV0b3NpemluZ0VuYWJsZWQ7Ci19Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi1ib29sIENTU1BhcnNlcjo6aXNDU1NHcmlkTGF5
b3V0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dC5jc3NHcmlkTGF5b3V0
RW5hYmxlZDsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotCi0vLyBub25l
IHwgPGlkZW50PgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdEZsb3dJbnRvKTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBT
dHJpbmcodmFsdWUtPnN0cmluZyk7Ci0gICAgaWYgKCFpbnB1dFByb3BlcnR5LmlzRW1wdHkoKSkg
ewotICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyAtd2Via2l0LWZsb3ctZnJvbTogbm9uZSB8IDxpZGVudD4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVJlZ2lvblRocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tKTsKLQotICAgIGlm
IChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCksIGltcG9ydGFudCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBpbnB1dFBy
b3BlcnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOwotICAgICAgICBpZiAoIWlucHV0UHJvcGVy
dHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9w
ZXJ0eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGlucHV0
UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9y
dGFudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9w
ZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCBDU1NQcm9wZXJ0eUlEJiBw
cm9wSWQzLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsdWUyLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTMpCi17Ci0gICAgcHJv
cElkMSA9IHByb3BJZDsKLSAgICBwcm9wSWQyID0gcHJvcElkOwotICAgIHByb3BJZDMgPSBwcm9w
SWQ7Ci0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbikgewotICAg
ICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YOwotICAgICAgICBwcm9w
SWQyID0gQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZOwotICAgICAgICBwcm9wSWQzID0gQ1NT
UHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5aOwotICAgIH0KLQotICAgIHN3aXRjaCAocHJvcElkKSB7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjoKLSAgICAgICAgaWYgKCFwYXJz
ZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0
aGFuZCBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlcgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWDogewotICAgICAgICB2YWx1ZSA9IHBh
cnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWTogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9z
aXRpb25ZKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luWjogewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2
YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIGlm
ICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpKQotICAgICAgICAg
ICAgdmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKENTU1By
b3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBw
cm9wSWQyLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsdWUyKQotewotICAgIHByb3BJZDEgPSBwcm9wSWQ7Ci0gICAgcHJvcElk
MiA9IHByb3BJZDsKLSAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmln
aW4pIHsKLSAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YOwot
ICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblk7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVP
cmlnaW46Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpID4gMikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCptX3ZhbHVl
TGlzdCwgdmFsdWUsIHZhbHVlMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlQZXJzcGVjdGl2ZU9yaWdpblg6IHsKLSAgICAgICAgdmFsdWUgPSBwYXJzZVBvc2l0aW9uWCgq
bV92YWx1ZUxpc3QpOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBl
cnNwZWN0aXZlT3JpZ2luWTogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25ZKCptX3Zh
bHVlTGlzdCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB2YWx1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmFkZFRleHREZWNvcmF0aW9uUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQpCi17Ci0gICAgLy8gVGhlIHRleHQtZGVjb3JhdGlvbi1saW5lIHByb3BlcnR5IHRh
a2VzIHByaW9yaXR5IG92ZXIgdGV4dC1kZWNvcmF0aW9uLCB1bmxlc3MgdGhlIGxhdHRlciBoYXMg
aW1wb3J0YW50IHByaW9yaXR5IHNldC4KLSAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24gJiYgIWltcG9ydGFudCAmJiAhaW5TaG9ydGhhbmQoKSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAobV9wYXJzZWRQcm9wZXJ0aWVzW2ldLmlkKCkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbkxpbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGlt
cG9ydGFudCk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHREZWNvcmF0aW9uKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHko
cHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAg
ICB3aGlsZSAoaXNWYWxpZCAmJiB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkg
ewotICAgICAgICBjYXNlIENTU1ZhbHVlQmxpbms6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5l
VGhyb3VnaDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgotICAgICAgICBjYXNlIENT
U1ZhbHVlVW5kZXJsaW5lOgotI2lmIEVOQUJMRShMRVRURVJQUkVTUykKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdExldHRlcnByZXNzOgotI2VuZGlmCi0gICAgICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpc1ZhbGlkKQotICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIH0KLQotICAgIC8vIFZhbHVlcyBhcmUgZWl0aGVyIHZhbGlkIG9yIGluIHNob3J0aGFuZCBz
Y29wZS4KLSAgICBpZiAobGlzdC0+bGVuZ3RoKCkgJiYgKGlzVmFsaWQgfHwgaW5TaG9ydGhhbmQo
KSkpIHsKLSAgICAgICAgYWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUo
bGlzdCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb25Ta2lw
KGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIFRoZSB0ZXh0LWRlY29yYXRpb24tc2tpcCBwcm9w
ZXJ0eSBoYXMgc3ludGF4ICJub25lIHwgWyBvYmplY3RzIHx8IHNwYWNlcyB8fCBpbmsgfHwgZWRn
ZXMgfHwgYm94LWRlY29yYXRpb24gXSIuCi0gICAgLy8gSG93ZXZlciwgb25seSAnbm9uZScgYW5k
ICdpbmsnIGFyZSBpbXBsZW1lbnRlZCB5ZXQsIHNvIHdlIHdpbGwgcGFyc2Ugc3ludGF4ICJub25l
IHwgaW5rIiBmb3Igbm93LgotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgZG8gewotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVJbms6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPYmplY3RzOgotICAg
ICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5p
ZCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKHZhbHVlID0g
bV92YWx1ZUxpc3QtPm5leHQoKSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVGV4dFVuZGVybGluZVBvc2l0aW9uKGJvb2wgaW1wb3J0YW50KQotewotICAg
IC8vIFRoZSB0ZXh0LXVuZGVybGluZS1wb3NpdGlvbiBwcm9wZXJ0eSBoYXMgc2ludGF4ICJhdXRv
IHwgYWxwaGFiZXRpYyB8IFsgdW5kZXIgfHwgWyBsZWZ0IHwgcmlnaHQgXSBdIi4KLSAgICAvLyBI
b3dldmVyLCB2YWx1ZXMgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0
LCBzbyB3ZSB3aWxsIHBhcnNlIHNpbnRheAotICAgIC8vICJhdXRvIHwgYWxwaGFiZXRpYyB8IHVu
ZGVyIiBmb3Igbm93LgotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwotICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQXV0
bzoKLSAgICBjYXNlIENTU1ZhbHVlQWxwaGFiZXRpYzoKLSAgICBjYXNlIENTU1ZhbHVlVW5kZXI6
Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGlu
ZVBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS5pZCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KQotewotICAg
IHVuc2lnbmVkIHZhbHVlTGlzdFNpemUgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaWxsOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc2hhcGU7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAg
ICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7Ci0g
ICAgICAgICAgICBpZiAoZmlsbCB8fCBzaGFwZSB8fCAodmFsdWVMaXN0U2l6ZSAhPSAxICYmICFp
blNob3J0aGFuZCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBjcmVhdGVQ
cmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIGlm
IChmaWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT3BlbiB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChmaWxsKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZpbGwgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZURvdCB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDaXJjbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRG91YmxlQ2lyY2xlIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVRyaWFuZ2xlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNlc2FtZSkg
ewotICAgICAgICAgICAgaWYgKHNoYXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIHNoYXBlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGZpbGwgJiYgc2hhcGUpIHsKLSAgICAgICAgYXV0byBw
YXJzZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAg
ICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKGZpbGwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IHBhcnNlZFZhbHVlcy0+YXBwZW5kKHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBXVEZNb3ZlKHBh
cnNlZFZhbHVlcyksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBpZiAoZmlsbCkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRF
bXBoYXNpc1N0eWxlLCBmaWxsLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoc2hhcGUpIHsKLSAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZSwgc2hhcGUucmVsZWFzZU5vbk51
bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNQb3NpdGlv
bihib29sIGltcG9ydGFudCkKLXsKLSAgICBib29sIGZvdW5kT3Zlck9yVW5kZXIgPSBmYWxzZTsK
LSAgICBDU1NWYWx1ZUlEIG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZU92ZXI7Ci0gICAgYm9v
bCBmb3VuZExlZnRPclJpZ2h0ID0gZmFsc2U7Ci0gICAgQ1NTVmFsdWVJRCBsZWZ0UmlnaHRWYWx1
ZUlEID0gQ1NTVmFsdWVSaWdodDsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkp
IHsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU92
ZXI6Ci0gICAgICAgICAgICBpZiAoZm91bmRPdmVyT3JVbmRlcikKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3VuZE92ZXJPclVuZGVyID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZU92ZXI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVVuZGVyOgotICAgICAgICAgICAgaWYgKGZvdW5kT3Zl
ck9yVW5kZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZm91
bmRPdmVyT3JVbmRlciA9IHRydWU7Ci0gICAgICAgICAgICBvdmVyVW5kZXJWYWx1ZUlEID0gQ1NT
VmFsdWVVbmRlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlTGVm
dDoKLSAgICAgICAgICAgIGlmIChmb3VuZExlZnRPclJpZ2h0KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvdW5kTGVmdE9yUmlnaHQgPSB0cnVlOwotICAgICAg
ICAgICAgbGVmdFJpZ2h0VmFsdWVJRCA9IENTU1ZhbHVlTGVmdDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlUmlnaHQ6Ci0gICAgICAgICAgICBpZiAoZm91bmRMZWZ0
T3JSaWdodCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3Vu
ZExlZnRPclJpZ2h0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGxlZnRSaWdodFZhbHVlSUQgPSBDU1NW
YWx1ZVJpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb3VuZE92ZXJP
clVuZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShvdmVyVW5kZXJWYWx1ZUlEKSk7
Ci0gICAgaWYgKGZvdW5kTGVmdE9yUmlnaHQpCi0gICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShsZWZ0UmlnaHRWYWx1ZUlE
KSk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQb3NpdGlv
biwgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVm
UHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVRleHRJbmRlbnQoKQotewotICAgIC8v
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQgaXMgZGlz
YWJsZWQuCi0gICAgLy8gWyA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiBdICYmIFsgLXdlYmtpdC1o
YW5naW5nIHx8IC13ZWJraXQtZWFjaC1saW5lIF0/IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQg
aXMgZW5hYmxlZC4KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2Vw
YXJhdGVkKCk7Ci0gICAgYm9vbCBoYXNMZW5ndGhPclBlcmNlbnRhZ2UgPSBmYWxzZTsKLSNpZiBF
TkFCTEUoQ1NTM19URVhUKQotICAgIGJvb2wgaGFzRWFjaExpbmUgPSBmYWxzZTsKLSAgICBib29s
IGhhc0hhbmdpbmcgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAg
ICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBl
bmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0g
ICAgICAgICAgICBoYXNMZW5ndGhPclBlcmNlbnRhZ2UgPSB0cnVlOwotICAgICAgICB9Ci0jaWYg
RU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAgZWxzZSBpZiAoIWhhc0VhY2hMaW5lICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVXZWJraXRFYWNoTGluZSkpOwotICAgICAgICAgICAgaGFzRWFjaExpbmUgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgaWYgKCFoYXNIYW5naW5nICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtp
dEhhbmdpbmcpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEhhbmdpbmcpKTsKLSAg
ICAgICAgICAgIGhhc0hhbmdpbmcgPSB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgdmFsdWUgPSBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICghaGFzTGVuZ3RoT3JQZXJjZW50YWdl
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwot
fQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VIYW5naW5nUHVuY3R1YXRpb24oYm9vbCBpbXBvcnRh
bnQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhhbmdpbmdQdW5jdHVhdGlvbiwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0
YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKLSAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIHN0ZDo6Yml0c2V0PG51
bUNTU1ZhbHVlS2V5d29yZHM+IHNlZW5WYWx1ZXM7Ci0gICAgd2hpbGUgKGlzVmFsaWQgJiYgdmFs
dWUpIHsKLSAgICAgICAgaWYgKHNlZW5WYWx1ZXNbdmFsdWUtPmlkXQotICAgICAgICAgICAgfHwg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFsbG93RW5kICYmIHNlZW5WYWx1ZXNbQ1NTVmFsdWVGb3Jj
ZUVuZF0pCi0gICAgICAgICAgICB8fCAodmFsdWUtPmlkID09IENTU1ZhbHVlRm9yY2VFbmQgJiYg
c2VlblZhbHVlc1tDU1NWYWx1ZUFsbG93RW5kXSkpIHsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAodmFs
dWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxvd0VuZDoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUZpcnN0OgotICAgICAgICBjYXNlIENTU1ZhbHVlRm9yY2VFbmQ6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVMYXN0OgotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAg
ICAgc2VlblZhbHVlcy5zZXQodmFsdWUtPmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzVmFsaWQpCi0gICAgICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIAotICAgIC8vIFZhbHVlcyBhcmUgZWl0
aGVyIHZhbGlkIG9yIGluIHNob3J0aGFuZCBzY29wZS4KLSAgICBpZiAobGlzdC0+bGVuZ3RoKCkg
JiYgaXNWYWxpZCkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhhbmdpbmdQdW5j
dHVhdGlvbiwgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTGluZUJveENvbnRhaW4oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgTGluZUJveENvbnRhaW4g
bGluZUJveENvbnRhaW4gPSBMaW5lQm94Q29udGFpbk5vbmU7Ci0KLSAgICBmb3IgKENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJs
b2NrKSB7Ci0gICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkJs
b2NrKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVCb3hD
b250YWluIHw9IExpbmVCb3hDb250YWluQmxvY2s7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlSW5saW5lKSB7Ci0gICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4g
JiBMaW5lQm94Q29udGFpbklubGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbklubGluZTsKLSAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb250KSB7Ci0gICAgICAgICAgICBp
ZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkZvbnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRh
aW5Gb250OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUdseXBocykg
ewotICAgICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRhaW5HbHlwaHMp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRh
aW4gfD0gTGluZUJveENvbnRhaW5HbHlwaHM7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlUmVwbGFjZWQpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAm
IExpbmVCb3hDb250YWluUmVwbGFjZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5SZXBsYWNlZDsKLSAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmxpbmVCb3gpIHsKLSAgICAg
ICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWluSW5saW5lQm94KQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVCb3hDb250YWluIHw9
IExpbmVCb3hDb250YWluSW5saW5lQm94OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUluaXRpYWxMZXR0ZXIpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFp
biAmIExpbmVCb3hDb250YWluSW5pdGlhbExldHRlcikKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbkluaXRp
YWxMZXR0ZXI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmICghbGluZUJveENvbnRhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW4sIENTU0xpbmVC
b3hDb250YWluVmFsdWU6OmNyZWF0ZShsaW5lQm94Q29udGFpbiksIGltcG9ydGFudCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGZWF0dXJlVGFnKENT
U1ZhbHVlTGlzdCYgc2V0dGluZ3MpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAvLyBGZWF0dXJlIHRhZyBuYW1lIGNvbWVzIGZpcnN0
Ci0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRm9udEZlYXR1cmVUYWcgdGFnOwotICAgIGlmICh2
YWx1ZS0+c3RyaW5nLmxlbmd0aCgpICE9IHRhZy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIC8vIExpbWl0cyB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB0byAweDIwLTB4N0UsIGZvbGxv
d2luZyB0aGUgdGFnIG5hbWUgcnVsZXMgZGVmaWVuZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNh
dGlvbi4KLSAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gdmFsdWUtPnN0cmluZ1tpXTsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA8IDB4MjAgfHwgY2hhcmFjdGVyID4gMHg3RSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgdGFnW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7
Ci0gICAgfQotCi0gICAgaW50IHRhZ1ZhbHVlID0gMTsKLSAgICAvLyBGZWF0dXJlIHRhZyB2YWx1
ZXMgY291bGQgZm9sbG93OiA8aW50ZWdlcj4gfCBvbiB8IG9mZgotICAgIHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT5pc0ludCAmJiB2YWx1
ZS0+ZlZhbHVlID49IDApIHsKLSAgICAgICAgICAgIHRhZ1ZhbHVlID0gY2xhbXBUb0ludGVnZXIo
dmFsdWUtPmZWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAodGFnVmFsdWUgPCAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT24gfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlT2ZmKSB7Ci0gICAgICAgICAgICB0YWdWYWx1ZSA9IHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZU9uOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBzZXR0aW5ncy5hcHBlbmQoQ1NTRm9udEZlYXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1v
dmUodGFnKSwgdGFnVmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyhib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAo
bV92YWx1ZUxpc3QtPnNpemUoKSA9PSAxICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09
IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgIGF1dG8gbm9ybWFsVmFsdWUgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7Ci0g
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udEZlYXR1cmVTZXR0aW5ncywgV1RGTW92ZShub3JtYWxWYWx1ZSksIGltcG9ydGFudCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gc2V0dGluZ3MgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgZm9yIChDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghcGFyc2VGb250RmVhdHVyZVRhZyhzZXR0aW5n
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGxpc3Qg
aXNuJ3QgcGFyc2VkIGZ1bGx5LCB0aGUgY3VycmVudCB2YWx1ZSBzaG91bGQgYmUgY29tbWEuCi0g
ICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHZhbHVl
ICYmICFpc0NvbW1hKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHNldHRpbmdzLT5sZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRGZWF0dXJlU2V0dGluZ3MsIFdURk1vdmUoc2V0dGluZ3MpLCBpbXBvcnRhbnQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyhib29sIGltcG9ydGFudCwgYm9v
bCB1bmtub3duSXNGYWlsdXJlLCBib29sIGltcGxpY2l0KQotewotICAgIGF1dG8gdmFsdWVzID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIEZvbnRWYXJpYW50TGln
YXR1cmVzIGNvbW1vbkxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0g
ICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNh
bExpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlh
bnRMaWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6
Tm9ybWFsOwotCi0gICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgICAgIGNvbW1vbkxp
Z2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgY29tbW9u
TGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAg
ICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlRGlzY3JldGlvbmFyeUxp
Z2F0dXJlczoKLSAgICAgICAgICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPSBGb250VmFyaWFu
dExpZ2F0dXJlczo6WWVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVOb0hpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVz
ID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgaGlzdG9yaWNh
bExpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbnRleHR1YWw6Ci0gICAgICAgICAgICBjb250ZXh0
dWFsQWx0ZXJuYXRlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29udGV4dHVhbDoKLSAgICAgICAgICAgIGNv
bnRleHR1YWxBbHRlcm5hdGVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5rbm93bklzRmFp
bHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAoY29tbW9uTGlnYXR1cmVzKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Q29tbW9uTGlnYXR1cmVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRM
aWdhdHVyZXM6Ok5vOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgotICAgICAgICB2YWx1
ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9E
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3
aXRjaCAoaGlzdG9yaWNhbExpZ2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJl
czo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0gICAgICAg
IHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVzKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHN3aXRjaCAoY29udGV4dHVhbEFsdGVybmF0ZXMpIHsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250ZXh0dWFs
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgot
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29udGV4dHVhbCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAhdW5rbm93
bklzRmFpbHVyZTsKLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdh
dHVyZXMsIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhib29s
IGltcG9ydGFudCwgYm9vbCB1bmtub3duSXNGYWlsdXJlLCBib29sIGltcGxpY2l0KQotewotICAg
IGF1dG8gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAg
IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1
cmU6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmcgPSBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24gZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOwotICAg
IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVtZXJpY09y
ZGluYWw6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBzbGFzaGVk
WmVybyA9IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7Ci0KLSAgICBmb3Ig
KENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxp
bmluZ051bXM6Ci0gICAgICAgICAgICBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6
OkxpbmluZ051bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZU9sZHN0eWxlTnVtczoKLSAgICAgICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0Zp
Z3VyZTo6T2xkU3R5bGVOdW1iZXJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVQcm9wb3J0aW9uYWxOdW1zOgotICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRhYnVsYXJOdW1zOgotICAgICAgICAgICAgc3BhY2lu
ZyA9IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9uczoKLSAgICAg
ICAgICAgIGZyYWN0aW9uID0gRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJh
Y3Rpb25zOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdGFja2Vk
RnJhY3Rpb25zOgotICAgICAgICAgICAgZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFj
dGlvbjo6U3RhY2tlZEZyYWN0aW9uczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlT3JkaW5hbDoKLSAgICAgICAgICAgIG9yZGluYWwgPSBGb250VmFyaWFudE51bWVy
aWNPcmRpbmFsOjpZZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZVNsYXNoZWRaZXJvOgotICAgICAgICAgICAgc2xhc2hlZFplcm8gPSBGb250VmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybzo6WWVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBpZiAodW5rbm93bklzRmFpbHVyZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHN3aXRjaCAoZmlndXJlKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5v
cm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6
OkxpbmluZ051bWJlcnM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluaW5nTnVtcykpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVO
dW1iZXJzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9sZHN0eWxlTnVtcykpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNwYWNpbmcpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgotICAgICAgICB2YWx1
ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVByb3BvcnRpb25hbE51bXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKLSAgICAgICAgdmFsdWVz
LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVUYWJ1bGFyTnVtcykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0
Y2ggKGZyYWN0aW9uKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9y
bWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9u
OjpEaWFnb25hbEZyYWN0aW9uczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEaWFnb25hbEZyYWN0
aW9ucykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uOjpTdGFja2VkRnJhY3Rpb25zOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0YWNrZWRGcmFj
dGlvbnMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChvcmRpbmFsKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgotICAgICAgICB2
YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU9yZGluYWwpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChzbGFzaGVkWmVybykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFpl
cm86Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNsYXNoZWRaZXJvKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuICF1bmtub3duSXNGYWlsdXJlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250VmFyaWFudE51bWVyaWMsIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBsaWNp
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJp
YW50RWFzdEFzaWFuKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJvb2wg
aW1wbGljaXQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQgPSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoIHdpZHRoID0gRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOwotICAg
IEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
OjpOb3JtYWw7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAg
ICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZUppczc4OgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZUppczgzOgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzODM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUppczkwOgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6SmlzOTA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUppczA0OgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzMDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBs
aWZpZWQ6Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpTaW1wbGlmaWVkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVU
cmFkaXRpb25hbDoKLSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6OlRyYWRpdGlvbmFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVGdWxsV2lkdGg6Ci0gICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
V2lkdGg6OkZ1bGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVBy
b3BvcnRpb25hbFdpZHRoOgotICAgICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoOjpQcm9wb3J0aW9uYWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZVJ1Ynk6Ci0gICAgICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
OjpZZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGlmICh1bmtub3duSXNGYWlsdXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh2YXJp
YW50KSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4
OgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczc4KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKLSAgICAgICAgdmFsdWVzLT5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVKaXM4MykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6SmlzOTA6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzOTApKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0Ogot
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczA0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOgotICAgICAgICB2YWx1ZXMt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVNpbXBsaWZpZWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRy
YWRpdGlvbmFsKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAod2lkdGgp
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgotICAgICAg
ICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUZ1bGxXaWR0aCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKLSAgICAgICAgdmFsdWVzLT5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVQcm9wb3J0aW9uYWxXaWR0aCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBz
d2l0Y2ggKHJ1YnkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFs
OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVz
OgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1YnkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVl
cy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAhdW5rbm93bklzRmFpbHVyZTsKLQotICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0QXNpYW4sIFdURk1vdmUodmFsdWVz
KSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50KGJvb2wgaW1wb3J0YW50KQotewotICAgIFNob3J0aGFu
ZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwotICAgIGlmICghcGFy
c2VGb250VmFyaWFudExpZ2F0dXJlcyhpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAg
IGlmICghcGFyc2VGb250VmFyaWFudE51bWVyaWMoaW1wb3J0YW50LCBmYWxzZSwgZmFsc2UpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRleCgw
KTsKLSAgICBpZiAoIXBhcnNlRm9udFZhcmlhbnRFYXN0QXNpYW4oaW1wb3J0YW50LCBmYWxzZSwg
ZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92YWx1ZUxpc3QtPnNldEN1cnJl
bnRJbmRleCgwKTsKLQotICAgIEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24gPSBGb250VmFy
aWFudFBvc2l0aW9uOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRDYXBzIGNhcHMgPSBGb250VmFy
aWFudENhcHM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcyA9
IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOwotCi0gICAgZm9yIChDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3
aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJl
czoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZURp
c2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxM
aWdhdHVyZXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzOgotICAg
ICAgICBjYXNlIENTU1ZhbHVlQ29udGV4dHVhbDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29u
dGV4dHVhbDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmluZ051bXM6Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVPbGRzdHlsZU51bXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxO
dW1zOgotICAgICAgICBjYXNlIENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVEaWFnb25hbEZyYWN0aW9uczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN0YWNrZWRGcmFj
dGlvbnM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFsOgotICAgICAgICBjYXNlIENTU1Zh
bHVlU2xhc2hlZFplcm86Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM3ODoKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUppczgzOgotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVKaXMwNDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBsaWZpZWQ6Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVUcmFkaXRpb25hbDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZ1bGxX
aWR0aDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgotICAgICAgICBj
YXNlIENTU1ZhbHVlUnVieToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Zh
bHVlU3ViOgotICAgICAgICAgICAgcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJz
Y3JpcHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgot
ICAgICAgICAgICAgcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXBzOgotICAg
ICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6U21hbGw7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2FwczoKLSAgICAgICAgICAgIGNhcHMg
PSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVQZXRpdGVDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50
Q2Fwczo6UGV0aXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVB
bGxQZXRpdGVDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0
aXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgot
ICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGl0bGluZ0NhcHM6Ci0gICAgICAgICAgICBj
YXBzID0gRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVIaXN0b3JpY2FsRm9ybXM6Ci0gICAgICAgICAgICBhbHRlcm5hdGVz
ID0gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAocG9zaXRpb24pIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50UG9zaXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dFBvc2l0aW9uOjpTdWJzY3JpcHQ6Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnRQb3NpdGlvbiwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVTdWIpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1cGVyKSwgaW1wb3J0YW50
LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoY2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlU21hbGxDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsU21hbGxDYXBzKSwgaW1wb3J0
YW50LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQ
ZXRpdGU6Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBl
dGl0ZUNhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2FwcyksIGltcG9ydGFudCwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5pY2FzZSksIGltcG9ydGFu
dCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0
bGluZzoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVGl0
bGluZ0NhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChhbHRlcm5hdGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6
Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6
Okhpc3RvcmljYWxGb3JtczoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFy
aWFudEFsdGVybmF0ZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlSGlzdG9yaWNhbEZvcm1zKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZFdpbGxDaGFuZ2VBbmltYXRhYmxlRmVhdHVyZShjb25zdCBDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1
ZS5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVBbGwpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZUlzQ1NTS2V5d29yZCh2YWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjc3NQcm9wZXJ0eUlEKHZhbHVlLnN0cmluZykg
PT0gQ1NTUHJvcGVydHlXaWxsQ2hhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlV2lsbENoYW5nZShib29sIGlt
cG9ydGFudCkKLXsKLSAgICBhdXRvIHdpbGxDaGFuZ2VQcm9wZXJ0eVZhbHVlcyA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBm
YWxzZTsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYg
KGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXhwZWN0
Q29tbWEgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFpc1ZhbGlkV2lsbENoYW5nZUFu
aW1hdGFibGVGZWF0dXJlKCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZTsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVNjcm9sbFBvc2l0aW9uIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRz
KQotICAgICAgICAgICAgY3NzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7
Ci0gICAgICAgICAgICBpZiAocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUludmFsaWQpCi0gICAg
ICAgICAgICAgICAgY3NzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICAgICAgICAgIGVsc2UgLy8gVGhpcyBtaWdo
dCBiZSBhIHByb3BlcnR5IHdlIGRvbid0IHN1cHBvcnQuCi0gICAgICAgICAgICAgICAgY3NzVmFs
dWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgd2lsbENoYW5nZVByb3BlcnR5VmFsdWVzLT5hcHBlbmQoY3NzVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdpbGxDaGFuZ2UsIFdURk1vdmUod2lsbENoYW5nZVByb3BlcnR5
VmFsdWVzKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU0Nh
bGNWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1
ZSwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQotewotICAgIEFTU0VSVChp
c0NhbGN1bGF0aW9uKHZhbHVlKSk7Ci0gICAgCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdz
ID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5z
aXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIENTU0NhbGNWYWx1
ZTo6Y3JlYXRlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAqYXJncywgcmFuZ2UpOwotfQotCi0jZGVm
aW5lIEVORF9UT0tFTiAwCi0KLSNpbmNsdWRlICJDU1NHcmFtbWFyLmgiCi0KLWVudW0gQ2hhcmFj
dGVyVHlwZSB7Ci0gICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3aXRjaC4KLQotICAgIC8vIFRo
ZSBmaXJzdCA0IHR5cGVzIG11c3QgYmUgZ3JvdXBlZCB0b2dldGhlciwgYXMgdGhleQotICAgIC8v
IHJlcHJlc2VudCB0aGUgYWxsb3dlZCBjaGFycyBpbiBhbiBpZGVudGlmaWVyLgotICAgIENoYXJh
Y3RlckNhc2VsZXNzVSwKLSAgICBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0gICAgQ2hhcmFj
dGVyTnVtYmVyLAotICAgIENoYXJhY3RlckRhc2gsCi0KLSAgICBDaGFyYWN0ZXJPdGhlciwKLSAg
ICBDaGFyYWN0ZXJOdWxsLAotICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCi0gICAgQ2hhcmFjdGVy
RW5kQ29uZGl0aW9uUXVlcnksCi0gICAgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCi0gICAgQ2hhcmFj
dGVyUXVvdGUsCi0gICAgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAotICAgIENoYXJhY3Rlckhh
c2htYXJrLAotICAgIENoYXJhY3RlckRvbGxhciwKLSAgICBDaGFyYWN0ZXJBc3RlcmlzaywKLSAg
ICBDaGFyYWN0ZXJQbHVzLAotICAgIENoYXJhY3RlckRvdCwKLSAgICBDaGFyYWN0ZXJTbGFzaCwK
LSAgICBDaGFyYWN0ZXJMZXNzLAotICAgIENoYXJhY3RlckF0LAotICAgIENoYXJhY3RlckJhY2tT
bGFzaCwKLSAgICBDaGFyYWN0ZXJYb3IsCi0gICAgQ2hhcmFjdGVyVmVydGljYWxCYXIsCi0gICAg
Q2hhcmFjdGVyVGlsZGUsCi19OwotCi0vLyAxMjggQVNDSUkgY29kZXMKLXN0YXRpYyBjb25zdCBD
aGFyYWN0ZXJUeXBlIHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKLS8qICAgMCAtIE51
bGwgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdWxsLAotLyogICAxIC0gU3RhcnQgb2YgSGVh
ZGluZyAgICovIENoYXJhY3Rlck90aGVyLAotLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICov
IENoYXJhY3Rlck90aGVyLAotLyogICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAotLyogICA0IC0gRW5kIG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAot
LyogICA1IC0gRW5xdWlyeSAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA2IC0g
QWNrbm93bGVkZ21lbnQgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA3IC0gQmVsbCAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAotLyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJh
Y3RlcldoaXRlU3BhY2UsCi0vKiAgMTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVy
V2hpdGVTcGFjZSwKLS8qICAxMSAtIFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKLS8qICAxMiAtIEZvcm0gRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAot
LyogIDEzIC0gQ2FycmlhZ2UgUmV0dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCi0vKiAg
MTQgLSBTaGlmdCBPdXQgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMTUgLSBTaGlm
dCBJbiAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMTYgLSBEYXRhIExpbmUgRXNj
YXBlICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCi0vKiAgMTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAgMTkgLSBEZXZpY2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0v
KiAgMjAgLSBEZXZpY2UgQ29udHJvbCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjEgLSBO
ZWdhdGl2ZSBBY2suICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjIgLSBTeW5jaHJvbm91
cyBJZGxlICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgMjUgLSBFbmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgMjYgLSBTdWJzdGl0dXRlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjcg
LSBFc2NhcGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjggLSBGaWxlIFNl
cGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjkgLSBHcm91cCBTZXBhcmF0b3Ig
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCi0vKiAgMzEgLSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCi0vKiAgMzIgLSBTcGFjZSAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwK
LS8qICAzMyAtICEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmss
Ci0vKiAgMzQgLSAiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCi0vKiAgMzUg
LSAjICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySGFzaG1hcmssCi0vKiAgMzYgLSAkICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRG9sbGFyLAotLyogIDM3IC0gJSAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAotLyogIDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
clF1b3RlLAotLyogIDQwIC0gKCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAot
LyogIDQxIC0gKSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAotLyog
IDQyIC0gKiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckFzdGVyaXNrLAotLyogIDQzIC0g
KyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclBsdXMsCi0vKiAgNDQgLSAsICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNDUgLSAtICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyRGFzaCwKLS8qICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJEb3QsCi0vKiAgNDcgLSAvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCi0v
KiAgNDggLSAwICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDQ5IC0g
MSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1MCAtIDIgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTEgLSAzICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck51bWJlciwKLS8qICA1MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJO
dW1iZXIsCi0vKiAgNTQgLSA2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAot
LyogIDU1IC0gNyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NiAt
IDggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTcgLSA5ICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDU4IC0gOiAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlckVuZENvbmRpdGlvblF1ZXJ5LAotLyogIDYwIC0gPCAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlckxlc3MsCi0vKiAgNjEgLSA9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAgNjIgLSA+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0v
KiAgNjMgLSA/ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNjQgLSBA
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQXQsCi0vKiAgNjUgLSBBICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDY2IC0gQiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA2NyAtIEMgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjggLSBEICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDY5IC0gRSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MCAtIEYgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzEgLSBHICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDcyIC0gSCAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MyAtIEkgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzQgLSBKICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc1IC0gSyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NiAtIEwg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzcgLSBN
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc4IC0g
TiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3OSAt
IE8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODAg
LSBQICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDgx
IC0gUSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4
MiAtIFIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAg
ODMgLSBTICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyog
IDg0IC0gVCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8q
ICA4NSAtIFUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCi0vKiAgODYg
LSBWICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg3
IC0gVyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4
OCAtIFggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAg
ODkgLSBZICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyog
IDkwIC0gWiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8q
ICA5MSAtIFsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA5MiAtIFwg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJCYWNrU2xhc2gsCi0vKiAgOTMgLSBdICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgOTQgLSBeICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyWG9yLAotLyogIDk1IC0gXyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA5NiAtIGAgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKLS8qICA5NyAtIGEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAgOTggLSBiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogIDk5IC0gYyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKLS8qIDEwMCAtIGQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCi0vKiAxMDEgLSBlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAotLyogMTAyIC0gZiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKLS8qIDEwMyAtIGcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMDQgLSBoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAotLyogMTA1IC0gaSAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKLS8qIDEwNiAtIGogICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMDcgLSBrICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTA4IC0gbCAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qIDEwOSAtIG0gICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMTAgLSBuICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTExIC0gbyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qIDExMiAtIHAgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMTMgLSBxICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTE0IC0gciAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qIDExNSAtIHMgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMTYgLSB0ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTE3IC0gdSAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlckNhc2VsZXNzVSwKLS8qIDExOCAtIHYgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMTkgLSB3ICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTIwIC0geCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qIDEyMSAtIHkgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAxMjIgLSB6ICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogMTIzIC0geyAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlckVuZENvbmRpdGlvblF1ZXJ5LAotLyogMTI0IC0gfCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlclZlcnRpY2FsQmFyLAotLyogMTI1IC0gfSAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAotLyogMTI2IC0gfiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlclRpbGRlLAotLyogMTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAotfTsKLQotLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBDU1MgdG9rZW5pemVyLgot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c0NTU0xldHRlcihDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFj
dGVyID49IDEyOCB8fCB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2NoYXJhY3Rlcl0gPD0gQ2hhcmFj
dGVyRGFzaDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMg
aW5saW5lIGJvb2wgaXNDU1NFc2NhcGUoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAg
cmV0dXJuIGNoYXJhY3RlciA+PSAnICcgJiYgY2hhcmFjdGVyICE9IDEyNzsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0
ZXIoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0g
JyonICYmIGNoYXJhY3RlciAhPSAxMjcpIHx8IChjaGFyYWN0ZXIgPj0gJyMnICYmIGNoYXJhY3Rl
ciA8PSAnJicpIHx8IGNoYXJhY3RlciA9PSAnISc7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJE
YXNoKENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGlzQVND
SUlBbHBoYShjdXJyZW50Q2hhcmFjdGVyWzBdKSB8fCBjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdf
JyB8fCBjdXJyZW50Q2hhcmFjdGVyWzBdID49IDEyOAotICAgICAgICB8fCAoY3VycmVudENoYXJh
Y3RlclswXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGN1cnJlbnRDaGFyYWN0ZXJbMV0pKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wg
aXNDdXN0b21Qcm9wZXJ0eUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3Rl
cikKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGN1cnJlbnRDaGFyYWN0ZXJbMF0pIHx8IGN1
cnJlbnRDaGFyYWN0ZXJbMF0gPT0gJ18nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPj0gMTI4Ci0g
ICAgICAgIHx8IChjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoY3Vy
cmVudENoYXJhY3RlclsxXSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKENoYXJhY3RlclR5
cGUqIGNzc1N0cmluZywgY29uc3QgY2hhciogY29uc3RhbnRTdHJpbmcpCi17Ci0gICAgLy8gQ29t
cGFyZSBhbiBjaGFyYWN0ZXIgbWVtb3J5IGRhdGEgd2l0aCBhIHplcm8gdGVybWluYXRlZCBzdHJp
bmcuCi0gICAgZG8gewotICAgICAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlk
ZW50aWZpZXIgaWYgY29uc3RhbnRDaGFyIG9yIGNvbnN0U3RyaW5nCi0gICAgICAgIC8vIGNvbnRh
aW5zICctJy4gT3RoZXJ3aXNlIHRvQVNDSUlMb3dlclVuY2hlY2tlZCgnXHInKSB3b3VsZCBiZSBl
cXVhbCB0byAnLScuCi0gICAgICAgIEFTU0VSVCgoKmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAq
Y29uc3RhbnRTdHJpbmcgPD0gJ3onKSB8fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0nKTsKLSAgICAg
ICAgQVNTRVJUKCpjb25zdGFudFN0cmluZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmlu
ZykpOwotICAgICAgICBpZiAodG9BU0NJSUxvd2VyVW5jaGVja2VkKCpjc3NTdHJpbmcrKykgIT0g
KCpjb25zdGFudFN0cmluZysrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdo
aWxlICgqY29uc3RhbnRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsVG9DU1ND
YXNlU2Vuc2l0aXZlSWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IGNoYXIq
IGNvbnN0YW50U3RyaW5nKQotewotICAgIGRvIHsKLSAgICAgICAgaWYgKCpzdHJpbmcrKyAhPSAq
Y29uc3RhbnRTdHJpbmcrKykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdoaWxl
ICgqY29uc3RhbnRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNraXBF
c2NhcGUoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcikKLXsKLSAgICAvLyBSZXR1cm5z
IHdpdGggMCwgaWYgZXNjYXBlIGNoZWNrIGlzIGZhaWxlZC4gT3RoZXJ3aXNlCi0gICAgLy8gaXQg
cmV0dXJucyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLgotICAgIEFTU0VSVCgqY3VycmVu
dENoYXJhY3RlciA9PSAnXFwnKTsKLQotICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAo
IWlzQ1NTRXNjYXBlKCpjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSkgewotICAgICAg
ICBpbnQgbGVuZ3RoID0gNjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICArK2N1cnJlbnRD
aGFyYWN0ZXI7Ci0gICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJh
Y3RlcikgJiYgLS1sZW5ndGgpOwotCi0gICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRo
ZSBlc2NhcGUgc2VxdWVuY2UuCi0gICAgICAgIGlmIChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJh
Y3RlcikpCi0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiBj
dXJyZW50Q2hhcmFjdGVyOwotICAgIH0KLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlciArIDE7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBD
aGFyYWN0ZXJUeXBlKiBza2lwV2hpdGVTcGFjZShDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFj
dGVyKQotewotICAgIHdoaWxlIChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJhY3RlcikpCi0gICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcjsKLX0K
LQotLy8gTWFpbiBDU1MgdG9rZW5pemVyIGZ1bmN0aW9ucy4KLQotdGVtcGxhdGUgPD4KLUxDaGFy
KiBDU1NQYXJzZXJTdHJpbmc6OmNoYXJhY3RlcnM8TENoYXI+KCkgY29uc3QgeyByZXR1cm4gY2hh
cmFjdGVyczgoKTsgfQotCi10ZW1wbGF0ZSA8PgotVUNoYXIqIENTU1BhcnNlclN0cmluZzo6Y2hh
cmFjdGVyczxVQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzMTYoKTsgfQotCi10ZW1w
bGF0ZSA8PgotaW5saW5lIExDaGFyKiYgQ1NTUGFyc2VyOjpjdXJyZW50Q2hhcmFjdGVyPExDaGFy
PigpCi17Ci0gICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rlcjg7Ci19Ci0KLXRlbXBsYXRlIDw+
Ci1pbmxpbmUgVUNoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXI8VUNoYXI+KCkKLXsK
LSAgICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLVVDaGFyKiYgQ1NTUGFyc2Vy
OjpjdXJyZW50Q2hhcmFjdGVyMTYoKQotewotICAgIGlmICghbV9jdXJyZW50Q2hhcmFjdGVyMTYp
IHsKLSAgICAgICAgbV9kYXRhU3RhcnQxNiA9IHN0ZDo6bWFrZV91bmlxdWU8VUNoYXJbXT4obV9s
ZW5ndGgpOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG1fZGF0YVN0YXJ0MTYuZ2V0
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjE2OwotfQotCi10ZW1w
bGF0ZSA8PgotaW5saW5lIExDaGFyKiBDU1NQYXJzZXI6OnRva2VuU3RhcnQ8TENoYXI+KCkKLXsK
LSAgICByZXR1cm4gbV90b2tlblN0YXJ0LnB0cjg7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
VUNoYXIqIENTU1BhcnNlcjo6dG9rZW5TdGFydDxVQ2hhcj4oKQotewotICAgIHJldHVybiBtX3Rv
a2VuU3RhcnQucHRyMTY7Ci19Ci0KLUNTU1BhcnNlcjo6TG9jYXRpb24gQ1NTUGFyc2VyOjpjdXJy
ZW50TG9jYXRpb24oKQotewotICAgIExvY2F0aW9uIGxvY2F0aW9uOwotICAgIGxvY2F0aW9uLmxp
bmVOdW1iZXIgPSBtX3Rva2VuU3RhcnRMaW5lTnVtYmVyOwotICAgIGxvY2F0aW9uLmNvbHVtbk51
bWJlciA9IG1fdG9rZW5TdGFydENvbHVtbk51bWJlcjsKLQotICAgIEFTU0VSVChsb2NhdGlvbi5s
aW5lTnVtYmVyID49IDApOwotICAgIEFTU0VSVChsb2NhdGlvbi5jb2x1bW5OdW1iZXIgPj0gMCk7
Ci0KLSAgICBpZiAobG9jYXRpb24ubGluZU51bWJlciA9PSBtX3NoZWV0U3RhcnRMaW5lTnVtYmVy
KQotICAgICAgICBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgKz0gbV9zaGVldFN0YXJ0Q29sdW1uTnVt
YmVyOwotCi0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICBsb2NhdGlvbi50b2tlbi5p
bml0KHRva2VuU3RhcnQ8TENoYXI+KCksIGN1cnJlbnRDaGFyYWN0ZXI8TENoYXI+KCkgLSB0b2tl
blN0YXJ0PExDaGFyPigpKTsKLSAgICBlbHNlCi0gICAgICAgIGxvY2F0aW9uLnRva2VuLmluaXQo
dG9rZW5TdGFydDxVQ2hhcj4oKSwgY3VycmVudENoYXJhY3RlcjxVQ2hhcj4oKSAtIHRva2VuU3Rh
cnQ8VUNoYXI+KCkpOwotCi0gICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6aXNJZGVudGlmaWVy
U3RhcnQoKQotewotICAgIC8vIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBzdGFydGVk
LgotICAgIHJldHVybiBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaCgoKmN1cnJlbnRDaGFyYWN0
ZXI8Q2hhcmFjdGVyVHlwZT4oKSAhPSAnLScpID8gY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJU
eXBlPigpIDogY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpICsgMSk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBDaGFyYWN0ZXJU
eXBlKiBjaGVja0FuZFNraXBTdHJpbmcoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3Rlciwg
aW50IHF1b3RlKQotewotICAgIC8vIFJldHVybnMgd2l0aCAwLCBpZiBzdHJpbmcgY2hlY2sgaXMg
ZmFpbGVkLiBPdGhlcndpc2UKLSAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhlIGZvbGxvd2luZyBj
aGFyYWN0ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5Ci0gICAgLy8gc2luY2Ugd2UgY2Fubm90IHJldmVy
dCBlc2NhcGUgc2VxdWVuY2VzLCB0aHVzIHN0cmluZ3MKLSAgICAvLyBtdXN0IGJlIHZhbGlkYXRl
ZCBiZWZvcmUgcGFyc2luZy4KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoVU5MSUtF
TFkoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gcXVvdGUpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcg
cGFyc2luZyBpcyBzdWNjZXNzZnVsLgotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0
ZXIgKyAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChVTkxJS0VMWSghKmN1cnJlbnRDaGFyYWN0
ZXIpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsIHVwIHRv
IGVuZCBvZiBpbnB1dC4KLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJhY3RlciA8PSAnXHInICYm
ICgqY3VycmVudENoYXJhY3RlciA9PSAnXG4nIHx8ICgqY3VycmVudENoYXJhY3RlciB8IDB4MSkg
PT0gJ1xyJykpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9y
IGNoYXJhY3RlciAnXG4nLCAnXGYnIG9yICdccicuCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChMSUtFTFkoY3VycmVudENoYXJhY3RlclswXSAh
PSAnXFwnKSkKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgZWxzZSBp
ZiAoY3VycmVudENoYXJhY3RlclsxXSA9PSAnXG4nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMV0gPT0g
J1xmJykKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgKz0gMjsKLSAgICAgICAgZWxzZSBp
ZiAoY3VycmVudENoYXJhY3RlclsxXSA9PSAnXHInKQotICAgICAgICAgICAgY3VycmVudENoYXJh
Y3RlciArPSBjdXJyZW50Q2hhcmFjdGVyWzJdID09ICdcbicgPyAzIDogMjsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gY2hlY2tBbmRTa2lwRXNjYXBlKGN1
cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhcmFjdGVyKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXVuc2lnbmVkIENTU1BhcnNlcjo6cGFyc2VF
c2NhcGUoQ2hhcmFjdGVyVHlwZSomIHNyYykKLXsKLSAgICBBU1NFUlQoKnNyYyA9PSAnXFwnICYm
IGlzQ1NTRXNjYXBlKHNyY1sxXSkpOwotCi0gICAgdW5zaWduZWQgdW5pY29kZSA9IDA7Ci0KLSAg
ICArK3NyYzsKLSAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpzcmMpKSB7Ci0KLSAgICAgICAgaW50
IGxlbmd0aCA9IDY7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgdW5pY29kZSA9ICh1bmlj
b2RlIDw8IDQpICsgdG9BU0NJSUhleFZhbHVlKCpzcmMrKyk7Ci0gICAgICAgIH0gd2hpbGUgKC0t
bGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdCgqc3JjKSk7Ci0KLSAgICAgICAgaWYgKHVuaWNvZGUg
PiBVQ0hBUl9NQVhfVkFMVUUpCi0gICAgICAgICAgICB1bmljb2RlID0gcmVwbGFjZW1lbnRDaGFy
YWN0ZXI7Ci0KLSAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1
ZW5jZS4KLSAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpzcmMpKQotICAgICAgICAgICAgKytzcmM7
Ci0KLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuICpjdXJyZW50
Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkrKzsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2
b2lkIENTU1BhcnNlcjo6VW5pY29kZVRvQ2hhcnM8TENoYXI+KExDaGFyKiYgcmVzdWx0LCB1bnNp
Z25lZCB1bmljb2RlKQotewotICAgIEFTU0VSVCh1bmljb2RlIDw9IDB4ZmYpOwotICAgICpyZXN1
bHQgPSB1bmljb2RlOwotCi0gICAgKytyZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
dm9pZCBDU1NQYXJzZXI6OlVuaWNvZGVUb0NoYXJzPFVDaGFyPihVQ2hhciomIHJlc3VsdCwgdW5z
aWduZWQgdW5pY29kZSkKLXsKLSAgICAvLyBSZXBsYWNlIHVuaWNvZGUgd2l0aCBhIHN1cnJvZ2F0
ZSBwYWlycyB3aGVuIGl0IGlzIGJpZ2dlciB0aGFuIDB4ZmZmZgotICAgIGlmIChVMTZfTEVOR1RI
KHVuaWNvZGUpID09IDIpIHsKLSAgICAgICAgKnJlc3VsdCsrID0gVTE2X0xFQUQodW5pY29kZSk7
Ci0gICAgICAgICpyZXN1bHQgPSBVMTZfVFJBSUwodW5pY29kZSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgICpyZXN1bHQgPSB1bmljb2RlOwotCi0gICAgKytyZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLWlu
bGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVySW50ZXJuYWwoU3JjQ2hhcmFjdGVy
VHlwZSomIHNyYywgRGVzdENoYXJhY3RlclR5cGUqJiByZXN1bHQsIGJvb2wmIGhhc0VzY2FwZSkK
LXsKLSAgICBoYXNFc2NhcGUgPSBmYWxzZTsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChMSUtFTFko
KnNyYyAhPSAnXFwnKSkKLSAgICAgICAgICAgICpyZXN1bHQrKyA9ICpzcmMrKzsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBoYXNFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgU3JjQ2hh
cmFjdGVyVHlwZSogc2F2ZWRFc2NhcGVTdGFydCA9IHNyYzsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHVuaWNvZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwotICAgICAgICAg
ICAgaWYgKHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihEZXN0Q2hhcmFjdGVyVHlwZSkgPT0gMSkg
ewotICAgICAgICAgICAgICAgIHNyYyA9IHNhdmVkRXNjYXBlU3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVW5pY29kZVRvQ2hh
cnMocmVzdWx0LCB1bmljb2RlKTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGlzQ1NTTGV0dGVy
KHNyY1swXSkgfHwgKHNyY1swXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKHNyY1sxXSkpKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LWlubGluZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVyKENoYXJhY3RlclR5cGUqJiBy
ZXN1bHQsIENTU1BhcnNlclN0cmluZyYgcmVzdWx0U3RyaW5nLCBib29sJiBoYXNFc2NhcGUpCi17
Ci0gICAgQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5
cGU+KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChjdXJyZW50
Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIHJlc3VsdCwgaGFzRXNjYXBlKSkpIHsKLSAgICAg
ICAgLy8gRm91bmQgYW4gZXNjYXBlIHdlIGNvdWxkbid0IGhhbmRsZSB3aXRoIDggYml0cywgY29w
eSB3aGF0IGhhcyBiZWVuIHJlY29nbml6ZWQgYW5kIGNvbnRpbnVlCi0gICAgICAgIEFTU0VSVChp
czhCaXRTb3VyY2UoKSk7Ci0gICAgICAgIFVDaGFyKiYgcmVzdWx0MTYgPSBjdXJyZW50Q2hhcmFj
dGVyMTYoKTsKLSAgICAgICAgVUNoYXIqIHN0YXJ0MTYgPSByZXN1bHQxNjsKLSAgICAgICAgaW50
IGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IHJlc3VsdCAtIHN0YXJ0OyArK2kpCi0gICAgICAg
ICAgICByZXN1bHQxNltpXSA9IHN0YXJ0W2ldOwotCi0gICAgICAgIHJlc3VsdDE2ICs9IGk7Ci0K
LSAgICAgICAgcGFyc2VJZGVudGlmaWVySW50ZXJuYWwoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0
ZXJUeXBlPigpLCByZXN1bHQxNiwgaGFzRXNjYXBlKTsKLQotICAgICAgICByZXN1bHQgKz0gcmVz
dWx0MTYgLSBzdGFydDE2OwotICAgICAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1
bHQxNiAtIHN0YXJ0MTYpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHRT
dHJpbmcuaW5pdChzdGFydCwgcmVzdWx0IC0gc3RhcnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci1pbmxpbmUg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU3RyaW5nSW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNy
YywgRGVzdENoYXJhY3RlclR5cGUqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQotewotICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqc3JjID09IHF1b3RlKSkgewotICAgICAg
ICAgICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgICsrc3JjOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFVOTElLRUxZKCEq
c3JjKSkgewotICAgICAgICAgICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZSwgYnV0IGRvbid0
IGFkdmFuY2UgcG9pbnRlciBpZiBhdCB0aGUgZW5kIG9mIGlucHV0LgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKCpzcmMgPiAnXHInIHx8ICgqc3Jj
IDwgJ1xuJyAmJiAqc3JjKSB8fCAqc3JjID09ICdcdicpOwotCi0gICAgICAgIGlmIChMSUtFTFko
c3JjWzBdICE9ICdcXCcpKQotICAgICAgICAgICAgKnJlc3VsdCsrID0gKnNyYysrOwotICAgICAg
ICBlbHNlIGlmIChzcmNbMV0gPT0gJ1xuJyB8fCBzcmNbMV0gPT0gJ1xmJykKLSAgICAgICAgICAg
IHNyYyArPSAyOwotICAgICAgICBlbHNlIGlmIChzcmNbMV0gPT0gJ1xyJykKLSAgICAgICAgICAg
IHNyYyArPSBzcmNbMl0gPT0gJ1xuJyA/IDMgOiAyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFNyY0NoYXJhY3RlclR5cGUqIHNhdmVkRXNjYXBlU3RhcnQgPSBzcmM7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCB1bmljb2RlID0gcGFyc2VFc2NhcGU8U3JjQ2hhcmFjdGVyVHlwZT4oc3JjKTsK
LSAgICAgICAgICAgIGlmICh1bmljb2RlID4gMHhmZiAmJiBzaXplb2YoRGVzdENoYXJhY3RlclR5
cGUpID09IDEpIHsKLSAgICAgICAgICAgICAgICBzcmMgPSBzYXZlZEVzY2FwZVN0YXJ0OwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFVu
aWNvZGVUb0NoYXJzKHJlc3VsdCwgdW5pY29kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxp
bmUgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU3RyaW5nKENoYXJhY3RlclR5cGUqJiByZXN1bHQsIENT
U1BhcnNlclN0cmluZyYgcmVzdWx0U3RyaW5nLCBVQ2hhciBxdW90ZSkKLXsKLSAgICBDaGFyYWN0
ZXJUeXBlKiBzdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAg
IGlmIChVTkxJS0VMWSghcGFyc2VTdHJpbmdJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJh
Y3RlclR5cGU+KCksIHJlc3VsdCwgcXVvdGUpKSkgewotICAgICAgICAvLyBGb3VuZCBhbiBlc2Nh
cGUgd2UgY291bGRuJ3QgaGFuZGxlIHdpdGggOCBiaXRzLCBjb3B5IHdoYXQgaGFzIGJlZW4gcmVj
b2duaXplZCBhbmQgY29udGludWUKLSAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsKLSAg
ICAgICAgVUNoYXIqJiByZXN1bHQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAgICBV
Q2hhciogc3RhcnQxNiA9IHJlc3VsdDE2OwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZv
ciAoOyBpIDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdDE2W2ldID0g
c3RhcnRbaV07Ci0KLSAgICAgICAgcmVzdWx0MTYgKz0gaTsKLQotICAgICAgICBwYXJzZVN0cmlu
Z0ludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSwgcmVzdWx0MTYsIHF1
b3RlKTsKLQotICAgICAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1bHQxNiAtIHN0
YXJ0MTYpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0U3RyaW5nLmluaXQo
c3RhcnQsIHJlc3VsdCAtIHN0YXJ0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OmZpbmRVUkkoQ2hhcmFjdGVyVHlwZSomIHN0
YXJ0LCBDaGFyYWN0ZXJUeXBlKiYgZW5kLCBVQ2hhciYgcXVvdGUpCi17Ci0gICAgc3RhcnQgPSBz
a2lwV2hpdGVTcGFjZShjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkpOwotICAgIAot
ICAgIGlmICgqc3RhcnQgPT0gJyInIHx8ICpzdGFydCA9PSAnXCcnKSB7Ci0gICAgICAgIHF1b3Rl
ID0gKnN0YXJ0Kys7Ci0gICAgICAgIGVuZCA9IGNoZWNrQW5kU2tpcFN0cmluZyhzdGFydCwgcXVv
dGUpOwotICAgICAgICBpZiAoIWVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBxdW90ZSA9IDA7Ci0gICAgICAgIGVuZCA9IHN0YXJ0OwotICAgICAg
ICB3aGlsZSAoaXNVUklMZXR0ZXIoKmVuZCkpIHsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoKmVu
ZCAhPSAnXFwnKSkKLSAgICAgICAgICAgICAgICArK2VuZDsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGVuZCA9IGNoZWNrQW5kU2tpcEVzY2FwZShlbmQpOwotICAgICAgICAg
ICAgICAgIGlmICghZW5kKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbmQgPSBza2lwV2hpdGVTcGFjZShl
bmQpOwotICAgIGlmICgqZW5kICE9ICcpJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVVJJSW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNyYywgRGVzdENoYXJhY3RlclR5cGUq
JiBkZXN0LCBVQ2hhciBxdW90ZSkKLXsKLSAgICBpZiAocXVvdGUpIHsKLSAgICAgICAgQVNTRVJU
KHF1b3RlID09ICciJyB8fCBxdW90ZSA9PSAnXCcnKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlU3Ry
aW5nSW50ZXJuYWwoc3JjLCBkZXN0LCBxdW90ZSk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlIChp
c1VSSUxldHRlcigqc3JjKSkgewotICAgICAgICBpZiAoTElLRUxZKCpzcmMgIT0gJ1xcJykpCi0g
ICAgICAgICAgICAqZGVzdCsrID0gKnNyYysrOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHVuaWNvZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwot
ICAgICAgICAgICAgaWYgKHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihTcmNDaGFyYWN0ZXJUeXBl
KSA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFVuaWNv
ZGVUb0NoYXJzKGRlc3QsIHVuaWNvZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZv
aWQgQ1NTUGFyc2VyOjpwYXJzZVVSSShDU1NQYXJzZXJTdHJpbmcmIHN0cmluZykKLXsKLSAgICBD
aGFyYWN0ZXJUeXBlKiB1cmlTdGFydDsKLSAgICBDaGFyYWN0ZXJUeXBlKiB1cmlFbmQ7Ci0gICAg
VUNoYXIgcXVvdGU7Ci0gICAgaWYgKCFmaW5kVVJJKHVyaVN0YXJ0LCB1cmlFbmQsIHF1b3RlKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENoYXJhY3RlclR5cGUqIGRlc3QgPSBjdXJyZW50
Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSB1cmlTdGFydDsKLSAgICBpZiAoTElLRUxZKHBh
cnNlVVJJSW50ZXJuYWwoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCBkZXN0LCBx
dW90ZSkpKQotICAgICAgICBzdHJpbmcuaW5pdCh1cmlTdGFydCwgZGVzdCAtIHVyaVN0YXJ0KTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gQW4gZXNjYXBlIHNlcXVlbmNlIHdhcyBlbmNvdW50ZXJl
ZCB0aGF0IGNhbid0IGJlIHN0b3JlZCBpbiA4IGJpdHMuCi0gICAgICAgIC8vIFJlc2V0IHRoZSBj
dXJyZW50IGNoYXJhY3RlciB0byB0aGUgc3RhcnQgb2YgdGhlIFVSSSBhbmQgcmUtcGFyc2Ugd2l0
aAotICAgICAgICAvLyBhIDE2LWJpdCBkZXN0aW5hdGlvbi4KLSAgICAgICAgQVNTRVJUKGlzOEJp
dFNvdXJjZSgpKTsKLSAgICAgICAgVUNoYXIqIHVyaVN0YXJ0MTYgPSBjdXJyZW50Q2hhcmFjdGVy
MTYoKTsKLSAgICAgICAgY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gdXJpU3Rh
cnQ7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyc2VVUklJbnRlcm5hbChjdXJyZW50Q2hhcmFj
dGVyPENoYXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFyYWN0ZXIxNigpLCBxdW90ZSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwotICAgICAgICBzdHJpbmcuaW5pdCh1
cmlTdGFydDE2LCBjdXJyZW50Q2hhcmFjdGVyMTYoKSAtIHVyaVN0YXJ0MTYpOwotICAgIH0KLQot
ICAgIGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IHVyaUVuZCArIDE7Ci0gICAg
bV90b2tlbiA9IFVSSTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1p
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKLXsKLSAgICBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgKyAx
OwotICAgIGludCBsZW5ndGggPSA2OwotICAgIEFTU0VSVCgqY3VycmVudENoYXJhY3RlcjxDaGFy
YWN0ZXJUeXBlPigpID09ICcrJyk7Ci0KLSAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpjaGFy
YWN0ZXIpICYmIGxlbmd0aCkgewotICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgLS1sZW5n
dGg7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCAmJiAqY2hhcmFjdGVyID09ICc/JykgewotICAg
ICAgICAvLyBBdCBtb3N0IDUgaGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4K
LSAgICAgICAgZG8gewotICAgICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAtLWxl
bmd0aDsKLSAgICAgICAgfSB3aGlsZSAoKmNoYXJhY3RlciA9PSAnPycgJiYgbGVuZ3RoKTsKLSAg
ICAgICAgY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoIDwgNikgewotICAgICAg
ICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0LgotICAgICAgICBpZiAoY2hhcmFjdGVyWzBdID09
ICctJyAmJiBpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyWzFdKSkgewotICAgICAgICAgICAgLy8g
Rm9sbG93ZWQgYnkgYSBkYXNoIGFuZCBhIGhleCBkaWdpdC4KLSAgICAgICAgICAgICsrY2hhcmFj
dGVyOwotICAgICAgICAgICAgbGVuZ3RoID0gNjsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlz
QVNDSUlIZXhEaWdpdCgqY2hhcmFjdGVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudENo
YXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKLXsKLSAgICBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCk7
Ci0KLSAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIpKQotICAgICAgICArK2NoYXJh
Y3RlcjsKLSAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY2hhcmFjdGVyLCAnbicp
KSB7Ci0gICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IGNoYXJhY3Rl
ciArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTnRoQ2hpbGRFeHRyYSgpCi17Ci0gICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVyID0gc2tp
cFdoaXRlU3BhY2UoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICBpZiAo
KmNoYXJhY3RlciAhPSAnKycgJiYgKmNoYXJhY3RlciAhPSAnLScpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNoYXJhY3RlciA9IHNraXBXaGl0ZVNwYWNlKGNoYXJhY3RlciArIDEpOwot
ICAgIGlmICghaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY2hhcmFjdGVyOwotICAgIH0gd2hpbGUgKGlzQVNDSUlE
aWdpdCgqY2hhcmFjdGVyKSk7Ci0KLSAgICBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+
KCkgPSBjaGFyYWN0ZXI7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpkZXRlY3RGdW5jdGlvblR5
cGVUb2tlbihpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChsZW5ndGggPiAwKTsKLSAgICBDaGFy
YWN0ZXJUeXBlKiBuYW1lID0gdG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgc3dp
dGNoIChsZW5ndGgpIHsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMF0sICduJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzFdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkgewot
ICAgICAgICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFt
ZVswXSwgJ3UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpKSB7Ci0gICAgICAgICAgICBt
X3Rva2VuID0gVVJJOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3YnKSAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbChuYW1lWzJdLCAncicpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gVkFSRlVOQ1RJT047
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLSAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2Mn
KSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICd1JykgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnZScpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0g
Q1VFRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlm
Ci0jaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnZCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwobmFtZVsxXSwgJ2knKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdy
JykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBESVJGVU5DVElPTjsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY2FzZSA0OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAiY2Fs
YyIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZp
ZXIobmFtZSwgImxhbmciKSkgewotICAgICAgICAgICAgbV90b2tlbiA9IExBTkdGVU5DVElPTjsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19TRUxF
Q1RPUlNfTEVWRUw0KQotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAi
cm9sZSIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gUk9MRUZVTkNUSU9OOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoaXNFcXVhbFRv
Q1NTSWRlbnRpZmllcihuYW1lLCAiaG9zdCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gSE9T
VEZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSA3OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lLCAibWF0Y2hlcyIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gTUFUQ0hF
U0ZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgInNsb3R0ZWQiKSkgewotICAgICAgICAg
ICAgbV90b2tlbiA9IFNMT1RURURGVU5DVElPTjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgOToKLSAgICAgICAg
aWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgIm50aC1jaGlsZCIpKSB7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gTlRIQ0hJTERGVU5DVElPTlM7Ci0gICAgICAgICAgICBtX3BhcnNpbmdN
b2RlID0gTnRoQ2hpbGRNb2RlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSAxMToKLSAgICAgICAgaWYgKGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgIm50aC1vZi10eXBlIikpIHsKLSAgICAgICAgICAgIG1f
cGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIDE0OgotICAgICAgICBp
ZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkgewotICAg
ICAgICAgICAgbV90b2tlbiA9IE5USENISUxERlVOQ1RJT05TOwotICAgICAgICAgICAgbV9wYXJz
aW5nTW9kZSA9IE50aENoaWxkTW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgMTY6Ci0gICAgICAgIGlmIChp
c0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJudGgtbGFzdC1vZi10eXBlIikpIHsKLSAgICAg
ICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGlu
ZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgpCi17Ci0g
ICAgQVNTRVJUKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpOwotICAgIENoYXJhY3Rl
clR5cGUqIG5hbWUgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBpZiAobGVu
Z3RoID09IDMpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsw
XSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnZCcpKQotICAgICAgICAgICAgbV90b2tl
biA9IE1FRElBX0FORDsKLSAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bChuYW1lWzBdLCAnbicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ28n
KSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICd0JykpCi0gICAgICAgICAg
ICBtX3Rva2VuID0gTUVESUFfTk9UOwotICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQpIHsKLSAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykKLSAgICAgICAgICAgICAgICAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdsJykgJiYgaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzNdLCAneScpKQotICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX09O
TFk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGlu
ZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0TnVtYmVyVG9rZW4oQ2hhcmFjdGVyVHlwZSogdHlwZSwg
aW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobGVuZ3RoID4gMCk7Ci0KLSAgICBzd2l0Y2ggKHRv
QVNDSUlMb3dlclVuY2hlY2tlZCh0eXBlWzBdKSkgewotICAgIGNhc2UgJ2MnOgotICAgICAgICBp
ZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScp
KQotICAgICAgICAgICAgbV90b2tlbiA9IENNUzsKLSAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09
IDIgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcpKQotICAgICAgICAg
ICAgbV90b2tlbiA9IENIUzsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnZCc6Ci0gICAg
ICAgIGlmIChsZW5ndGggPT0gMyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQotICAgICAg
ICAgICAgbV90b2tlbiA9IERFR1M7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8
fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICAgICAgZWxzZSBpZiAobGVuZ3Ro
ID4gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdwJykpIHsKLSAgICAg
ICAgICAgIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEg
ZGlzY3Vzc2lvbiBhYm91dCB0aGUgbmFtZSBvZiB0aGlzIHVuaXQgb24gd3d3LXN0eWxlLgotICAg
ICAgICAgICAgICAgIC8vIEtlZXAgdGhpcyBjb21waWxlIHRpbWUgZ3VhcmQgaW4gcGxhY2UgdW50
aWwgdGhhdCBpcyByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vbGlzdHMudzMu
b3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxMk1heS8wOTE1Lmh0bWwKLSAgICAgICAg
ICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncCcpICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwgJ3gnKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IERQUFg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnYycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVszXSwgJ20nKSkKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQQ007Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwodHlwZVsyXSwgJ2knKSkKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQSTsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2UnOgotICAgICAg
ICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICdtJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEVNUzsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gn
KSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRVhTOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLQotICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncicpKQotICAgICAgICAgICAgbV90b2tlbiA9
IEZSOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSAnZyc6Ci0gICAgICAgIGlmIChsZW5ndGgg
PT0gNCAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykKLSAgICAgICAg
ICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnZCcpKQotICAgICAgICAgICAgbV90b2tl
biA9IEdSQURTOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdoJzoKLSAgICAgICAgaWYg
KGxlbmd0aCA9PSAyICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBIRVJUWjsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSAnaSc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKHR5cGVbMV0sICduJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gSU5TOwotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjYXNlICdrJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2gnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbMl0sICd6JykpCi0gICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRaOwotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdtJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7
Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScp
KQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBNTVM7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdzJykpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IE1TRUNTOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
J3AnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IFBYUzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVsxXSwgJ3QnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUFRTOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYycpKQotICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBQQ1M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSAncic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMykgewotICAgICAgICAgICAg
aWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdkJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9
IFJBRFM7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMV0sICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQot
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBSRU1TOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhc2UgJ3MnOgotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAg
ICBtX3Rva2VuID0gU0VDUzsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAndCc6Ci0gICAg
ICAgIGlmIChsZW5ndGggPT0gNCAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICd1JykKLSAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVb
Ml0sICdyJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQotICAg
ICAgICAgICAgbV90b2tlbiA9IFRVUk5TOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSAndic6
Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3cnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0g
Vlc7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVb
MV0sICdoJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFZIOwotICAgICAgICB9IGVsc2Ug
aWYgKGxlbmd0aCA9PSA0ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20n
KSkgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwg
J2knKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICduJykpCi0gICAgICAg
ICAgICAgICAgbV90b2tlbiA9IFZNSU47Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bCh0eXBlWzNdLCAneCcpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBWTUFYOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh0eXBlWzBd
ID09ICdfJyAmJiBsZW5ndGggPT0gNSAmJiB0eXBlWzFdID09ICdfJyAmJiBpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKHR5cGVbMl0sICdxJykKLSAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bCh0eXBlWzRdLCAnbScpKQotICAgICAgICAgICAgbV90b2tlbiA9IFFFTVM7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBD
aGFyYWN0ZXJUeXBlKiBuYW1lID0gdG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAg
aWYgKGxlbmd0aCA9PSAxMSkgewotICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bChuYW1lWzEwXSwgJ3knKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Vi
a2l0LWFuIikpCi0gICAgICAgICAgICBtX3Rva2VuID0gQU5ZRlVOQ1RJT047Ci0gICAgICAgIGVs
c2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNFcXVh
bFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1taSIpKQotICAgICAgICAgICAgbV90
b2tlbiA9IE1JTkZVTkNUSU9OOwotICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG5hbWVbMTBdLCAneCcpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEs
ICJ3ZWJraXQtbWEiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElPTjsKLSAgICB9
IGVsc2UgaWYgKGxlbmd0aCA9PSAxMiAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAx
LCAid2Via2l0LWNhbGMiKSkKLSAgICAgICAgbV90b2tlbiA9IENBTENGVU5DVElPTjsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6
OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCi17Ci0gICAgQ2hhcmFj
dGVyVHlwZSogbmFtZSA9IHRva2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBBU1NFUlQo
bmFtZVswXSA9PSAnQCcgJiYgbGVuZ3RoID49IDIpOwotCi0gICAgLy8gY2hhcnNldCwgZm9udC1m
YWNlLCBpbXBvcnQsIG1lZGlhLCBuYW1lc3BhY2UsIHBhZ2UsIHN1cHBvcnRzLAotICAgIC8vIC13
ZWJraXQta2V5ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQg
YnkgaGFzRXNjYXBlLgotICAgIHN3aXRjaCAodG9BU0NJSUxvd2VyVW5jaGVja2VkKG5hbWVbMV0p
KSB7Ci0gICAgY2FzZSAnYic6Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAgY2FzZSAxMjoKLSAg
ICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVm
dCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUX1NZTTsKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDEzOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1yaWdodCIpKQotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBCT1RUT01SSUdIVF9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgY2FzZSAxNDoKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAib3R0b20tY2VudGVyIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNF
TlRFUl9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxOToKLSAgICAg
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVmdC1j
b3JuZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAyMDoKLSAgICAgICAgICAgIGlm
IChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tcmlnaHQtY29ybmVyIikp
Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdj
JzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSA4ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFt
ZSArIDIsICJoYXJzZXQiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnZic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMTAg
JiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9udC1mYWNlIikpCi0gICAgICAg
ICAgICBtX3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSAnaSc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAyLCAibXBvcnQiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlh
UXVlcnlNb2RlOwotICAgICAgICAgICAgbV90b2tlbiA9IElNUE9SVF9TWU07Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnayc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MTAgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImV5ZnJhbWVzIikpCi0gICAg
ICAgICAgICBtX3Rva2VuID0gS0VZRlJBTUVTX1NZTTsKLSAgICAgICAgZWxzZSBpZiAobGVuZ3Ro
ID09IDE0ICYmICFoYXNFc2NhcGUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwg
ImV5ZnJhbWUtcnVsZSIpKQotICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FX1JVTEVfU1lN
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdsJzoKLSAgICAgICAgaWYgKGhhc0VzY2Fw
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobGVuZ3RoID09IDkpIHsKLSAg
ICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LXRvcCIp
KQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUVE9QX1NZTTsKLSAgICAgICAgfSBlbHNl
IGlmIChsZW5ndGggPT0gMTIpIHsKLSAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNo
YXJhY3RlciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgot
ICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykg
JiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImVmdC1taWRkbCIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBMRUZUTUlERExFX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdtJykgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgImVmdC1ib3R0byIpKQotICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBMRUZUQk9UVE9NX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
YXNlICdtJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZp
ZXIobmFtZSArIDIsICJlZGlhIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRp
YVF1ZXJ5TW9kZTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9TWU07Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MTAgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImFtZXNwYWNlIikpCi0gICAg
ICAgICAgICBtX3Rva2VuID0gTkFNRVNQQUNFX1NZTTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2FzZSAncCc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlm
aWVyKG5hbWUgKyAyLCAiYWdlIikpCi0gICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3InOgotICAgICAgICBpZiAoaGFzRXNjYXBlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKLSAgICAg
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC10b3AiKSkK
LSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRUT1BfU1lNOwotICAgICAgICB9IGVsc2Ug
aWYgKGxlbmd0aCA9PSAxMykgewotICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hh
cmFjdGVyIGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCi0g
ICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEyXSwgJ2UnKSAm
JiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07Ci0gICAgICAgICAgICBlbHNlIGlm
IChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnbScpICYmIGlzRXF1YWxUb0NT
U0lkZW50aWZpZXIobmFtZSArIDIsICJpZ2h0LWJvdHRvIikpCi0gICAgICAgICAgICAgICAgbV90
b2tlbiA9IFJJR0hUQk9UVE9NX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjYXNlICdzJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSA5ICYmIGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDIsICJ1cHBvcnRzIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUg
PSBTdXBwb3J0c01vZGU7Ci0gICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfU1lNOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3QnOgotICAgICAgICBpZiAoaGFz
RXNjYXBlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7
Ci0gICAgICAgIGNhc2UgOToKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAyLCAib3AtbGVmdCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZU
X1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDEwOgotICAgICAgICAg
ICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1yaWdodCIpKQotICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVF9TWU07Ci0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlm
aWVyKG5hbWUgKyAyLCAib3AtY2VudGVyIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFRP
UENFTlRFUl9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxNjoKLSAg
ICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtbGVmdC1j
b3JuZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QTEVGVENPUk5FUl9TWU07Ci0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxNzoKLSAgICAgICAgICAgIGlmIChp
c0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCi0gICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICctJzoKLSAgICAg
ICAgc3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAgY2FzZSAxMzoKLSAgICAgICAgICAgIGlmICgh
aGFzRXNjYXBlICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtcnVs
ZSIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfUlVMRV9TWU07Ci0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxNDoKLSAgICAgICAgICAgIGlmIChoYXNFc2Nh
cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBDaGVja2luZyB0
aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmls
ZSBjYXNlcy4KLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
MTNdLCAncycpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtZGVj
bCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNfU1lNOwotICAgICAg
ICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ2UnKSAm
JiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXZhbHUiKSkKLSAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gV0VCS0lUX1ZBTFVFX1NZTTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIDE1OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzE0XSwgJ24nKSAmJiBpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXJlZ2lvIikpCi0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFdFQktJVF9SRUdJT05fUlVMRV9TWU07Ci0jZW5kaWYKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMTZdLCAncicpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFt
ZSArIDIsICJ3ZWJraXQtc2VsZWN0byIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJL
SVRfU0VMRUNUT1JfU1lNOwotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAg
ICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTZdLCAndCcp
ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtdmlld3BvciIpKQot
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfVklFV1BPUlRfUlVMRV9TWU07Ci0jZW5k
aWYKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE4OgotICAgICAgICAgICAg
aWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikp
Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FU19TWU07Ci0gICAgICAgICAgICBl
bHNlIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXNpemVzYXR0
ciIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU0laRVNBVFRSX1NZTTsKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE5OgotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVyeSIpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwotICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAyMjoKLSAgICAgICAgICAgIGlmICgh
aGFzRXNjYXBlICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5
ZnJhbWUtcnVsZSIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBLRVlGUkFNRV9SVUxFX1NZ
TTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDI3OgotICAgICAgICAgICAg
aWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc3VwcG9ydHMtY29u
ZGl0aW9uIikpIHsKLSAgICAgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gU3VwcG9ydHNNb2Rl
OwotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU1VQUE9SVFNfQ09ORElUSU9OX1NZ
TTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQ
YXJzZXI6OmRldGVjdFN1cHBvcnRzVG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9w
YXJzaW5nTW9kZSA9PSBTdXBwb3J0c01vZGUpOwotICAgIENoYXJhY3RlclR5cGUqIG5hbWUgPSB0
b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykpCi0gICAgICAgICAgICBtX3Rva2Vu
ID0gU1VQUE9SVFNfT1I7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMykgewotICAgICAgICBp
ZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMl0sICdkJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfQU5EOwotICAg
ICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICduJykgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JU
U19OT1Q7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZT4K
LWludCBDU1NQYXJzZXI6OnJlYWxMZXgodm9pZCogeXlsdmFsV2l0aG91dFR5cGUpCi17Ci0gICAg
WVlTVFlQRSogeXlsdmFsID0gc3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBl
KTsKLSAgICAvLyBXcml0ZSBwb2ludGVyIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gICAgU3Jj
Q2hhcmFjdGVyVHlwZSogcmVzdWx0OwotICAgIENTU1BhcnNlclN0cmluZyByZXN1bHRTdHJpbmc7
Ci0gICAgYm9vbCBoYXNFc2NhcGU7Ci0KLSAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1p
bmF0ZWQgYnkgYSBcMCBjaGFyYWN0ZXIsIHNvCi0gICAgLy8gaXQgaXMgc2FmZSB0byByZWFkIG9u
ZSBjaGFyYWN0ZXIgYWhlYWQgb2YgYSBrbm93biBub24tbnVsbC4KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLy8gSW4gZGVidWcgd2UgY2hlY2sgd2l0aCBhbiBBU1NFUlQgdGhhdCB0aGUgbGVuZ3RoIGlz
ID4gMCBmb3Igc3RyaW5nIHR5cGVzLgotICAgIHl5bHZhbC0+c3RyaW5nLmNsZWFyKCk7Ci0jZW5k
aWYKLQotcmVzdGFydEFmdGVyQ29tbWVudDoKLSAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgc2V0VG9rZW5TdGFydChyZXN1bHQpOwotICAgIG1f
dG9rZW5TdGFydExpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7Ci0gICAgbV90b2tlblN0YXJ0Q29s
dW1uTnVtYmVyID0gdG9rZW5TdGFydE9mZnNldCgpIC0gbV9jb2x1bW5PZmZzZXRGb3JMaW5lOwot
ICAgIG1fdG9rZW4gPSAqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAg
ICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgc3dpdGNoICgo
bV90b2tlbiA8PSAxMjcpID8gdHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1ttX3Rva2VuXSA6IENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCkgewotICAgIGNhc2UgQ2hhcmFjdGVyQ2FzZWxlc3NVOgotICAg
ICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9
PSAnKycpKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2U8U3JjQ2hhcmFjdGVy
VHlwZT4oKSkgewotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7Ci0gICAg
ICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCksIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8
U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7IC8vIFRvIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydC4KLQotICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OgotICAgICAg
ICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgcGFyc2VJ
ZGVudGlmaWVyKHJlc3VsdCwgeXlsdmFsLT5zdHJpbmcsIGhhc0VzY2FwZSk7Ci0gICAgICAgIG1f
dG9rZW4gPSBJREVOVDsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzaW5n
TW9kZSA9PSBTdXBwb3J0c01vZGUgJiYgIWhhc0VzY2FwZSkgewotICAgICAgICAgICAgICAgIGRl
dGVjdFN1cHBvcnRzVG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxT
cmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgICAgICBpZiAobV90b2tlbiAhPSBJREVO
VCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX3Rva2VuID0gRlVOQ1RJT047Ci0gICAgICAgICAgICBib29sIHNob3VsZFNraXBQYXJlbnRo
ZXNpcyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgZGV0ZWN0ZWQgPSBkZXRlY3RGdW5jdGlvblR5cGVUb2tlbjxTcmNDaGFyYWN0ZXJU
eXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAg
ICAgICAgIGlmICghZGV0ZWN0ZWQgJiYgbV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyAuLi4gYW5kKG1heC13aWR0aDogNDgwcHgpIC4uLiBs
b29rcyBsaWtlIGEgZnVuY3Rpb24sIGJ1dCBpbiBmYWN0IGl0IGlzIG5vdCwKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc28gcnVuIG1vcmUgZGV0ZWN0aW9uIGNvZGUgaW4gdGhlIE1lZGlhUXVlcnlN
b2RlLgotICAgICAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW48U3JjQ2hhcmFj
dGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkU2tpcFBhcmVudGhlc2lzID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoTElLRUxZKHNob3VsZFNr
aXBQYXJlbnRoZXNpcykpIHsKLSAgICAgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICArK3Jlc3VsdDsKLSAgICAgICAgICAg
ICAgICArK3l5bHZhbC0+c3RyaW5nLm1fbGVuZ3RoOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodG9rZW4oKSA9PSBVUkkpIHsKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVO
Q1RJT047Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyByZWFsbHkgYW4g
VVJJLgotICAgICAgICAgICAgICAgIGlmICh5eWx2YWwtPnN0cmluZy5pczhCaXQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcGFyc2VVUkk8TENoYXI+KHl5bHZhbC0+c3RyaW5nKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlVVJJPFVDaGFyPih5eWx2YWwt
PnN0cmluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9w
YXJzaW5nTW9kZSAhPSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICBp
ZiAobV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkKLSAgICAgICAgICAgICAgICBkZXRl
Y3RNZWRpYVF1ZXJ5VG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxT
cmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUg
PT0gU3VwcG9ydHNNb2RlKQotICAgICAgICAgICAgICAgIGRldGVjdFN1cHBvcnRzVG9rZW48U3Jj
Q2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzBd
LCAnbicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hh
cmFjdGVyVHlwZT4oKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibiIg
aXMgSURFTlQgYnV0ICJuKzEiIGlzIE5USC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNl
TnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJp
bmcubV9sZW5ndGggPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tl
blN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSA+PSAyICYmIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSA9PSAnLScpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlz
IE5USC4KLSAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8gJy0n
IHRvIGNvbnRpbnVlIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5
cGUqIG5leHRDaGFyYWN0ZXIgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRD
aGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmE8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5U
SDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLnNldExlbmd0aChjdXJy
ZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3Rl
clR5cGU+KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2UgdG8gY3VycmVudENoYXJhY3RlciBpZiB1bnN1
Y2Nlc3NmdWwuCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgPSBuZXh0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICht
X3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSAmJiBtX3Rva2VuID09IElERU5UICYmIHl5bHZh
bC0+c3RyaW5nLmxlbmd0aCgpID09IDIgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
eXlsdmFsLT5zdHJpbmcsICJvZiIpKSB7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9y
bWFsTW9kZTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBOVEhDSElMRFNFTEVDVE9SU0VQQVJBVE9S
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJEb3Q6Ci0g
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKVswXSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgRkFMTFRIUk9VR0g7IC8vIFRv
IENoYXJhY3Rlck51bWJlci4KLQotICAgIGNhc2UgQ2hhcmFjdGVyTnVtYmVyOiB7Ci0gICAgICAg
IGJvb2wgZG90U2VlbiA9IChtX3Rva2VuID09ICcuJyk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKVswXSkpIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBkb3QgaXMg
YWxsb3dlZCBmb3IgYSBudW1iZXIsCi0gICAgICAgICAgICAgICAgLy8gYW5kIGl0IG11c3QgYmUg
Zm9sbG93ZWQgYnkgYSBkaWdpdC4KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdICE9ICcuJyB8fCBkb3RTZWVuIHx8ICFpc0FTQ0lJRGln
aXQoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdKSkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50
aENoaWxkTW9kZSkgJiYgIWRvdFNlZW4gJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpLCAnbicpKSB7Ci0gICAgICAgICAgICAv
LyAiWzAtOV0rbiIgaXMgYWx3YXlzIGFuIE50aENoaWxkLgotICAgICAgICAgICAgKytjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBwYXJzZU50aENoaWxk
RXh0cmE8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0g
ICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxT
cmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVXNlIFNWRyBwYXJzZXIgZm9yIG51bWJlcnMgb24gU1ZHIHByZXNlbnRhdGlvbiBh
dHRyaWJ1dGVzLgotICAgICAgICBpZiAobV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9k
ZSkgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgdW5pdHMgbGlrZSAn
ZW0nIG9yICdleCcuCi0gICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY2hhcmFjdGVyLCAnZScpKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKGNoYXJhY3RlciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+IDAp
OwotICAgICAgICAgICAgICAgICsrY2hhcmFjdGVyOwotICAgICAgICAgICAgICAgIGlmICgqY2hh
cmFjdGVyID09ICctJyB8fCAqY2hhcmFjdGVyID09ICcrJyB8fCBpc0FTQ0lJRGlnaXQoKmNoYXJh
Y3RlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgICAgICAgICAg
ICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZMT0FUVE9L
RU4gaWYgdGhlIHN0cmluZyBjb250YWlucyBleHBvbmVudHMuCi0gICAgICAgICAgICAgICAgICAg
IGRvdFNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCFwYXJzZVNWR051bWJlcih0b2tlblN0YXJ0PFNyY0No
YXJhY3RlclR5cGU+KCksIGNoYXJhY3RlciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSwgeXlsdmFsLT5udW1iZXIpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHl5bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKHRva2Vu
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAKLSAgICAgICAgLy8g
VHlwZSBvZiB0aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydDxTcmND
aGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiB0eXBlID0g
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgcmVzdWx0
ID0gY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgICAgICAgICBw
YXJzZUlkZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7Ci0KLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBESU1FTjsKLSAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQotICAg
ICAgICAgICAgICAgIGRldGVjdE51bWJlclRva2VuKHR5cGUsIGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSAtIHR5cGUpOwotCi0gICAgICAgICAgICBpZiAobV90b2tlbiA9PSBE
SU1FTikgewotICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVkIG51bWJlciBpcyBvdmVyd3Jp
dHRlbiwgYnV0IHRoaXMgaXMgaW50ZW50aW9uYWwuCi0gICAgICAgICAgICAgICAgeXlsdmFsLT5z
dHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSA9PSAnJScpIHsKLSAgICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSBD
U1MgZ3JhbW1hciBzYXlzIHtudW19JSB3ZSBmb2xsb3cKLSAgICAgICAgICAgIC8vIHdlYmtpdCBh
dCB0aGUgbW9tZW50IHdoaWNoIHVzZXMge251bX0lKy4KLSAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAg
ICAgICAgIH0gd2hpbGUgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0g
JyUnKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBQRVJDRU5UQUdFOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBkb3RTZWVuID8gRkxPQVRUT0tFTiA6IElOVEVHRVI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hhcmFjdGVyRGFzaDoKLSAgICAgICAg
aWYgKGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKSkpIHsKLSAgICAgICAgICAgIC0tY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCwgcmVzdWx0U3Ry
aW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOwotCi0gICAgICAg
ICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKCcpIHsK
LSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047Ci0gICAgICAgICAgICAgICAgaWYg
KCFoYXNFc2NhcGUpCi0gICAgICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbjxTcmNDaGFy
YWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAg
ICAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAg
ICAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWSht
X3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSwgJ24nKSkg
ewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCkgPT0gMikgewotICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uIiBpcyBJREVO
VCBidXQgIi1uKzEiIGlzIE5USC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hp
bGRFeHRyYTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3Rva2VuID0gTlRIOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCkgPj0gMyAmJiB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KClbMl0gPT0gJy0nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBidXQgIi1uLTEi
IGlzIE5USC4KLSAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8g
c2Vjb25kICctJyBvZiAnLW4tJyB0byBjb250aW51ZSBwYXJzaW5nLgotICAgICAgICAgICAgICAg
ICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBuZXh0Q2hhcmFjdGVyID0gcmVzdWx0OwotICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPSB0b2tlblN0
YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkgKyAyOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFy
c2VOdGhDaGlsZEV4dHJhPFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZSB0
byBjdXJyZW50Q2hhcmFjdGVyIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IG5leHRDaGFyYWN0ZXI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXN1bHRTdHJpbmcuc2V0TGVuZ3RoKHJlc3VsdCAtIHRva2VuU3RhcnQ8
U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZyA9IHJlc3Vs
dFN0cmluZzsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KClbMF0gPT0gJy0nICYmIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KVsxXSA9PSAnPicpIHsKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVy
VHlwZT4oKSArPSAyOwotICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdID09ICctJykg
ewotICAgICAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0g
ICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2Fw
ZSk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gQ1VTVE9NX1BST1BFUlRZOwotICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcgPSByZXN1bHRTdHJpbmc7Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7Ci0gICAgICAgICAgICAvLyAiLVsw
LTldK24iIGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KLSAgICAgICAgICAgIGlmIChwYXJzZU50aENo
aWxkPFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxk
RXh0cmE8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRI
OwotICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFy
YWN0ZXJUeXBlPigpLCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tl
blN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKLSAgICAgICAgLy8gbV90
b2tlbiBpcyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQ2hhcmFjdGVyTnVsbDoKLSAgICAgICAgLy8gRG8gbm90IGFkdmFuY2UgcG9pbnRl
ciBhdCB0aGUgZW5kIG9mIGlucHV0LgotICAgICAgICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlcldoaXRl
U3BhY2U6Ci0gICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNFOwotICAgICAgICAvLyBNaWdodCBz
dGFydCB3aXRoIGEgJ1xuJy4KLSAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KCk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICArK21fbGlu
ZU51bWJlcjsKLSAgICAgICAgICAgICAgICBtX2NvbHVtbk9mZnNldEZvckxpbmUgPSBjdXJyZW50
Q2hhcmFjdGVyT2Zmc2V0KCkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytjdXJy
ZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgIH0gd2hpbGUgKCpjdXJy
ZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPD0gJyAnICYmICh0eXBlc09mQVNDSUlD
aGFyYWN0ZXJzWypjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCldID09IENoYXJh
Y3RlcldoaXRlU3BhY2UpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckVu
ZENvbmRpdGlvblF1ZXJ5OiB7Ci0gICAgICAgIGJvb2wgaXNQYXJzaW5nQ29uZGl0aW9uID0gbV9w
YXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSB8fCBtX3BhcnNpbmdNb2RlID09IFN1cHBvcnRz
TW9kZTsKLSAgICAgICAgaWYgKGlzUGFyc2luZ0NvbmRpdGlvbikKLSAgICAgICAgICAgIG1fcGFy
c2luZ01vZGUgPSBOb3JtYWxNb2RlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl
IENoYXJhY3RlckVuZE50aENoaWxkOgotICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhD
aGlsZE1vZGUpCi0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlclF1b3RlOgotICAgICAgICBpZiAoY2hlY2tB
bmRTa2lwU3RyaW5nKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgbV90b2tl
bikpIHsKLSAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgcGFyc2VTdHJpbmc8U3Jj
Q2hhcmFjdGVyVHlwZT4ocmVzdWx0LCB5eWx2YWwtPnN0cmluZywgbV90b2tlbik7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gU1RSSU5HOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcms6IHsKLSAgICAgICAgU3JjQ2hhcmFjdGVyVHlw
ZSogc3RhcnQgPSBza2lwV2hpdGVTcGFjZShjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCkpOwotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihzdGFydCwgImltcG9y
dGFudCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKLSAgICAgICAg
ICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHN0YXJ0ICsgOTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENoYXJhY3Rlckhhc2ht
YXJrOiB7Ci0gICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIHN0YXJ0ID0gY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqY3VycmVu
dENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgewotICAgICAgICAgICAgLy8gVGhpcyBt
dXN0IGJlIGEgdmFsaWQgaGV4IG51bWJlciB0b2tlbi4KLSAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAg
ICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFy
YWN0ZXJUeXBlPigpKSk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gSEVYOwotICAgICAgICAgICAg
eXlsdmFsLT5zdHJpbmcuaW5pdChzdGFydCwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpIC0gc3RhcnQpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0PFNy
Y0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBJRFNFTDsKLSAgICAg
ICAgICAgIHBhcnNlSWRlbnRpZmllcihyZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBoYXNFc2NhcGUp
OwotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVj
ayB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgotICAg
ICAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBzdGFydDsKLSAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gSEVYOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gSURTRUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7
Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCA8IHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDaGFyYWN0
ZXJTbGFzaDoKLSAgICAgICAgLy8gSWdub3JlIGNvbW1lbnRzLiBUaGV5IGFyZSBub3QgZXZlbiBj
b25zaWRlcmVkIGFzIHdoaXRlIHNwYWNlcy4KLSAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJyonKSB7Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFy
YWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMF0gIT0gJyonIHx8IGN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSAhPSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoKmN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnXG4nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX2NvbHVtbk9m
ZnNldEZvckxpbmUgPSBjdXJyZW50Q2hhcmFjdGVyT2Zmc2V0KCkgKyAxOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAn
XDAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBjb21tZW50cyBhcmUg
c2ltcGx5IGlnbm9yZWQuCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSAtPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCkgKz0gMjsKLSAgICAgICAgICAgIGdvdG8gcmVzdGFydEFmdGVy
Q29tbWVudDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVy
RG9sbGFyOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IEVORFNXSVRIOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJBc3RlcmlzazoKLSAgICAgICAgaWYgKCpj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJz0nKSB7Ci0gICAgICAgICAg
ICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIG1f
dG9rZW4gPSBDT05UQUlOUzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
Q2hhcmFjdGVyUGx1czoKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRo
Q2hpbGRNb2RlKSkgewotICAgICAgICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBp
cyBhbHdheXMgTnRoQ2hpbGQuCi0gICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZDxTcmNDaGFy
YWN0ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhPFNyY0No
YXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKLSAgICAgICAg
ICAgICAgICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmND
aGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ2hhcmFjdGVyTGVzczoKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVswXSA9PSAnIScgJiYgY3VycmVudENoYXJhY3RlcjxTcmND
aGFyYWN0ZXJUeXBlPigpWzFdID09ICctJyAmJiBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KClbMl0gPT0gJy0nKSB7Ci0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgKz0gMzsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJBdDoKLSAgICAgICAg
aWYgKGlzSWRlbnRpZmllclN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBBVEtFWVdPUkQ7Ci0gICAgICAgICAgICArK3Jlc3VsdDsKLSAgICAgICAgICAg
IHBhcnNlSWRlbnRpZmllcihyZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAg
ICAgICAgIGRldGVjdEF0VG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFy
dDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBoYXNFc2NhcGUpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xhc2g6Ci0gICAgICAgIGlmIChpc0NTU0Vz
Y2FwZSgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgewotICAgICAgICAg
ICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBw
YXJzZUlkZW50aWZpZXIocmVzdWx0LCB5eWx2YWwtPnN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBJREVOVDsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9wYXJzaW5n
TW9kZSA9PSBOdGhDaGlsZE1vZGUgJiYgbV90b2tlbiA9PSBJREVOVCAmJiB5eWx2YWwtPnN0cmlu
Zy5sZW5ndGgoKSA9PSAyICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHl5bHZhbC0+
c3RyaW5nLCAib2YiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7
Ci0gICAgICAgICAgICBtX3Rva2VuID0gTlRIQ0hJTERTRUxFQ1RPUlNFUEFSQVRPUjsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyWG9yOgotICAgICAgICBp
ZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAg
ICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAg
ICAgbV90b2tlbiA9IEJFR0lOU1dJVEg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENoYXJhY3RlclZlcnRpY2FsQmFyOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IERBU0hN
QVRDSDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyVGls
ZGU6Ci0gICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09
ICc9JykgewotICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gSU5DTFVERVM7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRva2VuKCk7Ci19Ci0KLVJlZlB0cjxT
dHlsZVJ1bGVJbXBvcnQ+IENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJz
ZXJTdHJpbmcmIHVybCwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEpCi17Ci0gICAgaWYg
KCFtZWRpYSB8fCAhbV9hbGxvd0ltcG9ydFJ1bGVzKSB7Ci0gICAgICAgIHBvcFJ1bGVEYXRhKCk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1
bGVJbXBvcnQ6OmNyZWF0ZSh1cmwsIG1lZGlhLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHByb2Nl
c3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gV1RGTW92
ZShydWxlKTsKLX0KLQotUmVmPFN0eWxlUnVsZU1lZGlhPiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlh
UnVsZShSZWZQdHI8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSwgUnVsZUxpc3QqIHJ1bGVzKQotewot
ICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBm
YWxzZTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IHJ1bGU7Ci0gICAgUnVsZUxpc3QgZW1w
dHlSdWxlczsKLSAgICBpZiAoIW1lZGlhKSB7Ci0gICAgICAgIC8vIFRvIGNvbXBseSB3aXRoIHcz
YyB0ZXN0IHN1aXRlIGV4cGVjdGF0aW9uLCBjcmVhdGUgYW4gZW1wdHkgbWVkaWEgcXVlcnkKLSAg
ICAgICAgLy8gZXZlbiB3aGVuIGl0IGlzIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0LgotICAgICAg
ICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKSwg
ZW1wdHlSdWxlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVkaWEtPnNocmlua1RvRml0KCk7
Ci0gICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLnJlbGVhc2VOb25O
dWxsKCksIHJ1bGVzID8gKnJ1bGVzIDogZW1wdHlSdWxlcyk7Ci0gICAgfQotICAgIHByb2Nlc3NB
bmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcnVsZS5yZWxl
YXNlTm9uTnVsbCgpOwotfQotCi1SZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRl
RW1wdHlNZWRpYVJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQotewotICAgIHJldHVybiBjcmVhdGVNZWRp
YVJ1bGUoTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCksIHJ1bGVzKTsKLX0KLQotUmVmPFN0eWxlUnVs
ZVN1cHBvcnRzPiBDU1NQYXJzZXI6OmNyZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklz
U3VwcG9ydGVkLCBSdWxlTGlzdCogcnVsZXMpCi17Ci0gICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0g
bV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBkYXRhID0gcG9wU3VwcG9ydHNSdWxlRGF0YSgpOwotICAgIFN0cmluZyBj
b25kaXRpb25UZXh0OwotICAgIHVuc2lnbmVkIGNvbmRpdGlvbk9mZnNldCA9IGRhdGEtPnJ1bGVI
ZWFkZXJSYW5nZS5zdGFydCArIDk7Ci0gICAgdW5zaWduZWQgY29uZGl0aW9uTGVuZ3RoID0gZGF0
YS0+cnVsZUhlYWRlclJhbmdlLmxlbmd0aCgpIC0gOTsKLQotICAgIGlmIChpczhCaXRTb3VyY2Uo
KSkKLSAgICAgICAgY29uZGl0aW9uVGV4dCA9IFN0cmluZyhtX2RhdGFTdGFydDguZ2V0KCkgKyBj
b25kaXRpb25PZmZzZXQsIGNvbmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ZWxzZQotICAgICAgICBjb25kaXRpb25UZXh0ID0gU3RyaW5nKG1fZGF0YVN0YXJ0MTYuZ2V0KCkg
KyBjb25kaXRpb25PZmZzZXQsIGNvbmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0K
LSAgICBSZWZQdHI8U3R5bGVSdWxlU3VwcG9ydHM+IHJ1bGU7Ci0gICAgaWYgKHJ1bGVzKQotICAg
ICAgICBydWxlID0gU3R5bGVSdWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25k
aXRpb25Jc1N1cHBvcnRlZCwgKnJ1bGVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUnVsZUxpc3Qg
ZW1wdHlSdWxlczsKLSAgICAgICAgcnVsZSA9IFN0eWxlUnVsZVN1cHBvcnRzOjpjcmVhdGUoY29u
ZGl0aW9uVGV4dCwgY29uZGl0aW9uSXNTdXBwb3J0ZWQsIGVtcHR5UnVsZXMpOwotICAgIH0KLQot
ICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLQotICAgIHJl
dHVybiBydWxlLnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrU3Vw
cG9ydHNSdWxlSGVhZGVyU3RhcnQoKQotewotICAgIGlmICghbV9zdXBwb3J0c1J1bGVEYXRhU3Rh
Y2spCi0gICAgICAgIG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxS
dWxlU291cmNlRGF0YUxpc3Q+KCk7Ci0KLSAgICBhdXRvIGRhdGEgPSBDU1NSdWxlU291cmNlRGF0
YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVVBQT1JUU19SVUxFKTsKLSAgICBkYXRhLT5y
dWxlSGVhZGVyUmFuZ2Uuc3RhcnQgPSB0b2tlblN0YXJ0T2Zmc2V0KCk7Ci0gICAgbV9zdXBwb3J0
c1J1bGVEYXRhU3RhY2stPmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXI6Om1hcmtTdXBwb3J0c1J1bGVIZWFkZXJFbmQoKQotewotICAgIEFTU0VSVChtX3N1cHBvcnRz
UnVsZURhdGFTdGFjayAmJiAhbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7Ci0K
LSAgICBpZiAoaXM4Qml0U291cmNlKCkpCi0gICAgICAgIG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNr
LT5sYXN0KCktPnJ1bGVIZWFkZXJSYW5nZS5lbmQgPSB0b2tlblN0YXJ0PExDaGFyPigpIC0gbV9k
YXRhU3RhcnQ4LmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9zdXBwb3J0c1J1bGVEYXRhU3Rh
Y2stPmxhc3QoKS0+cnVsZUhlYWRlclJhbmdlLmVuZCA9IHRva2VuU3RhcnQ8VUNoYXI+KCkgLSBt
X2RhdGFTdGFydDE2LmdldCgpOwotfQotCi1SZWY8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNl
cjo6cG9wU3VwcG9ydHNSdWxlRGF0YSgpCi17Ci0gICAgQVNTRVJUKG1fc3VwcG9ydHNSdWxlRGF0
YVN0YWNrICYmICFtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICByZXR1
cm4gbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPnRha2VMYXN0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFy
c2VyOjpwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCkKLXsKLSAgICBp
ZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1hcmtS
dWxlQm9keUVuZCgpOwotICAgIFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSA9ICpwb3BSdWxl
RGF0YSgpOwotICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMocnVsZSk7Ci0gICAgYWRkTmV3
UnVsZVRvU291cmNlVHJlZShXVEZNb3ZlKHJ1bGUpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmFk
ZE5ld1J1bGVUb1NvdXJjZVRyZWUoUmVmPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGUpCi17Ci0g
ICAgLy8gUHJlY29uZGl0aW9uOiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4KLSAgICBpZiAo
IW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJy
ZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKQotICAgICAgICBtX3J1bGVTb3VyY2VEYXRhUmVz
dWx0LT5hcHBlbmQoV1RGTW92ZShydWxlKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZSkpOwot
fQotCi1SZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQot
ewotICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7Ci0g
ICAgbV9jdXJyZW50UnVsZURhdGEgPSBudWxscHRyOwotICAgIHJldHVybiBtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLT50YWtlTGFzdCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6c3ludGF4RXJyb3Io
Y29uc3QgTG9jYXRpb24mIGxvY2F0aW9uLCBTeW50YXhFcnJvclR5cGUgZXJyb3IpCi17Ci0gICAg
aWYgKCFpc0xvZ2dpbmdFcnJvcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICBjYXNlIFByb3BlcnR5RGVj
bGFyYXRpb25FcnJvcjoKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJJbnZhbGlkIENT
UyBwcm9wZXJ0eSBkZWNsYXJhdGlvbiBhdDogIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVW5leHBlY3RlZCBDU1MgdG9rZW46
ICIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobG9jYXRpb24udG9rZW4uaXM4
Qml0KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxvY2F0aW9uLnRva2VuLmNoYXJhY3RlcnM4
KCksIGxvY2F0aW9uLnRva2VuLmxlbmd0aCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGxvY2F0aW9uLnRva2VuLmNoYXJhY3RlcnMxNigpLCBsb2NhdGlvbi50b2tlbi5sZW5n
dGgoKSk7Ci0KLSAgICBsb2dFcnJvcihidWlsZGVyLnRvU3RyaW5nKCksIGxvY2F0aW9uLmxpbmVO
dW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJlcik7Ci0KLSAgICBtX2lnbm9yZUVycm9yc0luRGVj
bGFyYXRpb24gPSB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6aXNMb2dnaW5nRXJyb3JzKCkK
LXsKLSAgICByZXR1cm4gbV9sb2dFcnJvcnMgJiYgIW1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlv
bjsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
aW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgUGFnZUNvbnNvbGVDbGll
bnQmIGNvbnNvbGUgPSBtX3N0eWxlU2hlZXQtPnNpbmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgp
LT5jb25zb2xlKCk7Ci0gICAgY29uc29sZS5hZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywg
TWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlLCBtX3N0eWxlU2hlZXQtPmJhc2VVUkwoKS5z
dHJpbmcoKSwgbGluZU51bWJlciArIDEsIGNvbHVtbk51bWJlciArIDEpOwotfQotCi1SZWY8U3R5
bGVSdWxlS2V5ZnJhbWVzPiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+
IGtleWZyYW1lcykKLXsKLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNl
RGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgUmVmPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9
IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlGcmFtZSA6
ICprZXlmcmFtZXMpCi0gICAgICAgIHJ1bGUtPnBhcnNlckFwcGVuZEtleWZyYW1lKFdURk1vdmUo
a2V5RnJhbWUpKTsKLSAgICBydWxlLT5zZXROYW1lKG5hbWUpOwotICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcnVsZTsKLX0KLQotUmVm
UHRyPFN0eWxlUnVsZT4gQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiBzZWxlY3RvcnMpCi17Ci0gICAgUmVmUHRyPFN0
eWxlUnVsZT4gcnVsZTsKLSAgICBpZiAoc2VsZWN0b3JzKSB7Ci0gICAgICAgIG1fYWxsb3dJbXBv
cnRSdWxlcyA9IGZhbHNlOwotICAgICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0g
ZmFsc2U7Ci0gICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxlY3Rvckxp
bmVOdW1iZXIsIGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKLSAgICAgICAgcnVsZS0+cGFyc2Vy
QWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKLSAgICAgICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIH0gZWxzZQotICAgICAgICBwb3BSdWxl
RGF0YSgpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiBydWxlOwotfQotCi1S
ZWZQdHI8U3R5bGVSdWxlRm9udEZhY2U+IENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkK
LXsKLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25z
ID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IG1fcGFyc2VkUHJvcGVydGllcykg
ewotICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYg
KCFpczxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKS5sZW5ndGgoKSAhPSAxKSkgewotICAgICAgICAgICAg
Ly8gVW5saWtlIGZvbnQtZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGlu
IEBmb250LWZhY2UgcnVsZQotICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3
aXRoIGV4YWN0bHkgb25lIGZhbWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCi0gICAgICAgICAg
ICAvLyBoYXZlICdpbml0aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVu
dC4KLSAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWZvbnRz
LyNmb250LWZhbWlseS1kZXNjCi0gICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAg
ICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVGb250RmFjZTo6Y3JlYXRlKGNy
ZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICBwcm9j
ZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIFdURk1v
dmUocnVsZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQotewotICAgIGlmICghbV9z
dHlsZVNoZWV0IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gZmFsc2U7Ci0gICAgbV9zdHlsZVNoZWV0LT5w
YXJzZXJBZGROYW1lc3BhY2UocHJlZml4LCB1cmkpOwotICAgIGlmIChwcmVmaXguaXNFbXB0eSgp
ICYmICF1cmkuaXNOdWxsKCkpCi0gICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKLX0K
LQotUXVhbGlmaWVkTmFtZSBDU1NQYXJzZXI6OmRldGVybWluZU5hbWVJbk5hbWVzcGFjZShjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi17
Ci0gICAgaWYgKHByZWZpeC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVs
ZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCi0gICAg
aWYgKHByZWZpeC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKGVtcHR5
QXRvbSwgbG9jYWxOYW1lLCBlbXB0eUF0b20pOyAvLyBFbXB0eSBuYW1lc3BhY2UuCi0gICAgaWYg
KHByZWZpeCA9PSBzdGFyQXRvbSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4
LCBsb2NhbE5hbWUsIHN0YXJBdG9tKTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KLQot
ICAgIGlmICghbV9zdHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVm
aXgsIGxvY2FsTmFtZSwgbV9kZWZhdWx0TmFtZXNwYWNlKTsKLSAgICByZXR1cm4gUXVhbGlmaWVk
TmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2Uo
cHJlZml4KSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhOYW1l
c3BhY2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYgc3BlY2lmaWVycykKLXsKLSAgICBpZiAo
bV9kZWZhdWx0TmFtZXNwYWNlICE9IHN0YXJBdG9tIHx8IHNwZWNpZmllcnMuaXNDdXN0b21Qc2V1
ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgUXVhbGlmaWVkTmFtZSBlbGVtZW50TmFtZShudWxsQXRv
bSwgc3RhckF0b20sIG1fZGVmYXVsdE5hbWVzcGFjZSk7Ci0gICAgICAgIHJld3JpdGVTcGVjaWZp
ZXJzV2l0aEVsZW1lbnROYW1lKGVsZW1lbnROYW1lLCBzcGVjaWZpZXJzLCAvKnRhZ0lzRm9yTmFt
ZXNwYWNlUnVsZSovdHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIENTU1BhcnNlcjo6cmV3cml0ZVNw
ZWNpZmllcnNXaXRoRWxlbWVudE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVm
aXgsIGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJiBz
cGVjaWZpZXJzKQotewotICAgIFF1YWxpZmllZE5hbWUgdGFnKGRldGVybWluZU5hbWVJbk5hbWVz
cGFjZShuYW1lc3BhY2VQcmVmaXgsIGVsZW1lbnROYW1lKSk7Ci0gICAgcmV3cml0ZVNwZWNpZmll
cnNXaXRoRWxlbWVudE5hbWUodGFnLCBzcGVjaWZpZXJzLCBmYWxzZSk7Ci19Ci0KLXZvaWQgQ1NT
UGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWcsIENTU1BhcnNlclNlbGVjdG9yJiBzcGVjaWZpZXJzLCBib29sIHRhZ0lzRm9yTmFt
ZXNwYWNlUnVsZSkKLXsKLSAgICBpZiAoIXNwZWNpZmllcnMuaXNDdXN0b21Qc2V1ZG9FbGVtZW50
KCkpIHsKLSAgICAgICAgaWYgKHRhZyA9PSBhbnlRTmFtZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAoIXNwZWNpZmllcnMuaXNQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSkK
LSAgICAgICAgICAgIHNwZWNpZmllcnMucHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgdGFnSXNGb3JO
YW1lc3BhY2VSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1BhcnNlclNl
bGVjdG9yKiBsYXN0U2hhZG93RGVzY2VuZGFudCA9ICZzcGVjaWZpZXJzOwotICAgIENTU1BhcnNl
clNlbGVjdG9yKiBoaXN0b3J5ID0gJnNwZWNpZmllcnM7Ci0gICAgd2hpbGUgKGhpc3RvcnktPnRh
Z0hpc3RvcnkoKSkgewotICAgICAgICBoaXN0b3J5ID0gaGlzdG9yeS0+dGFnSGlzdG9yeSgpOwot
ICAgICAgICBpZiAoaGlzdG9yeS0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkgfHwgaGlzdG9yeS0+
aGFzU2hhZG93RGVzY2VuZGFudCgpKQotICAgICAgICAgICAgbGFzdFNoYWRvd0Rlc2NlbmRhbnQg
PSBoaXN0b3J5OwotICAgIH0KLQotICAgIGlmIChsYXN0U2hhZG93RGVzY2VuZGFudC0+dGFnSGlz
dG9yeSgpKSB7Ci0gICAgICAgIGlmICh0YWcgIT0gYW55UU5hbWUoKSkKLSAgICAgICAgICAgIGxh
c3RTaGFkb3dEZXNjZW5kYW50LT50YWdIaXN0b3J5KCktPnByZXBlbmRUYWdTZWxlY3Rvcih0YWcs
IHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBGb3Igc2hhZG93LUlEIHBzZXVkby1lbGVtZW50cyB0byBiZSBjb3JyZWN0bHkgbWF0Y2hlZCwg
dGhlIFNoYWRvd0Rlc2NlbmRhbnQgY29tYmluYXRvciBoYXMgdG8gYmUgdXNlZC4KLSAgICAvLyBX
ZSB0aGVyZWZvcmUgY3JlYXRlIGEgbmV3IFNlbGVjdG9yIHdpdGggdGhhdCBjb21iaW5hdG9yIGhl
cmUgaW4gYW55IGNhc2UsIGV2ZW4gaWYgbWF0Y2hpbmcgYW55IChob3N0KSBlbGVtZW50IGluIGFu
eSBuYW1lc3BhY2UgKGkuZS4gJyonKS4KLSAgICBsYXN0U2hhZG93RGVzY2VuZGFudC0+c2V0VGFn
SGlzdG9yeShzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPih0YWcpKTsKLSAgICBs
YXN0U2hhZG93RGVzY2VuZGFudC0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2Nl
bmRhbnQpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1BhcnNl
cjo6cmV3cml0ZVNwZWNpZmllcnMoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBz
cGVjaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5ld1NwZWNpZmll
cikKLXsKLSAgICBpZiAobmV3U3BlY2lmaWVyLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBu
ZXdTcGVjaWZpZXItPmlzUHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkpIHsKLSAgICAgICAgLy8g
VW5rbm93biBwc2V1ZG8gZWxlbWVudCBhbHdheXMgZ29lcyBhdCB0aGUgdG9wIG9mIHNlbGVjdG9y
IGNoYWluLgotICAgICAgICBuZXdTcGVjaWZpZXItPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0
b3I6OlNoYWRvd0Rlc2NlbmRhbnQsIFdURk1vdmUoc3BlY2lmaWVycykpOwotICAgICAgICByZXR1
cm4gbmV3U3BlY2lmaWVyOwotICAgIH0KLSAgICBpZiAoc3BlY2lmaWVycy0+aXNDdXN0b21Qc2V1
ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gU3BlY2lmaWVycyBmb3IgdW5rbm93biBwc2V1ZG8g
ZWxlbWVudCBnbyByaWdodCBiZWhpbmQgaXQgaW4gdGhlIGNoYWluLgotICAgICAgICBzcGVjaWZp
ZXJzLT5pbnNlcnRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvciwgV1RGTW92ZShu
ZXdTcGVjaWZpZXIpLCBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCk7Ci0gICAgICAgIHJl
dHVybiBzcGVjaWZpZXJzOwotICAgIH0KLSAgICBzcGVjaWZpZXJzLT5hcHBlbmRUYWdIaXN0b3J5
KENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvciwgV1RGTW92ZShuZXdTcGVjaWZpZXIpKTsKLSAgICBy
ZXR1cm4gc3BlY2lmaWVyczsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZVBhZ2U+IENTU1BhcnNlcjo6
Y3JlYXRlUGFnZVJ1bGUoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2Vs
ZWN0b3IpCi17Ci0gICAgLy8gRklYTUU6IE1hcmdpbiBhdC1ydWxlcyBhcmUgaWdub3JlZC4KLSAg
ICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFs
c2U7Ci0gICAgaWYgKHBhZ2VTZWxlY3RvcikgewotICAgICAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1
bGVQYWdlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkpOwotICAgICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4gc2VsZWN0b3JWZWN0b3I7Ci0gICAg
ICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChXVEZNb3ZlKHBhZ2VTZWxlY3RvcikpOwotICAgICAg
ICBydWxlLT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAg
ICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgICAgICBj
bGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUocnVsZSk7Ci0gICAgfQot
Ci0gICAgcG9wUnVsZURhdGEoKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+Pj4gQ1NTUGFyc2VyOjpjcmVhdGVTZWxlY3RvclZlY3RvcigpCi17Ci0g
ICAgaWYgKG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcikgewotICAgICAgICBtX3JlY3ljbGVkU2Vs
ZWN0b3JWZWN0b3ItPnNocmluaygwKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9yZWN5Y2xl
ZFNlbGVjdG9yVmVjdG9yKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PigpOwotfQotCi12b2lkIENT
U1BhcnNlcjo6cmVjeWNsZVNlbGVjdG9yVmVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IHZlY3RvcikKLXsKLSAgICBpZiAodmVj
dG9yICYmICFtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3IpCi0gICAgICAgIG1fcmVjeWNsZWRTZWxl
Y3RvclZlY3RvciA9IFdURk1vdmUodmVjdG9yKTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZVJlZ2lv
bj4gQ1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+PiogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcykKLXsKLSAg
ICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFydWxlcykgewotICAgICAgICBwb3BSdWxlRGF0YSgp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0KLSAgICBhdXRvIHJl
Z2lvblJ1bGUgPSBTdHlsZVJ1bGVSZWdpb246OmNyZWF0ZShyZWdpb25TZWxlY3RvciwgKnJ1bGVz
KTsKLQotICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIGFkZE5ld1J1
bGVUb1NvdXJjZVRyZWUoQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZVVua25vd24oKSk7Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShyZWdpb25SdWxlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmNyZWF0
ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSAvKiBtYXJnaW5Cb3ggKi8p
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBtYXJnaW4gYXQtcnVsZSBoZXJlLCB1c2luZzoK
LSAgICAvLyAgICAgICAgLSBtYXJnaW5Cb3g6IG1hcmdpbiBib3gKLSAgICAvLyAgICAgICAgLSBt
X3BhcnNlZFByb3BlcnRpZXM6IHByb3BlcnRpZXMgYXQgW21fbnVtUGFyc2VkUHJvcGVydGllc0Jl
Zm9yZU1hcmdpbkJveCwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKV0gYXJlIGZvciB0aGlzIGF0
LXJ1bGUuCi0gICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIGFsc28gdXBkYXRlIHRoZSBhY3Rpb24gZm9y
IHBhZ2Ugc3ltYm9sIGluIENTU0dyYW1tYXIueSBzdWNoIHRoYXQgbWFyZ2luIGF0LXJ1bGUgZGF0
YSBpcyBjbGVhcmVkIGlmIHBhZ2Vfc2VsZWN0b3IgaXMgaW52YWxpZC4KLQotICAgIGVuZERlY2xh
cmF0aW9uc0Zvck1hcmdpbkJveCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6c3RhcnREZWNsYXJh
dGlvbnNGb3JNYXJnaW5Cb3goKQotewotICAgIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1h
cmdpbkJveCA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
OjplbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKQotewotICAgIHJvbGxiYWNrTGFzdFByb3Bl
cnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG1fbnVtUGFyc2VkUHJvcGVydGllc0Jl
Zm9yZU1hcmdpbkJveCk7Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94
ID0gaW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3VudDsKLX0KLQotUmVmUHRyPFN0eWxlS2V5ZnJh
bWU+IENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBrZXlzKQot
ewotICAgIC8vIENyZWF0ZSBhIGtleSBzdHJpbmcgZnJvbSB0aGUgcGFzc2VkIGtleXMKLSAgICBT
dHJpbmdCdWlsZGVyIGtleVN0cmluZzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBKdXN0IGFzIHBlciB0aGUgY29tbWVudCBiZWxv
dywgd2UgaWdub3JlIGtleWZyYW1lcyB3aXRoCi0gICAgICAgIC8vIGludmFsaWQga2V5IHZhbHVl
cyAocGxhaW4gbnVtYmVycyBvciB1bmtub3duIGlkZW50aWZpZXJzKQotICAgICAgICAvLyBtYXJr
ZWQgYXMgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOIGR1cmluZyBwYXJzaW5nLgotICAg
ICAgICBpZiAoa2V5cy52YWx1ZUF0KGkpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VU5LTk9XTikgewotICAgICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChrZXlzLnZhbHVlQXQo
aSktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICBmbG9h
dCBrZXkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oa2V5cy52YWx1ZUF0KGkpLT5mVmFsdWUpOwotICAg
ICAgICBpZiAoa2V5IDwgMCB8fCBrZXkgPiAxMDApIHsKLSAgICAgICAgICAgIC8vIEFzIHBlciBo
dHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI2tleWZyYW1lcywKLSAgICAgICAg
ICAgIC8vICJJZiBhIGtleWZyYW1lIHNlbGVjdG9yIHNwZWNpZmllcyBuZWdhdGl2ZSBwZXJjZW50
YWdlIHZhbHVlcwotICAgICAgICAgICAgLy8gb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDEwMCUsIHRo
ZW4gdGhlIGtleWZyYW1lIHdpbGwgYmUgaWdub3JlZC4iCi0gICAgICAgICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpICE9IDApCi0gICAgICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7Ci0gICAgICAg
IGtleVN0cmluZy5hcHBlbmROdW1iZXIoa2V5KTsKLSAgICAgICAga2V5U3RyaW5nLmFwcGVuZCgn
JScpOwotICAgIH0KLQotICAgIGF1dG8ga2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUo
Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkpOwotICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0
cmluZy50b1N0cmluZygpKTsKLQotICAgIGNsZWFyUHJvcGVydGllcygpOwotCi0gICAgcmV0dXJu
IFdURk1vdmUoa2V5ZnJhbWUpOwotfQotCi12b2lkIENTU1BhcnNlcjo6aW52YWxpZEJsb2NrSGl0
KCkKLXsKLSAgICBpZiAobV9zdHlsZVNoZWV0ICYmICFtX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENT
U1J1bGUpCi0gICAgICAgIG1fc3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NT
SGVhZGVyKGZhbHNlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3Rvckxp
bmVBbmRQb3NpdGlvbigpCi17Ci0gICAgbV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyID0gbV9saW5l
TnVtYmVyOwotfQotCi12b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1
ZXJ5U2V0JiBtZWRpYSkKLXsKLSAgICBtZWRpYS5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBmaXhVbnBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
Q1NTUnVsZVNvdXJjZURhdGEmIHJ1bGVEYXRhKQotewotICAgIGF1dG8mIHByb3BlcnR5RGF0YSA9
IHJ1bGVEYXRhLnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIHVuc2lnbmVkIHNp
emUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLnJ1bGVCb2R5UmFuZ2Uuc3Rh
cnQ7Ci0gICAgYXV0byogbmV4dERhdGEgPSAmcHJvcGVydHlEYXRhWzBdOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byogY3VycmVudERhdGEg
PSBuZXh0RGF0YTsKLSAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmcHJvcGVydHlE
YXRhW2kgKyAxXSA6IDA7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+
IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFd
ID09ICc7JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVuc2lnbmVkIHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0OwotICAgICAgICBpZiAoIW5leHREYXRhKQotICAgICAgICAgICAg
cHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS5ydWxlQm9keVJhbmdlLmVuZCAtIDE7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5
bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKGlz
SFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAg
ICAgIC0tcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0KLSAgICAgICAgLy8gcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgot
ICAgICAgICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
IC0gc3R5bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0
IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJv
cGVydHlFbmQpIHsKLSAgICAgICAgICAgIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9w
ZXJ0eUVuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBz
dHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVl
dF0gIT0gJzonKQotICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQpCi0gICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlm
dCBwYXN0IHRoZSAnOicuCi0gICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVl
dCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFs
dWVTdGFydEluU3R5bGVTaGVldF0pKQotICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5
bGVTaGVldDsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsn
IGZyb20gdGhlIHByb3BlcnR5IHZhbHVlLgotICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVl
ID0gU3RyaW5nKGNoYXJhY3RlcnMgKyB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBDU1NQYXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNv
dXJjZURhdGEmIHJ1bGVEYXRhKQotewotICAgIGlmICghcnVsZURhdGEuc3R5bGVTb3VyY2VEYXRh
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXM4Qml0U291cmNlKCkpIHsKLSAgICAgICAg
Zml4VW5wYXJzZWRQcm9wZXJ0aWVzPExDaGFyPihtX2RhdGFTdGFydDguZ2V0KCkgKyBtX3BhcnNl
ZFRleHRQcmVmaXhMZW5ndGgsIHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGZpeFVucGFyc2VkUHJvcGVydGllczxVQ2hhcj4obV9kYXRhU3RhcnQxNi5nZXQoKSArIG1f
cGFyc2VkVGV4dFByZWZpeExlbmd0aCwgcnVsZURhdGEpOwotfQotCi12b2lkIENTU1BhcnNlcjo6
bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSBydWxlVHlwZSkKLXsK
LSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gUG9wIG9mZiBkYXRhIGZvciBhIHByZXZpb3VzIGludmFsaWQgcnVsZS4KLSAgICBpZiAo
bV9jdXJyZW50UnVsZURhdGEpCi0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnJlbW92
ZUxhc3QoKTsKLQotICAgIGF1dG8gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVs
ZVR5cGUpOwotICAgIGRhdGEtPnJ1bGVIZWFkZXJSYW5nZS5zdGFydCA9IHRva2VuU3RhcnRPZmZz
ZXQoKTsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IGRhdGEuY29weVJlZigpOwotICAgIG1fY3Vy
cmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFJ1bGVI
ZWFkZXJFbmQoY29uc3QgQ2hhcmFjdGVyVHlwZSogZGF0YVN0YXJ0KQotewotICAgIENoYXJhY3Rl
clR5cGUqIGxpc3RFbmQgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0gICAgd2hpbGUg
KGxpc3RFbmQgPiBkYXRhU3RhcnQgKyAxKSB7Ci0gICAgICAgIGlmIChpc0hUTUxTcGFjZSgqKGxp
c3RFbmQgLSAxKSkpCi0gICAgICAgICAgICAtLWxpc3RFbmQ7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3Qo
KS0+cnVsZUhlYWRlclJhbmdlLmVuZCA9IGxpc3RFbmQgLSBkYXRhU3RhcnQ7Ci19Ci0KLXZvaWQg
Q1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlckVuZCgpCi17Ci0gICAgaWYgKCFpc0V4dHJhY3RpbmdT
b3VyY2VEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoaXM4Qml0U291cmNlKCkpCi0gICAgICAg
IHNldFJ1bGVIZWFkZXJFbmQ8TENoYXI+KG1fZGF0YVN0YXJ0OC5nZXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBzZXRSdWxlSGVhZGVyRW5kPFVDaGFyPihtX2RhdGFTdGFydDE2LmdldCgpKTsKLX0K
LQotdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3RvclN0YXJ0KCkKLXsKLSAgICBpZiAoIWlzRXh0
cmFjdGluZ1NvdXJjZURhdGEoKSB8fCBtX25lc3RlZFNlbGVjdG9yTGV2ZWwpCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQoIW1fc2VsZWN0b3JSYW5nZS5lbmQpOwotCi0gICAgbV9zZWxlY3Rv
clJhbmdlLnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6
bWFya1NlbGVjdG9yRW5kKCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSB8
fCBtX25lc3RlZFNlbGVjdG9yTGV2ZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1f
c2VsZWN0b3JSYW5nZS5lbmQpOwotICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5z
aXplKCkpOwotCi0gICAgbV9zZWxlY3RvclJhbmdlLmVuZCA9IHRva2VuU3RhcnRPZmZzZXQoKTsK
LSAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnNlbGVjdG9yUmFuZ2VzLmFwcGVu
ZChtX3NlbGVjdG9yUmFuZ2UpOwotICAgIG1fc2VsZWN0b3JSYW5nZS5zdGFydCA9IDA7Ci0gICAg
bV9zZWxlY3RvclJhbmdlLmVuZCA9IDA7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJv
ZHlTdGFydCgpCi17Ci0gICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IG51bGxwdHI7Ci0gICAgdW5zaWduZWQg
b2Zmc2V0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIGlmICh0b2tlblN0YXJ0Q2hhcigpID09
ICd7JykKLSAgICAgICAgKytvZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJy
YWNlLgotICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAg
ICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBv
ZmZzZXQ7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQotewotICAgIC8v
IFByZWNvbmRpdGlvbjogKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgdW5zaWduZWQg
b2Zmc2V0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURh
dGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCkt
PnJ1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1By
b3BlcnR5U3RhcnQoKQotewotICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IGZhbHNl
OwotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVs
ZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLX0KLQotdm9p
ZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wg
aXNQcm9wZXJ0eVBhcnNlZCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5
KCkgfHwgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+c3R5bGVTb3VyY2VEYXRhKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0YXJ0T2Zmc2V0
KCk7Ci0gICAgaWYgKHRva2VuU3RhcnRDaGFyKCkgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xv
biBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgotICAgICAgICArK29mZnNldDsKLSAgICBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwotICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICYmICFtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1
dGVkIHdoZW4gdGhlIHN0eWxlIGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQu
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0Owot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwotICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFydCA8IGVuZCk7Ci0gICAgICAg
IFN0cmluZyBwcm9wZXJ0eVN0cmluZzsKLSAgICAgICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAg
ICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQ4LmdldCgpICsgc3Rh
cnQsIGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQxNi5nZXQoKSArIHN0YXJ0
LCBlbmQgLSBzdGFydCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eVN0
cmluZy5lbmRzV2l0aCgnOycpKQotICAgICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0
eVN0cmluZy5sZWZ0KHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgIHNpemVf
dCBjb2xvbkluZGV4ID0gcHJvcGVydHlTdHJpbmcuZmluZCgnOicpOwotICAgICAgICBBU1NFUlQo
Y29sb25JbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0
eVN0cmluZy5sZWZ0KGNvbG9uSW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBTdHJp
bmcgdmFsdWUgPSBwcm9wZXJ0eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3Bl
cnR5U3RyaW5nLmxlbmd0aCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgLy8gVGhlIHBy
b3BlcnR5IHJhbmdlIGlzIHJlbGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQu
Ci0gICAgICAgIFNvdXJjZVJhbmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJyZW50UnVsZURh
dGFTdGFjay0+bGFzdCgpLT5ydWxlQm9keVJhbmdlOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKLSAg
ICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRG
b3VuZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSB0b3BSdWxlQm9keVJh
bmdlLnN0YXJ0LCBlbmQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwotICAgIH0KLSAgICBy
ZXNldFByb3BlcnR5UmFuZ2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJ
T04pCi1SZWY8U3R5bGVSdWxlVmlld3BvcnQ+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxl
KCkKLXsKLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRp
b25zID0gZmFsc2U7Ci0KLSAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRl
KGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLQotICAg
IHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLQotICAgIHJldHVy
biBydWxlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAoIW1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLQot
ICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAg
IGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOiAvLyBhdXRvIHwgZGV2aWNlLXdpZHRoIHwgZGV2
aWNlLWhlaWdodCB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1heFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU1heEhlaWdodDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9
PSBDU1NWYWx1ZURldmljZVdpZHRoIHx8IGlkID09IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXaWR0aDogLy8gc2hvcnRoYW5kCi0gICAgICAgIHJldHVybiBwYXJz
ZVZpZXdwb3J0U2hvcnRoYW5kKHByb3BJZCwgQ1NTUHJvcGVydHlNaW5XaWR0aCwgQ1NTUHJvcGVy
dHlNYXhXaWR0aCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgotICAg
ICAgICByZXR1cm4gcGFyc2VWaWV3cG9ydFNob3J0aGFuZChwcm9wSWQsIENTU1Byb3BlcnR5TWlu
SGVpZ2h0LCBDU1NQcm9wZXJ0eU1heEhlaWdodCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1By
b3BlcnR5TWluWm9vbTogLy8gYXV0byB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1heFpvb206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZO
b25OZWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29tOiAv
LyB6b29tIHwgZml4ZWQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlWm9vbSB8fCBpZCA9PSBD
U1NWYWx1ZUZpeGVkKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3JpZW50YXRpb246IC8vIGF1dG8gfCBwb3J0
cmFpdCB8IGxhbmRzY2FwZQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09
IENTU1ZhbHVlUG9ydHJhaXQgfHwgaWQgPT0gQ1NTVmFsdWVMYW5kc2NhcGUpCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICBpZiAodmFsaWRQ
cmltaXRpdmUpIHsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlk
LCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWluU2hvcnRoYW5kKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVs
ZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmlld3BvcnRTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENT
U1Byb3BlcnR5SUQgZmlyc3QsIENTU1Byb3BlcnR5SUQgc2Vjb25kLCBib29sIGltcG9ydGFudCkK
LXsKLSAgICB1bnNpZ25lZCBudW1WYWx1ZXMgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAg
aWYgKG51bVZhbHVlcyA+IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0aGFu
ZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0KLSAgICBpZiAoIXBhcnNlVmlld3BvcnRQcm9w
ZXJ0eShmaXJzdCwgaW1wb3J0YW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
SWYganVzdCBvbmUgdmFsdWUgaXMgc3VwcGxpZWQsIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAvLyBp
cyBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggdGhlIGZpcnN0IHZhbHVlLgotICAgIGlmIChu
dW1WYWx1ZXMgPT0gMSkKLSAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7Ci0KLSAgICBy
ZXR1cm4gcGFyc2VWaWV3cG9ydFByb3BlcnR5KHNlY29uZCwgaW1wb3J0YW50KTsKLX0KLSNlbmRp
ZgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBDU1NQcm9wZXJ0
eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgQ2hhcmFjdGVyVHlwZSogcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgY2hhciBidWZmZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3Ro
ICsgMSArIDFdOyAvLyAxIHRvIHR1cm4gImFwcGxlIi8ia2h0bWwiIGludG8gIndlYmtpdCIsIDEg
Zm9yIG51bGwgY2hhcmFjdGVyCi0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9IHByb3BlcnR5TmFtZVtpXTsKLSAg
ICAgICAgaWYgKGMgPT0gMCB8fCBjID49IDB4N0YpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJv
cGVydHlJbnZhbGlkOyAvLyBpbGxlZ2FsIGNoYXJhY3RlcgotICAgICAgICBidWZmZXJbaV0gPSB0
b0FTQ0lJTG93ZXIoYyk7Ci0gICAgfQotICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKLQotICAg
IGNvbnN0IGNoYXIqIG5hbWUgPSBidWZmZXI7Ci0gICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsK
LSNpZiBFTkFCTEUoTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpCi0gICAgICAgIC8vIElmIHRo
ZSBwcmVmaXggaXMgLWFwcGxlLSBvciAta2h0bWwtLCBjaGFuZ2UgaXQgdG8gLXdlYmtpdC0uCi0g
ICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlIHN0cmluZyBvbmUgY2hhcmFjdGVyIGxvbmdlci4KLSAg
ICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGVnYWN5
Q1NTVmVuZG9yUHJlZml4ZXNFbmFibGVkKCkKLSAgICAgICAgICAgICYmIChoYXNQcmVmaXgoYnVm
ZmVyLCBsZW5ndGgsICItYXBwbGUtIikgfHwgaGFzUHJlZml4KGJ1ZmZlciwgbGVuZ3RoLCAiLWto
dG1sLSIpKSkgewotICAgICAgICAgICAgbWVtbW92ZShidWZmZXIgKyA3LCBidWZmZXIgKyA2LCBs
ZW5ndGggKyAxIC0gNik7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCAiLXdlYmtpdCIsIDcp
OwotICAgICAgICAgICAgKytsZW5ndGg7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgICAgY3NzUHJvcGVydHlOYW1lSU9TQWxpYXNpbmcoYnVmZmVyLCBuYW1lLCBs
ZW5ndGgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgY29uc3QgUHJvcGVydHkqIGhhc2hUYWJsZUVu
dHJ5ID0gZmluZFByb3BlcnR5KG5hbWUsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGhhc2hUYWJsZUVu
dHJ5ID8gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaGFzaFRhYmxlRW50cnktPmlkKSA6IENT
U1Byb3BlcnR5SW52YWxpZDsKLX0KLQotQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlEKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlk
OwotICAgIGlmIChsZW5ndGggPiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZy5pczhCaXQo
KSA/IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NQcm9w
ZXJ0eUlEKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotQ1NTUHJvcGVydHlJ
RCBjc3NQcm9wZXJ0eUlEKGNvbnN0IENTU1BhcnNlclN0cmluZyYgc3RyaW5nKQotewotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwotICAgIGlmIChsZW5ndGggPiBtYXhDU1NQ
cm9wZXJ0eU5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0g
ICAgCi0gICAgcmV0dXJuIHN0cmluZy5pczhCaXQoKSA/IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNo
YXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NQcm9wZXJ0eUlEKHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgY3NzUHJvcGVydHlOYW1l
SU9TQWxpYXNpbmcoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVy
dHlOYW1lQWxpYXMsIHVuc2lnbmVkJiBuZXdMZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJjbXAocHJv
cGVydHlOYW1lLCAiLXdlYmtpdC1oeXBoZW5hdGUtbG9jYWxlIikpIHsKLSAgICAgICAgLy8gV29y
a2VkIGluIGlPUyA0LjIuCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHdlYmtpdExvY2FsZVtd
ID0gIi13ZWJraXQtbG9jYWxlIjsKLSAgICAgICAgcHJvcGVydHlOYW1lQWxpYXMgPSB3ZWJraXRM
b2NhbGU7Ci0gICAgICAgIG5ld0xlbmd0aCA9IHN0cmxlbih3ZWJraXRMb2NhbGUpOwotICAgIH0K
LX0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBpc0FwcGxlTGVnYWN5Q3NzVmFsdWVLZXl3b3JkKGNv
bnN0IGNoYXIqIHZhbHVlS2V5d29yZCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHN0YXRpYyBj
b25zdCBjaGFyIGFwcGxlUHJlZml4W10gPSAiLWFwcGxlLSI7Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIgYXBwbGVTeXN0ZW1QcmVmaXhbXSA9ICItYXBwbGUtc3lzdGVtIjsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciogYXBwbGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlID0gZ2V0VmFsdWVOYW1l
KENTU1ZhbHVlQXBwbGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlKTsKLQotICAgIHJldHVy
biBoYXNQcmVmaXgodmFsdWVLZXl3b3JkLCBsZW5ndGgsIGFwcGxlUHJlZml4KQotICAgICAgICAm
JiAhaGFzUHJlZml4KHZhbHVlS2V5d29yZCwgbGVuZ3RoLCBhcHBsZVN5c3RlbVByZWZpeCkKLSAg
ICAgICAgJiYgIVdURjo6ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHZhbHVl
S2V5d29yZCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhcHBsZVdpcmVsZXNzUGxh
eWJhY2tUYXJnZXRBY3RpdmUpLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBDU1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENo
YXJhY3RlclR5cGUqIHZhbHVlS2V5d29yZCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGNoYXIg
YnVmZmVyW21heENTU1ZhbHVlS2V5d29yZExlbmd0aCArIDEgKyAxXTsgLy8gMSB0byB0dXJuICJh
cHBsZSIvImtodG1sIiBpbnRvICJ3ZWJraXQiLCAxIGZvciBudWxsIGNoYXJhY3RlcgotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBDaGFyYWN0
ZXJUeXBlIGMgPSB2YWx1ZUtleXdvcmRbaV07Ci0gICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAw
eDdGKQotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxpZDsgLy8gaWxsZWdhbCBrZXl3
b3JkLgotICAgICAgICBidWZmZXJbaV0gPSBXVEY6OnRvQVNDSUlMb3dlcihjKTsKLSAgICB9Ci0g
ICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotCi0gICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsK
LSAgICAgICAgLy8gSWYgdGhlIHByZWZpeCBpcyAtYXBwbGUtIG9yIC1raHRtbC0sIGNoYW5nZSBp
dCB0byAtd2Via2l0LS4KLSAgICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgc3RyaW5nIG9uZSBjaGFy
YWN0ZXIgbG9uZ2VyLgotICAgICAgICAvLyBPbiBpT1Mgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2Ug
dmFsdWVzIHN0YXJ0aW5nIHdpdGggLWFwcGxlLXN5c3RlbSB0byAtd2Via2l0LXN5c3RlbS4KLSAg
ICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG1hbmdsaW5nIHdpdGhvdXQgYnJlYWtpbmcgdGhl
IHdlYi4KLSAgICAgICAgaWYgKGlzQXBwbGVMZWdhY3lDc3NWYWx1ZUtleXdvcmQoYnVmZmVyLCBs
ZW5ndGgpIHx8IGhhc1ByZWZpeChidWZmZXIsIGxlbmd0aCwgIi1raHRtbC0iKSkgewotICAgICAg
ICAgICAgbWVtbW92ZShidWZmZXIgKyA3LCBidWZmZXIgKyA2LCBsZW5ndGggKyAxIC0gNik7Ci0g
ICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCAiLXdlYmtpdCIsIDcpOwotICAgICAgICAgICAgKyts
ZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBWYWx1ZSogaGFzaFRhYmxlRW50
cnkgPSBmaW5kVmFsdWUoYnVmZmVyLCBsZW5ndGgpOwotICAgIHJldHVybiBoYXNoVGFibGVFbnRy
eSA/IHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGhhc2hUYWJsZUVudHJ5LT5pZCkgOiBDU1NWYWx1
ZUludmFsaWQ7Ci19Ci0KLUNTU1ZhbHVlSUQgY3NzVmFsdWVLZXl3b3JkSUQoY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOwot
ICAgIGlmIChsZW5ndGggPiBtYXhDU1NWYWx1ZUtleXdvcmRMZW5ndGgpCi0gICAgICAgIHJldHVy
biBDU1NWYWx1ZUludmFsaWQ7Ci0KLSAgICByZXR1cm4gc3RyaW5nLmlzOEJpdCgpID8gY3NzVmFs
dWVLZXl3b3JkSUQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NWYWx1ZUtleXdv
cmRJRChzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzQ1NTVG9rZW5pemVySWRl
bnRpZmllcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsK
LQotICAgIC8vIC0/Ci0gICAgaWYgKGNoYXJhY3RlcnMgIT0gZW5kICYmIGNoYXJhY3RlcnNbMF0g
PT0gJy0nKQotICAgICAgICArK2NoYXJhY3RlcnM7Ci0KLSAgICAvLyB7bm1zdGFydH0KLSAgICBp
ZiAoY2hhcmFjdGVycyA9PSBlbmQgfHwgIShjaGFyYWN0ZXJzWzBdID09ICdfJyB8fCBjaGFyYWN0
ZXJzWzBdID49IDEyOCB8fCBpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyc1swXSkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgKytjaGFyYWN0ZXJzOwotCi0gICAgLy8ge25tY2hhcn0qCi0gICAg
Zm9yICg7IGNoYXJhY3RlcnMgIT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKLSAgICAgICAgaWYgKCEo
Y2hhcmFjdGVyc1swXSA9PSAnXycgfHwgY2hhcmFjdGVyc1swXSA9PSAnLScgfHwgY2hhcmFjdGVy
c1swXSA+PSAxMjggfHwgaXNBU0NJSUFscGhhbnVtZXJpYyhjaGFyYWN0ZXJzWzBdKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
ICJpZGVudCIgZnJvbSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBz
ZXF1ZW5jZXMKLXN0YXRpYyBib29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0K
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmlu
Zy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihzdHJp
bmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJJZGVu
dGlmaWVyKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tlbml6ZXJV
UkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAg
Ci0gICAgZm9yICg7IGNoYXJhY3RlcnMgIT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKLSAgICAgICAg
Q2hhcmFjdGVyVHlwZSBjID0gY2hhcmFjdGVyc1swXTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0g
ICAgICAgICAgICBjYXNlICchJzoKLSAgICAgICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAg
Y2FzZSAnJCc6Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgIGNhc2UgJyYnOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBpZiAoYyA8ICcqJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIGlmIChjIDw9ICd+JykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKGMgPCAxMjgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8g
InVybCIgZnJvbSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1
ZW5jZXMKLXN0YXRpYyBib29sIGlzQ1NTVG9rZW5pemVyVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcuY2hhcmFjdGVyczgoKSwg
bGVuZ3RoKTsKLSAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJVUkwoc3RyaW5nLmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgpOwotfQotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIGlubGluZSBTdHJpbmcgcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRm9yIGVmZmlj
aWVuY3ksIHdlIGZpcnN0IHByZS1jYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcXVvdGVkIHN0
cmluZywgdGhlbiB3ZSBidWlsZCB0aGUgYWN0dWFsIG9uZS4KLSAgICAvLyBQbGVhc2Ugc2VlIGJl
bG93IGZvciB0aGUgYWN0dWFsIGxvZ2ljLgotICAgIHVuc2lnbmVkIHF1b3RlZFN0cmluZ1NpemUg
PSAyOyAvLyBUd28gcXVvdGVzIHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUgc3RyaW5nLgotICAgIGJv
b2wgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IGNoYXJhY3RlcnNbaV07Ci0g
ICAgICAgIGlmIChjaCA9PSAnXFwnIHx8IGNoID09ICdcJycpIHsKLSAgICAgICAgICAgIHF1b3Rl
ZFN0cmluZ1NpemUgKz0gMjsKLSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoY2ggPCAweDIwIHx8IGNoID09IDB4N0YpIHsKLSAgICAgICAgICAgIHF1
b3RlZFN0cmluZ1NpemUgKz0gMiArIChjaCA+PSAweDEwKTsKLSAgICAgICAgICAgIGFmdGVyRXNj
YXBlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHF1b3RlZFN0cmluZ1Np
emUgKz0gMSArIChhZnRlckVzY2FwZSAmJiAoaXNBU0NJSUhleERpZ2l0KGNoKSB8fCBjaCA9PSAn
ICcpKTsKLSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBTdHJpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKHF1b3RlZFN0cmluZ1Np
emUpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBidWZmZXJbaW5kZXgrK10gPSAnXCcn
OwotICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBjaGFyYWN0ZXJzW2ld
OwotICAgICAgICBpZiAoY2ggPT0gJ1xcJyB8fCBjaCA9PSAnXCcnKSB7Ci0gICAgICAgICAgICBi
dWZmZXJbaW5kZXgrK10gPSAnXFwnOwotICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gY2g7
Ci0gICAgICAgICAgICBhZnRlckVzY2FwZSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGNo
IDwgMHgyMCB8fCBjaCA9PSAweDdGKSB7IC8vIENvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAg
ICAgIGJ1ZmZlcltpbmRleCsrXSA9ICdcXCc7Ci0gICAgICAgICAgICBwbGFjZUJ5dGVBc0hleENv
bXByZXNzSWZQb3NzaWJsZShjaCwgYnVmZmVyLCBpbmRleCwgTG93ZXJjYXNlKTsKLSAgICAgICAg
ICAgIGFmdGVyRXNjYXBlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IFNwYWNlIGNoYXJhY3RlciBtYXkgYmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUgYmFja3NsYXNoLWVz
Y2FwZSBzZXF1ZW5jZSBhbmQgbm9ybWFsIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBpZiAoYWZ0
ZXJFc2NhcGUgJiYgKGlzQVNDSUlIZXhEaWdpdChjaCkgfHwgY2ggPT0gJyAnKSkKLSAgICAgICAg
ICAgICAgICBidWZmZXJbaW5kZXgrK10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbaW5kZXgr
K10gPSBjaDsKLSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYnVmZmVyW2luZGV4KytdID0gJ1wnJzsKLQotICAgIEFTU0VSVChxdW90ZWRTdHJp
bmdTaXplID09IGluZGV4KTsKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQot
Ci0vLyBXZSB1c2Ugc2luZ2xlIHF1b3RlcyBmb3Igbm93IGJlY2F1c2UgbWFya3VwLmNwcCB1c2Vz
IGRvdWJsZSBxdW90ZXMuCi1TdHJpbmcgcXVvdGVDU1NTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBleHBhbmRzIGVhY2ggY2hhcmFjdGVyIHRvIGF0
IG1vc3QgMyBjaGFyYWN0ZXJzICgnXHUwMDEwJyAtPiAnXCcgJzEnICcwJykgYXMgd2VsbCBhcyBh
ZGRzCi0gICAgLy8gMiBxdW90ZSBjaGFyYWN0ZXJzIChiZWZvcmUgYW5kIGFmdGVyKS4gTWFrZSBz
dXJlIHRoZSByZXN1bHRpbmcgc2l6ZSAoMyAqIGxlbmd0aCArIDIpIHdpbGwgbm90IG92ZXJmbG93
IHVuc2lnbmVkLgotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0g
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlwnXCciKTsKLQot
ICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyAz
IC0gMikKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQotICAgICAgICByZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChzdHJpbmcuY2hh
cmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChz
dHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19Ci0KLVN0cmluZyBxdW90ZUNTU1N0cmlu
Z0lmTmVlZGVkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBpc0NTU1Rva2Vu
aXplcklkZW50aWZpZXIoc3RyaW5nKSA/IHN0cmluZyA6IHF1b3RlQ1NTU3RyaW5nKHN0cmluZyk7
Ci19Ci0KLVN0cmluZyBxdW90ZUNTU1VSTElmTmVlZGVkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ewotICAgIHJldHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcpID8gc3RyaW5nIDogcXVvdGVD
U1NTdHJpbmcoc3RyaW5nKTsKLX0KLQotYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiB0b2tlbikKLXsKLSAgICAvLyBUaGUgdG9rZW5pemVyIGNoZWNrcyBmb3IgdGhl
IGNvbnN0cnVjdCBvZiBhbitiLgotICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSB7aWRlbnR9IHJ1
bGUgcHJlY2VkZXMgdGhlIHtudGh9IHJ1bGUsIHNvbWUgb2YgdGhvc2UKLSAgICAvLyB0b2tlbnMg
YXJlIGlkZW50aWZpZWQgYXMgc3RyaW5nIGxpdGVyYWwuIEZ1cnRoZXJtb3JlIHdlIG5lZWQgdG8g
YWNjZXB0Ci0gICAgLy8gIm9kZCIgYW5kICJldmVuIiB3aGljaCBkb2VzIG5vdCBtYXRjaCB0byBh
bitiLgotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbiwgIm9k
ZCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiZXZl
biIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAibiIp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiLW4iKTsK
LX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA0ODQyKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5Lmgi
Ci0jaW5jbHVkZSAiU291cmNlU2l6ZUxpc3QuaCIKLSNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQu
aCIKLSNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KLQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0jaW5jbHVkZSAiR3JpZEFy
ZWEuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFuaW1hdGlvblBh
cnNlQ29udGV4dDsKLWNsYXNzIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTsKLWNsYXNzIENTU0Nv
bnRlbnREaXN0cmlidXRpb25WYWx1ZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xhc3Mg
Q1NTU2VsZWN0b3JMaXN0OwotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBDU1NWYWx1ZUxpc3Q7Ci1j
bGFzcyBDU1NCYXNpY1NoYXBlOwotY2xhc3MgQ1NTQmFzaWNTaGFwZUNpcmNsZTsKLWNsYXNzIENT
U0Jhc2ljU2hhcGVFbGxpcHNlOwotY2xhc3MgQ1NTQmFzaWNTaGFwZUluc2V0OwotY2xhc3MgQ1NT
QmFzaWNTaGFwZVBhdGg7Ci1jbGFzcyBDU1NCYXNpY1NoYXBlUG9seWdvbjsKLWNsYXNzIENTU0dy
aWRMaW5lTmFtZXNWYWx1ZTsKLWNsYXNzIENTU0ltYWdlU2V0VmFsdWU7Ci1jbGFzcyBDU1NWYXJp
YWJsZURlcGVuZGVudFZhbHVlOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xh
c3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwotY2xhc3MgTWVkaWFRdWVyeUV4cHJlc3Npb247
Ci1jbGFzcyBNZWRpYVF1ZXJ5U2V0OwotY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydGllczsKLWNs
YXNzIFNWR0NvbG9yOwotY2xhc3MgU1ZHUGFpbnQ7Ci1jbGFzcyBTdHlsZUtleWZyYW1lOwotY2xh
c3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKLWNsYXNzIFN0eWxlUnVsZTsKLWNsYXNzIFN0eWxl
UnVsZUJhc2U7Ci1jbGFzcyBTdHlsZVJ1bGVGb250RmFjZTsKLWNsYXNzIFN0eWxlUnVsZUtleWZy
YW1lczsKLWNsYXNzIFN0eWxlUnVsZU1lZGlhOwotY2xhc3MgU3R5bGVSdWxlUGFnZTsKLWNsYXNz
IFN0eWxlUnVsZVJlZ2lvbjsKLWNsYXNzIFN0eWxlUnVsZVN1cHBvcnRzOwotY2xhc3MgU3R5bGVS
dWxlVmlld3BvcnQ7Ci1jbGFzcyBTdHlsZUtleWZyYW1lOwotY2xhc3MgU3R5bGVTaGVldENvbnRl
bnRzOwotY2xhc3MgU3R5bGVkRWxlbWVudDsKLWNsYXNzIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OwotCi1jbGFzcyBDU1NQYXJzZXIgewotICAgIGZyaWVuZCBpbmxpbmUgaW50IGNzc3l5bGV4KHZv
aWQqLCBDU1NQYXJzZXIqKTsKLQotcHVibGljOgotICAgIHN0cnVjdCBMb2NhdGlvbjsKLSAgICBl
bnVtIFN5bnRheEVycm9yVHlwZSB7Ci0gICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb25FcnJvciwK
LSAgICAgICAgR2VuZXJhbFN5bnRheEVycm9yCi0gICAgfTsKLQotICAgIGVudW0gY2xhc3MgUGFy
c2VSZXN1bHQgewotICAgICAgICBDaGFuZ2VkLAotICAgICAgICBVbmNoYW5nZWQsCi0gICAgICAg
IEVycm9yCi0gICAgfTsKLQotICAgIGNsYXNzIFZhbHVlV2l0aENhbGN1bGF0aW9uIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFZhbHVlV2l0aENhbGN1bGF0aW9uKENTU1BhcnNlclZh
bHVlJiB2YWx1ZSkKLSAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgeyB9Ci0K
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQotICAgICAgICBvcGVyYXRvciBDU1NQYXJzZXJWYWx1ZSYoKSB7IHJldHVybiBtX3ZhbHVlOyB9
Ci0KLSAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2NhbGN1bGF0aW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVmUHRy
PENTU0NhbGNWYWx1ZT4mJiBjYWxjdWxhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGlzQ2FsY3VsYXRpb24obV92YWx1ZSkpOwotICAgICAgICAgICAgbV9jYWxjdWxhdGlvbiA9
IGNhbGN1bGF0aW9uOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSYgbV92YWx1ZTsKLSAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjdWxh
dGlvbjsKLSAgICB9OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyKGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB+Q1NTUGFyc2VyKCk7Ci0KLSAgICB2
b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VGV4dFBvc2l0aW9uJiwgUnVsZVNvdXJjZURhdGFMaXN0KiwgYm9vbCBsb2dFcnJvcnMpOwotICAg
IFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxl
KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2VTdXBw
b3J0c0NvbmRpdGlvbihjb25zdCBTdHJpbmcmKTsKLQotICAgIHN0YXRpYyBQYXJzZVJlc3VsdCBw
YXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRz
Kik7Ci0gICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29u
dGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKLQotICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3Io
UkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7Ci0gICAg
c3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoQ1NTVmFsdWVJRCk7Ci0gICAgc3Rh
dGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBE
b2N1bWVudCopOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1bGF0
aW9uJik7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYsIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4mJiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0gICAgc3RhdGlj
IFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlv
bihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgYWRkUHJvcGVy
dHlXaXRoUHJlZml4aW5nVmFyaWFudChDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYs
IGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYmLCBib29sIGltcG9ydGFudCwg
Ym9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKLSAgICB2b2lkIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMo
aW50IG51bSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1fcGFy
c2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIGFkZEV4cGFuZGVkUHJvcGVydHlG
b3JWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmLCBib29sKTsKLQot
ICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAg
Ym9vbCBwYXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHlsZVByb3BlcnR5U2hv
cnRoYW5kJiwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2U0VmFsdWVzKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KTsK
LSAgICBib29sIHBhcnNlQ29udGVudChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0g
ICAgYm9vbCBwYXJzZVF1b3RlcyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAg
Ym9vbCBwYXJzZUFsdChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgCi0gICAg
Ym9vbCBwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oYm9vbCBpbXBvcnRhbnQsIENTU1Zh
bHVlSUQpOwotICAgIAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBdHRyKENT
U1BhcnNlclZhbHVlTGlzdCYgYXJncyk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlQmFja2dyb3VuZENvbG9yKCk7Ci0KLSAgICBzdHJ1Y3QgU291cmNlU2l6ZSB7Ci0gICAg
ICAgIE1lZGlhUXVlcnlFeHByZXNzaW9uIGV4cHJlc3Npb247Ci0gICAgICAgIFJlZjxDU1NWYWx1
ZT4gbGVuZ3RoOwotCi0gICAgICAgIFNvdXJjZVNpemUoU291cmNlU2l6ZSYmKTsKLSAgICAgICAg
U291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+JiYpOwotICAg
IH07Ci0gICAgVmVjdG9yPFNvdXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmll
dyk7Ci0gICAgT3B0aW9uYWw8U291cmNlU2l6ZT4gc291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVz
c2lvbiYmLCBDU1NQYXJzZXJWYWx1ZSYpOwotCi0gICAgYm9vbCBwYXJzZUZpbGxJbWFnZShDU1NQ
YXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBlbnVtIEZpbGxQb3Np
dGlvbkZsYWcgeyBJbnZhbGlkRmlsbFBvc2l0aW9uID0gMCwgQW1iaWd1b3VzRmlsbFBvc2l0aW9u
ID0gMSwgWEZpbGxQb3NpdGlvbiA9IDIsIFlGaWxsUG9zaXRpb24gPSA0IH07Ci0gICAgZW51bSBG
aWxsUG9zaXRpb25QYXJzaW5nTW9kZSB7IFJlc29sdmVWYWx1ZXNBc1BlcmNlbnQgPSAwLCBSZXNv
bHZlVmFsdWVzQXNLZXl3b3JkID0gMSB9OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgdW5zaWduZWQm
IGN1bXVsYXRpdmVGbGFncywgRmlsbFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQ
b3NpdGlvblBhcnNpbmdNb2RlID0gUmVzb2x2ZVZhbHVlc0FzUGVyY2VudCk7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVBvc2l0aW9uWChDU1NQYXJzZXJWYWx1ZUxpc3QmKTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlUG9zaXRpb25ZKENTU1BhcnNlclZh
bHVlTGlzdCYpOwotICAgIHZvaWQgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZh
bHVlTGlzdCYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+Jik7Ci0gICAgYm9vbCBpc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoQ1NTUGFyc2VyVmFs
dWUmKTsKLSAgICB2b2lkIHBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYsIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0g
ICAgdm9pZCBwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+JiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7Ci0gICAgdm9p
ZCBwYXJzZTRWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+JiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7Ci0KLSAgICB2b2lkIHBh
cnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBi
b29sICZhbGxvd0NvbW1hKTsKLQotICAgIGJvb2wgcGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJ
ZDIsIFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJz
ZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVy
dGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIHZvaWQgYWRk
RmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKTsK
LSAgICB2b2lkIGFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxD
U1NWYWx1ZT4mJiBydmFsKTsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VB
bmltYXRpb25EZWxheSgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmlt
YXRpb25EaXJlY3Rpb24oKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5p
bWF0aW9uRHVyYXRpb24oKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5p
bWF0aW9uRmlsbE1vZGUoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlQW5pbWF0aW9uTmFtZSgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VB
bmltYXRpb25QbGF5U3RhdGUoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
QW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uUGFyc2VDb250ZXh0Jik7Ci0gICAgUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCk7Ci0jaWYgRU5BQkxFKENTU19B
TklNQVRJT05TX0xFVkVMXzIpCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvblRy
aWdnZXIoKTsKLSNlbmRpZgotICAgIHN0YXRpYyBWZWN0b3I8ZG91YmxlPiBwYXJzZUtleWZyYW1l
U2VsZWN0b3IoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIHBhcnNlVHJhbnNmb3JtT3JpZ2lu
U2hvcnRoYW5kKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gcGFyc2VD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBwYXJzZVNwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2Vy
VmFsdWVMaXN0Jik7Ci0gICAgYm9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIFJlZlB0cjxDU1NWYWx1ZT4mLCBBbmltYXRpb25QYXJzZUNvbnRleHQmKTsKLSAgICBib29s
IHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7
Ci0gICAgYm9vbCBwYXJzZUFuaW1hdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29sIGlt
cG9ydGFudCk7Ci0KLSAgICBib29sIGlzU3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkKCkgY29u
c3Q7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uV2lkdGgoKTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uQ291bnQoKTsKLSAgICBi
b29sIHBhcnNlQ29sdW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0KLSNpZiBFTkFCTEUo
SU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGlzVGV4dEF1dG9zaXppbmdFbmFibGVkKCkg
Y29uc3Q7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgYm9vbCBp
c0NTU0dyaWRMYXlvdXRFbmFibGVkKCkgY29uc3Q7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZUdyaWRQb3NpdGlvbigpOwotICAgIGJvb2wgcGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5k
KENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBlbnVtIFRyYWNrTGlzdFR5cGUg
eyBHcmlkVGVtcGxhdGUsIEdyaWRUZW1wbGF0ZU5vUmVwZWF0LCBHcmlkQXV0byB9OwotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVGVtcGxhdGVDb2x1bW5zKFRyYWNrTGlzdFR5cGUgPSBH
cmlkVGVtcGxhdGUpOwotICAgIGJvb2wgcGFyc2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXNBbmRD
b2x1bW5zKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlU2hvcnRo
YW5kKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlR3JpZFNob3J0aGFuZChib29sIGlt
cG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlR3JpZEdhcFNob3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0gICAg
Ym9vbCBwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoUmVmUHRyPENTU1ZhbHVlPiYpOwotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVHJhY2tMaXN0KFRyYWNrTGlzdFR5cGUpOwotICAg
IGJvb2wgcGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmLCBib29sJiBp
c0F1dG9SZXBlYXQsIGJvb2wmIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VHcmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0
KTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFy
c2VyVmFsdWUmKTsKLSAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFtZWRHcmlk
QXJlYU1hcCYsIGNvbnN0IHVuc2lnbmVkLCB1bnNpZ25lZCYpOwotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpOwotICAgIGJvb2wgcGFyc2VHcmlkTGluZU5hbWVz
KENTU1BhcnNlclZhbHVlTGlzdCYsIENTU1ZhbHVlTGlzdCYsIENTU0dyaWRMaW5lTmFtZXNWYWx1
ZSogPSBudWxscHRyKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlR3JpZEF1dG9GbG93KENT
U1BhcnNlclZhbHVlTGlzdCYpOwotI2VuZGlmCi0KLSAgICBib29sIHBhcnNlRGFzaGJvYXJkUmVn
aW9ucyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlQ2xp
cFNoYXBlKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgcGFyc2VM
ZWdhY3lQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZUl0ZW1Qb3NpdGlvbk92ZXJmbG93UG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBv
cnRhbnQpOwotICAgIFJlZlB0cjxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+IHBhcnNlQ29u
dGVudERpc3RyaWJ1dGlvbk92ZXJmbG93UG9zaXRpb24oKTsKLQotI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5
SUQpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUJhc2ljU2hhcGVB
bmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZUJhc2ljU2hhcGUoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFw
ZUNpcmNsZT4gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAg
IFJlZlB0cjxDU1NCYXNpY1NoYXBlRWxsaXBzZT4gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZShDU1NQ
YXJzZXJWYWx1ZUxpc3QmKTsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZVBvbHlnb24+IHBhcnNl
QmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jh
c2ljU2hhcGVQYXRoPiBwYXJzZUJhc2ljU2hhcGVQYXRoKENTU1BhcnNlclZhbHVlTGlzdCYpOwot
ICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IHBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1Bh
cnNlclZhbHVlTGlzdCYpOwotCi0gICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpOwot
ICAgIHZvaWQgcGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBwYXJzZUZvbnRGYW1pbHkoKTsKLQotICAgIGJvb2wgcGFyc2VDb3VudGVyKENT
U1Byb3BlcnR5SUQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVM
aXN0JiBhcmdzLCBib29sIGNvdW50ZXJzKTsKLQotICAgIGJvb2wgcGFyc2VDb2xvclBhcmFtZXRl
cnMoQ1NTUGFyc2VyVmFsdWUmLCBpbnQqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEpOwot
ICAgIGJvb2wgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiwgZG91YmxlKiBjb2xv
clZhbHVlcywgYm9vbCBwYXJzZUFscGhhKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlQ29sb3IoQ1NTUGFyc2VyVmFsdWUqID0gbnVsbHB0cik7Ci0gICAgYm9vbCBwYXJzZUNv
bG9yRnJvbVZhbHVlKENTU1BhcnNlclZhbHVlJiwgUkdCQTMyJik7Ci0gICAgdm9pZCBwYXJzZVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYsIENTU1NlbGVjdG9yTGlzdCYpOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nVHlwZT4KLSAgICBzdGF0aWMgYm9vbCBmYXN0UGFyc2VDb2xvcihSR0JB
MzImLCBjb25zdCBTdHJpbmdUeXBlJiwgYm9vbCBzdHJpY3QpOwotCi0gICAgYm9vbCBwYXJzZUxp
bmVIZWlnaHQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VGb250U2l6ZShib29sIGlt
cG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRXZWlnaHQoYm9vbCBpbXBvcnRhbnQpOwotICAg
IGJvb2wgcGFyc2VGb250U3ludGhlc2lzKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNl
Rm9udEZhY2VTcmMoKTsKLSAgICBib29sIHBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKTsKLQot
ICAgIGJvb2wgcGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpOwotICAgIFJlZlB0cjxTVkdQYWludD4gcGFyc2VTVkdQYWludCgpOwotICAgIFJlZlB0cjxT
VkdDb2xvcj4gcGFyc2VTVkdDb2xvcigpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNl
U1ZHU3Ryb2tlRGFzaGFycmF5KCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VQYWlu
dE9yZGVyKCk7Ci0KLSAgICAvLyBDU1MzIFBhcnNpbmcgUm91dGluZXMgKGZvciBwcm9wZXJ0aWVz
IHNwZWNpZmljIHRvIENTUzMpCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VTaGFkb3co
Q1NTUGFyc2VyVmFsdWVMaXN0JiwgQ1NTUHJvcGVydHlJRCk7Ci0gICAgYm9vbCBwYXJzZUJvcmRl
ckltYWdlKENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4mLCBib29sIGltcG9ydGFudCA9
IGZhbHNlKTsKLSAgICBib29sIHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQoUmVmUHRyPENTU1ZhbHVl
PiYpOwotICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVNsaWNlKENTU1Byb3BlcnR5SUQsIFJlZlB0
cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdl
V2lkdGgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGJvb2wgcGFyc2VCb3JkZXJJ
bWFnZU91dHNldChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJv
cmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBh
cnNlQXNwZWN0UmF0aW8oYm9vbCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZVJlZmxlY3Qo
Q1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZUZsZXgoQ1NT
UGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCk7Ci0KLSAgICAvLyBJbWFnZSBn
ZW5lcmF0b3JzCi0gICAgYm9vbCBwYXJzZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQ
dHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZU5hbWVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVM
aXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotCi0gICAgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBw
YXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8
Q1NTVmFsdWU+JiwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNl
RGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NW
YWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwotICAgIGJvb2wgcGFyc2VMaW5l
YXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgQ1NTR3Jh
ZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNlUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0IHJl
cGVhdGluZyk7Ci0gICAgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBDU1NHcmFkaWVudFZhbHVlJiwgYm9vbCBleHBlY3RDb21tYSk7Ci0KLSAgICBib29s
IHBhcnNlQ3Jvc3NmYWRlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBi
b29sIHByZWZpeGVkKTsKLQotI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKLSAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUltYWdlUmVzb2x1dGlvbigpOwotI2VuZGlmCi0KLSAg
ICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gcGFyc2VJbWFnZVNldCgpOwotCi0gICAgYm9vbCBw
YXJzZUZpbHRlckltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
LQotICAgIGJvb2wgcGFyc2VGaWx0ZXIoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1Zh
bHVlTGlzdD4mKTsKLSAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHBhcnNlQnVpbHRp
bkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ2xp
cFBhdGgoKTsKLQotICAgIHN0YXRpYyBib29sIGlzQmxlbmRNb2RlKENTU1ZhbHVlSUQpOwotICAg
IHN0YXRpYyBib29sIGlzQ29tcG9zaXRlT3BlcmF0b3IoQ1NTVmFsdWVJRCk7Ci0KLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBwYXJzZVRyYW5zZm9ybSgpOwotICAgIFJlZlB0cjxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAg
IGJvb2wgcGFyc2VUcmFuc2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3Bl
cnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIENTU1Byb3BlcnR5SUQmIHBy
b3BJZDMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIGJvb2wgcGFyc2VQZXJzcGVjdGl2ZU9yaWdp
bihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVy
dHlJRCYgcHJvcElkMiwgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+Jik7Ci0KLSAgICBib29sIHBhcnNlVGV4dEVtcGhhc2lzU3R5bGUoYm9vbCBp
bXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihib29sIGltcG9y
dGFudCk7Ci0KLSAgICB2b2lkIGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCwgUmVmUHRyPENTU1ZhbHVlPiYmLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRl
eHREZWNvcmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAg
Ym9vbCBwYXJzZVRleHREZWNvcmF0aW9uU2tpcChib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZVRleHRVbmRlcmxpbmVQb3NpdGlvbihib29sIGltcG9ydGFudCk7Ci0KLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBwYXJzZVRleHRJbmRlbnQoKTsKLSAgICAKLSAgICBib29sIHBhcnNlSGFu
Z2luZ1B1bmN0dWF0aW9uKGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgcGFyc2VMaW5lQm94
Q29udGFpbihib29sIGltcG9ydGFudCk7Ci0gICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gcGFyc2VD
YWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5n
ZSk7Ci0KLSAgICBib29sIHBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7Ci0gICAg
Ym9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOwotCi0gICAgYm9v
bCBwYXJzZUZsb3dUaHJlYWQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJv
b2wgcGFyc2VSZWdpb25UaHJlYWQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotCi0g
ICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50LCBib29sIHVu
a25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpOwotICAgIGJvb2wgcGFyc2VGb250VmFyaWFu
dE51bWVyaWMoYm9vbCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBs
aWNpdCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGJvb2wgaW1wb3J0YW50
LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpOwotICAgIGJvb2wgcGFyc2VG
b250VmFyaWFudChib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlV2lsbENoYW5nZShi
b29sIGltcG9ydGFudCk7Ci0KLSAgICAvLyBGYXN0ZXIgdGhhbiBkb2luZyBhIG5ldy9kZWxldGUg
ZWFjaCB0aW1lIHNpbmNlIGl0IGtlZXBzIG9uZSB2ZWN0b3IuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gY3JlYXRlU2VsZWN0
b3JWZWN0b3IoKTsKLSAgICB2b2lkIHJlY3ljbGVTZWxlY3RvclZlY3RvcihzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+Pik7Ci0KLSAgICBS
ZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0
cmluZyYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmKTsKLSAgICBSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gY3JlYXRlS2V5ZnJhbWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmPFN0eWxlUnVs
ZUtleWZyYW1lcz4gY3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmLCBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+KTsKLQotICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4gUnVsZUxpc3Q7Ci0gICAgUmVmPFN0eWxlUnVsZU1l
ZGlhPiBjcmVhdGVNZWRpYVJ1bGUoUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYsIFJ1bGVMaXN0Kik7
Ci0gICAgUmVmPFN0eWxlUnVsZU1lZGlhPiBjcmVhdGVFbXB0eU1lZGlhUnVsZShSdWxlTGlzdCop
OwotICAgIFJlZlB0cjxTdHlsZVJ1bGU+IGNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHNlbGVjdG9ycyk7Ci0gICAgUmVmUHRyPFN0eWxl
UnVsZUZvbnRGYWNlPiBjcmVhdGVGb250RmFjZVJ1bGUoKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxl
UGFnZT4gY3JlYXRlUGFnZVJ1bGUoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBw
YWdlU2VsZWN0b3IpOwotICAgIFJlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZVJlZ2lvblJ1
bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiByZWdpb25TZWxl
Y3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKLSAgICB2b2lkIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NT
ZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSk7Ci0gICAgUmVmPFN0eWxlUnVsZVN1cHBvcnRzPiBjcmVh
dGVTdXBwb3J0c1J1bGUoYm9vbCBjb25kaXRpb25Jc1N1cHBvcnRlZCwgUnVsZUxpc3QqKTsKLSAg
ICB2b2lkIG1hcmtTdXBwb3J0c1J1bGVIZWFkZXJTdGFydCgpOwotICAgIHZvaWQgbWFya1N1cHBv
cnRzUnVsZUhlYWRlckVuZCgpOwotICAgIFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcG9wU3VwcG9y
dHNSdWxlRGF0YSgpOwotCi0gICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgp
OwotICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7Ci0KLSAgICB2b2lkIGFk
ZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5n
JiB1cmkpOwotICAgIFF1YWxpZmllZE5hbWUgZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7Ci0K
LSAgICB2b2lkIHJld3JpdGVTcGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlUHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1lLCBD
U1NQYXJzZXJTZWxlY3RvciYpOwotICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVu
dE5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3ImLCBi
b29sIGlzTmFtZXNwYWNlUGxhY2Vob2xkZXIgPSBmYWxzZSk7Ci0gICAgdm9pZCByZXdyaXRlU3Bl
Y2lmaWVyc1dpdGhOYW1lc3BhY2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYpOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcmV3cml0ZVNwZWNpZmllcnMoc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPik7Ci0KLSAgICB2b2lkIGludmFsaWRCbG9ja0hpdCgpOwotCi0gICAgdm9pZCB1cGRh
dGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKTsKLSAgICB2b2lkIHVwZGF0ZUxhc3RNZWRp
YUxpbmUoTWVkaWFRdWVyeVNldCYpOwotCi0gICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKTsKLQot
ICAgIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZVN0eWxlUHJvcGVydGllcygp
OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRQYXJzZWRQcm9wZXJ0aWVzQ291
bnQ7Ci0KLSAgICBDU1NQYXJzZXJDb250ZXh0IG1fY29udGV4dDsKLQotICAgIGJvb2wgbV9pbXBv
cnRhbnQgeyBmYWxzZSB9OwotICAgIENTU1Byb3BlcnR5SUQgbV9pZCB7IENTU1Byb3BlcnR5SW52
YWxpZCB9OwotICAgIEF0b21pY1N0cmluZyBtX2N1c3RvbVByb3BlcnR5TmFtZTsKLSAgICBTdHls
ZVNoZWV0Q29udGVudHMqIG1fc3R5bGVTaGVldCB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gbV9ydWxlOwotICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tleWZyYW1l
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxTb3VyY2VTaXplPj4gbV9zb3VyY2VTaXplTGlzdDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKLSAgICBib29s
IG1fc3VwcG9ydHNDb25kaXRpb24geyBmYWxzZSB9OwotCi0gICAgUGFyc2VkUHJvcGVydHlWZWN0
b3IgbV9wYXJzZWRQcm9wZXJ0aWVzOwotICAgIENTU1NlbGVjdG9yTGlzdCogbV9zZWxlY3Rvckxp
c3RGb3JQYXJzZVNlbGVjdG9yIHsgbnVsbHB0ciB9OwotCi0gICAgdW5zaWduZWQgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94IHsgaW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3Vu
dCB9OwotCi0gICAgaW50IG1faW5QYXJzZVNob3J0aGFuZCB7IDAgfTsKLSAgICBDU1NQcm9wZXJ0
eUlEIG1fY3VycmVudFNob3J0aGFuZCB7IENTU1Byb3BlcnR5SW52YWxpZCB9OwotICAgIGJvb2wg
bV9pbXBsaWNpdFNob3J0aGFuZCB7IGZhbHNlIH07Ci0KLSAgICBib29sIG1faGFkU3ludGFjdGlj
YWxseVZhbGlkQ1NTUnVsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2xvZ0Vycm9ycyB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2lnbm9yZUVycm9yc0luRGVjbGFyYXRpb24geyBmYWxzZSB9OwotCi0g
ICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZSB7IHN0YXJBdG9tIH07Ci0KLSAgICAv
LyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQotICAgIHNpemVfdCBtX3BhcnNlZFRleHRQcmVm
aXhMZW5ndGggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9uZXN0ZWRTZWxlY3RvckxldmVsIHsgMCB9
OwotICAgIFNvdXJjZVJhbmdlIG1fc2VsZWN0b3JSYW5nZTsKLSAgICBTb3VyY2VSYW5nZSBtX3By
b3BlcnR5UmFuZ2UgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
dWxlU291cmNlRGF0YUxpc3Q+IG1fY3VycmVudFJ1bGVEYXRhU3RhY2s7Ci0gICAgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRSdWxlRGF0YTsKLSAgICBSdWxlU291cmNlRGF0YUxp
c3QqIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgeyBudWxscHRyIH07Ci0KLSAgICB2b2lkIGZpeFVu
cGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEmKTsKLSAgICB2b2lkIG1hcmtS
dWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OlR5cGUpOwotICAgIHZvaWQgbWFya1J1
bGVIZWFkZXJFbmQoKTsKLQotICAgIHZvaWQgc3RhcnROZXN0ZWRTZWxlY3Rvckxpc3QoKSB7ICsr
bV9uZXN0ZWRTZWxlY3RvckxldmVsOyB9Ci0gICAgdm9pZCBlbmROZXN0ZWRTZWxlY3Rvckxpc3Qo
KSB7IC0tbV9uZXN0ZWRTZWxlY3RvckxldmVsOyB9Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JTdGFy
dCgpOwotICAgIHZvaWQgbWFya1NlbGVjdG9yRW5kKCk7Ci0KLSAgICB2b2lkIG1hcmtSdWxlQm9k
eVN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKLSAgICB2b2lkIG1hcmtQcm9w
ZXJ0eVN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZv
dW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpOwotICAgIHZvaWQgcHJvY2Vzc0FuZEFkZE5ld1J1
bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJl
ZShSZWY8Q1NTUnVsZVNvdXJjZURhdGE+JiYpOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gcG9wUnVsZURhdGEoKTsKLSAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9wcm9w
ZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKTsgfQotICAgIGJvb2wgaXNFeHRyYWN0aW5nU291cmNlRGF0YSgp
IGNvbnN0IHsgcmV0dXJuICEhbV9jdXJyZW50UnVsZURhdGFTdGFjazsgfQotICAgIHZvaWQgc3lu
dGF4RXJyb3IoY29uc3QgTG9jYXRpb24mLCBTeW50YXhFcnJvclR5cGUgPSBHZW5lcmFsU3ludGF4
RXJyb3IpOwotCi0gICAgaW5saW5lIGludCBsZXgodm9pZCogeXlsdmFsKSB7IHJldHVybiAodGhp
cy0+Km1fbGV4RnVuYykoeXlsdmFsKTsgfQotCi0gICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90
b2tlbjsgfQotCi0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLSAgICB2b2lkIG1h
cmtWaWV3cG9ydFJ1bGVCb2R5U3RhcnQoKSB7IG1faW5WaWV3cG9ydCA9IHRydWU7IH0KLSAgICB2
b2lkIG1hcmtWaWV3cG9ydFJ1bGVCb2R5RW5kKCkgeyBtX2luVmlld3BvcnQgPSBmYWxzZTsgfQot
ICAgIFJlZjxTdHlsZVJ1bGVWaWV3cG9ydD4gY3JlYXRlVmlld3BvcnRSdWxlKCk7Ci0jZW5kaWYK
LQotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KFZhbHVlV2l0aENhbGN1bGF0aW9uJik7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVh
dGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotCi0gICAgc3RhdGljIFVS
TCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwp
OwotCi0gICAgTG9jYXRpb24gY3VycmVudExvY2F0aW9uKCk7Ci0gICAgc3RhdGljIGJvb2wgaXND
YWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYpOwotCi0gICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0
eU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIHsgbV9jdXN0b21Qcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eU5hbWU7IH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYXJp
YWJsZURlcGVuZGVudFZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVwZW5k
ZW50VmFsdWUmLCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVz
LCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpczhC
aXRTb3VyY2UoKSB7IHJldHVybiBtX2lzOEJpdFNvdXJjZTsgfQotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFNvdXJjZUNoYXJhY3RlclR5cGU+Ci0gICAgaW50IHJlYWxMZXgodm9pZCogeXlsdmFs
KTsKLQotICAgIFVDaGFyKiYgY3VycmVudENoYXJhY3RlcjE2KCk7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnRDaGFyYWN0ZXIoKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
ICAgIGlubGluZSBDaGFyYWN0ZXJUeXBlKiB0b2tlblN0YXJ0KCk7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBzZXRUb2tlblN0YXJ0KENo
YXJhY3RlclR5cGUqKTsKLQotICAgIGlubGluZSB1bnNpZ25lZCB0b2tlblN0YXJ0T2Zmc2V0KCk7
Ci0gICAgaW5saW5lIFVDaGFyIHRva2VuU3RhcnRDaGFyKCk7Ci0KLSAgICBpbmxpbmUgdW5zaWdu
ZWQgY3VycmVudENoYXJhY3Rlck9mZnNldCgpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoKTsKLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIHVuc2lnbmVkIHBhcnNlRXNj
YXBlKENoYXJhY3RlclR5cGUqJik7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERlc3RDaGFyYWN0
ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIFVuaWNvZGVUb0NoYXJzKERlc3RDaGFyYWN0ZXJUeXBl
KiYsIHVuc2lnbmVkKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwg
dHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgcGFyc2VJZGVudGlm
aWVySW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBib29s
Jik7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUg
dm9pZCBwYXJzZUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSomLCBDU1NQYXJzZXJTdHJpbmcmLCBi
b29sJik7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
bWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgcGFyc2VTdHJpbmdJbnRlcm5h
bChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RDaGFyYWN0ZXJUeXBlKiYsIFVDaGFyKTsKLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNl
U3RyaW5nKENoYXJhY3RlclR5cGUqJiwgQ1NTUGFyc2VyU3RyaW5nJiByZXN1bHRTdHJpbmcsIFVD
aGFyKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGlu
ZSBib29sIGZpbmRVUkkoQ2hhcmFjdGVyVHlwZSomIHN0YXJ0LCBDaGFyYWN0ZXJUeXBlKiYgZW5k
LCBVQ2hhciYgcXVvdGUpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNyY0NoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIERlc3RDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBib29sIHBhcnNlVVJJ
SW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBVQ2hhciBx
dW90ZSk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxp
bmUgdm9pZCBwYXJzZVVSSShDU1NQYXJzZXJTdHJpbmcmKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOwot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGJvb2wgcGFyc2VOdGhD
aGlsZCgpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGJvb2wg
cGFyc2VOdGhDaGlsZEV4dHJhKCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci0gICAgaW5saW5lIGJvb2wgZGV0ZWN0RnVuY3Rpb25UeXBlVG9rZW4oaW50KTsKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBkZXRlY3RN
ZWRpYVF1ZXJ5VG9rZW4oaW50KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLSAgICBpbmxpbmUgdm9pZCBkZXRlY3ROdW1iZXJUb2tlbihDaGFyYWN0ZXJUeXBlKiwgaW50
KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9p
ZCBkZXRlY3REYXNoVG9rZW4oaW50KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLSAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7Ci0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIHZvaWQgZGV0ZWN0U3Vw
cG9ydHNUb2tlbihpbnQpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci0gICAgaW5saW5lIHZvaWQgc2V0UnVsZUhlYWRlckVuZChjb25zdCBDaGFyYWN0ZXJUeXBlKik7
Ci0KLSAgICB2b2lkIHNldFN0eWxlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0
KSB7IG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7IH0KLQotICAgIGlubGluZSBib29sIGluU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1N0cmljdE1vZGUg
fHwgbV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsgfQotICAgIGlubGluZSBib29s
IGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1F1aXJr
c01vZGU7IH0KLSAgICAKLSAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0OwotCi0gICAgdm9pZCByZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBs
ZW4pOwotCi0gICAgdGVtcGxhdGU8dW5zaWduZWQgcHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBzdWZm
aXhMZW5ndGg+Ci0gICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyICgmcHJlZml4KVtwcmVm
aXhMZW5ndGhdLCBTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgY2hhciAoJnN1ZmZpeClbc3VmZml4
TGVuZ3RoXSkKLSAgICB7Ci0gICAgICAgIHNldHVwUGFyc2VyKHByZWZpeCwgcHJlZml4TGVuZ3Ro
IC0gMSwgc3RyaW5nLCBzdWZmaXgsIHN1ZmZpeExlbmd0aCAtIDEpOwotICAgIH0KLSAgICB2b2lk
IHNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBT
dHJpbmdWaWV3LCBjb25zdCBjaGFyKiBzdWZmaXgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCk7Ci0g
ICAgYm9vbCBpblNob3J0aGFuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYXJzZVNob3J0aGFuZDsg
fQotCi0gICAgYm9vbCBpc1ZhbGlkU2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwotCi0gICAg
Ym9vbCBpc0dlbmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKLSAgICBi
b29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1Zh
bHVlPiYpOwotCi0gICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxl
U2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwotICAgIFJlZjxJbW11dGFibGVTdHls
ZVByb3BlcnRpZXM+IHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiwgU3R5bGVTaGVldENv
bnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0KLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZUlu
c2V0PiBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4mJiwg
Q1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0KLSAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKLSAg
ICAgICAgTm9uZSwKLSAgICAgICAgQXV0bywKLSAgICAgICAgTGVuZ3RoLAotICAgICAgICBQYWdl
U2l6ZSwKLSAgICAgICAgT3JpZW50YXRpb24sCi0gICAgfTsKLQotICAgIGJvb2wgcGFyc2VQYWdl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVNp
emUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBTaXplUGFyYW1l
dGVyVHlwZSBwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBwYXJzZWRWYWx1ZXMsIENT
U1BhcnNlclZhbHVlJiwgU2l6ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSk7Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgcGFyc2VOb25FbGVtZW50U25hcFBvaW50
cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VT
Y3JvbGxTbmFwRGVzdGluYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhS
ZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZVgsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWSk7
Ci0jZW5kaWYKLQotICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QmKTsK
LSAgICBib29sIHBhcnNlRm9udEZhY2VTcmNMb2NhbChDU1NWYWx1ZUxpc3QmKTsKLQotICAgIGJv
b2wgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmKTsKLQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlP
VVQpCi0gICAgYm9vbCBwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSk7Ci0jZW5kaWYKLQotICAgIGVudW0gUGFyc2luZ01vZGUg
ewotICAgICAgICBOb3JtYWxNb2RlLAotICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKLSAgICAgICAg
U3VwcG9ydHNNb2RlLAotICAgICAgICBOdGhDaGlsZE1vZGUKLSAgICB9OwotCi0gICAgUGFyc2lu
Z01vZGUgbV9wYXJzaW5nTW9kZSB7IE5vcm1hbE1vZGUgfTsKLSAgICBib29sIG1faXM4Qml0U291
cmNlIHsgZmFsc2UgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TENoYXJbXT4gbV9kYXRhU3RhcnQ4
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxVQ2hhcltdPiBtX2RhdGFTdGFydDE2OwotICAgIExDaGFy
KiBtX2N1cnJlbnRDaGFyYWN0ZXI4IHsgbnVsbHB0ciB9OwotICAgIFVDaGFyKiBtX2N1cnJlbnRD
aGFyYWN0ZXIxNiB7IG51bGxwdHIgfTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIExDaGFyKiBwdHI4
OwotICAgICAgICBVQ2hhciogcHRyMTY7Ci0gICAgfSBtX3Rva2VuU3RhcnQgeyBudWxscHRyIH07
Ci0gICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07Ci0gICAgaW50IG1fdG9rZW4geyAwIH07Ci0g
ICAgaW50IG1fbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgbV90b2tlblN0YXJ0TGluZU51bWJl
ciB7IDAgfTsKLSAgICBpbnQgbV90b2tlblN0YXJ0Q29sdW1uTnVtYmVyIHsgMCB9OwotICAgIGlu
dCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IG1fY29sdW1uT2Zmc2V0
Rm9yTGluZSB7IDAgfTsKLQotICAgIGludCBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyIHsgMCB9Owot
ICAgIGludCBtX3NoZWV0U3RhcnRDb2x1bW5OdW1iZXIgeyAwIH07Ci0KLSAgICBib29sIG1fYWxs
b3dJbXBvcnRSdWxlcyB7IHRydWUgfTsKLSAgICBib29sIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJh
dGlvbnMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAg
IGJvb2wgcGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVZpZXdwb3J0U2hvcnRoYW5kKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBDU1NQcm9wZXJ0eUlEIGZpcnN0LCBDU1NQcm9wZXJ0eUlEIHNlY29uZCwgYm9vbCBp
bXBvcnRhbnQpOwotCi0gICAgYm9vbCBpblZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pblZp
ZXdwb3J0OyB9Ci0gICAgYm9vbCBtX2luVmlld3BvcnQgeyBmYWxzZSB9OwotI2VuZGlmCi0KLSAg
ICBib29sIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBjb25zdDsK
LQotICAgIGludCAoQ1NTUGFyc2VyOjoqbV9sZXhGdW5jKSh2b2lkKik7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBtX3Jl
Y3ljbGVkU2VsZWN0b3JWZWN0b3I7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJjZURh
dGFMaXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFjazsKLQotICAgIC8vIGRlZmluZXMgdW5pdHMg
YWxsb3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdAotICAgIGVu
dW0gVW5pdHMgewotICAgICAgICBGVW5rbm93biA9IDB4MDAwMCwKLSAgICAgICAgRkludGVnZXIg
PSAweDAwMDEsCi0gICAgICAgIEZOdW1iZXIgPSAweDAwMDIsIC8vIFJlYWwgTnVtYmVycwotICAg
ICAgICBGUGVyY2VudCA9IDB4MDAwNCwKLSAgICAgICAgRkxlbmd0aCA9IDB4MDAwOCwKLSAgICAg
ICAgRkFuZ2xlID0gMHgwMDEwLAotICAgICAgICBGVGltZSA9IDB4MDAyMCwKLSAgICAgICAgRkZy
ZXF1ZW5jeSA9IDB4MDA0MCwKLSAgICAgICAgRlBvc2l0aXZlSW50ZWdlciA9IDB4MDA4MCwKLSAg
ICAgICAgRlJlbGF0aXZlID0gMHgwMTAwLAotI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElP
TikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgICAgIEZSZXNvbHV0aW9u
ID0gMHgwMjAwLAotI2VuZGlmCi0gICAgICAgIEZOb25OZWcgPSAweDA0MDAKLSAgICB9OwotCi0g
ICAgZnJpZW5kIGlubGluZSBVbml0cyBvcGVyYXRvcnwoVW5pdHMgYSwgVW5pdHMgYikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVbml0cz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGEpIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGIpKTsKLSAgICB9Ci0KLSAgICBlbnVtIFJlbGVh
c2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24gewotICAgICAgICBSZWxlYXNlUGFyc2VkQ2FsY1Zh
bHVlLAotICAgICAgICBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUKLSAgICB9OwotCi0gICAg
Ym9vbCBpc0xvZ2dpbmdFcnJvcnMoKTsKLSAgICB2b2lkIGxvZ0Vycm9yKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotCi0gICAgYm9vbCB2
YWxpZGF0ZUNhbGN1bGF0aW9uVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYsIFVuaXRzKTsKLQot
ICAgIGJvb2wgc2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmLCBVbml0
cywgQ1NTUGFyc2VyTW9kZSk7Ci0KLSAgICBpbmxpbmUgYm9vbCB2YWxpZGF0ZVVuaXQoVmFsdWVX
aXRoQ2FsY3VsYXRpb24mIHZhbHVlLCBVbml0cyB1bml0RmxhZ3MpIHsgcmV0dXJuIHZhbGlkYXRl
VW5pdCh2YWx1ZSwgdW5pdEZsYWdzLCBtX2NvbnRleHQubW9kZSk7IH0KLSAgICBib29sIHZhbGlk
YXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKLQot
ICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mKTsKLSAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24m
KTsKLSAgICBkb3VibGUgcGFyc2VkRG91YmxlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7Ci0gICAg
Ci0gICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbkluZm87Ci0gICAgZnJpZW5kIGNs
YXNzIEZpbHRlck9wZXJhdGlvbkluZm87Ci19OwotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5
SUQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7Ci1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQo
Y29uc3QgU3RyaW5nJik7Ci1DU1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENTU1Bh
cnNlclN0cmluZyYpOwotI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgY3NzUHJvcGVydHlOYW1lSU9T
QWxpYXNpbmcoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVydHlO
YW1lQWxpYXMsIHVuc2lnbmVkJiBuZXdMZW5ndGgpOwotI2VuZGlmCi0KLWNsYXNzIFNob3J0aGFu
ZFNjb3BlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTaG9y
dGhhbmRTY29wZShDU1NQYXJzZXIqIHBhcnNlciwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpIDogbV9w
YXJzZXIocGFyc2VyKQotICAgIHsKLSAgICAgICAgaWYgKCEobV9wYXJzZXItPm1faW5QYXJzZVNo
b3J0aGFuZCsrKSkKLSAgICAgICAgICAgIG1fcGFyc2VyLT5tX2N1cnJlbnRTaG9ydGhhbmQgPSBw
cm9wSWQ7Ci0gICAgfQotICAgIH5TaG9ydGhhbmRTY29wZSgpCi0gICAgewotICAgICAgICBpZiAo
ISgtLW1fcGFyc2VyLT5tX2luUGFyc2VTaG9ydGhhbmQpKQotICAgICAgICAgICAgbV9wYXJzZXIt
Pm1fY3VycmVudFNob3J0aGFuZCA9IENTU1Byb3BlcnR5SW52YWxpZDsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgQ1NTUGFyc2VyKiBtX3BhcnNlcjsKLX07Ci0KLXN0cnVjdCBDU1NQYXJzZXI6Okxv
Y2F0aW9uIHsKLSAgICBpbnQgbGluZU51bWJlcjsKLSAgICBpbnQgY29sdW1uTnVtYmVyOwotICAg
IENTU1BhcnNlclN0cmluZyB0b2tlbjsKLX07Ci0KLVN0cmluZyBxdW90ZUNTU1N0cmluZyhjb25z
dCBTdHJpbmcmKTsKLVN0cmluZyBxdW90ZUNTU1N0cmluZ0lmTmVlZGVkKGNvbnN0IFN0cmluZyYp
OwotU3RyaW5nIHF1b3RlQ1NTVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJik7Ci0KLWJvb2wgaXNW
YWxpZE50aFRva2VuKGNvbnN0IENTU1BhcnNlclN0cmluZyYpOwotCi10ZW1wbGF0ZSA8PgotaW5s
aW5lIHZvaWQgQ1NTUGFyc2VyOjpzZXRUb2tlblN0YXJ0PExDaGFyPihMQ2hhciogdG9rZW5TdGFy
dCkKLXsKLSAgICBtX3Rva2VuU3RhcnQucHRyOCA9IHRva2VuU3RhcnQ7Ci19Ci0KLXRlbXBsYXRl
IDw+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFRva2VuU3RhcnQ8VUNoYXI+KFVDaGFyKiB0
b2tlblN0YXJ0KQotewotICAgIG1fdG9rZW5TdGFydC5wdHIxNiA9IHRva2VuU3RhcnQ7Ci19Ci0K
LWlubGluZSB1bnNpZ25lZCBDU1NQYXJzZXI6OnRva2VuU3RhcnRPZmZzZXQoKQotewotICAgIGlm
IChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIG1fdG9rZW5TdGFydC5wdHI4IC0gbV9k
YXRhU3RhcnQ4LmdldCgpOwotICAgIHJldHVybiBtX3Rva2VuU3RhcnQucHRyMTYgLSBtX2RhdGFT
dGFydDE2LmdldCgpOwotfQotCi11bnNpZ25lZCBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXJP
ZmZzZXQoKQotewotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudENoYXJhY3RlcjggLSBtX2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgcmV0dXJuIG1fY3VycmVu
dENoYXJhY3RlcjE2IC0gbV9kYXRhU3RhcnQxNi5nZXQoKTsKLX0KLQotaW5saW5lIFVDaGFyIENT
U1BhcnNlcjo6dG9rZW5TdGFydENoYXIoKQotewotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAg
ICAgICAgcmV0dXJuICptX3Rva2VuU3RhcnQucHRyODsKLSAgICByZXR1cm4gKm1fdG9rZW5TdGFy
dC5wdHIxNjsKLX0KLQotaW5saW5lIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eU5hbWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS5sZW5ndGgoKSA+
IDIgJiYgcHJvcGVydHlOYW1lLmNoYXJhY3RlckF0KDApID09ICctJyAmJiBwcm9wZXJ0eU5hbWUu
Y2hhcmFjdGVyQXQoMSkgPT0gJy0nOwotfQotCi1pbmxpbmUgaW50IGNzc3l5bGV4KHZvaWQqIHl5
bHZhbCwgQ1NTUGFyc2VyKiBwYXJzZXIpCi17Ci0gICAgcmV0dXJuIHBhcnNlci0+bGV4KHl5bHZh
bCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXJNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlck1vZGUuaAkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlck1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDU1NQYXJzZXJNb2RlX2gKLSNkZWZpbmUgQ1NTUGFy
c2VyTW9kZV9oCi0KLSNpbmNsdWRlICJVUkwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBEb2N1bWVudDsKLQotZW51bSBDU1NQYXJzZXJNb2RlIHsKLSAgICBDU1NRdWlya3NNb2Rl
LAotICAgIENTU1N0cmljdE1vZGUsCi0gICAgLy8gU1ZHIHNob3VsZCBhbHdheXMgYmUgaW4gc3Ry
aWN0IG1vZGUuIEZvciBTVkcgYXR0cmlidXRlcywgdGhlIHJ1bGVzIGRpZmZlciB0byBzdHJpY3Qg
c29tZXRpbWVzLgotICAgIFNWR0F0dHJpYnV0ZU1vZGUKLX07Ci0KLWlubGluZSBDU1NQYXJzZXJN
b2RlIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShib29sIGluU3RyaWN0TW9kZSkKLXsKLSAgICByZXR1
cm4gaW5TdHJpY3RNb2RlID8gQ1NTU3RyaWN0TW9kZSA6IENTU1F1aXJrc01vZGU7Ci19Ci0KLWlu
bGluZSBib29sIGlzU3RyaWN0UGFyc2VyTW9kZShDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
Ci17Ci0gICAgcmV0dXJuIGNzc1BhcnNlck1vZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBjc3NQYXJz
ZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGU7Ci19Ci0KLXN0cnVjdCBDU1NQYXJzZXJDb250ZXh0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJD
b250ZXh0KENTU1BhcnNlck1vZGUsIGNvbnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNl
VVJMID0gVVJMKCksIGNvbnN0IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOwotCi0g
ICAgVVJMIGJhc2VVUkw7Ci0gICAgU3RyaW5nIGNoYXJzZXQ7Ci0gICAgQ1NTUGFyc2VyTW9kZSBt
b2RlIHsgQ1NTU3RyaWN0TW9kZSB9OwotICAgIGJvb2wgaXNIVE1MRG9jdW1lbnQgeyBmYWxzZSB9
OwotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgYm9vbCBjc3NHcmlkTGF5b3V0RW5h
YmxlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykK
LSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBi
b29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuZm9yY2Vz
Q1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKLSAgICBib29sIHVzZUxlZ2FjeUJh
Y2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgeyBmYWxzZSB9OwotICAgIGJvb2wgc3ByaW5n
VGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZmFsc2UgfTsKLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotV0VCQ09SRV9FWFBPUlQgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwotCi19OwotCi0j
ZW5kaWYgLy8gQ1NTUGFyc2VyTW9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
VmFsdWVzLmNwcAkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlclZhbHVlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMu
aCIKLQotI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgotI2luY2x1ZGUg
IkNTU1ZhcmlhYmxlVmFsdWUuaCIKLSNpbmNsdWRlICJTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi12b2lkIGRl
c3Ryb3koY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS51bml0
ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgZGVsZXRlIHZhbHVlLmZ1bmN0
aW9uOwotICAgIGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlz
dCkKLSAgICAgICAgZGVsZXRlIHZhbHVlLnZhbHVlTGlzdDsKLSAgICBlbHNlIGlmICh2YWx1ZS51
bml0ID09IENTU1BhcnNlclZhbHVlOjpWYXJpYWJsZSkKLSAgICAgICAgZGVsZXRlIHZhbHVlLnZh
cmlhYmxlOwotfQotCi1DU1NQYXJzZXJWYWx1ZUxpc3Q6On5DU1NQYXJzZXJWYWx1ZUxpc3QoKQot
ewotICAgIGZvciAoYXV0byYgdmFsdWUgOiBtX3ZhbHVlcykKLSAgICAgICAgZGVzdHJveSh2YWx1
ZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0OjphZGRWYWx1ZShjb25zdCBDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLX0KLQotdm9p
ZCBDU1NQYXJzZXJWYWx1ZUxpc3Q6Omluc2VydFZhbHVlQXQodW5zaWduZWQgaSwgY29uc3QgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIG1fdmFsdWVzLmluc2VydChpLCB2YWx1ZSk7Ci19
Ci0KLXZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0OjpleHRlbmQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBv
dGhlcikKLXsKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogb3RoZXIubV92YWx1ZXMpIHsKLSAgICAg
ICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgdmFsdWUudW5pdCA9IDA7IC8vIFdl
IG1vdmVkIHRoZSBDU1NQYXJzZXJWYWx1ZSBmcm9tIHRoZSBvdGhlciBsaXN0OyB0aGlzIGFjdHMg
bGlrZSBzdGQ6Om1vdmUuCi0gICAgfQotfQotCi1ib29sIENTU1BhcnNlclZhbHVlTGlzdDo6Y29u
dGFpbnNWYXJpYWJsZXMoKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplKCk7IGkrKykgewotICAgICAgICBhdXRvKiBwYXJzZXJWYWx1ZSA9ICZtX3ZhbHVlc1tpXTsK
LSAgICAgICAgaWYgKHBhcnNlclZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpWYXJpYWJs
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAocGFyc2VyVmFsdWUtPnVu
aXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIHBhcnNlclZhbHVlLT5mdW5jdGlvbi0+
YXJncwotICAgICAgICAgICAgJiYgcGFyc2VyVmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5jb250YWlu
c1ZhcmlhYmxlcygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChwYXJz
ZXJWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0ICYmIHBhcnNlclZhbHVl
LT52YWx1ZUxpc3QtPmNvbnRhaW5zVmFyaWFibGVzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlclZhbHVlOjpjcmVhdGVDU1NWYWx1ZSgpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKLSAgICBpZiAoaWQpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihpZCk7Ci0gICAgCi0gICAgaWYgKHVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlUGFyc2VyT3BlcmF0b3IoaVZhbHVlKTsKLSAgICAgICAgcHJpbWl0aXZl
VmFsdWUtPnNldFByaW1pdGl2ZVR5cGUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfT1BF
UkFUT1IpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgfQot
ICAgIGlmICh1bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJu
IENTU0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShmdW5jdGlvbik7Ci0gICAgaWYgKHVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OlZhcmlhYmxlKQotICAgICAgICByZXR1cm4gQ1NTVmFyaWFibGVWYWx1ZTo6
Y3JlYXRlKHZhcmlhYmxlKTsKLSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVM
aXN0KQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVM
aXN0KCp2YWx1ZUxpc3QpOwotCi0gICAgaWYgKHVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1T
KQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2lu
UXVpcmsoZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHByaW1pdGl2ZVVuaXQgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih1bml0KTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVVuaXQp
IHsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQ6Ci0gICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BST1BFUlRZX0lEOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19WQUxVRV9JRDoKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoc3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JREVOVElGSUVSKTsKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgotICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmVmFsdWUsIGlzSW50ID8gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQVJTRVJfSU5URUdFUiA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkk6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNF
Ul9IRVhDT0xPUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OOgot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTklDT0RFX1JBTkdFOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfV0hJVEVTUEFDRToKLSAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RyaW5nLCBwcmltaXRpdmVVbml0KTsKLSAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFM6
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DTToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Ci0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QVDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0gICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVlc6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZIOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19WTUFYOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSOgotICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmVmFsdWUsIHByaW1pdGl2ZVVuaXQp
OwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOgotICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DT1VOVEVSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRUNUOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRFBQWDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QQUlSOgotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSNlbmRpZgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfT1BFUkFUT1I6Ci0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QQVJTRVJfSURFTlRJRklFUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfQ09VTlRFUl9OQU1FOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
SEFQRToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRk9OVF9GQU1JTFk6Ci0gICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1FVQUQ6Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTEVOR1RIX1JFUEVBVDoKLSNl
bmRpZgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DQUxDOgotICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJT
ZWxlY3Rvcjo6cGFyc2VQYWdlUHNldWRvU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBw
c2V1ZG9UeXBlU3RyaW5nKQotewotICAgIENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NUeXBl
IHBzZXVkb1R5cGU7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBzZXVk
b1R5cGVTdHJpbmcsICJmaXJzdCIpKQotICAgICAgICBwc2V1ZG9UeXBlID0gQ1NTU2VsZWN0b3I6
OlBhZ2VQc2V1ZG9DbGFzc0ZpcnN0OwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHBzZXVkb1R5cGVTdHJpbmcsICJsZWZ0IikpCi0gICAgICAgIHBzZXVkb1R5cGUg
PSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVkb0NsYXNzTGVmdDsKLSAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwc2V1ZG9UeXBlU3RyaW5nLCAicmlnaHQiKSkKLSAgICAg
ICAgcHNldWRvVHlwZSA9IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NSaWdodDsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0
b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3MpOwotICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5zZXRQYWdlUHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKLSAgICByZXR1cm4g
c2VsZWN0b3IucmVsZWFzZSgpOwotfQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2Vs
ZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRv
VHlwZVN0cmluZykKLXsKLSAgICBwc2V1ZG9UeXBlU3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpOwotICAgIEF0b21pY1N0cmluZyBuYW1lID0gcHNldWRvVHlwZVN0cmluZzsK
LQotICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9UeXBlID0gQ1NTU2Vs
ZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFR5cGUobmFtZSk7Ci0gICAgaWYgKHBzZXVkb1R5cGUg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNl
bGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0Vs
ZW1lbnRUeXBlKHBzZXVkb1R5cGUpOwotICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQpIHsKLSAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShuYW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgIi13
ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgaXMgdGhlIG9ubHkgTGVnYWN5UHJlZml4IHBzZXVkbyB0
eXBlLiIpOwotICAgICAgICBpZiAobmFtZSA9PSAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciIp
Ci0gICAgICAgICAgICBuYW1lID0gQXRvbWljU3RyaW5nKCJwbGFjZWhvbGRlciIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIH0KLSAgICBzZWxlY3Rvci0+bV9zZWxl
Y3Rvci0+c2V0VmFsdWUobmFtZSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLX0K
LQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJT
ZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQ
YXJzZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4+KiBwYXJzZWRTZWxlY3RvclZlY3RvcikKLXsKLSAgICBBU1NFUlRf
VU5VU0VEKGZ1bmN0aW9uSWRlbnRpZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0g
ImN1ZSgiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclNlbGVjdG9yPj4+IHNlbGVjdG9yVmVjdG9yKHBhcnNlZFNlbGVjdG9yVmVjdG9yKTsK
LQotICAgIGlmICghc2VsZWN0b3JWZWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7
Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9F
bGVtZW50KTsKLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUo
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpOwotICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVj
dG9yVmVjdG9yKCpzZWxlY3RvclZlY3Rvcik7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2Uo
KTsKLX0KLSNlbmRpZgotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBh
cnNlUHNldWRvRWxlbWVudFNsb3R0ZWRGdW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0
cmluZyYgZnVuY3Rpb25JZGVudGlmaWVyLCBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VkU2VsZWN0
b3IpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbklkZW50aWZpZXIsIFN0cmluZyhmdW5j
dGlvbklkZW50aWZpZXIpID09ICJzbG90dGVkKCIpOwotCi0gICAgaWYgKCFwYXJzZWRTZWxlY3Rv
cikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+IG93bmVkUGFyc2VkU2VsZWN0b3IocGFyc2VkU2VsZWN0b3IpOwotCi0gICAg
Zm9yIChhdXRvKiBjb21wb25lbnQgPSBwYXJzZWRTZWxlY3RvcjsgY29tcG9uZW50OyBjb21wb25l
bnQgPSBjb21wb25lbnQtPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoY29tcG9uZW50LT5t
YXRjaGVzUHNldWRvRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgYXV0byBzZWxlY3RvclZlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PigpOwotICAgIHNlbGVjdG9yVmVjdG9y
LT5hcHBlbmQoV1RGTW92ZShvd25lZFBhcnNlZFNlbGVjdG9yKSk7Ci0KLSAgICBhdXRvIHNlbGVj
dG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rv
ci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAg
IHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9FbGVtZW50VHlwZShDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudFNsb3R0ZWQpOwotICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9y
KCpzZWxlY3RvclZlY3Rvcik7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLX0KLQot
Q1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0NsYXNzSG9z
dEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZp
ZXIsIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZWRTZWxlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKGZ1bmN0aW9uSWRlbnRpZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gImhv
c3QoIik7Ci0KLSAgICBpZiAoIXBhcnNlZFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gb3duZWRQYXJzZWRT
ZWxlY3RvcihwYXJzZWRTZWxlY3Rvcik7Ci0KLSAgICBmb3IgKGF1dG8qIGNvbXBvbmVudCA9IHBh
cnNlZFNlbGVjdG9yOyBjb21wb25lbnQ7IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlzdG9y
eSgpKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnQtPm1hdGNoZXNQc2V1ZG9FbGVtZW50KCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIHNlbGVjdG9yVmVj
dG9yID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4+KCk7Ci0gICAgc2VsZWN0b3JWZWN0b3ItPmFwcGVuZChXVEZNb3ZlKG93bmVkUGFy
c2VkU2VsZWN0b3IpKTsKLQotICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENT
U1BhcnNlclNlbGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQ
c2V1ZG9DbGFzc1R5cGUoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9zdCk7Ci0gICAgc2VsZWN0
b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9yVmVjdG9yKTsKLSAgICByZXR1cm4gc2Vs
ZWN0b3IucmVsZWFzZSgpOwotfQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0
b3I6OnBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFNlbGVjdG9yKENTU1Bh
cnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZykKLXsKLSAgICBpZiAocHNldWRvVHlwZVN0cmlu
Zy5sZW5ndGgoKSAmJiBwc2V1ZG9UeXBlU3RyaW5nW3BzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkg
LSAxXSA9PSAnKCcpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUHNldWRvQ2xhc3NP
ckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50IHBzZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcocHNldWRvVHlwZVN0cmluZyk7Ci0gICAgaWYg
KHBzZXVkb1R5cGUucHNldWRvQ2xhc3MgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93
bikgewotICAgICAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJT
ZWxlY3Rvcj4oKTsKLSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzcyk7Ci0gICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQ
c2V1ZG9DbGFzc1R5cGUocHNldWRvVHlwZS5wc2V1ZG9DbGFzcyk7Ci0gICAgICAgIHJldHVybiBz
ZWxlY3Rvci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChwc2V1ZG9UeXBlLmNvbXBhdGliaWxp
dHlQc2V1ZG9FbGVtZW50ICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikgewot
ICAgICAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rv
cj4oKTsKLSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50KTsKLSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVk
b0VsZW1lbnRUeXBlKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQpOwotICAg
ICAgICBBdG9taWNTdHJpbmcgbmFtZSA9IHBzZXVkb1R5cGVTdHJpbmc7Ci0gICAgICAgIHNlbGVj
dG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9y
LnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUNTU1BhcnNlclNl
bGVjdG9yOjpDU1NQYXJzZXJTZWxlY3RvcigpCi0gICAgOiBtX3NlbGVjdG9yKHN0ZDo6bWFrZV91
bmlxdWU8Q1NTU2VsZWN0b3I+KCkpCi17Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJz
ZXJTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdRTmFtZSkKLSAgICA6IG1fc2VsZWN0
b3Ioc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4odGFnUU5hbWUpKQotewotfQotCi1DU1NQ
YXJzZXJTZWxlY3Rvcjo6fkNTU1BhcnNlclNlbGVjdG9yKCkKLXsKLSAgICBpZiAoIW1fdGFnSGlz
dG9yeSkKLSAgICAgICAgcmV0dXJuOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+LCAxNj4gdG9EZWxldGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiBzZWxlY3RvciA9IFdURk1vdmUobV90YWdIaXN0b3J5KTsKLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5leHQg
PSBXVEZNb3ZlKHNlbGVjdG9yLT5tX3RhZ0hpc3RvcnkpOwotICAgICAgICB0b0RlbGV0ZS5hcHBl
bmQoV1RGTW92ZShzZWxlY3RvcikpOwotICAgICAgICBpZiAoIW5leHQpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgc2VsZWN0b3IgPSBXVEZNb3ZlKG5leHQpOwotICAgIH0KLX0KLQotdm9p
ZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4mIHNlbGVjdG9yVmVjdG9yKQotewotICAgIGF1dG8g
c2VsZWN0b3JMaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvckxpc3Q+KCk7Ci0gICAg
c2VsZWN0b3JMaXN0LT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICBt
X3NlbGVjdG9yLT5zZXRTZWxlY3Rvckxpc3QoV1RGTW92ZShzZWxlY3Rvckxpc3QpKTsKLX0KLQot
dm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0TGFuZ0FyZ3VtZW50TGlzdChjb25zdCBWZWN0b3I8
Q1NTUGFyc2VyU3RyaW5nPiYgc3RyaW5nVmVjdG9yKQotewotICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIXN0cmluZ1ZlY3Rvci5pc0VtcHR5KCksICJObyBDU1MgU2VsZWN0b3IgdGFrZXMgYW4gZW1w
dHkgYXJndW1lbnQgbGlzdC4iKTsKLSAgICBhdXRvIGFyZ3VtZW50TGlzdCA9IHN0ZDo6bWFrZV91
bmlxdWU8VmVjdG9yPEF0b21pY1N0cmluZz4+KCk7Ci0gICAgYXJndW1lbnRMaXN0LT5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoY29uc3QgQXRv
bWljU3RyaW5nJiBsYW5ndWFnZUFyZ3VtZW50IDogc3RyaW5nVmVjdG9yKQotICAgICAgICBhcmd1
bWVudExpc3QtPmFwcGVuZChsYW5ndWFnZUFyZ3VtZW50KTsKLSAgICBtX3NlbGVjdG9yLT5zZXRM
YW5nQXJndW1lbnRMaXN0KFdURk1vdmUoYXJndW1lbnRMaXN0KSk7Ci19Ci0KLXZvaWQgQ1NTUGFy
c2VyU2VsZWN0b3I6OnNldFBzZXVkb0NsYXNzVmFsdWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBw
c2V1ZG9DbGFzc1N0cmluZykKLXsKLSAgICBBU1NFUlQobV9zZWxlY3Rvci0+bWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwotCi0gICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxp
dHlQc2V1ZG9FbGVtZW50IHBzZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJp
bGl0eUVsZW1lbnRTdHJpbmcocHNldWRvQ2xhc3NTdHJpbmcpOwotICAgIG1fc2VsZWN0b3ItPnNl
dFBzZXVkb0NsYXNzVHlwZShwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzKTsKLX0KLQotc3RhdGljIGJv
b2wgc2VsZWN0b3JMaXN0TWF0Y2hlc1BzZXVkb0VsZW1lbnQoY29uc3QgQ1NTU2VsZWN0b3JMaXN0
KiBzZWxlY3Rvckxpc3QpCi17Ci0gICAgaWYgKCFzZWxlY3Rvckxpc3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2Vs
ZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7Ci0gICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yID0gc3ViU2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9y
LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hlc1BzZXVk
b0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlm
IChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHN1YnNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvckxpc3RNYXRjaGVzUHNl
dWRvRWxlbWVudChzdWJzZWxlY3Rvckxpc3QpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyU2VsZWN0b3I6Om1hdGNoZXNQc2V1ZG9FbGVtZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zZWxlY3Rvci0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSB8fCBz
ZWxlY3Rvckxpc3RNYXRjaGVzUHNldWRvRWxlbWVudChtX3NlbGVjdG9yLT5zZWxlY3Rvckxpc3Qo
KSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6Omluc2VydFRhZ0hpc3RvcnkoQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uIGJlZm9yZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvciwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGFmdGVyKQotewotICAgIGlmIChtX3Rh
Z0hpc3RvcnkpCi0gICAgICAgIHNlbGVjdG9yLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUobV90YWdI
aXN0b3J5KSk7Ci0gICAgc2V0UmVsYXRpb24oYmVmb3JlKTsKLSAgICBzZWxlY3Rvci0+c2V0UmVs
YXRpb24oYWZ0ZXIpOwotICAgIG1fdGFnSGlzdG9yeSA9IFdURk1vdmUoc2VsZWN0b3IpOwotfQot
Ci12b2lkIENTU1BhcnNlclNlbGVjdG9yOjphcHBlbmRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpS
ZWxhdGlvbiByZWxhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxl
Y3RvcikKLXsKLSAgICBDU1NQYXJzZXJTZWxlY3RvciogZW5kID0gdGhpczsKLSAgICB3aGlsZSAo
ZW5kLT50YWdIaXN0b3J5KCkpCi0gICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOwotCi0g
ICAgZW5kLT5zZXRSZWxhdGlvbihyZWxhdGlvbik7Ci0gICAgZW5kLT5zZXRUYWdIaXN0b3J5KFdU
Rk1vdmUoc2VsZWN0b3IpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YXBwZW5kVGFn
SGlzdG9yeShDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3IgcmVsYXRpb24sIHN0ZDo6dW5pcXVl
X3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IpCi17Ci0gICAgQ1NTUGFyc2VyU2VsZWN0
b3IqIGVuZCA9IHRoaXM7Ci0gICAgd2hpbGUgKGVuZC0+dGFnSGlzdG9yeSgpKQotICAgICAgICBl
bmQgPSBlbmQtPnRhZ0hpc3RvcnkoKTsKLQotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiBzZWxl
Y3RvclJlbGF0aW9uOwotICAgIHN3aXRjaCAocmVsYXRpb24pIHsKLSAgICBjYXNlIENTU1BhcnNl
clNlbGVjdG9yQ29tYmluYXRvcjo6Q2hpbGQ6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBD
U1NTZWxlY3Rvcjo6Q2hpbGQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUGFyc2VyU2Vs
ZWN0b3JDb21iaW5hdG9yOjpEZXNjZW5kYW50U3BhY2U6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRp
b24gPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxF
KENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5h
dG9yOjpEZXNjZW5kYW50RG91YmxlQ2hpbGQ6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBD
U1NTZWxlY3Rvcjo6RGVzY2VuZGFudDsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHNl
bGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpJbmRpcmVjdEFkamFj
ZW50OgotICAgICAgICBzZWxlY3RvclJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRq
YWNlbnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbmQtPnNldFJlbGF0aW9uKHNlbGVj
dG9yUmVsYXRpb24pOwotCi0jaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgIGlm
IChyZWxhdGlvbiA9PSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2NlbmRhbnREb3Vi
bGVDaGlsZCkKLSAgICAgICAgZW5kLT5zZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgo
KTsKLSNlbmRpZgotCi0gICAgZW5kLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsK
LX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ1FOYW1lLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSkKLXsKLSAg
ICBhdXRvIHNlY29uZCA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0g
ICAgc2Vjb25kLT5tX3NlbGVjdG9yID0gV1RGTW92ZShtX3NlbGVjdG9yKTsKLSAgICBzZWNvbmQt
Pm1fdGFnSGlzdG9yeSA9IFdURk1vdmUobV90YWdIaXN0b3J5KTsKLSAgICBtX3RhZ0hpc3Rvcnkg
PSBXVEZNb3ZlKHNlY29uZCk7Ci0KLSAgICBtX3NlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxD
U1NTZWxlY3Rvcj4odGFnUU5hbWUsIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSk7Ci0gICAgbV9zZWxl
Y3Rvci0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLX0KLQotfQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCShyZXZpc2lvbiAyMDQ4NDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRz
LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENTU1ZhbHVlOwotY2xhc3MgUXVhbGlmaWVkTmFtZTsKLQotLy8gVGhpcyBzaG91bGQgYmUgYSBT
dHJpbmdWaWV3IGJ1dCBjdXJyZW50bHkgaXQgY2FuJ3QgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYW4g
ZWxlbWVudCBvZiBhIHVuaW9uIGluIENTU1BhcnNlclZhbHVlLgotc3RydWN0IENTU1BhcnNlclN0
cmluZyB7Ci0gICAgdm9pZCBpbml0KExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgewotICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczggPSBjaGFyYWN0ZXJzOwotICAgICAg
ICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgaW5pdChVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsK
LSAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IGNoYXJhY3RlcnM7Ci0gICAgICAgIG1fbGVu
Z3RoID0gbGVuZ3RoOwotICAgICAgICBtX2lzOEJpdCA9IGZhbHNlOwotICAgIH0KLQotICAgIHZv
aWQgaW5pdChjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoIHx8IHN0cmluZy5pczhCaXQo
KSkgewotICAgICAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gY29uc3RfY2FzdDxMQ2hhcio+
KHN0cmluZy5jaGFyYWN0ZXJzOCgpKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBjb25zdF9j
YXN0PFVDaGFyKj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKTsKLSAgICAgICAgICAgIG1faXM4Qml0
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0g
ICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IDA7Ci0gICAgICAgIG1fbGVuZ3RoID0gMDsKLSAg
ICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXM4Qml0KCkgY29uc3Qg
eyByZXR1cm4gbV9pczhCaXQ7IH0KLSAgICBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFT
U0VSVChpczhCaXQoKSk7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczg7IH0KLSAgICBVQ2hhciog
Y2hhcmFjdGVyczE2KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5j
aGFyYWN0ZXJzMTY7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxl
bmd0aCkgeyBtX2xlbmd0aCA9IGxlbmd0aDsgfQotCi0gICAgdm9pZCBjb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZUluUGxhY2UoKTsKLQotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBt
X2xlbmd0aCk7Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2Rh
dGEuY2hhcmFjdGVyczhbaV07Ci0gICAgICAgIHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczE2W2ld
OwotICAgIH0KLQotICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGlzOEJpdCgp
ID8gU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzOCwgbV9sZW5ndGgpIDogU3RyaW5nKG1fZGF0YS5j
aGFyYWN0ZXJzMTYsIG1fbGVuZ3RoKTsgfQotICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIGlzOEJpdCgpID8gQXRvbWljU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzOCwg
bV9sZW5ndGgpIDogQXRvbWljU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzMTYsIG1fbGVuZ3RoKTsg
fQotCi0gICAgdW5pb24gewotICAgICAgICBMQ2hhciogY2hhcmFjdGVyczg7Ci0gICAgICAgIFVD
aGFyKiBjaGFyYWN0ZXJzMTY7Ci0gICAgfSBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7
Ci0gICAgYm9vbCBtX2lzOEJpdDsKLX07Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9v
bCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmLCBj
b25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7Ci0KLXN0cnVjdCBDU1NQYXJz
ZXJGdW5jdGlvbjsKLXN0cnVjdCBDU1NQYXJzZXJWYXJpYWJsZTsKLQotc3RydWN0IENTU1BhcnNl
clZhbHVlIHsKLSAgICBDU1NWYWx1ZUlEIGlkOwotICAgIGJvb2wgaXNJbnQ7Ci0gICAgdW5pb24g
ewotICAgICAgICBkb3VibGUgZlZhbHVlOwotICAgICAgICBpbnQgaVZhbHVlOwotICAgICAgICBD
U1NQYXJzZXJTdHJpbmcgc3RyaW5nOwotICAgICAgICBDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rp
b247Ci0gICAgICAgIENTU1BhcnNlclZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgQ1NTUGFy
c2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3Q7Ci0gICAgfTsKLSAgICBlbnVtIHsKLSAgICAgICAgT3Bl
cmF0b3IgID0gMHgxMDAwMDAsCi0gICAgICAgIEZ1bmN0aW9uICA9IDB4MTAwMDAxLAotICAgICAg
ICBWYWx1ZUxpc3QgPSAweDEwMDAwMiwKLSAgICAgICAgUV9FTVMgICAgID0gMHgxMDAwMDMsCi0g
ICAgICAgIFZhcmlhYmxlICA9IDB4MTAwMDA0Ci0gICAgfTsKLSAgICBpbnQgdW5pdDsKLQotICAg
IHZvaWQgc2V0RnJvbVZhbHVlTGlzdChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0
Pik7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNyZWF0ZUNTU1ZhbHVlKCk7Ci19OwotCi12b2lk
IGRlc3Ryb3koY29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKLQotY2xhc3MgQ1NTUGFyc2VyVmFsdWVM
aXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QoKQotICAgICAgICA6IG1fY3VycmVudCgwKQotICAgIHsKLSAgICB9Ci0gICAg
fkNTU1BhcnNlclZhbHVlTGlzdCgpOwotCi0gICAgdm9pZCBhZGRWYWx1ZShjb25zdCBDU1NQYXJz
ZXJWYWx1ZSYpOwotICAgIHZvaWQgaW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCwgY29uc3QgQ1NTUGFy
c2VyVmFsdWUmKTsKLSAgICB2b2lkIGV4dGVuZChDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLQotICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICB1
bnNpZ25lZCBjdXJyZW50SW5kZXgoKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KLSAgICBDU1NQYXJz
ZXJWYWx1ZSogY3VycmVudCgpIHsgcmV0dXJuIG1fY3VycmVudCA8IG1fdmFsdWVzLnNpemUoKSA/
ICZtX3ZhbHVlc1ttX2N1cnJlbnRdIDogMDsgfQotICAgIENTU1BhcnNlclZhbHVlKiBuZXh0KCkg
eyArK21fY3VycmVudDsgcmV0dXJuIGN1cnJlbnQoKTsgfQotICAgIENTU1BhcnNlclZhbHVlKiBw
cmV2aW91cygpCi0gICAgewotICAgICAgICBpZiAoIW1fY3VycmVudCkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAtLW1fY3VycmVudDsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsK
LSAgICB9Ci0gICAgdm9pZCBzZXRDdXJyZW50SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3ZhbHVlcy5zaXplKCkpOwotICAgICAgICBpZiAoaW5k
ZXggPCBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAgICAgICBtX2N1cnJlbnQgPSBpbmRleDsKLSAg
ICB9Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBp
IDwgbV92YWx1ZXMuc2l6ZSgpID8gJm1fdmFsdWVzW2ldIDogMDsgfQotCi0gICAgdm9pZCBjbGVh
cigpIHsgbV92YWx1ZXMuY2xlYXIoKTsgfQotICAgIAotICAgIFN0cmluZyB0b1N0cmluZygpOwot
ICAgIAotICAgIGJvb2wgY29udGFpbnNWYXJpYWJsZXMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBtX2N1cnJlbnQ7Ci0gICAgVmVjdG9yPENTU1BhcnNlclZhbHVlLCA0PiBtX3Zh
bHVlczsKLX07Ci0KLXN0cnVjdCBDU1NQYXJzZXJGdW5jdGlvbiB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIG5hbWU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsKLX07Ci0KLXN0cnVjdCBDU1NQ
YXJzZXJWYXJpYWJsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgQ1NTUGFyc2VyU3RyaW5nIG5hbWU7IC8vIFRoZSBjdXN0b20gcHJvcGVydHkgbmFtZQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IGFyZ3M7IC8vIFRoZSBmYWxsYmFj
ayBhcmdzCi19OwotCi1lbnVtIGNsYXNzIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvciB7Ci0g
ICAgQ2hpbGQsCi0gICAgRGVzY2VuZGFudFNwYWNlLAotI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JT
X0xFVkVMNCkKLSAgICBEZXNjZW5kYW50RG91YmxlQ2hpbGQsCi0jZW5kaWYKLSAgICBEaXJlY3RB
ZGphY2VudCwKLSAgICBJbmRpcmVjdEFkamFjZW50Ci19OwotCi1jbGFzcyBDU1NQYXJzZXJTZWxl
Y3RvciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBhZ2VQc2V1ZG9TZWxlY3Rvcihjb25zdCBDU1NQYXJz
ZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpOwotICAgIHN0YXRpYyBDU1NQYXJzZXJTZWxlY3Rv
ciogcGFyc2VQc2V1ZG9FbGVtZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBl
U3RyaW5nKTsKLSAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvRWxlbWVu
dEN1ZUZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50
aWZpZXIsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiopOwotICAg
IHN0YXRpYyBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VQc2V1ZG9FbGVtZW50U2xvdHRlZEZ1bmN0
aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENT
U1BhcnNlclNlbGVjdG9yKik7Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBz
ZXVkb0NsYXNzSG9zdEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5j
dGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVjdG9yKik7Ci0gICAgc3RhdGljIENTU1BhcnNl
clNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTZWxlY3Rv
cihDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpOwotCi0gICAgQ1NTUGFyc2VyU2Vs
ZWN0b3IoKTsKLSAgICBleHBsaWNpdCBDU1NQYXJzZXJTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJik7Ci0gICAgfkNTU1BhcnNlclNlbGVjdG9yKCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q1NTU2VsZWN0b3I+IHJlbGVhc2VTZWxlY3RvcigpIHsgcmV0dXJuIFdURk1vdmUobV9zZWxlY3Rv
cik7IH0KLQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBt
X3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB2YWx1ZSwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3NlbGVj
dG9yLT5zZXRBdHRyaWJ1dGUodmFsdWUsIGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQotICAgIHZvaWQg
c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRB
cmd1bWVudCh2YWx1ZSk7IH0KLSAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nh
c2VJbnNlbnNpdGl2ZShib29sIGlzQ2FzZUluc2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0
dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShpc0Nhc2VJbnNlbnNpdGl2ZSk7
IH0KLSAgICB2b2lkIHNldE1hdGNoKENTU1NlbGVjdG9yOjpNYXRjaCB2YWx1ZSkgeyBtX3NlbGVj
dG9yLT5zZXRNYXRjaCh2YWx1ZSk7IH0KLSAgICB2b2lkIHNldFJlbGF0aW9uKENTU1NlbGVjdG9y
OjpSZWxhdGlvbiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbih2YWx1ZSk7IH0KLSAg
ICB2b2lkIHNldEZvclBhZ2UoKSB7IG1fc2VsZWN0b3ItPnNldEZvclBhZ2UoKTsgfQotCi0gICAg
dm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+PiYgc2VsZWN0b3JWZWN0b3IpOwotICAgIHZvaWQgc2V0TGFuZ0FyZ3VtZW50TGlz
dChjb25zdCBWZWN0b3I8Q1NTUGFyc2VyU3RyaW5nPiYgc3RyaW5nVmVjdG9yKTsKLQotICAgIHZv
aWQgc2V0UHNldWRvQ2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNz
U3RyaW5nKTsKLSAgICBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0NsYXNzVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpOyB9Ci0gICAg
Ym9vbCBpc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5p
c0N1c3RvbVBzZXVkb0VsZW1lbnQoKTsgfQotCi0gICAgYm9vbCBpc1BzZXVkb0VsZW1lbnRDdWVG
dW5jdGlvbigpIGNvbnN0Ci0gICAgewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAg
cmV0dXJuIG1fc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQg
JiYgbV9zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudEN1ZTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIH0K
LQotICAgIGJvb2wgaGFzU2hhZG93RGVzY2VuZGFudCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hl
c1BzZXVkb0VsZW1lbnQoKSBjb25zdDsKLQotICAgIENTU1BhcnNlclNlbGVjdG9yKiB0YWdIaXN0
b3J5KCkgY29uc3QgeyByZXR1cm4gbV90YWdIaXN0b3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRU
YWdIaXN0b3J5KHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IpIHsg
bV90YWdIaXN0b3J5ID0gV1RGTW92ZShzZWxlY3Rvcik7IH0KLSAgICB2b2lkIGNsZWFyVGFnSGlz
dG9yeSgpIHsgbV90YWdIaXN0b3J5LnJlc2V0KCk7IH0KLSAgICB2b2lkIGluc2VydFRhZ0hpc3Rv
cnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGJlZm9yZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGFmdGVyKTsKLSAgICB2b2lkIGFwcGVu
ZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+KTsKLSAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTUGFyc2VyU2VsZWN0
b3JDb21iaW5hdG9yLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKLSAgICB2
b2lkIHByZXBlbmRUYWdTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCB0YWdJc0Zv
ck5hbWVzcGFjZVJ1bGUgPSBmYWxzZSk7Ci0KLXByaXZhdGU6Ci0jaWYgRU5BQkxFKENTU19TRUxF
Q1RPUlNfTEVWRUw0KQotICAgIHZvaWQgc2V0RGVzY2VuZGFudFVzZURvdWJsZUNoaWxkU3ludGF4
KCkgeyBtX3NlbGVjdG9yLT5zZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgoKTsgfQot
I2VuZGlmCi0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IG1fc2VsZWN0b3I7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBtX3RhZ0hpc3Rvcnk7Ci19Owot
Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXJTZWxlY3Rvcjo6aGFzU2hhZG93RGVzY2VuZGFudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6
OlNoYWRvd0Rlc2NlbmRhbnQ7Ci19Ci0KLWlubGluZSB2b2lkIENTU1BhcnNlclZhbHVlOjpzZXRG
cm9tVmFsdWVMaXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHZhbHVlTGlz
dCkKLXsKLSAgICBpZCA9IENTU1ZhbHVlSW52YWxpZDsKLSAgICB0aGlzLT52YWx1ZUxpc3QgPSB2
YWx1ZUxpc3QucmVsZWFzZSgpOwotICAgIHVuaXQgPSBWYWx1ZUxpc3Q7Ci19Ci0KLXRlbXBsYXRl
PHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VM
ZXR0ZXJzKVtsZW5ndGhdKQotewotICAgIHJldHVybiBXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDQ4NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MzIg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA3LCAyMDEwIFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2IEFwcGxlIEluYy4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJDU1NJbmhlcml0ZWRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0luaXRpYWxWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJTVkdQYWludC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JWYWx1ZShD
U1NWYWx1ZUlEIGlkKQotewotICAgIHJldHVybiBpZCA+PSBDU1NWYWx1ZUFjdGl2ZWJvcmRlciAm
JiBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKTsKLX0KLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlU1ZHVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQotewotICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKLQotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmlkOwotCi0gICAgYm9vbCB2YWxpZF9wcmltaXRpdmUgPSBmYWxzZTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotCi0gICAgc3dpdGNoIChwcm9wSWQp
IHsKLSAgICAvKiBUaGUgY29tbWVudCB0byB0aGUgcmlnaHQgZGVmaW5lcyBhbGwgdmFsaWQgdmFs
dWUgb2YgdGhlc2UKLSAgICAgKiBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gU1ZHIDEuMSwgQXBw
ZW5kaXggTi4gUHJvcGVydHkgaW5kZXggKi8KLSAgICBjYXNlIENTU1Byb3BlcnR5QWxpZ25tZW50
QmFzZWxpbmU6Ci0gICAgLy8gYXV0byB8IGJhc2VsaW5lIHwgYmVmb3JlLWVkZ2UgfCB0ZXh0LWJl
Zm9yZS1lZGdlIHwgbWlkZGxlIHwKLSAgICAvLyBjZW50cmFsIHwgYWZ0ZXItZWRnZSB8IHRleHQt
YWZ0ZXItZWRnZSB8IGlkZW9ncmFwaGljIHwgYWxwaGFiZXRpYyB8Ci0gICAgLy8gaGFuZ2luZyB8
IG1hdGhlbWF0aWNhbCB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8
fCBpZCA9PSBDU1NWYWx1ZUJhc2VsaW5lIHx8IGlkID09IENTU1ZhbHVlTWlkZGxlIHx8Ci0gICAg
ICAgICAgKGlkID49IENTU1ZhbHVlQmVmb3JlRWRnZSAmJiBpZCA8PSBDU1NWYWx1ZU1hdGhlbWF0
aWNhbCkpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0OgotICAgIC8vIGJhc2VsaW5l
IHwgc3VwZXIgfCBzdWIgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiB8IGluaGVyaXQKLSAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVTdWIgfHwKLSAg
ICAgICAgICAgaWQgPj0gQ1NTVmFsdWVTdXBlcikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdB
dHRyaWJ1dGVNb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5RG9t
aW5hbnRCYXNlbGluZToKLSAgICAvLyBhdXRvIHwgdXNlLXNjcmlwdCB8IG5vLWNoYW5nZSB8IHJl
c2V0LXNpemUgfCBpZGVvZ3JhcGhpYyB8Ci0gICAgLy8gYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBt
YXRoZW1hdGljYWwgfCBjZW50cmFsIHwgbWlkZGxlIHwKLSAgICAvLyB0ZXh0LWFmdGVyLWVkZ2Ug
fCB0ZXh0LWJlZm9yZS1lZGdlIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IGlkID09IENTU1ZhbHVlTWlkZGxlIHx8Ci0gICAgICAgICAgKGlkID49IENTU1ZhbHVl
VXNlU2NyaXB0ICYmIGlkIDw9IENTU1ZhbHVlUmVzZXRTaXplKSB8fAotICAgICAgICAgIChpZCA+
PSBDU1NWYWx1ZUNlbnRyYWwgJiYgaWQgPD0gQ1NTVmFsdWVNYXRoZW1hdGljYWwpKQotICAgICAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5RW5hYmxlQmFja2dyb3VuZDoKLSAgICAvLyBhY2N1bXVsYXRlIHwgbmV3IFt4
XSBbeV0gW3dpZHRoXSBbaGVpZ2h0XSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQWNjdW11bGF0ZSkgLy8gVE9ETyA6IG5ldwotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyU3Rh
cnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlck1pZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
TWFya2VyRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBSdWxlOiAgICAgICAgICAgIC8vIG5v
bnplcm8gfCBldmVub2RkIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsUnVsZToK
LSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uemVybyB8fCBpZCA9PSBDU1NWYWx1ZUV2ZW5v
ZGQpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VNaXRlcmxpbWl0OiAgIC8vIDxtaXRlcmxpbWl0
PiB8IGluaGVyaXQKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2luOiAgIC8v
IG1pdGVyIHwgcm91bmQgfCBiZXZlbCB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlTWl0ZXIgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZUJldmVsKQot
ICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDogICAgLy8gYnV0dCB8IHJvdW5kIHwgc3F1
YXJlIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCdXR0IHx8IGlkID09IENT
U1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcXVhcmUpCi0gICAgICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlT
dHJva2VPcGFjaXR5OiAgIC8vIDxvcGFjaXR5LXZhbHVlPiB8IGluaGVyaXQKLSAgICBjYXNlIENT
U1Byb3BlcnR5RmlsbE9wYWNpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BPcGFjaXR5Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5U2hhcGVSZW5kZXJpbmc6Ci0gICAgLy8gYXV0byB8IG9wdGltaXplU3BlZWQg
fCBjcmlzcEVkZ2VzIHwgZ2VvbWV0cmljUHJlY2lzaW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlT3B0aW1pemVzcGVlZCB8fAotICAg
ICAgICAgICAgaWQgPT0gQ1NTVmFsdWVDcmlzcGVkZ2VzIHx8IGlkID09IENTU1ZhbHVlR2VvbWV0
cmljcHJlY2lzaW9uKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3JSZW5kZXJpbmc6IC8vIGF1dG8g
fCBvcHRpbWl6ZVNwZWVkIHwgb3B0aW1pemVRdWFsaXR5IHwgaW5oZXJpdAotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlT3B0aW1pemVzcGVlZCB8fAotICAg
ICAgICAgICAgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXF1YWxpdHkpCi0gICAgICAgICAgICB2YWxp
ZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCdWZmZXJlZFJlbmRlcmluZzogLy8gYXV0byB8IGR5bmFtaWMgfCBzdGF0aWMKLSAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZUR5bmFtaWMgfHwgaWQgPT0g
Q1NTVmFsdWVTdGF0aWMpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvclByb2ZpbGU6IC8vIGF1dG8g
fCBzUkdCIHwgPG5hbWU+IHwgPHVyaT4gaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVBdXRvIHx8IGlkID09IENTU1ZhbHVlU3JnYikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9ySW50
ZXJwb2xhdGlvbjogICAvLyBhdXRvIHwgc1JHQiB8IGxpbmVhclJHQiB8IGluaGVyaXQKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZVNyZ2IgfHwgaWQgPT0gQ1NTVmFsdWVM
aW5lYXJyZ2IpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLQotICAgIC8qIFN0YXJ0IG9mIHN1cHBvcnRlZCBDU1MgcHJvcGVydGllcyB3aXRoIHZh
bGlkYXRpb24uIFRoaXMgaXMgbmVlZGVkIGZvciBwYXJzZVNob3J0SGFuZCB0byB3b3JrCi0gICAg
ICogY29ycmVjdGx5IGFuZCBhbGxvd3Mgb3B0aW1pemF0aW9uIGluIGFwcGx5UnVsZSguLikKLSAg
ICAgKi8KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QW5jaG9yOiAgICAvLyBzdGFydCB8IG1p
ZGRsZSB8IGVuZCB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU3RhcnQgfHwg
aWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwgaWQgPT0gQ1NTVmFsdWVFbmQpCi0gICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGljYWw6IC8vIGF1dG8gfCA8YW5nbGU+IHwgaW5oZXJp
dAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
RkFMTFRIUk9VR0g7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6
b250YWw6IC8vIDxhbmdsZT4gKHJlc3RyaWN0ZWQgdG8gX2RlZ18gcGVyIFNWRyAxLjEgc3BlYykg
fCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcgfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKLQotICAg
ICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBh
aW50T3JkZXI6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VQYWludE9yZGVyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlGaWxsOiAgICAgICAgICAgICAgICAgLy8gPHBhaW50PiB8IGluaGVyaXQKLSAgICBj
YXNlIENTU1Byb3BlcnR5U3Ryb2tlOiAgICAgICAgICAgICAgIC8vIDxwYWludD4gfCBpbmhlcml0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlTm9uZSgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChpc1ZhbGlkU3lzdGVtQ29udHJvbENvbG9yVmFsdWUoaWQpIHx8IGlkID09IENT
U1ZhbHVlTWVudSkKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVh
dGVDb2xvcihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGlkKSk7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgICAgICBSR0JBMzIgYyA9
IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5l
eHQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb2xvckZyb21WYWx1ZSgqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVVUklBbmRDb2xvcih2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnN0cmluZywgYyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWVM
aXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZE5vbmUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5zdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIXBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR1BhaW50OjpjcmVhdGVVUkkodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZVNWR1BhaW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BDb2xvcjogLy8gVE9ETyA6IGljY2NvbG9yCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZsb29kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29s
b3I6Ci0gICAgICAgIGlmIChDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKQot
ICAgICAgICAgICAgfHwgKGlkID49IENTU1ZhbHVlQWxpY2VibHVlICYmIGlkIDw9IENTU1ZhbHVl
WWVsbG93Z3JlZW4pKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRl
RnJvbVN0cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7Ci0gICAgICAg
IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRlQ3VycmVudENvbG9yKCk7Ci0gICAgICAgIGVsc2UgLy8g
VE9ETyA6IHN2Z2NvbG9yIChpY2NDb2xvcikKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VTVkdDb2xvcigpOwotCi0gICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5VmVjdG9yRWZmZWN0OiAvLyBub25lIHwgbm9uLXNjYWxpbmctc3Ryb2tlIHwgaW5oZXJpdAot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IGlkID09IENTU1ZhbHVlTm9uU2NhbGlu
Z1N0cm9rZSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgotICAgIC8vIGxyLXRiIHwg
cmxfdGIgfCB0Yi1ybCB8IGxyIHwgcmwgfCB0YiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTHJUYiB8fCBpZCA9PSBDU1NWYWx1ZVJsVGIgfHwgaWQgPT0gQ1NTVmFsdWVUYlJs
IHx8IGlkID09IENTU1ZhbHVlTHIgfHwgaWQgPT0gQ1NTVmFsdWVSbCB8fCBpZCA9PSBDU1NWYWx1
ZVRiKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlV2lkdGg6ICAgICAgICAgLy8gPGxlbmd0aD4g
fCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hvZmZzZXQ6Ci0gICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheTogICAgIC8vIG5vbmUgfCA8ZGFzaGFycmF5
PiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKLQotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlLZXJuaW5nOiAgICAgICAgICAgICAgLy8gYXV0byB8IG5vcm1h
bCB8IDxsZW5ndGg+IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6ICAgIC8vIDx1cmk+
IHwgbm9uZSB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5z
dHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQpOwotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdzoKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBzaGFkb3dWYWx1ZUxpc3QgPSBwYXJzZVNoYWRvdygq
bV92YWx1ZUxpc3QsIHByb3BJZCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93VmFsdWVMaXN0KSB7
Ci0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHNoYWRvd1ZhbHVl
TGlzdCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXNrVHlwZTogLy8gbHVtaW5hbmNlIHwgYWxwaGEgfCBpbmhlcml0Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUx1bWluYW5jZSB8fCBpZCA9PSBDU1NWYWx1ZUFscGhhKQotICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAv
KiBzaG9ydGhhbmQgcHJvcGVydGllcyAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6Ci0g
ICAgewotICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAgICAg
ICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlKENT
U1Byb3BlcnR5TWFya2VyU3RhcnQsIGltcG9ydGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICBy
b2xsYmFja0xhc3RQcm9wZXJ0aWVzKDEpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0
KCkudmFsdWUoKTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJrZXJNaWQsIHZh
bHVlLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlckVu
ZCwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlDeDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q3k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVI6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJ4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKLSAgICBjYXNlIENTU1By
b3BlcnR5WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5WToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBJZiB5
b3UgY3Jhc2ggaGVyZSwgaXQncyBiZWNhdXNlIHlvdSBhZGRlZCBhIGNzcyBwcm9wZXJ0eSBhbmQg
YXJlIG5vdCBoYW5kbGluZyBpdAotICAgICAgICAvLyBpbiBlaXRoZXIgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50IG9yIHRoZSBvbmUgaW4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlCi0gICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoMCwgInVuaW1wbGVtZW50ZWQgcHJvcGVydHlJRDogJWQiLCBwcm9wSWQp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkX3ByaW1pdGl2
ZSkgewotICAgICAgICBpZiAoaWQgIT0gMCkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwotICAgICAgICBlbHNlIGlmICh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VNUykKLSAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmso
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfRU1TKTsKLSAgICAgICAgaWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24p
KQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgIH0KLSAgICBpZiAoIXBhcnNlZFZhbHVlIHx8IChtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpICYmICFpblNob3J0aGFuZCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHBhcnNlZFZhbHVlKSwgaW1wb3J0YW50KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJz
ZVNWR1N0cm9rZURhc2hhcnJheSgpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmV0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgYm9vbCB2YWxpZF9wcmltaXRp
dmUgPSB0cnVlOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICB2YWxpZF9wcmltaXRp
dmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcsIFNWR0F0dHJpYnV0ZU1vZGUpOwotICAgICAgICBpZiAoIXZhbGlkX3ByaW1p
dGl2ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRv
ZXNuJ3QgaGFuZGxlIGNhbGN1bGF0ZWQgdmFsdWVzLgotICAgICAgICBpZiAodmFsdWUtPmlkICE9
IDApCi0gICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcih2YWx1ZS0+aWQpKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2
YWx1ZS0+dW5pdCkpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
JiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgfQotICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmV0OwotfQotCi1SZWZQdHI8U1ZHUGFpbnQ+IENTU1Bh
cnNlcjo6cGFyc2VTVkdQYWludCgpCi17Ci0gICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJl
bnQ7Ci0gICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LCBjKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNWR1BhaW50OjpjcmVh
dGVDb2xvcihDb2xvcihjKSk7Ci19Ci0KLVJlZlB0cjxTVkdDb2xvcj4gQ1NTUGFyc2VyOjpwYXJz
ZVNWR0NvbG9yKCkKLXsKLSAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBp
ZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gU1ZHQ29sb3I6OmNyZWF0ZUZyb21Db2xv
cihDb2xvcihjKSk7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VQ
YWludE9yZGVyKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwotCi0gICAgVmVjdG9yPENTU1ZhbHVlSUQ+IHBhaW50VHlwZUxpc3Q7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaWxsOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gc3Ryb2tlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbWFya2VyczsKLSAg
ICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpbGwg
JiYgIWZpbGwpCi0gICAgICAgICAgICBmaWxsID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIodmFsdWUtPmlkKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1Zh
bHVlU3Ryb2tlICYmICFzdHJva2UpCi0gICAgICAgICAgICBzdHJva2UgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVNYXJrZXJzICYmICFtYXJrZXJzKQotICAgICAgICAgICAgbWFya2Vy
cyA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBwYWludFR5cGVM
aXN0LmFwcGVuZCh2YWx1ZS0+aWQpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgfQotCi0gICAgLy8gQWZ0ZXIgcGFyc2luZyB3ZSBzZXJpYWxpemUgdGhlIHBhaW50
LW9yZGVyIGxpc3QuIFNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwotICAgIC8vIHBvcCBhIGxh
c3QgbGlzdCBpdGVtcyBmcm9tIENTU1ZhbHVlTGlzdCB3aXRob3V0IGJpZ2dlciBjb3N0LCB3ZSBj
cmVhdGUgdGhlCi0gICAgLy8gbGlzdCBhZnRlciBwYXJzaW5nLiAKLSAgICBDU1NWYWx1ZUlEIGZp
cnN0UGFpbnRPcmRlclR5cGUgPSBwYWludFR5cGVMaXN0LmF0KDApOwotICAgIGF1dG8gcGFpbnRP
cmRlckxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgc3dp
dGNoIChmaXJzdFBhaW50T3JkZXJUeXBlKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUZpbGw6Ci0gICAg
ICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgQ1NTVmFsdWVTdHJva2U6Ci0gICAgICAgIHBhaW50
T3JkZXJMaXN0LT5hcHBlbmQoZmlyc3RQYWludE9yZGVyVHlwZSA9PSBDU1NWYWx1ZUZpbGwgPyBm
aWxsLnJlbGVhc2VOb25OdWxsKCkgOiBzdHJva2UucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IGlmIChwYWludFR5cGVMaXN0LnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIGlmIChwYWludFR5
cGVMaXN0LmF0KDEpID09IENTU1ZhbHVlTWFya2VycykKLSAgICAgICAgICAgICAgICBwYWludE9y
ZGVyTGlzdC0+YXBwZW5kKG1hcmtlcnMucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZU1hcmtlcnM6Ci0gICAgICAgIHBhaW50T3Jk
ZXJMaXN0LT5hcHBlbmQobWFya2Vycy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgaWYgKHBh
aW50VHlwZUxpc3Quc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgaWYgKHBhaW50VHlwZUxpc3Qu
YXQoMSkgPT0gQ1NTVmFsdWVTdHJva2UpCi0gICAgICAgICAgICAgICAgcGFpbnRPcmRlckxpc3Qt
PmFwcGVuZChzdHJva2UucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
ICAgIHJldHVybiBXVEZNb3ZlKHBhaW50T3JkZXJMaXN0KTsKLX0KLQotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDggQEAKIAogbmV3Qmxv
Y2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJl
Y2FsY0luQWxsRnJhbWVzPTEKIAorbmV3Q1NTUGFyc2VyRW5hYmxlZCBpbml0aWFsPWZhbHNlCisK
IGh0dHBFcXVpdkVuYWJsZWQgaW5pdGlhbD10cnVlCiAKICMgU29tZSBwb3J0cyAoZS5nLiBpT1Mp
IG1pZ2h0IGNob29zZSB0byBkaXNwbGF5IGF0dGFjaG1lbnRzIGlubGluZSwgcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIHRoZSByZXNwb25zZSBpbmNsdWRlcyB0aGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286746</attachid>
            <date>2016-08-23 11:23:34 -0700</date>
            <delta_ts>2016-08-23 12:41:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>1279170</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA4LTIzICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVmIGZvciBlbmFibGluZyBu
ZXcgQ1NTIHBhcnNpbmcgYW5kIG1vdmUgcGFyc2VyIGZpbGVzIGludG8gc3ViZGlyZWN0b3J5Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogY3NzL0NTU1Bh
cnNlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJNb2RlLmg6IFJlbW92ZWQu
CisgICAgICAgICogY3NzL0NTU1BhcnNlclZhbHVlcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
Y3NzL0NTU1BhcnNlclZhbHVlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TVkdDU1NQYXJz
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9wYXJzZXI6IEFkZGVkLgorICAgICAgICAq
IGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDogQ29waWVkIGZyb20gY3NzL0NTU1BhcnNlci5jcHAu
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuaDogQ29waWVkIGZyb20gY3NzL0NTU1Bh
cnNlci5oLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oOiBDb3BpZWQgZnJv
bSBjc3MvQ1NTUGFyc2VyTW9kZS5oLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVmFs
dWVzLmNwcDogQ29waWVkIGZyb20gY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAuCisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDogQ29waWVkIGZyb20gY3NzL0NTU1BhcnNlclZh
bHVlcy5oLgorICAgICAgICAqIGNzcy9wYXJzZXIvU1ZHQ1NTUGFyc2VyLmNwcDogQ29waWVkIGZy
b20gY3NzL1NWR0NTU1BhcnNlci5jcHAuCisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjoKKwog
MjAxNi0wOC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCBzaG91bGQgbm90IGhhdmUgYSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0IHBhcmVudCBpbnRlcmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2NyeXB0by9rZXlzIgogICAgICIke1dFQkNPUkVfRElSfS9jcnlwdG8v
cGFyYW1ldGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vY3NzIgorICAgICIke1dFQkNPUkVfRElS
fS9jc3MvcGFyc2VyIgogICAgICIke1dFQkNPUkVfRElSfS9jc3NqaXQiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2RvbSIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tL2RlZmF1bHQiCkBAIC0xMzQ0LDgg
KzEzNDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU05hbWVkSW1hZ2VWYWx1
ZS5jcHAKICAgICBjc3MvQ1NTT01VdGlscy5jcHAKICAgICBjc3MvQ1NTUGFnZVJ1bGUuY3BwCi0g
ICAgY3NzL0NTU1BhcnNlci5jcHAKLSAgICBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAogICAgIGNz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKICAgICBjc3MvQ1NTUHJvcGVydHkuY3BwCiAgICAgY3Nz
L0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAKQEAgLTEzODksNyArMTM4OCw2IEBAIHNldChXZWJD
b3JlX1NPVVJDRVMKICAgICBjc3MvUnVsZUZlYXR1cmUuY3BwCiAgICAgY3NzL1J1bGVTZXQuY3Bw
CiAgICAgY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKLSAgICBjc3MvU1ZH
Q1NTUGFyc2VyLmNwcAogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NlbGVj
dG9yRmlsdGVyLmNwcAogICAgIGNzcy9Tb3VyY2VTaXplTGlzdC5jcHAKQEAgLTE0MTEsNiArMTQw
OSwxMCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmNwcAogICAgIGNzcy9XZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwCiAKKyAgICBjc3MvcGFy
c2VyL0NTU1BhcnNlci5jcHAKKyAgICBjc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHAKKyAg
ICBjc3MvcGFyc2VyL1NWR0NTU1BhcnNlci5jcHAKKwogICAgIGNzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAogCiAgICAgZG9tL0FjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIxLDYgKzMzMjEsMTIgQEAKIAkJOTNG
OUI3QTAwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNzlFMEJBNjAzMjYwMDg1NDA2
NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi87IH07CiAJCTkzRjlCN0ExMEJBNjAzMjYwMDg1NDA2
NCAvKiBKU0NEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmgg
Ki87IH07CiAJCTkzRkRBRkNBMEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRkRBRkM5
MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4
NEYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk0NkQzNzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovOyB9
OworCQk5NDZEMzcyRTFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzcyOTFENkNCMjhCMDA3NzA4
NEYgLyogQ1NTUGFyc2VyLmggKi87IH07CisJCTk0NkQzNzJGMUQ2Q0IyOTQwMDc3MDg0RiAvKiBD
U1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NDZEMzcyQTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyTW9kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk0NkQzNzMwMUQ2Q0Iy
OTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MkIxRDZDQjI4QjAwNzcwODRGIC8qIENTU1Bh
cnNlclZhbHVlcy5jcHAgKi87IH07CisJCTk0NkQzNzMxMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQ
YXJzZXJWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLzsgfTsK
KwkJOTQ2RDM3MzMxRDZDQzQyQjAwNzcwODRGIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzczMjFENkNDMzcyMDA3
NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLzsgfTsKIAkJOTZBQkE0MjMxNEJDQjgwRTAwRDU2
MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAv
KiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgKi87IH07CiAJCTk3MDNFMUJGMTVE
QzRFMzcwMDFGMjRDOCAvKiBKU1ZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0U5RUM4QjE1REM0OTJGMDA0RjJFNzEgLyogSlNW
b2lkQ2FsbGJhY2suY3BwICovOyB9OwogCQk5NzA1OTk3NzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9s
aWN5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcwNTk5NzMxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCAqLzsg
fTsKQEAgLTQ1MDIsNyArNDUwOCw2IEBACiAJCUIyMjI3QUY1MEQwMEJGMjIwMDcxQjc4MiAvKiBT
Vkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyMjI3OTVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCAqLzsg
fTsKIAkJQjIyMjdBRjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjI3OTYwMEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmggKi87IH07CiAJCUIyMjI3QjA1MEQwMEJGRjEwMDcx
Qjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjdCMDAwRDAwQkZGMTAwNzFCNzgy
IC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07Ci0JCUIyMjI3QjA2
MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjdCMDEwRDAwQkZGMTAwNzFCNzgyIC8qIFNW
R0NTU1BhcnNlci5jcHAgKi87IH07CiAJCUIyMjJGNjk4MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NW
R0FuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyMjJGNjk2MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmNwcCAqLzsgfTsKIAkJQjIy
MkY2OTkwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjJGNjk3MEFCNzcxOTUwMDIyRUZBRCAvKiBK
U1NWR0FuZ2xlLmggKi87IH07CiAJCUIyMjJGNjlDMEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjIyMkY2OUEwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgKi87IH07CkBAIC00
OTE4LDggKzQ5MjMsNiBAQAogCQlCQzAwRjAxNTBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAxMTBF
MEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMTYwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MEYwMTIwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3QuY3BwICovOyB9OwogCQlCQzAwRjAx
NzBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEYwMTMwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmls
ZUxpc3QuaCAqLzsgfTsKLQkJQkMwMkE0QjcwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNlclZh
bHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MkE0QjYwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMDJBNTQwMEUwOTlDNUEwMDRC
NkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwMkE1M0YwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZh
bHVlcy5jcHAgKi87IH07CiAJCUJDMDJBNjNDMEUwOUE5Q0YwMDRCNkQyQiAvKiBDU1NGdW5jdGlv
blZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzAyQTYzQjBFMDlBOUNGMDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5oICovOyB9OwogCQlC
QzAyQTY0NjBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTY0NTBFMDlBQUU5MDA0
QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgKi87IH07CiAJCUJDMDZFRDA2MEJGRDVCQUUw
MDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRDA0MEJGRDVCQUUwMDg1NkU5RCAv
KiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCAqLzsgfTsKQEAgLTUxMTcsOCArNTEyMCw2
IEBACiAJCUJDNzREQTQ5MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JHQkNvbG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc0REE0NzEwMTNGNDY4MDA3
OTg3QUQgLyogSlNSR0JDb2xvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDNzZBQzEzMEREN0FENUMwMDQxNUYzNCAvKiBQYXJzZXJVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzZB
QzExMEREN0FENUMwMDQxNUYzNCAvKiBQYXJzZXJVdGlsaXRpZXMuaCAqLzsgfTsKIAkJQkM3NzJC
M0MwQzRFQTkxRTAwODMyODVGIC8qIENTU0hlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzYwQzRFQTkxRTAwODMyODVGIC8qIENTU0hl
bHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUJDNzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzcwQzRFQTkxRTAwODMyODVG
IC8qIENTU1BhcnNlci5jcHAgKi87IH07Ci0JCUJDNzcyQjNFMEM0RUE5MUUwMDgzMjg1RiAvKiBD
U1NQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDNzcyQjM4MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4
NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM3NzJDNDQwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0
LmNwcCAqLzsgfTsKIAkJQkM3NzJDNDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0
NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKIAkJQkM3NzJDNEUw
QzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEMwQzRFQjMwNDAwODMyODVGIC8q
IE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwpAQCAtNjMzMiw3ICs2MzMzLDYgQEAKIAkJRkIz
MDU2QzIxNjlFNURBQzAwOTZBMjMyIC8qIENTU0dyb3VwaW5nUnVsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzMDU2QzExNjlFNURBQzAwOTZBMjMy
IC8qIENTU0dyb3VwaW5nUnVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZCNDg0RjRDMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5j
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkI0ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5jcHAgKi87IH07
CiAJCUZCNDg0RjREMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCNDg0RjRCMTcxRjgy
MUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuaCAqLzsgfTsKLQkJRkI3OEFEMkUxNTFC
RjVFNjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCNzhBRDJDMTUxQkY1RDIwMEZFNTREMyAvKiBDU1NQYXJz
ZXJNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkI5MTM5MjQxNkFFNEMxNzAwMUZFNjgyIC8qIERPTVBhdGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAv
KiBET01QYXRoLmggKi87IH07CiAJCUZCOTEzOTJBMTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCOTEz
OTI4MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguaCAqLzsgfTsKIAkJRkI5MTM5MkIxNkFF
NEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjkxMzkyOTE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRo
LmNwcCAqLzsgfTsKQEAgLTEwNDI4LDYgKzEwNDI4LDEyIEBACiAJCTkzRjlCNzlFMEJBNjAzMjYw
MDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NEQVRBU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NEQVRBU2VjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0
QWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JJbnNlcnRB
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3MjgxRDZDQjI4QjAw
NzcwODRGIC8qIENTU1BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBDU1NQYXJzZXIuY3BwOyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQzNzI5MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyLmg7IHBhdGgg
PSBwYXJzZXIvQ1NTUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQz
NzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJNb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IENTU1BhcnNlck1vZGUuaDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXJN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQzNzJCMUQ2Q0IyOEIwMDc3
MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQ1NTUGFyc2VyVmFsdWVzLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXJWYWx1
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NDZEMzcyQzFENkNCMjhCMDA3
NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENTU1BhcnNlclZhbHVlcy5oOyBwYXRoID0gcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NDZEMzczMjFENkNDMzcyMDA3NzA4NEYgLyog
U1ZHQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNW
R0NTU1BhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvU1ZHQ1NTUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZHR3Jh
cGhpY3NFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0dy
YXBoaWNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NkFCQTQyMjE0
QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3MzEwN0Q5NzUy
MDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9saWN5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTE4NzgsNyArMTE4ODQsNiBAQAogCQlCMjIyNzk2MDBEMDBCRjIxMDA3MUI3ODIgLyog
U1ZHWm9vbUFuZFBhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHWm9v
bUFuZFBhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyNzk2MTBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNW
R1pvb21BbmRQYW4uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyN0IwMDBE
MDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjIyN0IwMTBEMDBC
RkYxMDA3MUI3ODIgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdDU1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjIyN0IwNDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIyMkY2OTYwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5n
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQW5nbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyRjY5NzBBQjc3MTk1MDAyMkVG
QUQgLyogSlNTVkdBbmdsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
VkdBbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIzMDYsOCArMTIzMTEs
NiBAQAogCQlCQzAwRjAxMTBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzAwRjAxMjBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVMaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMTMwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzAyQTRCNjBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFy
c2VyVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1BhcnNlclZh
bHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzAyQTUzRjBFMDk5QzVBMDA0
QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU1BhcnNlclZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDJBNjNCMEUwOUE5Q0YwMDRCNkQyQiAvKiBDU1NGdW5jdGlvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0Z1bmN0aW9uVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkE2NDUwRTA5QUFFOTAwNEI2RDJCIC8qIENTU0Z1bmN0
aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRnVu
Y3Rpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZFRDA0MEJG
RDVCQUUwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTE2LDggKzEyNTE5LDYgQEAKIAkJ
QkM3NERBNDcxMDEzRjQ2ODAwNzk4N0FEIC8qIEpTUkdCQ29sb3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNSR0JDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzc2QUMxMTBERDdBRDVDMDA0MTVGMzQgLyogUGFyc2VyVXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlclV0aWxpdGllcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkIzNjBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NIZWxwZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCMzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsg
cGF0aCA9IENTU1BhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNzcy
QjM4MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENTU1BhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Qzc3MkM0NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3NzJDNDUwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBS
ZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0QzBDNEVCMzA0MDA4MzI4
NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTUlNRVR5cGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzkwNiw3ICsxMzkwNyw2IEBACiAJCUZCMzA1NkMxMTY5RTVEQUMwMDk2QTIzMiAvKiBD
U1NHcm91cGluZ1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTR3Jv
dXBpbmdSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCNDg0RjRBMTcxRjgy
MUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1GdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkI3OEFEMkMxNTFCRjVEMjAwRkU1
NEQzIC8qIENTU1BhcnNlck1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTUGFyc2VyTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjkxMzkyMDE2
QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01QYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCOTEzOTIxMTZB
RTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01Q
YXRoLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkI5MTM5MjgxNkFFNEZDMDAw
MUZFNjgyIC8qIEpTRE9NUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0RPTVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MDQ2LDYgKzE4MDQ2
LDE5IEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk5NDZEMzcyNzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2VyICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5NDZEMzczMjFENkNDMzcyMDA3NzA4NEYg
LyogU1ZHQ1NTUGFyc2VyLmNwcCAqLywKKwkJCQk5NDZEMzcyODFENkNCMjhCMDA3NzA4NEYgLyog
Q1NTUGFyc2VyLmNwcCAqLywKKwkJCQk5NDZEMzcyOTFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFy
c2VyLmggKi8sCisJCQkJOTQ2RDM3MkExRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlck1vZGUu
aCAqLywKKwkJCQk5NDZEMzcyQjFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmNw
cCAqLywKKwkJCQk5NDZEMzcyQzFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmgg
Ki8sCisJCQkpOworCQkJbmFtZSA9IHBhcnNlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CiAJCTk3MTE0NUZFMTRFRjAwNkUwMDY3NEZEOSAvKiBNb2R1bGVzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIyMTExLDYgKzIyMTI0LDcgQEAK
IAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTQ2RDM3MjcxRDZDQjIyNTAwNzcwODRGIC8qIHBh
cnNlciAqLywKIAkJCQlGQkQ2QUY4NDE1RUYyMUQ0MDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0
aW9ucy5jcHAgKi8sCiAJCQkJRkJENkFGODUxNUVGMjFENDAwOEI3MTEwIC8qIEJhc2ljU2hhcGVG
dW5jdGlvbnMuaCAqLywKIAkJCQlBODBFNkNEQTBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5o
ICovLApAQCAtMjIyMTIsMTEgKzIyMjI2LDYgQEAKIAkJCQlBODBFNkNDQjBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTUGFnZVJ1bGUuY3BwICovLAogCQkJCUE4MEU2Q0Q2MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NQYWdlUnVsZS5oICovLAogCQkJCTg1QzU2Q0E2MEFBODlENUYwMEQ5NTc1NSAvKiBDU1NQ
YWdlUnVsZS5pZGwgKi8sCi0JCQkJQkM3NzJCMzcwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNl
ci5jcHAgKi8sCi0JCQkJQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oICov
LAotCQkJCUZCNzhBRDJDMTUxQkY1RDIwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggKi8sCi0J
CQkJQkMwMkE1M0YwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgKi8sCi0J
CQkJQkMwMkE0QjYwRTA5OTdCOTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5oICovLAogCQkJ
CUE4MEU2Q0RCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5jcHAgKi8sCiAJ
CQkJQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggKi8sCiAJ
CQkJOTMwNzA1OTAwOUUwQzc1ODAwQjE3RkU0IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmlkbCAqLywK
QEAgLTIyMzgzLDcgKzIyMzkyLDYgQEAKIAkJCQk4NTA2NTZERjBBQUI0NTRGMDAyRDE1QzAgLyog
U3R5bGVTaGVldExpc3QuaWRsICovLAogCQkJCTkzQ0E0Q0EyMDlERjkzRkEwMERGODY3NyAvKiBz
dmcuY3NzICovLAogCQkJCUIyMjI3QjAwMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwICovLAotCQkJCUIyMjI3QjAxMEQwMEJGRjEwMDcxQjc4MiAv
KiBTVkdDU1NQYXJzZXIuY3BwICovLAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAogCQkJCUZCNDg0RjRBMTcxRjgyMUUwMDA0MDc1NSAv
KiBUcmFuc2Zvcm1GdW5jdGlvbnMuY3BwICovLAogCQkJCUZCNDg0RjRCMTcxRjgyMUUwMDA0MDc1
NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMuaCAqLywKQEAgLTIzOTcyLDkgKzIzOTgwLDYgQEAKIAkJ
CQkzMTRCRTNBMTFCMzBGNkI3MDAxNDE5ODIgLyogQ1NTTmFtZWRJbWFnZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGOThGRkY0NTExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDAwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzc3MkIzRTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlGQjc4QUQyRTE1MUJGNUU2MDBGRTU0RDMgLyogQ1NT
UGFyc2VyTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMwMkE0QjcwRTA5OTdCOTAwNEI2RDJC
IC8qIENTU1BhcnNlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjMxMjI4ODNF
OTAwQjgxRkY4IC8qIENTU1ByZWxvYWRTY2FubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBF
NkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxRUQ4QUMzMENDNDlCRTAwMEJGQzU1NyAvKiBDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTUyLDYgKzI1MTU3LDcgQEAKIAkJCQlCMkZBM0RC
NTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNEQjcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNEQjkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0FyY0Ficy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTQ2RDM3MkUxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQkIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0FyY1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQkQwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNE
QkYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNTMyNCw2ICsyNTMzMCw3IEBACiAJCQkJRTRFMzlBRkIxMzMwRUZBODAw
M0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkRE
OEY1MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5NDZEMzcyRjFENkNCMjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTVCQTdENjMxNTE0MzdDQTAwRkUxRTNGIC8qIExlbmd0aEZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NzE2NzAxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0
aFBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NTAzLDYgKzI2NTEwLDcgQEAKIAkJCQkwODEz
QTRFQTEyODQxMzI2MDA5OTI1MTEgLyogU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0FBOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUFDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHJp
bmdMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NDZEMzczMTFENkNCMjk0MDA3NzA4NEYgLyog
Q1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCODBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCQjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHU1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBQkUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N3aXRjaEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjc2MjIsOCArMjc2MzAsNiBAQAogCQkJCTMxNEJFM0EzMUIzMEY2RDEwMDE0MTk4MiAv
KiBDU1NOYW1lZEltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjk4RkZGNDQxMUEy
Njc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZD
RjUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUJDNzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQkMwMkE1NDAwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzdCMzg2MjEyMjg4M0U5MDBCODFGRjggLyogQ1NTUHJlbG9hZFNj
YW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZEMDUwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU1ByaW1pdGl2ZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0Y3MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NjMyLDYg
KzI4NjM4LDcgQEAKIAkJCQkxQTc1MEQ4RDBBOTBFNTIxMDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3NTBERDQwQTkwRTcyOTAwMEZGMjE1IC8qIEpT
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRDlDMkMyMEMxN0I2
OUUwMDVDOTBBMiAvKiBKU05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk0NkQzNzMw
MUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNEOUMyNjUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9kZUxpc3RDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M5MUEzOEYxQjQ5OEFCRTAwM0Y5RUZBIC8qIEpTTm9kZU9yU3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzNTAzQ0EzMTAxNzlBRDcwMDNCNDdFMSAvKiBKU05v
dGlmaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Mjk1LDYgKzI5MzAyLDcgQEAKIAkJ
CQkwRjQzQzg1RDE4OUUxMENGMDAwMTlBRTIgLyogUGVyZm9ybWFuY2VUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQ1ODFGQjQxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUQ1REMyRDBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3Bl
Y3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTQ2RDM3MzMx
RDZDQzQyQjAwNzcwODRGIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlE
MEZGMkE1RDExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDRDdEMzM0MzFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRGNDVBNzFCRDFDNkZEMDBFNEZBOEMgLyogUGxhdGZv
cm1DQUFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5ODI3LDcgKzI5ODM1LDYgQEAK
IAkJCQlCMjIyNzlBMTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ29sb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QjA1MEQwMEJGRjEw
MDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzlBNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ3Vyc29yRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBRDBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRGVmc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjAwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0Rlc2NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAwMzAsNiAr
MzAwMzcsNyBAQAogCQkJCTdBQTNBNjk5MTk0QTY0RTcwMDFDQkQyNCAvKiBUaWxlQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRjcyQkYwQTE4N0ZENDQ5MDAwOUJDQjMgLyogVGls
ZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBQTNB
NkEzMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJOTQ2RDM3MkQxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QUEzQTY5QjE5NEE2NEU3MDAxQ0JEMjQgLyogVGlsZUdyaWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDk4NzcwRjIxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEREIxMjUxRjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTM4NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA1IEFsbGFu
IFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9u
VHJpZ2dlclNjcm9sbFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIK
LSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDYW52
YXNWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NG
aWx0ZXJJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCi0jaW5jbHVk
ZSAiQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRGZWF0dXJlVmFsdWUu
aCIKLSNpbmNsdWRlICJDU1NGb250VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVl
LmgiCi0jaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0
VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW5oZXJp
dGVkVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbml0aWFsVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NL
ZXlmcmFtZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NLZXlmcmFtZXNSdWxlLmgiCi0jaW5jbHVkZSAi
Q1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgotI2lu
Y2x1ZGUgIkNTU05hbWVkSW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCi0j
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCi0jaW5jbHVk
ZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUmV2ZXJ0VmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIK
LSNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Vuc2V0VmFs
dWUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNvdW50ZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkdyaWRBcmVhLmgi
Ci0jaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKLSNpbmNsdWRlICJIYXNoVG9vbHMuaCIKLSNpbmNsdWRlICJNZWRpYUxpc3QuaCIK
LSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlBhZ2VDb25zb2xlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGFpci5oIgotI2luY2x1ZGUgIlJlY3Qu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKLSNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdQ
YXRoQnl0ZVN0cmVhbS5oIgotI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rp
b25zLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2lu
Y2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5o
IgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZh
bHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgotI2luY2x1ZGUgIldlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSA8Yml0c2V0PgotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL2R0
b2EuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgot
Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSNpbmNsdWRlICJDU1NHcmlkQXV0b1JlcGVh
dFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotI2luY2x1ZGUgIkxlbmd0aFJlcGVhdC5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoREFTSEJPQVJEX1NVUFBPUlQpCi0jaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCi0jZW5k
aWYKLQotI2RlZmluZSBZWURFQlVHIDAKLQotI2lmIFlZREVCVUcgPiAwCi1leHRlcm4gaW50IGNz
c3l5ZGVidWc7Ci0jZW5kaWYKLQotZXh0ZXJuIGludCBjc3N5eXBhcnNlKFdlYkNvcmU6OkNTU1Bh
cnNlciopOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgewotCi1lbnVtIFBy
b3BlcnR5VHlwZSB7Ci0gICAgUHJvcGVydHlFeHBsaWNpdCwKLSAgICBQcm9wZXJ0eUltcGxpY2l0
Ci19OwotCi1jbGFzcyBJbXBsaWNpdFNjb3BlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bXBsaWNpdFNjb3BlKTsKLXB1YmxpYzoKLSAgICBJbXBsaWNpdFNjb3BlKFdlYkNvcmU6OkNTU1Bh
cnNlciYgcGFyc2VyLCBQcm9wZXJ0eVR5cGUgcHJvcGVydHlUeXBlKQotICAgICAgICA6IG1fcGFy
c2VyKHBhcnNlcikKLSAgICB7Ci0gICAgICAgIG1fcGFyc2VyLm1faW1wbGljaXRTaG9ydGhhbmQg
PSBwcm9wZXJ0eVR5cGUgPT0gUHJvcGVydHlJbXBsaWNpdDsKLSAgICB9Ci0KLSAgICB+SW1wbGlj
aXRTY29wZSgpCi0gICAgewotICAgICAgICBtX3BhcnNlci5tX2ltcGxpY2l0U2hvcnRoYW5kID0g
ZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OkNTU1BhcnNlciYgbV9wYXJz
ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0
IHVuc2lnbmVkIENTU1BhcnNlcjo6aW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3VudCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLXN0YXRpYyBjb25zdCBkb3VibGUgTUFY
X1NDQUxFID0gMTAwMDAwMDsKLQotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBib29sIGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgY29u
c3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgQVNTRVJUKHZhbHVl
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCB2YWx1ZS51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKLSAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUuc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzKTsKLX0KLQotc3Rh
dGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBjaGFyKiBwcmVmaXgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmICghcHJlZml4W2ldKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmIChzdHJpbmdbaV0gIT0gcHJlZml4W2ldKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+Ci1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRp
dmVWYWx1ZVBhaXIoQXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpOwotfQotCi1jbGFzcyBBbmltYXRpb25QYXJzZUNvbnRleHQgewotcHVibGljOgot
ICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgIHZvaWQgY29tbWl0
Rmlyc3RBbmltYXRpb24oKQotICAgIHsKLSAgICAgICAgbV9maXJzdEFuaW1hdGlvbkNvbW1pdHRl
ZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNDb21taXR0ZWRGaXJzdEFuaW1hdGlvbigp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9maXJzdEFuaW1hdGlvbkNvbW1pdHRlZDsK
LSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdEFuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpCi0gICAg
ewotICAgICAgICBtX2FuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGFuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZDsK
LSAgICB9Ci0KLSAgICBib29sIGhhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFzU2VlbkFuaW1hdGlvblByb3BlcnR5S2V5d29y
ZDsKLSAgICB9Ci0KLSAgICB2b2lkIHNhd0FuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpCi0gICAg
ewotICAgICAgICBtX2hhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQgPSB0cnVlOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1fYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dl
ZCB7IHRydWUgfTsKLSAgICBib29sIG1fZmlyc3RBbmltYXRpb25Db21taXR0ZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNTZWVuQW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkIHsgZmFsc2UgfTsK
LX07Ci0KLWNvbnN0IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENTU1BhcnNlckNvbnRleHQoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0PiBzdHJpY3RDb250
ZXh0KENTU1N0cmljdE1vZGUpOwotICAgIHJldHVybiBzdHJpY3RDb250ZXh0OwotfQotCi1DU1NQ
YXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUgbW9kZSwgY29uc3Qg
VVJMJiBiYXNlVVJMKQotICAgIDogYmFzZVVSTChiYXNlVVJMKQotICAgICwgbW9kZShtb2RlKQot
I2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgLCBjc3NHcmlkTGF5b3V0RW5hYmxlZChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmlzQ1NTR3JpZExheW91dEVu
YWJsZWQoKSkKLSNlbmRpZgotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogRm9y
Y2UgdGhlIHNpdGUgc3BlY2lmaWMgcXVpcmsgYmVsb3cgdG8gd29yayBvbiBpT1MuIEludmVzdGln
YXRpbmcgb3RoZXIgc2l0ZSBzcGVjaWZpYyBxdWlya3MKLSAgICAvLyB0byBzZWUgaWYgd2UgY2Fu
IGVuYWJsZSB0aGUgcHJlZmVyZW5jZSBhbGwgdG9nZXRoZXIgaXMgdG8gYmUgaGFuZGxlZCBieToK
LSAgICAvLyA8cmRhcjovL3Byb2JsZW0vODQ5MzMwOT4gSW52ZXN0aWdhdGUgRW5hYmxpbmcgU2l0
ZSBTcGVjaWZpYyBRdWlya3MgaW4gTW9iaWxlU2FmYXJpIGFuZCBVSVdlYlZpZXcKLSAgICBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcyA9IHRydWU7Ci0jZW5kaWYKLX0KLQotQ1NTUGFyc2VyQ29udGV4
dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFVSTCYgYmFzZVVS
TCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogYmFzZVVSTChiYXNlVVJMLmlzTnVsbCgp
ID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogYmFzZVVSTCkKLSAgICAsIGNoYXJzZXQoY2hhcnNldCkK
LSAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkgPyBDU1NRdWlya3NNb2RlIDogQ1NT
U3RyaWN0TW9kZSkKLSAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50
KCkpCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICAsIGNzc0dyaWRMYXlvdXRFbmFi
bGVkKGRvY3VtZW50LmlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSNlbmRpZgotewotICAgIGlm
IChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7Ci0gICAgICAgIG5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
KCk7Ci0gICAgICAgIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9IHNldHRpbmdz
LT5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSgpOwotICAgICAgICB1c2VMZWdhY3lC
YWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID0gc2V0dGluZ3MtPnVzZUxlZ2FjeUJhY2tn
cm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKTsKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJ
WklORykKLSAgICAgICAgdGV4dEF1dG9zaXppbmdFbmFibGVkID0gc2V0dGluZ3MtPnRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgIHNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5h
YmxlZCA9IHNldHRpbmdzLT5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKTsKLSAgICB9Ci0K
LSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IEZvcmNlIHRoZSBzaXRlIHNwZWNpZmlj
IHF1aXJrIGJlbG93IHRvIHdvcmsgb24gaU9TLiBJbnZlc3RpZ2F0aW5nIG90aGVyIHNpdGUgc3Bl
Y2lmaWMgcXVpcmtzCi0gICAgLy8gdG8gc2VlIGlmIHdlIGNhbiBlbmFibGUgdGhlIHByZWZlcmVu
Y2UgYWxsIHRvZ2V0aGVyIGlzIHRvIGJlIGhhbmRsZWQgYnk6Ci0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzg0OTMzMDk+IEludmVzdGlnYXRlIEVuYWJsaW5nIFNpdGUgU3BlY2lmaWMgUXVpcmtzIGlu
IE1vYmlsZVNhZmFyaSBhbmQgVUlXZWJWaWV3Ci0gICAgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mg
PSB0cnVlOwotI2VuZGlmCi19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKQotewotICAgIHJldHVybiBhLmJhc2VV
UkwgPT0gYi5iYXNlVVJMCi0gICAgICAgICYmIGEuY2hhcnNldCA9PSBiLmNoYXJzZXQKLSAgICAg
ICAgJiYgYS5tb2RlID09IGIubW9kZQotICAgICAgICAmJiBhLmlzSFRNTERvY3VtZW50ID09IGIu
aXNIVE1MRG9jdW1lbnQKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgICAgICAmJiBh
LmNzc0dyaWRMYXlvdXRFbmFibGVkID09IGIuY3NzR3JpZExheW91dEVuYWJsZWQKLSNlbmRpZgot
ICAgICAgICAmJiBhLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID09IGIubmVlZHNTaXRlU3BlY2lm
aWNRdWlya3MKLSAgICAgICAgJiYgYS5lbmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUg
PT0gYi5lbmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUKLSAgICAgICAgJiYgYS51c2VM
ZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID09IGIudXNlTGVnYWN5QmFja2dy
b3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcgotICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0
aW9uRW5hYmxlZCA9PSBiLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZDsKLX0KLQotQ1NTUGFy
c2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLSAgICA6IG1f
Y29udGV4dChjb250ZXh0KQotewotI2lmIFlZREVCVUcgPiAwCi0gICAgY3NzeXlkZWJ1ZyA9IDE7
Ci0jZW5kaWYKLX0KLQotQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkKLXsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
LSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2ldKTsKLX0K
LQotdm9pZCBDU1NQYXJzZXJTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgp
Ci17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICBXZWJDb3JlOjpjb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZUluUGxhY2UoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgV2ViQ29yZTo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKGNoYXJhY3RlcnMxNigp
LCBsZW5ndGgoKSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
KiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0
IGNoYXIqIHN1ZmZpeCwgdW5zaWduZWQgc3VmZml4TGVuZ3RoKQotewotICAgIG1fcGFyc2VkVGV4
dFByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aDsKLSAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGgg
PSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoICsg
bV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3VmZml4TGVuZ3RoICsgMTsKLSAgICBtX2xlbmd0
aCA9IGxlbmd0aDsKLQotICAgIGlmICghc3RyaW5nTGVuZ3RoIHx8IHN0cmluZy5pczhCaXQoKSkg
ewotICAgICAgICBtX2RhdGFTdGFydDggPSBzdGQ6Om1ha2VfdW5pcXVlPExDaGFyW10+KGxlbmd0
aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcnNlZFRleHRQcmVmaXhM
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fZGF0YVN0YXJ0OFtpXSA9IHByZWZpeFtpXTsKLQot
ICAgICAgICBpZiAoc3RyaW5nTGVuZ3RoKQotICAgICAgICAgICAgbWVtY3B5KG1fZGF0YVN0YXJ0
OC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNoYXJhY3RlcnM4KCks
IHN0cmluZ0xlbmd0aCAqIHNpemVvZihMQ2hhcikpOwotCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0
ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nTGVuZ3RoOwotICAgICAgICB1bnNp
Z25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLSAgICAgICAgICAgIG1fZGF0YVN0YXJ0OFtpXSA9IHN1
ZmZpeFtpIC0gc3RhcnRdOwotCi0gICAgICAgIG1fZGF0YVN0YXJ0OFtsZW5ndGggLSAxXSA9ICdc
MCc7Ci0KLSAgICAgICAgbV9pczhCaXRTb3VyY2UgPSB0cnVlOwotICAgICAgICBtX2N1cnJlbnRD
aGFyYWN0ZXI4ID0gbV9kYXRhU3RhcnQ4LmdldCgpOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0
ZXIxNiA9IG51bGxwdHI7Ci0gICAgICAgIHNldFRva2VuU3RhcnQ8TENoYXI+KG1fY3VycmVudENo
YXJhY3RlcjgpOwotICAgICAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PExDaGFy
PjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGF0YVN0YXJ0MTYgPSBzdGQ6Om1h
a2VfdW5pcXVlPFVDaGFyW10+KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsgKytpKQotICAgICAgICBtX2RhdGFTdGFydDE2W2ld
ID0gcHJlZml4W2ldOwotCi0gICAgQVNTRVJUKHN0cmluZ0xlbmd0aCk7Ci0gICAgbWVtY3B5KG1f
ZGF0YVN0YXJ0MTYuZ2V0KCkgKyBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGgsIHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0KLSAgICB1bnNpZ25l
ZCBzdGFydCA9IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCArIHN0cmluZ0xlbmd0aDsKLSAgICB1
bnNpZ25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICBtX2RhdGFTdGFydDE2W2ldID0gc3VmZml4
W2kgLSBzdGFydF07Ci0KLSAgICBtX2RhdGFTdGFydDE2W2xlbmd0aCAtIDFdID0gJ1wwJzsKLQot
ICAgIG1faXM4Qml0U291cmNlID0gZmFsc2U7Ci0gICAgbV9jdXJyZW50Q2hhcmFjdGVyOCA9IG51
bGxwdHI7Ci0gICAgbV9jdXJyZW50Q2hhcmFjdGVyMTYgPSBtX2RhdGFTdGFydDE2LmdldCgpOwot
ICAgIHNldFRva2VuU3RhcnQ8VUNoYXI+KG1fY3VycmVudENoYXJhY3RlcjE2KTsKLSAgICBtX2xl
eEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PFVDaGFyPjsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFRleHRQb3NpdGlvbiYgdGV4dFBvc2l0aW9uLCBSdWxlU291cmNlRGF0YUxpc3Qq
IHJ1bGVTb3VyY2VEYXRhUmVzdWx0LCBib29sIGxvZ0Vycm9ycykKLXsKLSAgICBzZXRTdHlsZVNo
ZWV0KHNoZWV0KTsKLSAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRvbTsgLy8gUmVzZXQg
dGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotICAgIGlmIChydWxlU291cmNlRGF0YVJlc3VsdCkKLSAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IHN0ZDo6bWFrZV91bmlxdWU8UnVsZVNvdXJj
ZURhdGFMaXN0PigpOwotICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgPSBydWxlU291cmNlRGF0
YVJlc3VsdDsKLQotICAgIG1fbG9nRXJyb3JzID0gbG9nRXJyb3JzICYmIHNoZWV0LT5zaW5nbGVP
d25lckRvY3VtZW50KCkgJiYgIXNoZWV0LT5iYXNlVVJMKCkuaXNFbXB0eSgpICYmIHNoZWV0LT5z
aW5nbGVPd25lckRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBtX2lnbm9yZUVycm9yc0luRGVjbGFy
YXRpb24gPSBmYWxzZTsKLSAgICBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyID0gdGV4dFBvc2l0aW9u
Lm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKLSAgICBtX3NoZWV0U3RhcnRDb2x1bW5OdW1iZXIgPSB0
ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7Ci0gICAgbV9saW5lTnVtYmVyID0g
bV9zaGVldFN0YXJ0TGluZU51bWJlcjsKLSAgICBtX2NvbHVtbk9mZnNldEZvckxpbmUgPSAwOwot
ICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwot
ICAgIHNoZWV0LT5zaHJpbmtUb0ZpdCgpOwotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sucmVz
ZXQoKTsKLSAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3J1bGUg
PSBudWxscHRyOwotICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IGZhbHNlOwotICAg
IG1fbG9nRXJyb3JzID0gZmFsc2U7Ci19Ci0KLVJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJz
ZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0
cmluZykKLXsKLSAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKLSAgICBtX2FsbG93TmFtZXNwYWNl
RGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXJ1bGV7Iiwg
c3RyaW5nLCAifSAiKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwotICAgIHJldHVybiBtX3J1bGU7
Ci19Ci0KLVJlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVSdWxl
KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAg
IHNldFN0eWxlU2hlZXQoc2hlZXQpOwotICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1rZXlmcmFt
ZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgcmV0
dXJuIG1fa2V5ZnJhbWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN1cHBvcnRzQ29uZGl0
aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIG1fc3VwcG9ydHNDb25kaXRpb24gPSBm
YWxzZTsKLSAgICAvLyBjYW4ndCB1c2UgeyBiZWNhdXNlIHRva2VuaXplciBzdGF0ZSBzd2l0Y2hl
cyBmcm9tIHN1cHBvcnRzIHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBzZWVzIHsgdG9rZW4uCi0g
ICAgLy8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJVEVTUEFDRSBpbiBDU1NH
cmFtbWFyLnkpCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXN1cHBvcnRzLWNvbmRpdGlvbiAi
LCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1fc3Vw
cG9ydHNDb25kaXRpb247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbG9yUHJvcGVydHlJ
RChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5l
VGhyb3VnaENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJBZnRlckNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJCZWZvcmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kQ29sb3I6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lz
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBD
U1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKENTU1ZhbHVlSUQgdmFsdWVJRCkKLXsK
LSAgICByZXR1cm4gdmFsdWVJRCA+PSBDU1NWYWx1ZUFxdWEgJiYgdmFsdWVJRCA8PSBDU1NWYWx1
ZUFwcGxlU3lzdGVtWWVsbG93OwotfQotCi1zdGF0aWMgYm9vbCB2YWxpZFByaW1pdGl2ZVZhbHVl
Q29sb3IoQ1NTVmFsdWVJRCB2YWx1ZUlELCBib29sIHN0cmljdCA9IGZhbHNlKQotewotICAgIHJl
dHVybiAodmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUN1cnJlbnRjb2xvciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWVudQotICAgICAgICB8fCBDU1NQ
YXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKHZhbHVlSUQpIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVBbHBoYQotICAgICAgICB8fCAodmFsdWVJRCA+PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmlu
Z0NvbG9yICYmIHZhbHVlSUQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgIXN0cmljdCkpOwotfQot
Ci1zdGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZUNvbG9yVmFsdWUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCi17Ci0gICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBib29sIHN0cmlj
dCA9IGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAoIWlzQ29sb3JQ
cm9wZXJ0eUlEKHByb3BlcnR5SWQpKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJl
c3VsdDo6RXJyb3I7Ci0KLSAgICBDU1NQYXJzZXJTdHJpbmcgY3NzU3RyaW5nOwotICAgIGNzc1N0
cmluZy5pbml0KHN0cmluZyk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1ZUlEID0gY3NzVmFsdWVLZXl3
b3JkSUQoY3NzU3RyaW5nKTsKLSAgICBpZiAodmFsaWRQcmltaXRpdmVWYWx1ZUNvbG9yKHZhbHVl
SUQsIHN0cmljdCkpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwotICAgICAgICByZXR1cm4gZGVj
bGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgV1RGTW92
ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6
IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLSAgICB9Ci0gICAgUkdCQTMyIGNv
bG9yOwotICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBz
dHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBh
cnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGF1dG8gdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOwotICAgIHJldHVybiBkZWNsYXJhdGlvbi5h
ZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBXVEZNb3ZlKHZhbHVlKSwg
aW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2VkIDogQ1NTUGFyc2Vy
OjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1w
bGVMZW5ndGhQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgYm9vbCYgYWNjZXB0
c05lZ2F0aXZlTnVtYmVycykKLXsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdC
b3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TG9naWNhbEhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNh
bFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFBhZGRpbmdCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdF
bmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKLSNpZiBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93R2FwOgotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgotI2VuZGlmCi0gICAg
ICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q3g6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUN5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkxl
ZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJnaW5Ub3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVJ4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKLSAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJnaW5TdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5WDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5WToKLSAgICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29s
IHBhcnNlU2ltcGxlTGVuZ3RoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkJiBsZW5ndGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIHVuaXQsIGRvdWJsZSYg
bnVtYmVyKQotewotICAgIGlmIChsZW5ndGggPiAyICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAtIDJd
IHwgMHgyMCkgPT0gJ3AnICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdIHwgMHgyMCkgPT0gJ3gn
KSB7Ci0gICAgICAgIGxlbmd0aCAtPSAyOwotICAgICAgICB1bml0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWDsKLSAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEgJiYgY2hhcmFjdGVyc1tsZW5n
dGggLSAxXSA9PSAnJScpIHsKLSAgICAgICAgbGVuZ3RoIC09IDE7Ci0gICAgICAgIHVuaXQgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7Ci0gICAgfQotCi0gICAgLy8gV2UgcmVs
eSBvbiBjaGFyYWN0ZXJzVG9Eb3VibGUgZm9yIHZhbGlkYXRpb24gYXMgd2VsbC4gVGhlIGZ1bmN0
aW9uCi0gICAgLy8gd2lsbCBzZXQgIm9rIiB0byAiZmFsc2UiIGlmIHRoZSBlbnRpcmUgcGFzc2Vk
LWluIGNoYXJhY3RlciByYW5nZSBkb2VzCi0gICAgLy8gbm90IHJlcHJlc2VudCBhIGRvdWJsZS4K
LSAgICBib29sIG9rOwotICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJz
LCBsZW5ndGgsICZvayk7Ci0gICAgcmV0dXJuIG9rOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMm
IGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotewotICAg
IEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVOdW1i
ZXJzOwotICAgIGlmICghaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKHByb3BlcnR5SWQsIGFjY2Vw
dHNOZWdhdGl2ZU51bWJlcnMpKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6RXJyb3I7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAg
ZG91YmxlIG51bWJlcjsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
IHsKLSAgICAgICAgaWYgKCFwYXJzZVNpbXBsZUxlbmd0aChzdHJpbmcuY2hhcmFjdGVyczgoKSwg
bGVuZ3RoLCB1bml0LCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFy
c2VSZXN1bHQ6OkVycm9yOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghcGFyc2VTaW1wbGVM
ZW5ndGgoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHVuaXQsIG51bWJlcikpCi0gICAg
ICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgfQotCi0g
ICAgaWYgKHVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAg
aWYgKG51bWJlciAmJiBpc1N0cmljdFBhcnNlck1vZGUoY3NzUGFyc2VyTW9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgICAgIHVuaXQg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOwotICAgIH0KLSAgICBpZiAobnVtYmVyIDwgMCAm
JiAhYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFy
c2VSZXN1bHQ6OkVycm9yOwotICAgIGlmIChzdGQ6OmlzaW5mKG51bWJlcikpCi0gICAgICAgIHJl
dHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGF1dG8gdmFsdWUgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdW5pdCk7Ci0gICAg
cmV0dXJuIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5
SWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OkNoYW5nZWQgOiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkLCBpbnQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgcGFyc2Vy
Q29udGV4dCwgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0Q29udGVudHMpCi17Ci0gICAg
aWYgKCF2YWx1ZUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2U6IC8vIGNvbGxhcHNl
IHwgc2VwYXJhdGUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQ29s
bGFwc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNlcGFyYXRlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHls
ZTogLy8gPGJvcmRlci1zdHlsZT4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0U3R5bGU6IC8vIERlZmluZWQgYXM6IG5vbmUgfCBoaWRkZW4gfCBkb3R0ZWQgfCBkYXNo
ZWQgfAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZTogLy8gc29saWQgfCBk
b3VibGUgfCBncm9vdmUgfCByaWRnZSB8IGluc2V0IHwgb3V0c2V0Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0
ZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJTdGFydFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5S
dWxlU3R5bGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID49IENTU1ZhbHVlTm9uZSAmJiB2YWx1ZUlE
IDw9IENTU1ZhbHVlRG91YmxlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6Ci0gICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29udGVudEJveCkK
LSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlDYXB0aW9uU2lkZTogLy8gdG9wIHwgYm90dG9tIHwgbGVmdCB8IHJpZ2h0IHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUb3AgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUJvdHRvbSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6IC8vIG5vbmUgfCBsZWZ0IHwgcmlnaHQgfCBib3RoIHwg
aW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVCb3RoKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246IC8vIGx0ciB8IHJ0bCB8IGluaGVyaXQKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMdHIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJ0
bCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5RGlzcGxheToKLSAgICAgICAgLy8gaW5saW5lIHwgYmxvY2sgfCBsaXN0LWl0ZW0g
fCBpbmxpbmUtYmxvY2sgfCB0YWJsZSB8Ci0gICAgICAgIC8vIGlubGluZS10YWJsZSB8IHRhYmxl
LXJvdy1ncm91cCB8IHRhYmxlLWhlYWRlci1ncm91cCB8IHRhYmxlLWZvb3Rlci1ncm91cCB8IHRh
YmxlLXJvdyB8Ci0gICAgICAgIC8vIHRhYmxlLWNvbHVtbi1ncm91cCB8IHRhYmxlLWNvbHVtbiB8
IHRhYmxlLWNlbGwgfCB0YWJsZS1jYXB0aW9uIHwgLXdlYmtpdC1ib3ggfCAtd2Via2l0LWlubGlu
ZS1ib3ggfCBub25lIHwgaW5oZXJpdAotICAgICAgICAvLyBmbGV4IHwgLXdlYmtpdC1mbGV4IHwg
aW5saW5lLWZsZXggfCAtd2Via2l0LWlubGluZS1mbGV4IHwgZ3JpZCB8IGlubGluZS1ncmlkIHwg
Y29udGVudHMKLSAgICAgICAgaWYgKCh2YWx1ZUlEID49IENTU1ZhbHVlSW5saW5lICYmIHZhbHVl
SUQgPD0gQ1NTVmFsdWVDb250ZW50cykgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgICAg
ICBpZiAocGFyc2VyQ29udGV4dC5jc3NHcmlkTGF5b3V0RW5hYmxlZCAmJiAodmFsdWVJRCA9PSBD
U1NWYWx1ZUdyaWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUlubGluZUdyaWQpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1By
b3BlcnR5RW1wdHlDZWxsczogLy8gc2hvdyB8IGhpZGUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlU2hvdyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSGlkZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
RmxvYXQ6IC8vIGxlZnQgfCByaWdodCB8IG5vbmUgfCBjZW50ZXIgKGZvciBidWdneSBDU1MsIG1h
cHMgdG8gbm9uZSkKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVSaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6IC8vIG5vcm1hbCB8IGl0YWxpYyB8
IG9ibGlxdWUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFs
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJdGFsaWMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9ibGlx
dWUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOiAvLyBhdXRvIHwgb3B0aW1pemVTcGVlZCB8IG9wdGlt
aXplUXVhbGl0eSB8IC13ZWJraXQtY3Jpc3AtZWRnZXMgfCAtd2Via2l0LW9wdGltaXplLWNvbnRy
YXN0IHwgY3Jpc3AtZWRnZXMgfCBwaXhlbGF0ZWQKLSAgICAgICAgLy8gb3B0aW1pemVTcGVlZCBh
bmQgb3B0aW1pemVRdWFsaXR5IGFyZSBkZXByZWNhdGVkOyBhIHVzZXIgYWdlbnQgbXVzdCBhY2Nl
cHQgdGhlbSBhcyB2YWxpZCB2YWx1ZXMgYnV0IG11c3QgdHJlYXQgdGhlbSBhcyBoYXZpbmcgdGhl
IHNhbWUgYmVoYXZpb3IgYXMgcGl4ZWxhdGVkIGFuZCBhdXRvIHJlc3BlY3RpdmVseS4KLSAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRp
bWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXF1YWxpdHkKLSAgICAgICAg
ICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRDcmlzcEVkZ2VzIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVXZWJraXRPcHRpbWl6ZUNvbnRyYXN0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDcmlz
cEVkZ2VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQaXhlbGF0ZWQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBv
c2l0aW9uOiAvLyBpbnNpZGUgfCBvdXRzaWRlIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUluc2lkZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT3V0c2lkZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
TGlzdFN0eWxlVHlwZToKLSAgICAgICAgLy8gU2VlIHNlY3Rpb24gQ1NTX1BST1BfTElTVF9TVFlM
RV9UWVBFIG9mIGZpbGUgQ1NTVmFsdWVLZXl3b3Jkcy5pbgotICAgICAgICAvLyBmb3IgdGhlIGxp
c3Qgb2Ygc3VwcG9ydGVkIGxpc3Qtc3R5bGUtdHlwZXMuCi0gICAgICAgIGlmICgodmFsdWVJRCA+
PSBDU1NWYWx1ZURpc2MgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUthdGFrYW5hSXJvaGEpIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPYmplY3RGaXQ6Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlRmlsbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29udGFpbiB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlQ292ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVNjYWxlRG93bikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOiAvLyAoPGJvcmRlci1z
dHlsZT4gZXhjZXB0IGhpZGRlbikgfCBhdXRvIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgKHZhbHVlSUQg
Pj0gQ1NTVmFsdWVJbnNldCAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlRG91YmxlKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3dXcmFwOiAvLyBub3JtYWwgfCBicmVhay13b3JkCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdv
cmRXcmFwOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlQnJlYWtXb3JkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRv
dWNoQWN0aW9uOiAvLyBhdXRvIHwgbWFuaXB1bGF0aW9uCi0gICAgICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWFuaXB1bGF0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcFR5cGU6
IC8vIG5vbmUgfCBtYW5kYXRvcnkgfCBwcm94aW1pdHkKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0g
Q1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNYW5kYXRvcnkgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVByb3hpbWl0eSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6IC8vIHZpc2libGUg
fCBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvICB8IG92ZXJsYXkgfCBpbmhlcml0Ci0gICAgICAgIGlm
ICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSGlkZGVu
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8g
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU92ZXJsYXkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WTogLy8gdmlzaWJs
ZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gfCBvdmVybGF5IHwgaW5oZXJpdCB8IC13ZWJraXQt
cGFnZWQteCB8IC13ZWJraXQtcGFnZWQteQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZVZpc2libGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUhpZGRlbiB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlU2Nyb2xsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRQYWdlZFggfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQWZ0ZXI6IC8vIGF1dG8gfCBh
bHdheXMgfCBhdm9pZCB8IGxlZnQgfCByaWdodCB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVh
a0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVB
bHdheXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVM
ZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlOiAv
LyBhdm9pZCB8IGF1dG8gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkJyZWFrSW5zaWRlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUF2b2lkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgotICAgICAgICAvLyBu
b25lIHwgdmlzaWJsZVBhaW50ZWQgfCB2aXNpYmxlRmlsbCB8IHZpc2libGVTdHJva2UgfCB2aXNp
YmxlIHwKLSAgICAgICAgLy8gcGFpbnRlZCB8IGZpbGwgfCBzdHJva2UgfCBhdXRvIHwgYWxsIHwg
aW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVZpc2libGUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFsbCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlQXV0byB8fCAodmFsdWVJRCA+PSBDU1NWYWx1ZVZpc2libGVwYWludGVkICYmIHZh
bHVlSUQgPD0gQ1NTVmFsdWVTdHJva2UpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlvbjogLy8gc3RhdGljIHwgcmVs
YXRpdmUgfCBhYnNvbHV0ZSB8IGZpeGVkIHwgc3RpY2t5IHwgaW5oZXJpdAotICAgICAgICBpZiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXRpYyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVsYXRpdmUg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFic29sdXRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVGaXhl
ZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0U3RpY2t5KQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6IC8vIG5v
bmUgfCBib3RoIHwgaG9yaXpvbnRhbCB8IHZlcnRpY2FsIHwgYXV0bwotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJvdGggfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVZlcnRpY2FsIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlTcGVhazogLy8gbm9uZSB8IG5vcm1hbCB8
IHNwZWxsLW91dCB8IGRpZ2l0cyB8IGxpdGVyYWwtcHVuY3R1YXRpb24gfCBuby1wdW5jdHVhdGlv
biB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNwZWxsT3V0IHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVEaWdpdHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpdGVyYWxQdW5j
dHVhdGlvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9QdW5jdHVhdGlvbikKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGFibGVM
YXlvdXQ6IC8vIGF1dG8gfCBmaXhlZCB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVGaXhlZCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVU
aHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQ29udGludW91cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU2tpcFdoaXRlU3BhY2Up
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3Zl
cmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVN0eWxlOgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNv
bGlkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEb3VibGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURh
c2hlZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRG90RGFzaCB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RG90RG90RGFzaCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2F2ZSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93
OiAvLyBjbGlwIHwgZWxsaXBzaXMKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVDbGlw
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbGxpcHNpcykKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzogLy8g
YXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZUxlZ2liaWxpdHkgfCBnZW9tZXRyaWNQcmVj
aXNpb24KLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZWxlZ2li
aWxpdHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUdlb21ldHJpY3ByZWNpc2lvbikKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFRyYW5zZm9ybTogLy8gY2FwaXRhbGl6ZSB8IHVwcGVyY2FzZSB8IGxvd2VyY2FzZSB8IG5vbmUg
fCBpbmhlcml0Ci0gICAgICAgIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUNhcGl0YWxpemUgJiYg
dmFsdWVJRCA8PSBDU1NWYWx1ZUxvd2VyY2FzZSkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVZpc2liaWxpdHk6IC8vIHZpc2libGUgfCBoaWRkZW4gfCBjb2xsYXBzZSB8IGluaGVy
aXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVIaWRkZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNvbGxhcHNlKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBcHBlYXJhbmNlOgotICAgICAgICBpZiAoKHZhbHVlSUQgPj0gQ1NTVmFsdWVDaGVja2JveCAm
JiB2YWx1ZUlEIDw9IENTU1ZhbHVlQ2Fwc0xvY2tJbmRpY2F0b3IpIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSGlkZGVuKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1Nf
Q09NUE9TSVRJTkcpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1peEJsZW5kTW9kZToKLSAgICAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU11bHRp
cGx5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JlZW4KLSAgICAgICAgICAgIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEYXJrZW4gfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUxpZ2h0ZW4gfHwgIHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2xvckRvZGdlCi0g
ICAgICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sb3JCdXJuIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVIYXJkTGlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNvZnRMaWdodCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlRGlmZmVyZW5jZQotICAgICAgICAgICAgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUV4Y2x1c2lvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUGx1c0RhcmtlciB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlvbjoKLSAgICAgICAgaWYgKHZh
bHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJc29sYXRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVCb3JkZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpbmVzKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hBbGln
bjoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVTdHJldGNoIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVTdGFydCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRW5kIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVDZW50ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhc2VsaW5lKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJ
T05fQlJFQUspCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25CcmVhazoK
LSAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQ2xvbmUgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZVNsaWNlKQotICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgotICAgICAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJz
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94TGluZXM6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
U2luZ2xlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNdWx0aXBsZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eE9yaWVudDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVWZXJ0aWNhbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSW5saW5lQXhp
cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmxvY2tBeGlzKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXJ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVFbmQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNlbnRlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
SnVzdGlmeSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCYWxhbmNlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4RGlyZWN0aW9u
OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVJvdyB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlUm93UmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sdW1uIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVDb2x1bW5SZXZlcnNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoKLSAgICAgICAgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb3dyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdyYXAgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVdyYXBSZXZlcnNlKQotICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6Ci0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9y
bWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5n
OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFudGlhbGlhc2VkIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVTdWJwaXhlbEFudGlhbGlhc2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5zOgotICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU1hbnVh
bCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVk
Z2VzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6IC8vIGF1dG8gfCBsb29zZSB8IG5vcm1hbCB8IHN0
cmljdCB8IGFmdGVyLXdoaXRlLXNwYWNlCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
QXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTG9vc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5v
cm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3RyaWN0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVB
ZnRlcldoaXRlU3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgotICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhc2VsaW5lIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVDb250YWluKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZUNvbGxhcHNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTZXBhcmF0ZSB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlRGlzY2FyZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAgICAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmFj
a3dhcmRzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBaGVhZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
UmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
UmlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURvd24KLSAgICAgICAgICAgIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVVcCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVN0eWxlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVNsaWRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6IC8vIG5vcm1hbCB8
IHNwYWNlCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVTcGFjZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKLSAgICAgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUb3VjaCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZUV4YWN0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFY29ub215KQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
QXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWx3YXlzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVB
dm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmln
aHQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRS
ZWdpb25GcmFnbWVudDoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVCcmVhaykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoK
LSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMb2dpY2FsIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVWaXN1YWwpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZUJlZm9yZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWZ0ZXIgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUludGVyQ2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGJyZWFrOwotCi0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSAgICAgICAgLy8gYXV0byB8IHN0YXJ0IHwgZW5k
IHwgbGVmdCB8IHJpZ2h0IHwgY2VudGVyIHwganVzdGlmeQotICAgICAgICBpZiAoKHZhbHVlSUQg
Pj0gQ1NTVmFsdWVMZWZ0ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVKdXN0aWZ5KSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVuZCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsK
LSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJp
bmU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlSG9yaXpvbnRhbCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
SnVzdGlmeToKLSAgICAgICAgLy8gYXV0byB8IG5vbmUgfCBpbnRlci13b3JkIHwgZGlzdHJpYnV0
ZQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUludGVyV29yZCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlRGlzdHJpYnV0ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNl
Y3VyaXR5OgotICAgICAgICAvLyBkaXNjIHwgY2lyY2xlIHwgc3F1YXJlIHwgbm9uZSB8IGluaGVy
aXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVEaXNjIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVDaXJjbGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNxdWFyZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSNp
ZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFNpemVBZGp1c3Q6Ci0gICAgICAgIGlmICghcGFyc2VyQ29udGV4dC50ZXh0QXV0b3Npemlu
Z0VuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1T
dHlsZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVGbGF0IHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVQcmVzZXJ2ZTNkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzogLy8gYXV0byB8IG5vbmUg
fCBlbGVtZW50Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRWxlbWVudCkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VXNlck1vZGlmeTogLy8gcmVhZC1vbmx5IHwgcmVhZC13cml0ZQotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZVJlYWRPbmx5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZWFkV3JpdGUg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRXcml0ZVBsYWludGV4dE9ubHkpIHsKLSAgICAgICAg
ICAgIGlmIChzdHlsZVNoZWV0Q29udGVudHMpCi0gICAgICAgICAgICAgICAgc3R5bGVTaGVldENv
bnRlbnRzLT5wYXJzZXJTZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VXNlclNlbGVjdDogLy8gYXV0byB8IG5vbmUgfCB0ZXh0IHwgYWxsCi0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9u
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlVGV4dCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUFsbCkgewotICAgICAgICAgICAgaWYgKHN0
eWxlU2hlZXRDb250ZW50cykKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0Q29udGVudHMtPnBh
cnNlclNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRXcml0aW5nTW9kZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPj0gQ1NTVmFsdWVIb3Jpem9udGFs
VGIgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUhvcml6b250YWxCdCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZTog
Ly8gbm9ybWFsIHwgcHJlIHwgbm93cmFwIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUHJlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVQcmVXcmFwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVMaW5lIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVOb3dyYXApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazogLy8gbm9ybWFsIHwgYnJlYWstYWxs
IHwga2VlcC1hbGwgfCBicmVhay13b3JkICh0aGlzIGlzIGEgY3VzdG9tIGV4dGVuc2lvbikKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUJyZWFrQWxsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVLZWVwQWxsIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVCcmVha1dvcmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0jaWYgRU5BQkxFKENTU19UUkFJTElOR19XT1JEKQotICAgIGNhc2UgQ1NTUHJvcGVydHlBcHBs
ZVRyYWlsaW5nV29yZDogLy8gYXV0byB8IC1hcHBsZS1wYXJ0aWFsbHktYmFsYW5jZWQKLSAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJr
aXRQYXJ0aWFsbHlCYWxhbmNlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uOiAv
LyBub3JtYWwgfCBzdWIgfCBzdXBlcgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5v
cm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3ViIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdXBl
cikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzOiAvLyBub3JtYWwgfCBzbWFsbC1jYXBzIHwgYWxsLXNt
YWxsLWNhcHMgfCBwZXRpdGUtY2FwcyB8IGFsbC1wZXRpdGUtY2FwcyB8IHVuaWNhc2UgfCB0aXRs
aW5nLWNhcHMKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWxsU21hbGxDYXBz
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQZXRpdGVDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVB
bGxQZXRpdGVDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVVbmljYXNlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVUaXRsaW5nQ2FwcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzOiAvLyBXZSBv
bmx5IHN1cHBvcnQgdGhlIG5vcm1hbCBhbmQgaGlzdG9yaWNhbC1mb3JtcyB2YWx1ZXMuCi0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVI
aXN0b3JpY2FsRm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtBZnRlcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5QnJlYWtCZWZvcmU6Ci0gICAgICAgIC8vIGF1dG8gfCBhdm9pZCB8IGxlZnQg
fCByaWdodCB8IHJlY3RvIHwgdmVyc28gfCBjb2x1bW4gfCBwYWdlIHwgcmVnaW9uIHwgYXZvaWQt
cGFnZSB8IGF2b2lkLWNvbHVtbiB8IGF2b2lkLXJlZ2lvbgotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodAotICAgICAgICAgICAgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZVJlY3RvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVWZXJzbyB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlQ29sdW1uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQYWdlCi0gICAg
ICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVnaW9uIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdm9pZENvbHVtbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRQYWdlIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdm9pZFJlZ2lvbikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtJbnNpZGU6Ci0gICAgICAgIC8vIGF1
dG8gfCBhdm9pZCB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4gfCBhdm9pZC1yZWdpb24KLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVB
dm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRDb2x1bW4gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUF2b2lkUGFnZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRSZWdpb24pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jaWYg
IUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgVU5VU0VEX1BBUkFNKHBhcnNlckNvbnRleHQp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNL
ZXl3b3JkUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm94U2l6aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtJbnNpZGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVh
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlE
aXNwbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxzOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlGbG9hdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9z
aXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU9iamVjdEZpdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJm
bG93WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVBvaW50ZXJFdmVudHM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlSZXNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJv
dWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92
ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRU
cmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVNb2RlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZp
c2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Ci0jaWYgRU5B
QkxFKENTU19DT01QT1NJVElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlJc29sYXRpb246Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJBZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0j
aWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFrOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRl
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtCZWZvcmU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlDb2x1bW5GaWxsOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhX
cmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVTbmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJxdWVlRGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJm
bG93U2Nyb2xsaW5nOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29s
b3JBZGp1c3Q6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25C
cmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZyYWdtZW50OgotI2VuZGlmCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRSdWJ5UG9zaXRpb246Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6Ci0jZW5kaWYgLy8gQ1NTM19URVhU
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNl
clNlbGVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICBjYXNlIENTU1Byb3BlcnR5VG91Y2hBY3Rpb246Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwVHlwZToK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfVFJBSUxJTkdfV09SRCkKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QXBwbGVUcmFpbGluZ1dvcmQ6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZh
cmlhbnRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBib29sIGlzVW5pdmVyc2FsS2V5d29yZChjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICAvLyBUaGVzZSBrZXl3b3JkcyBjYW4gYmUgdXNlZCBmb3IgYWxsIHByb3BlcnRpZXMuCi0gICAg
cmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImluaXRpYWwiKQot
ICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJpbmhlcml0
IikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidW5z
ZXQiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJy
ZXZlcnQiKTsKLX0KLQotc3RhdGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VLZXl3b3Jk
VmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxl
U2hlZXRDb250ZW50cykKLXsKLSAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwotCi0gICAg
aWYgKCFpc0tleXdvcmRQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICghaXNV
bml2ZXJzYWxLZXl3b3JkKHN0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHBhcnNlIGluaXRp
YWwvaW5oZXJpdC91bnNldC9yZXZlcnQgc2hvcnRoYW5kczsgcmV0dXJuIGFuIGVycm9yIHNvIHRo
ZSBjYWxsZXIgd2lsbCB1c2UgdGhlIGZ1bGwgQ1NTIHBhcnNlci4KLSAgICAgICAgaWYgKHNob3J0
aGFuZEZvclByb3BlcnR5KHByb3BlcnR5SWQpLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJu
IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotICAgIH0KLQotICAgIENTU1BhcnNlclN0
cmluZyBjc3NTdHJpbmc7Ci0gICAgY3NzU3RyaW5nLmluaXQoc3RyaW5nKTsKLSAgICBDU1NWYWx1
ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NTdHJpbmcpOwotCi0gICAgaWYgKCF2
YWx1ZUlEKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0K
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
SW5oZXJpdCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUluaGVyaXRlZFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUluaXRp
YWwpCi0gICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVFeHBs
aWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVVbnNl
dCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVVuc2V0
VmFsdWUoKTsKLSAgICBlbHNlIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJ0KQotICAgICAg
ICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlUmV2ZXJ0VmFsdWUoKTsK
LSAgICBlbHNlIGlmIChpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUocHJvcGVydHlJZCwg
dmFsdWVJRCwgcGFyc2VyQ29udGV4dCwgc3R5bGVTaGVldENvbnRlbnRzKSkKLSAgICAgICAgdmFs
dWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZUlEKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpF
cnJvcjsKLQotICAgIHJldHVybiBkZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpKSA/IENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpV
bmNoYW5nZWQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGJvb2wgcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHMoV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUmIHRyYW5zZm9ybVZhbHVlLCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBleHBlY3RlZENvdW50KQotewotICAg
IGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgd2hp
bGUgKGV4cGVjdGVkQ291bnQpIHsKLSAgICAgICAgc2l6ZV90IGVuZCA9IFdURjo6ZmluZChjaGFy
YWN0ZXJzLCBsZW5ndGgsIGV4cGVjdGVkQ291bnQgPT0gMSA/ICcpJyA6ICcsJywgc3RhcnQpOwot
ICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5kIHx8IChleHBlY3RlZENvdW50ID09IDEgJiYgZW5k
ICE9IGxlbmd0aCAtIDEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudExlbmd0aCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKLSAg
ICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJzZVNpbXBsZUxlbmd0aChjaGFy
YWN0ZXJzICsgc3RhcnQsIGFyZ3VtZW50TGVuZ3RoLCB1bml0LCBudW1iZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYICYmIChudW1iZXIgfHwgdW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUobnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKSk7Ci0gICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKLSAgICAgICAgLS1leHBlY3RlZENv
dW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIENTU1BhcnNlcjo6UGFy
c2VSZXN1bHQgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAocHJvcGVydHlJRCAhPSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVy
cm9yOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0ZXN0VmFsaWRUcmFuc2Zvcm1T
dHJpbmdMZW5ndGggPSAxMjsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGlrZWx5TXVsdGlw
YXJ0VHJhbnNmb3JtU3RyaW5nTGVuZ3RoQ3V0b2ZmID0gMzI7Ci0gICAgaWYgKHN0cmluZy5sZW5n
dGgoKSA8IHNob3J0ZXN0VmFsaWRUcmFuc2Zvcm1TdHJpbmdMZW5ndGggfHwgc3RyaW5nLmxlbmd0
aCgpID4gbGlrZWx5TXVsdGlwYXJ0VHJhbnNmb3JtU3RyaW5nTGVuZ3RoQ3V0b2ZmKQotICAgICAg
ICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICBpZiAoIXN0cmlu
Zy5zdGFydHNXaXRoKCJ0cmFuc2xhdGUiLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBDU1NQYXJz
ZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIFVDaGFyIGM5ID0gdG9BU0NJSUxvd2VyKHN0
cmluZ1s5XSk7Ci0gICAgVUNoYXIgYzEwID0gdG9BU0NJSUxvd2VyKHN0cmluZ1sxMF0pOwotCi0g
ICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUgdHJhbnNm
b3JtVHlwZTsKLSAgICB1bnNpZ25lZCBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSAxOwotICAgIHVu
c2lnbmVkIGFyZ3VtZW50U3RhcnQgPSAxMTsKLSAgICBpZiAoYzkgPT0gJ3gnICYmIGMxMCA9PSAn
KCcpCi0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChjOSA9PSAneScgJiYgYzEw
ID09ICcoJykKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGM5ID09ICd6JyAm
JiBjMTAgPT0gJygnKQotICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoYzkgPT0g
JygnKSB7Ci0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICBleHBlY3RlZEFyZ3VtZW50Q291
bnQgPSAyOwotICAgICAgICBhcmd1bWVudFN0YXJ0ID0gMTA7Ci0gICAgfSBlbHNlIGlmIChjOSA9
PSAnMycgJiYgYzEwID09ICdkJyAmJiBzdHJpbmdbMTFdID09ICcoJykgewotICAgICAgICB0cmFu
c2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3Jt
T3BlcmF0aW9uOwotICAgICAgICBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSAzOwotICAgICAgICBh
cmd1bWVudFN0YXJ0ID0gMTI7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGF1dG8gdHJhbnNmb3JtVmFsdWUgPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6Y3JlYXRlKHRyYW5zZm9ybVR5cGUpOwotICAgIGJvb2wgc3VjY2Vz
czsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBzdWNjZXNzID0gcGFyc2VUcmFu
c2Zvcm1UcmFuc2xhdGVBcmd1bWVudHModHJhbnNmb3JtVmFsdWUsIHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBzdHJpbmcubGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4cGVjdGVkQXJndW1lbnRDb3Vu
dCk7Ci0gICAgZWxzZQotICAgICAgICBzdWNjZXNzID0gcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVB
cmd1bWVudHModHJhbnNmb3JtVmFsdWUsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxl
bmd0aCgpLCBhcmd1bWVudFN0YXJ0LCBleHBlY3RlZEFyZ3VtZW50Q291bnQpOwotICAgIGlmICgh
c3VjY2VzcykKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwot
Ci0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
Ci0gICAgcmVzdWx0LT5hcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm1WYWx1ZSkpOwotICAgIHJldHVy
biBwcm9wZXJ0aWVzLmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KENTU1Byb3BlcnR5VHJh
bnNmb3JtLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJl
c3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLX0KLQot
UmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBmYW1pbHlOYW1l
czsKLSAgICBzdHJpbmcuc3RyaW5nKCkuc3BsaXQoJywnLCB0cnVlLCBmYW1pbHlOYW1lcyk7Ci0K
LSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAg
IGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5hbWVzKSB7Ci0gICAgICAgIFN0cmluZyBz
dHJpcHBlZCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhmYW1pbHlOYW1lKTsK
LSAgICAgICAgaWYgKHN0cmlwcGVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGZvciAoYXV0
byBwcm9wZXJ0eUlEIDogeyBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVNhbnNTZXJpZiwgQ1NTVmFs
dWVDdXJzaXZlLCBDU1NWYWx1ZUZhbnRhc3ksIENTU1ZhbHVlTW9ub3NwYWNlLCBDU1NWYWx1ZVdl
YmtpdEJvZHkgfSkgewotICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aXBwZWQsIGdldFZhbHVlTmFtZShwcm9wZXJ0eUlEKSkpIHsKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUocHJvcGVydHlJRCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCF2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShzdHJpcHBlZCk7Ci0gICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHZhbHVlTGlzdCk7Ci19
Ci0KLUNTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKE11dGFibGVT
dHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIEFT
U0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCByZXN1
bHQgPSBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJp
bmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBQYXJzZVJl
c3VsdDo6RXJyb3IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBwYXJz
ZUNvbG9yVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBj
c3NQYXJzZXJNb2RlKTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0OjpFcnJvcikKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dChjc3NQ
YXJzZXJNb2RlKTsKLSAgICBpZiAoY29udGV4dFN0eWxlU2hlZXQpIHsKLSAgICAgICAgY29udGV4
dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQu
bW9kZSA9IGNzc1BhcnNlck1vZGU7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcGFyc2VLZXl3b3Jk
VmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0
LCBjb250ZXh0U3R5bGVTaGVldCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBQYXJzZVJlc3VsdDo6RXJy
b3IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBwYXJzZVRyYW5zbGF0
ZVRyYW5zZm9ybVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFu
dCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBQYXJzZVJlc3VsdDo6RXJyb3IpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwotICAgIHJldHVybiBw
YXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRh
bnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKLX0KLQotQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQ
YXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBk
ZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBT
dHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIENTU1BhcnNlckNv
bnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAoY29udGV4dFN0eWxlU2hlZXQp
IHsKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250ZXh0KCk7
Ci0gICAgICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7Ci0gICAgfQotCi0gICAgQ1NT
UGFyc2VyIHBhcnNlcihjb250ZXh0KTsKLSAgICBwYXJzZXIuc2V0Q3VzdG9tUHJvcGVydHlOYW1l
KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9u
LCBDU1NQcm9wZXJ0eUN1c3RvbSwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0
KTsKLX0KLQotQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVu
dHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxl
U2hlZXQpOwotCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXZhbHVleyIsIHN0cmluZywgIn0g
Iik7Ci0KLSAgICBtX2lkID0gcHJvcGVydHlJRDsKLSAgICBtX2ltcG9ydGFudCA9IGltcG9ydGFu
dDsKLQotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0KLSAgICBtX3J1bGUgPSBudWxscHRyOwotCi0g
ICAgUGFyc2VSZXN1bHQgcmVzdWx0ID0gUGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgaWYgKCFt
X3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IGRlY2xhcmF0
aW9uLmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKSA/IFBhcnNlUmVzdWx0
OjpDaGFuZ2VkIDogUGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLSAgICAgICAgY2xlYXJQcm9wZXJ0
aWVzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gVGhlIGNvbG9yIHdp
bGwgb25seSBiZSBjaGFuZ2VkIHdoZW4gc3RyaW5nIGNvbnRhaW5zIGEgdmFsaWQgQ1NTIGNvbG9y
LCBzbyBjYWxsZXJzCi0vLyBjYW4gc2V0IGl0IHRvIGEgZGVmYXVsdCBjb2xvciBhbmQgaWdub3Jl
IHRoZSBib29sZWFuIHJlc3VsdC4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYg
Y29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKLXsKLSAgICBpZiAoc3Ry
aW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRmlyc3QgdHJ5
IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUsIHJnYmEoKSwgcmdiKCkgb3IgIiMi
IHN5bnRheC4KLSAgICBpZiAoZmFzdFBhcnNlQ29sb3IoY29sb3IsIHN0cmluZywgc3RyaWN0KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1v
ZGUpOwotCi0gICAgLy8gSW4gY2FzZSB0aGUgZmFzdC1wYXRoIHBhcnNlciBkaWRuJ3QgdW5kZXJz
dGFuZCB0aGUgY29sb3IsIHRyeSB0aGUgZnVsbCBwYXJzZXIuCi0gICAgaWYgKCFwYXJzZXIucGFy
c2VDb2xvcihzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NWYWx1ZSYg
dmFsdWUgPSAqcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7Ci0gICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNSR0JDb2xv
cigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb2xvciA9IHByaW1pdGl2ZVZhbHVl
LmdldFJHQkEzMlZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHNldHVwUGFyc2VyKCJA
LXdlYmtpdC1kZWNsc3tjb2xvcjoiLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhp
cyk7Ci0gICAgbV9ydWxlID0gbnVsbHB0cjsKLQotICAgIHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0
aWVzLmlzRW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMuZmlyc3QoKS5pZCgpID09IENTU1By
b3BlcnR5Q29sb3I7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKFJHQkEz
MiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0g
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ1NTUGFyc2VyU3RyaW5nIGNzc0NvbG9yOwotICAgIGNzc0NvbG9yLmluaXQo
c3RyaW5nKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gY3NzVmFsdWVLZXl3b3JkSUQoY3NzQ29sb3Ip
OwotICAgIGlmICghdmFsaWRQcmltaXRpdmVWYWx1ZUNvbG9yKGlkKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ29sb3IgcGFyc2VkQ29sb3IgPSBkb2N1bWVudC0+cGFnZSgpLT50aGVt
ZSgpLnN5c3RlbUNvbG9yKGlkKTsKLSAgICBpZiAoIXBhcnNlZENvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29sb3IgPSBwYXJzZWRDb2xvci5yZ2IoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQotewotICAgIG1f
c2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rvckxpc3Q7Ci0KLSAgICBzZXR1
cFBhcnNlcigiQC13ZWJraXQtc2VsZWN0b3J7Iiwgc3RyaW5nLCAifSIpOwotCi0gICAgY3NzeXlw
YXJzZSh0aGlzKTsKLQotICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9IG51bGxw
dHI7Ci19Ci0KLVJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFbGVtZW50KiBlbGVt
ZW50KQotewotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9IGVsZW1lbnQtPmRvY3VtZW50
KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKS5wYXJzZXJDb250ZXh0KCk7Ci0gICAgY29udGV4
dC5tb2RlID0gc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAm
JiAhZWxlbWVudC0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7Ci0gICAgcmV0dXJuIENTU1Bh
cnNlcihjb250ZXh0KS5wYXJzZURlY2xhcmF0aW9uKHN0cmluZywgJmVsZW1lbnQtPmRvY3VtZW50
KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKSk7Ci19Ci0KLVJlZjxJbW11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0cmlu
ZywgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKLXsKLSAgICBzZXRTdHls
ZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKLQotICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1k
ZWNsc3siLCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxl
ID0gbnVsbHB0cjsKLQotICAgIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0g
Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0gICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0
dXJuIHN0eWxlOwotfQotCi0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0Q29udGVu
dHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Via2l0
LWRlY2xzeyIgcHJlZml4LgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5ndGgg
PSAxNTsKLQotICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgaWYg
KHJ1bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJ1bGVTb3VyY2VEYXRhTGlzdD4oKTsKLSAgICAgICAgbV9jdXJyZW50UnVs
ZURhdGFTdGFjay0+YXBwZW5kKCpydWxlU291cmNlRGF0YSk7Ci0gICAgfQotCi0gICAgc2V0dXBQ
YXJzZXIoIkAtd2Via2l0LWRlY2xzeyIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0
aGlzKTsKLSAgICBtX3J1bGUgPSBudWxscHRyOwotCi0gICAgYm9vbCBvayA9IGZhbHNlOwotICAg
IGlmICghbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgewotICAgICAgICBvayA9IHRydWU7
Ci0gICAgICAgIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0
aWVzKTsKLSAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgfQotCi0gICAgaWYgKHJ1bGVT
b3VyY2VEYXRhKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIHJ1bGVTb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0g
MDsKLSAgICAgICAgcnVsZVNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5nLmxl
bmd0aCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJ1bGVTb3VyY2VEYXRh
LT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlEYXRhID0gcnVsZVNv
dXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmF0KGkpOwotICAgICAgICAg
ICAgcHJvcGVydHlEYXRhLnJhbmdlLnN0YXJ0IC09IHByZWZpeExlbmd0aDsKLSAgICAgICAgICAg
IHByb3BlcnR5RGF0YS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcygqcnVsZVNvdXJjZURhdGEpOwotICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9r
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gQ1NTUGFyc2VyOjpwYXJzZU1lZGlh
UXVlcnkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKCFtX21lZGlhUXVlcnkpOwot
Ci0gICAgLy8gY2FuJ3QgdXNlIHsgYmVjYXVzZSB0b2tlbml6ZXIgc3RhdGUgc3dpdGNoZXMgZnJv
bSBtZWRpYXF1ZXJ5IHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBzZWVzIHsgdG9rZW4uCi0gICAg
Ly8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJVEVTUEFDRSBpbiBDU1NHcmFt
bWFyLnkpCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LW1lZGlhcXVlcnkgIiwgc3RyaW5nLCAi
fSAiKTsKLSAgICBjc3N5eXBhcnNlKHRoaXMpOwotCi0gICAgcmV0dXJuIFdURk1vdmUobV9tZWRp
YVF1ZXJ5KTsKLX0KLQotVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4gQ1NTUGFyc2VyOjpw
YXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIFZlY3RvcjxTb3Vy
Y2VTaXplPiByZXN1bHQ7Ci0KLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIEFTU0VSVCghbV9zb3VyY2VTaXplTGlzdCk7Ci0KLSAgICBzZXR1
cFBhcnNlcigiQC13ZWJraXQtc2l6ZXNhdHRyICIsIHN0cmluZywgIn0iKTsKLSAgICBjc3N5eXBh
cnNlKHRoaXMpOwotCi0gICAgaWYgKCFtX3NvdXJjZVNpemVMaXN0KQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgcmVzdWx0ID0gV1RGTW92ZSgqbV9zb3VyY2VTaXplTGlzdCk7Ci0gICAg
bV9zb3VyY2VTaXplTGlzdCA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8g
RklYTUUoMTQxMjg5KTogVGhlIGZvbGxvd2luZyB0d28gY29uc3RydWN0b3JzIGFyZSBvbmx5IG5l
ZWRlZCBiZWNhdXNlIG9mIGEgYnVnIGluIE1TVkMgMjAxMyAoYW5kIHByaW9yKS4KLS8vIFdlIHNo
b3VsZCByZW1vdmUgdGhpcyBjb2RlIGFzIHNvb24gYXMgYSBWaXN1YWwgU3R1ZGlvIHVwZGF0ZSB0
aGF0IGZpeGVzIHRoaXMgcHJvYmxlbSBpcyByZWxlYXNlZC4KLQotQ1NTUGFyc2VyOjpTb3VyY2VT
aXplOjpTb3VyY2VTaXplKENTU1BhcnNlcjo6U291cmNlU2l6ZSYmIG9yaWdpbmFsKQotICAgIDog
ZXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbmFsLmV4cHJlc3Npb24pKQotICAgICwgbGVuZ3RoKFdU
Rk1vdmUob3JpZ2luYWwubGVuZ3RoKSkKLXsKLX0KLQotQ1NTUGFyc2VyOjpTb3VyY2VTaXplOjpT
b3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVzc2lvbiwgUmVmPENTU1ZhbHVl
PiYmIHZhbHVlKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQotICAgICwg
bGVuZ3RoKFdURk1vdmUodmFsdWUpKQotewotfQotCi1PcHRpb25hbDxDU1NQYXJzZXI6OlNvdXJj
ZVNpemU+IENTU1BhcnNlcjo6c291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmIGV4cHJl
c3Npb24sIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSkKLXsKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlOwotICAgIGlmIChpc0NhbGN1bGF0aW9uKHBhcnNlclZhbHVlKSkgewotICAgICAg
ICBhdXRvKiBhcmdzID0gcGFyc2VyVmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgICAg
IGlmIChhcmdzICYmIGFyZ3MtPnNpemUoKSkKLSAgICAgICAgICAgIHZhbHVlID0gQ1NTQ2FsY1Zh
bHVlOjpjcmVhdGUocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICphcmdzLCBDYWxjdWxhdGlv
blJhbmdlTm9uTmVnYXRpdmUpOwotICAgIH0KLSAgICBpZiAoIXZhbHVlKQotICAgICAgICB2YWx1
ZSA9IHBhcnNlclZhbHVlLmNyZWF0ZUNTU1ZhbHVlKCk7Ci0gICAgZGVzdHJveShwYXJzZXJWYWx1
ZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgLy8gRklY
TUU6IENhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgaGVyZSB0byB3b3JrIGFyb3Vu
ZCBhbiBNU1ZDIGJ1Zy4KLSAgICAvLyBGb3Igb3RoZXIgY29tcGlsZXJzLCB3ZSBkaWQgbm90IG5l
ZWQgdG8gZGVmaW5lIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIHdlIGNvdWxkIHVzZSBhZ2dyZWdhdGUg
aW5pdGlhbGl6YXRpb24gc3ludGF4LgotICAgIHJldHVybiBTb3VyY2VTaXplKFdURk1vdmUoZXhw
cmVzc2lvbiksIHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFudCwgY29uc3QgUGFyc2VkUHJvcGVydHlW
ZWN0b3ImIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1dCwgc2l6ZV90JiB1
bnVzZWRFbnRyaWVzLCBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzPiYgc2VlblByb3BlcnRp
ZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlbkN1c3RvbVByb3BlcnRpZXMpCi17Ci0gICAg
Ly8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGhpZ2hlc3QgcHJpb3Jp
dHkgZGVmaW5pdGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBj
YW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQuCi0gICAgZm9yIChpbnQgaSA9IGlucHV0LnNp
emUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9w
ZXJ0eSA9IGlucHV0W2ldOwotICAgICAgICBpZiAocHJvcGVydHkuaXNJbXBvcnRhbnQoKSAhPSBp
bXBvcnRhbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChw
cm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7Ci0gICAgICAgICAgICBpZiAocHJv
cGVydHkudmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSkubmFtZSgpOwotICAgICAg
ICAgICAgICAgIGlmICghc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUpLmlzTmV3RW50cnkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG91dHB1dFst
LXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHByb3BlcnR5SURJ
bmRleCA9IHByb3BlcnR5LmlkKCkgLSBmaXJzdENTU1Byb3BlcnR5OwotICAgICAgICBBU1NFUlQo
cHJvcGVydHlJREluZGV4IDwgc2VlblByb3BlcnRpZXMuc2l6ZSgpKTsKLSAgICAgICAgaWYgKHNl
ZW5Qcm9wZXJ0aWVzW3Byb3BlcnR5SURJbmRleF0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgc2VlblByb3BlcnRpZXMuc2V0KHByb3BlcnR5SURJbmRleCk7Ci0gICAgICAgIG91dHB1
dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7Ci0gICAgfQotfQotCi1SZWY8SW1tdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUHJvcGVydGllcygpCi17Ci0g
ICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4gc2VlblByb3BlcnRpZXM7Ci0gICAgc2l6
ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOwotICAgIFZlY3Rv
cjxDU1NQcm9wZXJ0eSwgMjU2PiByZXN1bHRzKHVudXNlZEVudHJpZXMpOwotCi0gICAgLy8gSW1w
b3J0YW50IHByb3BlcnRpZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHksIHNvIGFkZCB0aGVtIGZpcnN0
LiBEdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2FuIHRoZW4gYmUgaWdub3JlZCB3aGVuIGZvdW5kLgot
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZWVuQ3VzdG9tUHJvcGVydGllczsKLSAgICBmaWx0
ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50
cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKTsKLSAgICBmaWx0ZXJQ
cm9wZXJ0aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMsIHJlc3VsdHMsIHVudXNlZEVudHJp
ZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuQ3VzdG9tUHJvcGVydGllcyk7Ci0gICAgaWYgKHVudXNl
ZEVudHJpZXMpCi0gICAgICAgIHJlc3VsdHMucmVtb3ZlKDAsIHVudXNlZEVudHJpZXMpOwotCi0g
ICAgcmV0dXJuIEltbXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKHJlc3VsdHMuZGF0YSgp
LCByZXN1bHRzLnNpemUoKSwgbV9jb250ZXh0Lm1vZGUpOwotfQotCi12b2lkIENTU1BhcnNlcjo6
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1
ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAgLy8gVGhpcyBwcm9wZXJ0
eSBkb2Vzbid0IGJlbG9uZyB0byBhIHNob3J0aGFuZCBvciBpcyBhIENTUyB2YXJpYWJsZSAod2hp
Y2ggd2lsbCBiZSByZXNvbHZlZCBsYXRlcikuCi0gICAgaWYgKCFtX2N1cnJlbnRTaG9ydGhhbmQp
IHsKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQs
IFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1f
aW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gc2hvcnRoYW5kcyA9IG1hdGNoaW5nU2hvcnRoYW5kc0ZvckxvbmdoYW5kKHBy
b3BJZCk7Ci0gICAgaWYgKHNob3J0aGFuZHMuc2l6ZSgpID09IDEpCi0gICAgICAgIG1fcGFyc2Vk
UHJvcGVydGllcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1w
b3J0YW50LCB0cnVlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwg
aW1wbGljaXQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFyc2VkUHJvcGVydGllcy5hcHBlbmQo
Q1NTUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCB0cnVlLCBpbmRl
eE9mU2hvcnRoYW5kRm9yTG9uZ2hhbmQobV9jdXJyZW50U2hvcnRoYW5kLCBzaG9ydGhhbmRzKSwg
bV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOwotfQotCi12b2lkIENTU1BhcnNlcjo6
cm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKQotewotICAgIEFTU0VSVChudW0gPj0gMCk7
Ci0gICAgQVNTRVJUKG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bSkpOwotICAgIG1fcGFyc2VkUHJvcGVydGllcy5zaHJpbmsobV9wYXJzZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIG51bSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpjbGVhclByb3BlcnRp
ZXMoKQotewotICAgIG1fcGFyc2VkUHJvcGVydGllcy5jbGVhcigpOwotICAgIG1fbnVtUGFyc2Vk
UHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IGludmFsaWRQYXJzZWRQcm9wZXJ0aWVzQ291bnQ7
Ci19Ci0KLVVSTCBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBVUkwoKTsKLSAgICBpZiAoY29udGV4dC5jaGFyc2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIFVSTChjb250ZXh0LmJhc2VVUkwsIHVybCk7Ci0gICAgcmV0dXJuIFVS
TChjb250ZXh0LmJhc2VVUkwsIHVybCwgY29udGV4dC5jaGFyc2V0KTsKLX0KLQotVVJMIENTU1Bh
cnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnZhbGlk
YXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgVW5pdHMgdW5pdEZsYWdzKQotewotICAgIGJvb2wgbXVzdEJlTm9uTmVnYXRpdmUgPSB1
bml0RmxhZ3MgJiBGTm9uTmVnOwotCi0gICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRp
b247Ci0gICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpIHsKLSAgICAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9uIHZhbHVlIHdhcyBhbHJlYWR5IHBhcnNlZCBzbyB3ZSByZXVz
ZSBpdC4gSG93ZXZlciwgd2UgbWF5IG5lZWQgdG8gdXBkYXRlIGl0cyByYW5nZS4KLSAgICAgICAg
Y2FsY3VsYXRpb24gPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpOwotICAgICAg
ICBjYWxjdWxhdGlvbi0+c2V0UGVybWl0dGVkVmFsdWVSYW5nZShtdXN0QmVOb25OZWdhdGl2ZSA/
IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9uLnNldENhbGN1bGF0aW9uKHBh
cnNlQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24sIG11c3RCZU5vbk5lZ2F0aXZlID8g
Q2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5nZUFsbCkpOwotICAg
ICAgICBjYWxjdWxhdGlvbiA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCk7Ci0g
ICAgICAgIGlmICghY2FsY3VsYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgc3dpdGNoIChjYWxjdWxhdGlvbi0+
Y2F0ZWdvcnkoKSkgewotICAgIGNhc2UgQ2FsY051bWJlcjoKLSAgICAgICAgaXNWYWxpZCA9ICh1
bml0RmxhZ3MgJiBGTnVtYmVyKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkICYmICh1bml0RmxhZ3Mg
JiBGSW50ZWdlcikgJiYgY2FsY3VsYXRpb24tPmlzSW50KCkpCi0gICAgICAgICAgICBpc1ZhbGlk
ID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkICYmICh1bml0RmxhZ3MgJiBGUG9zaXRpdmVJ
bnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSAmJiBjYWxjdWxhdGlvbi0+aXNQb3NpdGl2
ZSgpKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ2FsY0xlbmd0aDoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxjUGVyY2VudDoKLSAgICAgICAgaXNWYWxpZCA9
ICh1bml0RmxhZ3MgJiBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FsY1Bl
cmNlbnRMZW5ndGg6Ci0gICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRlBlcmNlbnQpICYm
ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxjUGVy
Y2VudE51bWJlcjoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGUGVyY2VudCkgJiYg
KHVuaXRGbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNBbmds
ZToKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGQW5nbGUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENhbGNUaW1lOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZU
aW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxjRnJlcXVlbmN5OgotICAgICAgICBp
c1ZhbGlkID0gKHVuaXRGbGFncyAmIEZGcmVxdWVuY3kpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENhbGNPdGhlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzVmFs
aWQ7Ci19Ci0KLWlubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1
ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0RmxhZ3MsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKLXsKLSAgICAvLyBRaXJrcyBtb2RlIGFuZCBzdmcgcHJlc2VudGF0aW9u
IGF0dHJpYnV0ZXMgYWNjZXB0IHVuaXQgbGVzcyB2YWx1ZXMuCi0gICAgcmV0dXJuICh1bml0Rmxh
Z3MgJiAoRkxlbmd0aCB8IEZBbmdsZSB8IEZUaW1lKSkgJiYgKCF2YWx1ZS5mVmFsdWUgfHwgY3Nz
UGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmli
dXRlTW9kZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0ZVVuaXQoVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhD
YWxjdWxhdGlvbikpCi0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNhbGN1bGF0aW9uVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzKTsKLSAgICAgICAgCi0gICAgYm9vbCBiID0gZmFs
c2U7Ci0gICAgc3dpdGNoICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpIHsKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgotICAgICAgICBiID0gKHVuaXRG
bGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNjZXB0VW5pdExlc3NW
YWx1ZXModmFsdWVXaXRoQ2FsY3VsYXRpb24sIHVuaXRGbGFncywgY3NzUGFyc2VyTW9kZSkpIHsK
LSAgICAgICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9ICh1bml0Rmxh
Z3MgJiBGTGVuZ3RoKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFggOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuaXRGbGFncyAmIEZBbmdsZSkgPyBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RFRyA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpOwotICAgICAgICAgICAgYiA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFiICYmICh1bml0RmxhZ3MgJiBGSW50ZWdlcikg
JiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCkKLSAgICAgICAgICAgIGIgPSB0
cnVlOwotICAgICAgICBpZiAoIWIgJiYgKHVuaXRGbGFncyAmIEZQb3NpdGl2ZUludGVnZXIpICYm
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaXNJbnQgJiYgdmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS5mVmFsdWUgPiAwKQotICAgICAgICAgICAgYiA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOgotICAgICAg
ICBiID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQYXJzZXJWYWx1ZTo6UV9FTVM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VN
UzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19DTToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QVDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19WSDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1JTjoKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWDoKLSAgICAgICAgYiA9ICh1bml0Rmxh
Z3MgJiBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TOgotICAgICAgICBi
ID0gKHVuaXRGbGFncyAmIEZUaW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFE
OgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19UVVJOOgotICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZBbmdsZSk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5B
QkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RQUFg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQSToKLSAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToKLSAgICAgICAgYiA9ICh1bml0RmxhZ3MgJiBG
UmVzb2x1dGlvbik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0haOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFo6Ci0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTjoKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGIgJiYgdW5pdEZsYWdzICYgRk5vbk5lZyAm
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8IDApCi0gICAgICAgIGIgPSBm
YWxzZTsKLSAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkuZlZhbHVlKSkKLSAgICAgICAgYiA9IGZhbHNlOwotICAgIHJldHVybiBiOwotfQotCi1pbmxp
bmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi17Ci0g
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpCi0gICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0
aW9uKCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gdmFsdWVXaXRoQ2FsY3VsYXRp
b247Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKLSAgICBBU1NFUlQoKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tI
WikKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJO
ICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMpCi0gICAgICAgIHx8
ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpCi0gICAgICAgIHx8ICh2YWx1ZS51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRFBDTSkpOwotI2Vsc2UKLSAgICBBU1NFUlQoKHZhbHVlLnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMp
Ci0gICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYg
dmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpKTsKLSNlbmRpZgotICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkp
OwotfQotCi1pbmxpbmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
dmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOwotICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLnN0cmluZywgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tYShDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUpCi17IAotICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCc7IAotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAnLyc7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc1ZhbGlk
U2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi17Ci0gICAg
aW50IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKLSAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMgfHwgaWQgPT0g
Q1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGlkID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVu
dCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUgfHwgaWQgPT0gQ1NTVmFsdWVX
ZWJraXRGaXRDb250ZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIWlkICYm
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZyk7Ci19Ci0KLWlubGluZSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIFZhbHVlV2l0aENh
bGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsKLSAgICBpZiAoaWRlbnRpZmllcikK
LSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGlkZW50aWZpZXIpOwotCi0gICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBp
ZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA8PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgaWYgKHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4gJiYgdmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
Q0hTKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0
ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0jaWYg
RU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9R
VUVSWSkKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQotICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSNlbmRpZgotICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6
OlFfRU1TKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5n
TWFyZ2luUXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRU1TKTsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3Vs
YXRpb24oKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVX
aXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotdm9pZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQ
cm9wZXJ0eShwcm9wSWQpOwotICAgIHVuc2lnbmVkIHNob3J0aGFuZExlbmd0aCA9IHNob3J0aGFu
ZC5sZW5ndGgoKTsKLSAgICBpZiAoIXNob3J0aGFuZExlbmd0aCkgewotICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKLSAgICBj
b25zdCBDU1NQcm9wZXJ0eUlEKiBsb25naGFuZHMgPSBzaG9ydGhhbmQucHJvcGVydGllcygpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmRMZW5ndGg7ICsraSkKLSAgICAg
ICAgYWRkUHJvcGVydHkobG9uZ2hhbmRzW2ldLCB2YWx1ZS5jb3B5UmVmKCksIGltcG9ydGFudCk7
Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVwZW5kZW50
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFs
dWUmIGRlcGVuZGVudFZhbHVlLCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Q
cm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCi17Ci0gICAgbV92YWx1ZUxpc3QucmVzZXQobmV3IENTU1BhcnNlclZhbHVlTGlzdCgpKTsK
LSAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVlTGlzdCgpLmJ1aWxkUGFyc2VyVmFsdWVMaXN0
U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVMaXN0LmdldCgpLCBjdXN0b21Qcm9wZXJ0aWVz
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIGRlcGVuZGVu
dFZhbHVlUHJvcGVydHlJRCA9IGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQoKTsKLSAgICBpZiAo
Q1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3Bl
cnR5SUQpKQotICAgICAgICBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eTo6
cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5kZW50VmFsdWVQcm9wZXJ0eUlELCBk
aXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLQotICAgIGlmICghcGFyc2VWYWx1ZShkZXBlbmRlbnRW
YWx1ZVByb3BlcnR5SUQsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChw
cm9wZXJ0eS5pZCgpID09IHByb3BJRCkKLSAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS52YWx1
ZSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGJvb2wgaXNJbWFn
ZVNldEZ1bmN0aW9uVmFsdWUoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIHJl
dHVybiB2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJpbWFnZS1zZXQoIikg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LWltYWdlLXNldCgiKSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAoIW1fdmFsdWVM
aXN0IHx8ICFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmlkOwotICAgIAotICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlDdXN0
b20pCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oaW1wb3J0
YW50LCBpZCk7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPmNvbnRhaW5zVmFyaWFibGVzKCkpIHsK
LSAgICAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJW
YWx1ZUxpc3QoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZh
bHVlKHByb3BJZCwgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodmFs
dWVMaXN0KSwgcHJvcElkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsK
LSAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVMaXN0LT5zaXpl
KCk7Ci0KLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KSB7Ci0gICAgICAgIGlmIChudW0g
IT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkRXhwYW5kZWRQcm9w
ZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCks
IGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChp
ZCA9PSBDU1NWYWx1ZUluaXRpYWwpIHsKLSAgICAgICAgaWYgKG51bSAhPSAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUocHJv
cElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVVu
c2V0KSB7Ci0gICAgICAgIGlmIChudW0gIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29s
LmNyZWF0ZVVuc2V0VmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJldmVydCkgewotICAgICAgICBpZiAobnVtICE9
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZEV4cGFuZGVkUHJvcGVy
dHlGb3JWYWx1ZShwcm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVSZXZlcnRWYWx1ZSgpLCBpbXBv
cnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eUFsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAiYWxsIiBkb2Vz
bid0IGFsbG93IHlvdSB0byBzcGVjaWZ5IGFueXRoaW5nIG90aGVyIHRoYW4gaW5oZXJpdC9pbml0
aWFsL3Vuc2V0LgotCi0gICAgaWYgKGlzS2V5d29yZFByb3BlcnR5SUQocHJvcElkKSkgewotICAg
ICAgICBpZiAoIWlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShwcm9wSWQsIGlkLCBtX2Nv
bnRleHQsIG1fc3R5bGVTaGVldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpICYmICFpblNob3J0aGFuZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbC5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGlmIChp
blZpZXdwb3J0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZVZpZXdwb3J0UHJvcGVydHkocHJvcElk
LCBpbXBvcnRhbnQpOwotI2VuZGlmCi0KLSAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLQotICAgIHN3aXRjaCAocHJvcElk
KSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNpemU6ICAgICAgICAgICAgICAgICAvLyA8bGVuZ3Ro
PnsxLDJ9IHwgYXV0byB8IFsgPHBhZ2Utc2l6ZT4gfHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0g
XQotICAgICAgICByZXR1cm4gcGFyc2VTaXplKHByb3BJZCwgaW1wb3J0YW50KTsKLQotICAgIGNh
c2UgQ1NTUHJvcGVydHlRdW90ZXM6ICAgICAgICAgICAgICAgLy8gWzxzdHJpbmc+IDxzdHJpbmc+
XSsgfCBub25lIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VRdW90ZXMocHJvcElkLCBpbXBvcnRhbnQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6IC8vIG5vcm1hbCB8IGVtYmVkIHwgYmlk
aS1vdmVycmlkZSB8IGlzb2xhdGUgfCBpc29sYXRlLW92ZXJyaWRlIHwgcGxhaW50ZXh0IHwgaW5o
ZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwKLSAgICAgICAgICAgIHx8IGlk
ID09IENTU1ZhbHVlRW1iZWQKLSAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlQmlkaU92ZXJy
aWRlCi0gICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdElzb2xhdGUKLSAgICAgICAg
ICAgIHx8IGlkID09IENTU1ZhbHVlV2Via2l0SXNvbGF0ZU92ZXJyaWRlCi0gICAgICAgICAgICB8
fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVu
dDogICAgICAgICAgICAgIC8vIFsgPHN0cmluZz4gfCA8dXJpPiB8IDxjb3VudGVyPiB8IGF0dHIo
WCkgfCBvcGVuLXF1b3RlIHwKLSAgICAgICAgLy8gY2xvc2UtcXVvdGUgfCBuby1vcGVuLXF1b3Rl
IHwgbm8tY2xvc2UtcXVvdGUgXSsgfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZUNvbnRl
bnQocHJvcElkLCBpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFsdDogLy8gWyA8
c3RyaW5nPiB8IGF0dHIoWCkgXQotICAgICAgICByZXR1cm4gcGFyc2VBbHQocHJvcElkLCBpbXBv
cnRhbnQpOwotICAgICAgICAgICAgCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXA6ICAgICAgICAg
ICAgICAgICAvLyA8c2hhcGU+IHwgYXV0byB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNsaXBTaGFwZShwcm9wSWQs
IGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLyogU3RhcnQgb2Ygc3VwcG9ydGVk
IENTUyBwcm9wZXJ0aWVzIHdpdGggdmFsaWRhdGlvbi4gVGhpcyBpcyBuZWVkZWQgZm9yIHBhcnNl
U2hvcnRoYW5kIHRvIHdvcmsKLSAgICAgKiBjb3JyZWN0bHkgYW5kIGFsbG93cyBvcHRpbWl6YXRp
b24gaW4gV2ViQ29yZTo6YXBwbHlSdWxlKC4uKQotICAgICAqLwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdmVyZmxvdzogewotICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQp
OwotICAgICAgICBpZiAobnVtICE9IDEgfHwgIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlPdmVyZmxv
d1ksIGltcG9ydGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiBvdmVyZmxvd1hWYWx1ZTsKLQotICAgICAgICAvLyBGSVhNRTogLXdlYmtp
dC1wYWdlZC14IG9yIC13ZWJraXQtcGFnZWQteSBvbmx5IGFwcGx5IHRvIG92ZXJmbG93LXkuIElm
IHRoaXMgdmFsdWUgaGFzIGJlZW4KLSAgICAgICAgLy8gc2V0IHVzaW5nIHRoZSBzaG9ydGhhbmQs
IHRoZW4gZm9yIG5vdyBvdmVyZmxvdy14IHdpbGwgZGVmYXVsdCB0byBhdXRvLCBidXQgb25jZSB3
ZSBpbXBsZW1lbnQKLSAgICAgICAgLy8gcGFnaW5hdGlvbiBjb250cm9scywgaXQgc2hvdWxkIGRl
ZmF1bHQgdG8gaGlkZGVuLiBJZiB0aGUgb3ZlcmZsb3cteSB2YWx1ZSBpcyBhbnl0aGluZyBidXQK
LSAgICAgICAgLy8gcGFnZWQteCBvciBwYWdlZC15LCB0aGVuIG92ZXJmbG93LXggYW5kIG92ZXJm
bG93LXkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUuCi0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZVdlYmtpdFBhZ2VkWCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWSkKLSAgICAgICAg
ICAgIG92ZXJmbG93WFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdmVyZmxvd1hWYWx1ZSA9
IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKLSAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlPdmVyZmxvd1gsIFdURk1vdmUob3ZlcmZsb3dYVmFsdWUpLCBpbXBvcnRhbnQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dEFsaWduOgotICAgICAgICAvLyBsZWZ0IHwgcmlnaHQgfCBjZW50ZXIgfCBqdXN0aWZ5IHwgLXdl
YmtpdC1sZWZ0IHwgLXdlYmtpdC1yaWdodCB8IC13ZWJraXQtY2VudGVyIHwgLXdlYmtpdC1tYXRj
aC1wYXJlbnQKLSAgICAgICAgLy8gfCBzdGFydCB8IGVuZCB8IGluaGVyaXQgfCAtd2Via2l0LWF1
dG8gKGNvbnZlcnRlZCB0byBzdGFydCkKLSAgICAgICAgLy8gTk9URTogPHN0cmluZz4gaXMgbm90
IHN1cHBvcnRlZC4KLSAgICAgICAgaWYgKChpZCA+PSBDU1NWYWx1ZVdlYmtpdEF1dG8gJiYgaWQg
PD0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkgfHwgaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBp
ZCA9PSBDU1NWYWx1ZUVuZCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDogIHsgLy8gbm9y
bWFsIHwgYm9sZCB8IGJvbGRlciB8IGxpZ2h0ZXIgfCAxMDAgfCAyMDAgfCAzMDAgfCA0MDAgfCA1
MDAgfCA2MDAgfCA3MDAgfCA4MDAgfCA5MDAgfCBpbmhlcml0Ci0gICAgICAgIGlmIChtX3ZhbHVl
TGlzdC0+c2l6ZSgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBwYXJzZUZvbnRXZWlnaHQoaW1wb3J0YW50KTsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFN5bnRoZXNpczogLy8gbm9uZSB8IFsgd2VpZ2h0IHx8IHN0eWxlIF0KLSAgICAg
ICAgcmV0dXJuIHBhcnNlRm9udFN5bnRoZXNpcyhpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsKLSAgICAgICAgaWYgKG51bSA9PSAxKSB7Ci0gICAgICAg
ICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmcp
OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9y
aXpvbnRhbFNwYWNpbmcsIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3Qo
KS52YWx1ZSgpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJWZXJ0aWNhbFNwYWNpbmcsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobnVtID09IDIpIHsKLSAgICAgICAg
ICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZyk7
Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jp
em9udGFsU3BhY2luZywgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlclZlcnRpY2FsU3BhY2luZywgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jp
em9udGFsU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxT
cGFjaW5nOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOiAgICAgICAgLy8gPGNvbG9yPiB8IGludmVydCB8IGlu
aGVyaXQKLSAgICAgICAgLy8gT3V0bGluZSBjb2xvciBoYXMgImludmVydCIgYXMgYWRkaXRpb25h
bCBrZXl3b3JkLgotICAgICAgICAvLyBBbHNvLCB3ZSB3YW50IHRvIGFsbG93IHRoZSBzcGVjaWFs
IGZvY3VzIGNvbG9yIGV2ZW4gaW4gc3RyaWN0IHBhcnNpbmcgbW9kZS4KLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlSW52ZXJ0IHx8IGlkID09IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3Ip
IHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJFbmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjogLy8gQ1NTMyB0ZXh0IGRlY29yYXRpb24gY29sb3Jz
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVD
b2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCkKLSAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsgLy8gQWx3YXlzIGFsbG93IHRoaXMsIGV2
ZW4gd2hlbiBzdHJpY3QgcGFyc2luZyBpcyBvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNpbmNlIHdlIHVzZSB0aGlzIGluIG91ciBVQSBzaGVldHMuCi0gICAgICAg
IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1
ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgICAgICB8fCAoaWQgPj0gQ1NTVmFs
dWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiBpZCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBpblF1
aXJrc01vZGUoKSkpIHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2xvcigpOwotICAg
ICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5
Q3Vyc29yOiB7Ci0gICAgICAgIC8vIEdyYW1tYXIgZGVmaW5lZCBieSBDU1MzIFVJIGFuZCBtb2Rp
ZmllZCBieSBDU1M0IGltYWdlczoKLSAgICAgICAgLy8gWyBbPGltYWdlPiBbPHg+IDx5Pl0/LF0q
Ci0gICAgICAgIC8vIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1bHQgfCBwb2ludGVyIHwgcHJv
Z3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAotICAgICAgICAvLyBudy1yZXNp
emUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6ZSB8IHMtcmVzaXplIHwgdy1yZXNp
emUgfCBldy1yZXNpemUgfAotICAgICAgICAvLyBucy1yZXNpemUgfCBuZXN3LXJlc2l6ZSB8IG53
c2UtcmVzaXplIHwgY29sLXJlc2l6ZSB8IHJvdy1yZXNpemUgfCB0ZXh0IHwgd2FpdCB8IGhlbHAg
fAotICAgICAgICAvLyB2ZXJ0aWNhbC10ZXh0IHwgY2VsbCB8IGNvbnRleHQtbWVudSB8IGFsaWFz
IHwgY29weSB8IG5vLWRyb3AgfCBub3QtYWxsb3dlZCB8Ci0gICAgICAgIC8vIHpvb20taW4gfCB6
b29tLW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIHwg
LXdlYmtpdC16b29tLWluIHwKLSAgICAgICAgLy8gLXdlYmtpdC16b29tLW91dCBdIF0gfCBpbmhl
cml0Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7Ci0gICAgICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpOwotICAgICAgICB3
aGlsZSAodmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2U7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsK
LSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gdmFsdWUtPnN0cmluZzsKLSAgICAgICAgICAg
ICAgICBpZiAoIXVyaS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBDU1NJ
bWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodXJpKSk7Ci0jaWYgRU5BQkxFKE1PVVNFX0NV
UlNPUl9TQ0FMRSkKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNldEZ1bmN0aW9uVmFs
dWUoKnZhbHVlKSkgewotICAgICAgICAgICAgICAgIGltYWdlID0gcGFyc2VJbWFnZVNldCgpOwot
ICAgICAgICAgICAgICAgIGlmICghaW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
I2VuZGlmCi0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgVmVjdG9yPGludD4gY29vcmRzOwotICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgd2hpbGUgKHZhbHVlICYmIHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgY29vcmRz
LmFwcGVuZChpbnQodmFsdWUtPmZWYWx1ZSkpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJvb2wgaGFzSG90
U3BvdCA9IGZhbHNlOwotICAgICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwotICAg
ICAgICAgICAgaW50IG5yY29vcmRzID0gY29vcmRzLnNpemUoKTsKLSAgICAgICAgICAgIGlmIChu
cmNvb3JkcyA+IDAgJiYgbnJjb29yZHMgIT0gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAobnJjb29yZHMgPT0gMikgewotICAgICAgICAgICAgICAgIGhh
c0hvdFNwb3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIGhvdFNwb3QgPSBJbnRQb2ludChjb29y
ZHNbMF0sIGNvb3Jkc1sxXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlz
dCkKLSAgICAgICAgICAgICAgICBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFy
YXRlZCgpOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKENTU0N1cnNvckltYWdlVmFsdWU6OmNyZWF0ZShpbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCBoYXNIb3RTcG90LCBob3RTcG90KSk7Ci0KLSAgICAgICAgICAgIGlmICgoaW5TdHJpY3RNb2Rl
KCkgJiYgIXZhbHVlKSB8fCAodmFsdWUgJiYgISh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7IC8v
IGNvbW1hCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpc3QpIHsKLSAgICAgICAgICAgIGlmICgh
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSBhZnRlciB1cmwgbGlzdCAoTVNJ
RSA1IGNvbXBhdGliaWxpdHkpCi0gICAgICAgICAgICAgICAgaWYgKGxpc3QtPmxlbmd0aCgpICE9
IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgLy8gTVNJ
RSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBvaW50ZXIpKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZhbHVlLT5pZCA8PSBD
U1NWYWx1ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvcHkgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFdURk1vdmUo
bGlzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkgewot
ICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgICAgICBpZiAoaW5RdWlya3NNb2Rl
KCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgewotICAgICAgICAgICAgICAgIC8vIE1T
SUUgNSBjb21wYXRpYmlsaXR5IDovCi0gICAgICAgICAgICAgICAgaWQgPSBDU1NWYWx1ZVBvaW50
ZXI7Ci0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlIGlmICgodmFsdWUtPmlkID49IENTU1ZhbHVlQXV0byAmJiB2YWx1ZS0+aWQgPD0gQ1NT
VmFsdWVXZWJraXRab29tT3V0KSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3B5IHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDdXJzb3JWaXNpYmlsaXR5OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IGlkID09IENTU1ZhbHVlQXV0b0hpZGUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZEF0dGFjaG1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRCbGVuZE1v
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZENvbXBvc2l0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXRZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrU291cmNlVHlwZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1JlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFg6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgotICAgIHsKLSAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWwxOwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7Ci0gICAgICAgIENT
U1Byb3BlcnR5SUQgcHJvcElkMSwgcHJvcElkMjsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKLSAgICAgICAgaWYgKHBhcnNlRmlsbFByb3BlcnR5KHByb3BJZCwgcHJvcElkMSwgcHJvcElk
MiwgdmFsMSwgdmFsMikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaG9ydGhhbmRT
Y29wZT4gc2hvcnRoYW5kU2NvcGU7Ci0gICAgICAgICAgICBpZiAocHJvcElkID09IENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8Ci0gICAgICAgICAgICAgICAgcHJvcElkID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fAotICAgICAgICAgICAgICAgIHByb3BJZCA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiB8fAotICAgICAgICAgICAgICAgIHByb3BJZCA9PSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpIHsKLSAgICAgICAgICAgICAgICBzaG9ydGhhbmRT
Y29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hvcnRoYW5kU2NvcGU+KHRoaXMsIHByb3BJZCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQxLCB2YWwxLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBpZiAodmFsMikKLSAgICAgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCB2YWwyLnJlbGVhc2VOb25OdWxsKCksIGltcG9y
dGFudCk7Ci0gICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG1f
aW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiAgICAgLy8gPHVyaT4gfCBub25l
IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZykpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VHZW5lcmF0ZWRJbWFnZSgq
bV92YWx1ZUxpc3QsIHBhcnNlZFZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpKSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUltYWdl
U2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6ICAgICAgICAvLyA8Ym9yZGVy
LXdpZHRoPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6ICAg
ICAvLy8vIDxib3JkZXItd2lkdGg+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodFdpZHRoOiAgIC8vICAgV2hpY2ggaXMgZGVmaW5lZCBhcwotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJCb3R0b21XaWR0aDogIC8vICAgdGhpbiB8IG1lZGl1bSB8IHRoaWNrIHwgPGxl
bmd0aD4KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJFbmRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3Jl
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyV2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aDoKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlVGhpbiB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBpZCA9PSBDU1NWYWx1ZVRoaWNrKQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlMZXR0ZXJTcGFjaW5nOiAgICAgICAvLyBub3JtYWwgfCA8bGVuZ3RoPiB8IGluaGVyaXQKLSAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOiAgICAgICAgIC8vIG5vcm1hbCB8
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OgotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
VGV4dEluZGVudCgpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRk
aW5nVG9wOiAgICAgICAgICAvLy8vIDxwYWRkaW5nLXdpZHRoPiB8IGluaGVyaXQKLSAgICBjYXNl
IENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OiAgICAgICAgLy8gICBXaGljaCBpcyBkZWZpbmVkIGFz
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206ICAgICAgIC8vICAgPGxlbmd0aD4g
fCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6ICAgICAgICAg
Ly8vLwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBh
ZGRpbmdCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKLSAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWF4TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCBpc1ZhbGlkU2l6ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0
aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2lj
YWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IGlzVmFsaWRTaXplKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2lj
YWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRMb2dpY2FsSGVpZ2h0OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaXNWYWxpZFNpemUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgICAgIHJldHVy
biBwYXJzZUZvbnRTaXplKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbjoKLSAgICAgICAgLy8gYmFzZWxpbmUgfCBzdWIgfCBzdXBlciB8IHRvcCB8IHRleHQt
dG9wIHwgbWlkZGxlIHwgYm90dG9tIHwgdGV4dC1ib3R0b20gfAotICAgICAgICAvLyA8cGVyY2Vu
dGFnZT4gfCA8bGVuZ3RoPiB8IGluaGVyaXQKLQotICAgICAgICBpZiAoaWQgPj0gQ1NTVmFsdWVC
YXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKQotICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm90dG9tOiAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0
byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDogICAgICAgICAgICAgICAgIC8v
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1By
b3BlcnR5UmlnaHQ6ICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwg
YXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5VG9wOiAgICAgICAgICAgICAgICAg
IC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENT
U1Byb3BlcnR5TWFyZ2luVG9wOiAgICAgICAgICAgLy8vLyA8bWFyZ2luLXdpZHRoPiB8IGluaGVy
aXQKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6ICAgICAgICAgLy8gICBXaGljaCBp
cyBkZWZpbmVkIGFzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbTogICAgICAgIC8v
ICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXJnaW5MZWZ0OiAgICAgICAgICAvLy8vCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcmdpblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luQWZ0ZXI6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlaSW5kZXg6ICAgICAgICAgICAgICAvLyBhdXRvIHwgPGludGVnZXI+IHwgaW5o
ZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwg
Q1NTUXVpcmtzTW9kZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlP
cnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9y
dCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdpZG93czogLy8gPGludGVnZXI+IHwgaW5oZXJpdCB8IGF1dG8gKERpdHRvKQotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyLCBDU1NR
dWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUxpbmVIZWlnaHQoaW1wb3J0YW50KTsKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDogICAgLy8gWyA8aWRlbnRpZmllcj4gPGlu
dGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCAhPSBDU1NWYWx1ZU5v
bmUpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHByb3BJZCwgMSwgaW1wb3J0YW50
KTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OiAgICAgICAgLy8gWyA8aWRlbnRpZmllcj4gPGlu
dGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCAhPSBDU1NWYWx1ZU5v
bmUpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHByb3BJZCwgMCwgaW1wb3J0YW50
KTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICAgICAgLy8gW1sgPGZhbWlseS1uYW1lPiB8
IDxnZW5lcmljLWZhbWlseT4gXSxdKiBbPGZhbWlseS1uYW1lPiB8IDxnZW5lcmljLWZhbWlseT5d
IHwgaW5oZXJpdAotICAgIHsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUZvbnRGYW1pbHko
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHREZWNvcmF0aW9uOgotICAgICAgICAvLyBbIDx0ZXh0LWRlY29yYXRpb24tbGluZT4gfHwgPHRl
eHQtZGVjb3JhdGlvbi1zdHlsZT4gfHwgPHRleHQtZGVjb3JhdGlvbi1jb2xvcj4gXSB8IGluaGVy
aXQKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb24sIHdlYmtpdFRleHREZWNvcmF0aW9uU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbkxpbmU6Ci0gICAgICAgIC8vIG5vbmUgfCBbIHVuZGVybGluZSB8fCBv
dmVybGluZSB8fCBsaW5lLXRocm91Z2ggfHwgYmxpbmsgXSB8IGluaGVyaXQKLSAgICAgICAgcmV0
dXJuIHBhcnNlVGV4dERlY29yYXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGU6Ci0gICAgICAgIC8vIHNvbGlkIHwg
ZG91YmxlIHwgZG90dGVkIHwgZGFzaGVkIHwgd2F2eQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVTb2xpZCB8fCBpZCA9PSBDU1NWYWx1ZURvdWJsZSB8fCBpZCA9PSBDU1NWYWx1ZURvdHRlZCB8
fCBpZCA9PSBDU1NWYWx1ZURhc2hlZCB8fCBpZCA9PSBDU1NWYWx1ZVdhdnkpCi0gICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcDoKLSAgICAgICAgLy8gbm9uZSB8IFsgb2Jq
ZWN0cyB8fCBzcGFjZXMgfHwgaW5rIHx8IGVkZ2VzIHx8IGJveC1kZWNvcmF0aW9uIF0KLSAgICAg
ICAgcmV0dXJuIHBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGltcG9ydGFudCk7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uOgotICAgICAgICAvLyBhdXRv
IHwgYWxwaGFiZXRpYyB8IHVuZGVyCi0gICAgICAgIHJldHVybiBwYXJzZVRleHRVbmRlcmxpbmVQ
b3NpdGlvbihpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206Ci0gICAgICAg
IC8vIG5vcm1hbCB8IHJlc2V0IHwgZG9jdW1lbnQgfCA8bnVtYmVyPiB8IDxwZXJjZW50YWdlPiB8
IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1Zh
bHVlUmVzZXQgfHwgaWQgPT0gQ1NTVmFsdWVEb2N1bWVudCkKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQ
ZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpOwotICAgICAgICBicmVhazsKLSAgICAK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFpvb206Ci0gICAgICAgIC8vIG5vcm1hbCB8
IHJlc2V0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1
ZVJlc2V0KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCB3aXRoaW4gQGZvbnQt
ZmFjZSBhbmQgQC13ZWJraXQtZmlsdGVyLCBzbyBjYW5ub3QgdXNlIGluaGVyaXQgfCBpbml0aWFs
IG9yIGJlICFpbXBvcnRhbnQuIFRoaXMgaXMgYSBsaXN0IG9mIHVybHMgb3IgbG9jYWwgcmVmZXJl
bmNlcy4KLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udEZhY2VTcmMoKTsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlVbmljb2RlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnRGYWNlVW5pY29k
ZVJhbmdlKCk7Ci0KLSAgICAvKiBDU1MzIHByb3BlcnRpZXMgKi8KLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJJbWFnZTogewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKLSAg
ICAgICAgcmV0dXJuIHBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCByZXN1bHQsIGltcG9ydGFudCk7
Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZShwcm9wSWQsIHJlc3VsdCkp
IHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQpLCBpbXBv
cnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0OiB7Ci0gICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFn
ZU91dHNldChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1v
dmUocmVzdWx0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1h
Z2VSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDog
ewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHBhcnNlQm9y
ZGVySW1hZ2VSZXBlYXQocmVzdWx0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNs
aWNlOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHJlc3VsdDsK
LSAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9wSWQsIHJlc3VsdCkpIHsKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQpLCBpbXBvcnRhbnQp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDogewotICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHJlc3VsdDsKLSAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VXaWR0aChy
ZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocmVzdWx0
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRp
dXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7Ci0gICAgICAgIGlmIChudW0gIT0gMSAmJiBudW0gIT0g
MikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZO
b25OZWcpOwotICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBhdXRvIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwotICAgICAgICBpZiAobnVtID09IDIpIHsKLSAgICAgICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1
ZUxpc3QtPm5leHQoKSk7Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5p
dChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcp
OwotICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTEucHRyKCk7Ci0KLSAgICAgICAgYWRk
UHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRW
YWx1ZTEpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZU5vbk51bGwoKSksIGltcG9ydGFudCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5VGFiU2l6ZToKLSAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZJbnRlZ2VyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBc3BlY3RSYXRpbzoKLSAgICAgICAgcmV0dXJuIHBhcnNlQXNwZWN0UmF0aW8oaW1w
b3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6Ci0gICAgICAgIHJldHVybiBwYXJzZUJvcmRlclJh
ZGl1cyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZz
ZXQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRl
eHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4xLCBiYWNrIGluIENT
UzMsIHNvIHRyZWF0IGFzIENTUzMKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2hhZG93OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2hhZG93VmFsdWVMaXN0ID0g
cGFyc2VTaGFkb3coKm1fdmFsdWVMaXN0LCBwcm9wSWQpOwotICAgICAgICAgICAgaWYgKHNoYWRv
d1ZhbHVlTGlzdCkgewotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgc2hhZG93
VmFsdWVMaXN0LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SW5pdGlhbExldHRlcjogewotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKG51bSAhPSAxICYmIG51bSAh
PSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRl
Z2VyKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBwb3NpdGlvbjsKLSAgICAgICAgICAgIGlmIChudW0gPT0gMikgewot
ICAgICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxh
dGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRl
Z2VyKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gaGVpZ2h0LnB0cigpOwotICAg
ICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIocG9z
aXRpb24ucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShoZWlnaHQpKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVmbGVjdChwcm9wSWQsIGltcG9ydGFu
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51
bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4
OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRk51bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3hGbGV4R3JvdXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3Vw
OgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZpbHRlcjoKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKLSNlbmRpZgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGN1cnJWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VGaWx0ZXIoKm1fdmFsdWVMaXN0LCBjdXJyVmFsdWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
V1RGTW92ZShjdXJyVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19DT01QT1NJVElORykK
LSAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlJc29sYXRpb246
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBjYXNlIENTU1Byb3BlcnR5RmxleDogewotICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29w
ZSh0aGlzLCBwcm9wSWQpOwotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93LCBjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwot
ICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4U2hyaW5rLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRh
bnQpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4QmFzaXMsIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJz
ZUZsZXgoKm1fdmFsdWVMaXN0LCBpbXBvcnRhbnQpOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5RmxleEJhc2lzOgotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBpbnRyaW5zaWMgZGltZW5z
aW9ucyB0b28uCi0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsZXhHcm93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hyaW5rOgotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51
bWJlciB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Jk
ZXI6Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRl
Z2VyLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhlIHNt
YWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5kIGlu
dCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCi0gICAgICAgICAgICBk
b3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcnF1ZWU6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdE1h
cnF1ZWVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFycXVlZUluY3JlbWVudDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU21hbGwgfHwgaWQg
PT0gQ1NTVmFsdWVMYXJnZSB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSkKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVy
Y2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
UmVwZXRpdGlvbjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFycXVlZVNwZWVkOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0g
Q1NTVmFsdWVTbG93IHx8IGlkID09IENTU1ZhbHVlRmFzdCkKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwgRkludGVnZXIgfCBG
Tm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvd1Ro
cmVhZChwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dG
cm9tOgotICAgICAgICByZXR1cm4gcGFyc2VSZWdpb25UaHJlYWQocHJvcElkLCBpbXBvcnRhbnQp
OwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybToKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB0cmFuc2Zvcm1W
YWx1ZSA9IHBhcnNlVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIHRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zZm9ybU9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luWjogewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbDE7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMjsKLSAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWwzOwotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BJZDEsIHBy
b3BJZDIsIHByb3BJZDM7Ci0gICAgICAgIGlmIChwYXJzZVRyYW5zZm9ybU9yaWdpbihwcm9wSWQs
IHByb3BJZDEsIHByb3BJZDIsIHByb3BJZDMsIHZhbDEsIHZhbDIsIHZhbDMpKSB7Ci0gICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQxLCBXVEZNb3ZlKHZhbDEpLCBpbXBvcnRhbnQpOwotICAg
ICAgICAgICAgaWYgKHZhbDIpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMiwg
V1RGTW92ZSh2YWwyKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGlmICh2YWwzKQotICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDMsIFdURk1vdmUodmFsMyksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZToKLSAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBBY2NlcHRpbmcgdmFsdWVsZXNzIG51bWJl
cnMgaXMgYSBxdWlyayBvZiB0aGUgLXdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9w
ZXJ0eS4KLSAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZykpIHsKLSAgICAgICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBl
cnNwZWN0aXZlT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWTogewotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gdmFsMjsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wSWQxLCBwcm9wSWQyOwotICAg
ICAgICBpZiAocGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihwcm9wSWQsIHByb3BJZDEsIHByb3BJZDIs
IHZhbDEsIHZhbDIpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQxLCBXVEZNb3Zl
KHZhbDEpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgaWYgKHZhbDIpCi0gICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkMiwgV1RGTW92ZSh2YWwyKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkR1
cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25GaWxsTW9kZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9u
UGxheVN0YXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25JdGVyYXRpb25Db3VudDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uVGltaW5nRnVuY3Rpb246Ci0jaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIp
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRyaWdnZXI6Ci0jZW5kaWYKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
cmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHk6IHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7Ci0gICAgICAgIEFu
aW1hdGlvblBhcnNlQ29udGV4dCBjb250ZXh0OwotICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Q
cm9wZXJ0eShwcm9wSWQsIHZhbCwgY29udGV4dCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgV1RGTW92ZSh2YWwpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXNlIENT
U1Byb3BlcnR5SnVzdGlmeUNvbnRlbnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb250
ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1Byb3BlcnR5SnVzdGlmeVNlbGY6Ci0gICAgICAgIHJldHVybiBwYXJzZUl0ZW1Qb3Np
dGlvbk92ZXJmbG93UG9zaXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlKdXN0aWZ5SXRlbXM6Ci0gICAgICAgIGlmIChwYXJzZUxlZ2FjeVBvc2l0aW9uKHByb3BJ
ZCwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBtX3ZhbHVl
TGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgICAgICByZXR1cm4gcGFyc2VJdGVtUG9zaXRp
b25PdmVyZmxvd1Bvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKLSNpZiBFTkFCTEUoQ1NTX0dS
SURfTEFZT1VUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXV0b0NvbHVtbnM6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUdyaWRBdXRvUm93czoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRF
bmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVl
ID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRBdXRvKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1uczoKLSAgICBjYXNlIENTU1Byb3BlcnR5
R3JpZFRlbXBsYXRlUm93czoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VH
cmlkVHJhY2tMaXN0KEdyaWRUZW1wbGF0ZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZENvbHVt
bkVuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFJvd1N0YXJ0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlHcmlkUm93RW5kOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUdy
aWRQb3NpdGlvbigpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlk
Q29sdW1uR2FwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93R2FwOgotICAgICAgICBpZiAo
IWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGTm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5R3JpZEdhcDoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZUdyaWRHYXBTaG9ydGhh
bmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29sdW1uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlHcmlkUm93OgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3Jp
ZEl0ZW1Qb3NpdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENT
U1Byb3BlcnR5R3JpZFRlbXBsYXRlOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3Jp
ZFRlbXBsYXRlU2hvcnRoYW5kKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5R3Jp
ZDoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBwYXJzZUdyaWRTaG9ydGhhbmQoaW1wb3J0YW50
KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXJlYToKLSAgICAgICAgaWYgKCFpc0NTU0dy
aWRMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1By
b3BlcnR5R3JpZFRlbXBsYXRlQXJlYXM6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUdyaWRBdXRvRmxvdzoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VHcmlkQXV0b0Zsb3coKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog
RU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQ29sbGFwc2U6IHsKLSAgICAgICAgaWYgKG51bSA9PSAxKSB7Ci0gICAgICAgICAgICBTaG9y
dGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlKTsK
LSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0aGFu
ZCgpLnByb3BlcnRpZXMoKVswXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMu
bGFzdCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eSh3ZWJraXRNYXJnaW5Db2xs
YXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVsxXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChudW0gPT0g
MikgewotICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlX
ZWJraXRNYXJnaW5Db2xsYXBzZSk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUod2Via2l0
TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClbMF0sIGltcG9ydGFudCkgfHwg
IXBhcnNlVmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClb
MV0sIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoV2lkdGg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRPdmVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJs
aW5lV2lkdGg6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFs
dWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVUaGluIHx8Ci0gICAgICAgICAgICBpZCA9PSBDU1NW
YWx1ZU1lZGl1bSB8fCBpZCA9PSBDU1NWYWx1ZVRoaWNrKQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVu
Z3RoIHwgRlBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29s
dW1uQ291bnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2x1bW5Db3VudCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uR2FwOiAvLyBub3JtYWwgfCA8
bGVuZ3RoPgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5B
eGlzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8IGlkID09IENTU1Zh
bHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1u
UHJvZ3Jlc3Npb246Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBD
U1NWYWx1ZVJldmVyc2UpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAvLyBub25lIHwgYWxs
IHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3BlcnR5KQotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pID09IDEpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5XaWR0aDogLy8gYXV0byB8IDxsZW5ndGg+Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VD
b2x1bW5XaWR0aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T2JqZWN0
UG9zaXRpb246IHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwxOwotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDI7Ci0gICAgICAgIHBhcnNlRmlsbFBv
c2l0aW9uKCptX3ZhbHVlTGlzdCwgdmFsMSwgdmFsMik7Ci0gICAgICAgIGlmICh2YWwxKSB7Ci0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9iamVjdFBvc2l0aW9uLCBjcmVhdGVQ
cmltaXRpdmVWYWx1ZVBhaXIodmFsMS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHZhbDIpKSwg
aW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIC8vIEVuZCBvZiBDU1MzIHByb3BlcnRpZXMK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlXaWxsQ2hhbmdlOiAvLyBhdXRvIHwgW3Njcm9sbC1wb3Np
dGlvbiB8IGNvbnRlbnRzIHwgPGN1c3RvbS1pZGVudD5dIwotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VXaWxsQ2hhbmdlKGltcG9ydGFudCk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgLy8gQXBwbGUgc3BlY2lmaWMgcHJvcGVydGllcy4gIFRoZXNlIHdp
bGwgbmV2ZXIgYmUgc3RhbmRhcmRpemVkIGFuZCBhcmUgcHVyZWx5IHRvCi0gICAgLy8gc3VwcG9y
dCBjdXN0b20gV2ViS2l0LWJhc2VkIEFwcGxlIGFwcGxpY2F0aW9ucy4KLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TGluZUNsYW1wOgotICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgbnVtYmVy
IG9mIGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUKLSAgICAgICAgLy8gV2hl
biBzcGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUgbm9uLW5lZ2F0aXZlIGlu
dGVnZXJzCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSB8
fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTUXVp
cmtzTW9kZSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6Ci0gICAgICAgIGlm
ICghaXNUZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlTm9uZSkK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ugd2hlcmUgd2UgYWxsb3cg
cmVsYXRpdmUgdW5pdHMuCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0
cmljdE1vZGUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAgICAgICAvLyA8bGVuZ3RoPgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEh5cGhlbmF0ZUNoYXJhY3RlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9M
aW1pdCB8fCB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkOgot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgU3Ry
aW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5z
dHJpbmcpOwotICAgICAgICAgICAgaWYgKCFsaW5lR3JpZFZhbHVlLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KGxpbmVHcmlkVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOgotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjog
Ly8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+Ci0gICAgICAgIGlmICh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0
aW9uIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZURhc2hi
b2FyZFJlZ2lvbnMocHJvcElkLCBpbXBvcnRhbnQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUb3VjaENhbGxv
dXQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZURlZmF1bHQgfHwgaWQgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsK
LSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRhcEhpZ2hsaWdodENvbG9yOgotICAgICAgICBpZiAoaXNWYWxpZFN5c3RlbUNvbG9yVmFs
dWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudQotICAgICAgICAgICAgfHwgKGlkID49IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgaW5R
dWlya3NNb2RlKCkpKSB7Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQ29sb3IoKTsKLSAg
ICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgLy8gRW5kIEFw
cGxlLXNwZWNpZmljIHByb3BlcnRpZXMKLQotICAgICAgICAvKiBzaG9ydGhhbmQgcHJvcGVydGll
cyAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7Ci0gICAgICAgIC8vIFBvc2l0
aW9uIG11c3QgY29tZSBiZWZvcmUgY29sb3IgaW4gdGhpcyBhcnJheSBiZWNhdXNlIGEgcGxhaW4g
b2xkICIwIiBpcyBhIGxlZ2FsIGNvbG9yCi0gICAgICAgIC8vIGluIHF1aXJrcyBtb2RlIGJ1dCBp
dCdzIHVzdWFsbHkgdGhlIFggY29vcmRpbmF0ZSBvZiBhIHBvc2l0aW9uLgotICAgICAgICBjb25z
dCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1h
Z2UsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb24sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUgfTsKLSAg
ICAgICAgcmV0dXJuIHBhcnNlRmlsbFNob3J0aGFuZChwcm9wSWQsIHByb3BlcnRpZXMsIFdURl9B
UlJBWV9MRU5HVEgocHJvcGVydGllcyksIGltcG9ydGFudCk7Ci0gICAgfQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrOiB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5SUQgcHJvcGVy
dGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrU291cmNlVHlwZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LAotICAgICAgICAgICAg
Q1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdp
biwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSB9
OwotICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywg
V1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKSwgaW1wb3J0YW50KTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlcjoKLSAgICAgICAgLy8gWyAnYm9yZGVyLXdpZHRoJyB8fCAnYm9y
ZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgewotICAgICAgICBpZiAocGFy
c2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJBYnJpZGdlZFNob3J0aGFuZCgpLCBpbXBvcnRhbnQp
KSB7Ci0gICAgICAgICAgICAvLyBUaGUgQ1NTMyBCb3JkZXJzIGFuZCBCYWNrZ3JvdW5kcyBzcGVj
aWZpY2F0aW9uIHNheXMgdGhhdCBib3JkZXIgYWxzbyByZXNldHMgYm9yZGVyLWltYWdlLiBJdCdz
IGFzCi0gICAgICAgICAgICAvLyB0aG91Z2ggYSB2YWx1ZSBvZiBub25lIHdhcyBzcGVjaWZpZWQg
Zm9yIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShD
U1NQcm9wZXJ0eUJvcmRlckltYWdlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcDoKLSAgICAgICAgLy8gWyAnYm9yZGVyLXRvcC13aWR0aCcgfHwgJ2JvcmRlci1zdHlsZScg
fHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJv
cElkLCBib3JkZXJUb3BTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHQ6Ci0gICAgICAgIC8vIFsgJ2JvcmRlci1yaWdodC13aWR0aCcgfHwgJ2Jv
cmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2VT
aG9ydGhhbmQocHJvcElkLCBib3JkZXJSaWdodFNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206Ci0gICAgICAgIC8vIFsgJ2JvcmRlci1ib3R0
b20td2lkdGgnIHx8ICdib3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8IGluaGVyaXQKLSAgICAg
ICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgYm9yZGVyQm90dG9tU2hvcnRoYW5kKCks
IGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6Ci0gICAgICAgIC8v
IFsgJ2JvcmRlci1sZWZ0LXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBp
bmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIGJvcmRlckxlZnRT
aG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
U3RhcnQ6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdEJvcmRl
clN0YXJ0U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckVuZDoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0
Qm9yZGVyRW5kU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckJlZm9yZToKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwg
d2Via2l0Qm9yZGVyQmVmb3JlU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQo
cHJvcElkLCB3ZWJraXRCb3JkZXJBZnRlclNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lOgotICAgICAgICAvLyBbICdvdXRsaW5lLWNvbG9yJyB8fCAn
b3V0bGluZS1zdHlsZScgfHwgJ291dGxpbmUtd2lkdGgnIF0gfCBpbmhlcml0Ci0gICAgICAgIHJl
dHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIG91dGxpbmVTaG9ydGhhbmQoKSwgaW1wb3J0YW50
KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6Ci0gICAgICAgIC8vIDxjb2xvcj57
MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJvcmRl
ckNvbG9yU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJXaWR0aDoKLSAgICAgICAgLy8gPGJvcmRlci13aWR0aD57MSw0fSB8IGlu
aGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJvcmRlcldpZHRoU2hv
cnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJTdHlsZToKLSAgICAgICAgLy8gPGJvcmRlci1zdHlsZT57MSw0fSB8IGluaGVyaXQKLSAg
ICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJvcmRlclN0eWxlU2hvcnRoYW5kKCku
cHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46Ci0g
ICAgICAgIC8vIDxtYXJnaW4td2lkdGg+ezEsNH0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBw
YXJzZTRWYWx1ZXMocHJvcElkLCBtYXJnaW5TaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKCksIGltcG9y
dGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0gICAgICAgIC8vIDxwYWRkaW5n
LXdpZHRoPnsxLDR9IHwgaW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJ
ZCwgcGFkZGluZ1Nob3J0aGFuZCgpLnByb3BlcnRpZXMoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNl
IENTU1Byb3BlcnR5RmxleEZsb3c6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9w
SWQsIGZsZXhGbG93U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnQ6Ci0gICAgICAgIC8vIFsgWyAnZm9udC1zdHlsZScgfHwgJ2ZvbnQtdmFyaWFudCcgfHwg
J2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXplJyBbIC8gJ2xpbmUtaGVpZ2h0JyBdPwotICAgICAg
ICAvLyAnZm9udC1mYW1pbHknIF0gfCBjYXB0aW9uIHwgaWNvbiB8IG1lbnUgfCBtZXNzYWdlLWJv
eCB8IHNtYWxsLWNhcHRpb24gfCBzdGF0dXMtYmFyIHwgaW5oZXJpdAotICAgICAgICBpZiAobnVt
ID09IDEgJiYgaWQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIGlkIDw9IENTU1ZhbHVlU3RhdHVzQmFy
KSB7Ci0gICAgICAgICAgICBwYXJzZVN5c3RlbUZvbnQoaW1wb3J0YW50KTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnQoaW1wb3J0
YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOgotICAgICAgICByZXR1cm4gcGFy
c2VTaG9ydGhhbmQocHJvcElkLCBsaXN0U3R5bGVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uczoKLSAgICAgICAgcmV0dXJuIHBhcnNlQ29sdW1uc1No
b3J0aGFuZChpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlOgotICAg
ICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBjb2x1bW5SdWxlU2hvcnRoYW5kKCks
IGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6Ci0gICAg
ICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdFRleHRTdHJva2VTaG9ydGhh
bmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246Ci0gICAgICAgIHJldHVybiBwYXJzZUFuaW1h
dGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRy
YW5zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Ci0gICAgICAg
IHJldHVybiBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQocHJvcElkLCBpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2U6Ci0gICAgICAgIHJldHVybiBwYXJzZVBhZ2UocHJvcElkLCBpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dExpbmVUaHJvdWdoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVsIDM6IFZlcnRpY2FsIHdyaXRp
bmcgc3VwcG9ydAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXM6Ci0gICAg
ICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdFRleHRFbXBoYXNpc1Nob3J0
aGFuZCgpLCBpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBo
YXNpc1N0eWxlOgotICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1waGFzaXNTdHlsZShpbXBvcnRh
bnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uOgot
ICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihpbXBvcnRhbnQpOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlvbjoKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlU2lkZXdheXMgfHwgaWQgPT0gQ1NTVmFsdWVTaWRld2F5c1JpZ2h0IHx8IGlk
ID09IENTU1ZhbHVlVmVydGljYWxSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZU1peGVkIHx8IGlkID09
IENTU1ZhbHVlVXByaWdodCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5SGFuZ2luZ1B1bmN0dWF0aW9uOgot
ICAgICAgICByZXR1cm4gcGFyc2VIYW5naW5nUHVuY3R1YXRpb24oaW1wb3J0YW50KTsKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxpbmVCb3hDb250YWluKGltcG9ydGFudCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNldHRpbmdz
OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUZv
bnRGZWF0dXJlU2V0dGluZ3MoaW1wb3J0YW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VGb250VmFy
aWFudExpZ2F0dXJlcyhpbXBvcnRhbnQsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVtZXJpYzoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudE51bWVyaWMoaW1w
b3J0YW50LCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250VmFyaWFudEVhc3RBc2lhbjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFs
KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudEVhc3RBc2lhbihpbXBvcnRhbnQsIHRydWUs
IGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIFNob3J0
aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwotICAgICAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcywgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBp
bXBvcnRhbnQsIHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQs
IHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudE51
bWVyaWMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1
ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50RWFzdEFz
aWFuLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAg
ICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KTsKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9u
ZSksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudChpbXBvcnRhbnQpOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOgotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
Q2xpcFBhdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKLSAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVNoYXBlUHJvcGVydHkocHJvcElkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFp
ZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
U2hhcGVJbWFnZVRocmVzaG9sZDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAhaWQgJiYgdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSk7Ci0gICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlJbWFnZVJlc29sdXRpb246Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VJ
bWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1By
b3BlcnR5QWxpZ25Db250ZW50OgotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQ29udGVudERp
c3RyaWJ1dGlvbk92ZXJmbG93UG9zaXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUFsaWduU2VsZjoKLSAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBvc2l0aW9uT3Zl
cmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5
QWxpZ25JdGVtczoKLSAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3Np
dGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm94U2l6aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0FmdGVyOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtJ
bnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlDbGVhcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlEaXNwbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxzOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlGbG9hdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlz
dFN0eWxlUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0
eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU92ZXJmbG93WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFr
QmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dExpbmVUaHJvdWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVNb2Rl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckVuZFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveEFsaWduOgotI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25CcmVhazoKLSNlbmRpZgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveExpbmVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29s
dW1uUnVsZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4RGlyZWN0aW9uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtl
cm5pbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVBbGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQWZ0ZXJDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3Jl
Q29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZToK
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFJlZ2lvbkJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25GcmFn
bWVudDoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgotI2lmIEVOQUJMRShDU1MzX1RF
WFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRBbGlnbkxhc3Q6Ci0jZW5kaWYgLy8g
Q1NTM19URVhUCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21iaW5lOgotI2lmIEVO
QUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRKdXN0aWZ5Ogot
I2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJp
dHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNl
ckRyYWc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdy
aXRpbmdNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXb3JkQnJlYWs6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgotI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVRvdWNoQWN0aW9uOgotI2Vu
ZGlmCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0U2Nyb2xsU25hcFR5cGU6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1RSQUlMSU5HX1dPUkQp
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFwcGxlVHJhaWxpbmdXb3JkOgotI2VuZGlmCi0gICAgICAg
IC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIGluIGlzVmFsaWRL
ZXl3b3JkUHJvcGVydHlBbmRWYWx1ZSgpLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04p
Ci0gICAgLy8gUHJvcGVydGllcyBiZWxsb3cgYXJlIHZhbGlkYXRlZCBpbnNpZGUgcGFyc2VWaWV3
cG9ydFByb3BlcnR5LCBiZWNhdXNlIHdlCi0gICAgLy8gY2hlY2sgZm9yIHBhcnNlciBzdGF0ZSBp
blZpZXdwb3J0U2NvcGUuIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSBpZiBzb21lb25lCi0gICAgLy8g
YWRkcyB0aGVtIG91dHNpZGUgYSBAdmlld3BvcnQgcnVsZS4KLSAgICBjYXNlIENTU1Byb3BlcnR5
TWF4Wm9vbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluWm9vbToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5T3JpZW50YXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29tOgotICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBQ
b2ludHNYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwUG9pbnRzWToKLSAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlRWxlbWVudHMpIHsKLSAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBwYXJzZU5vbkVsZW1lbnRTbmFwUG9pbnRzKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcERlc3RpbmF0aW9uOiAvLyA8bGVuZ3RoPnsy
fQotICAgICAgICByZXR1cm4gcGFyc2VTY3JvbGxTbmFwRGVzdGluYXRpb24ocHJvcElkLCBpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwQ29vcmRpbmF0ZToK
LSAgICAgICAgcmV0dXJuIHBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUocHJvcElkLCBpbXBvcnRh
bnQpOwotI2VuZGlmCi0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gcGFyc2VTVkdWYWx1
ZShwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7
Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVXaXRo
Q2FsY3VsYXRpb24pOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAg
IGlmIChwYXJzZWRWYWx1ZSAmJiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkgfHwgaW5TaG9ydGhh
bmQoKSkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJzZWRWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU1BhcnNlcjo6YWRkRmlsbFZhbHVlKFJlZlB0cjxD
U1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKQotewotICAgIGlmICghbHZhbCkg
ewotICAgICAgICBsdmFsID0gV1RGTW92ZShydmFsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChsdmFsLT5pc0Jhc2VWYWx1ZUxpc3QoKSkgewotICAgICAgICBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGTW92ZShydmFsKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7Ci0gICAgbGlzdC5nZXQoKS5hcHBlbmQobHZhbC5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICBsaXN0LmdldCgpLmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsKLSAgICBsdmFsID0gV1RGTW92
ZShsaXN0KTsKLX0KLQotc3RhdGljIGJvb2wgaXNDb250ZW50RGlzdHJpYnV0aW9uS2V5d29yZChD
U1NWYWx1ZUlEIGlkKQotewotICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVNwYWNlQmV0d2VlbiB8
fCBpZCA9PSBDU1NWYWx1ZVNwYWNlQXJvdW5kCi0gICAgICAgIHx8IGlkID09IENTU1ZhbHVlU3Bh
Y2VFdmVubHkgfHwgaWQgPT0gQ1NTVmFsdWVTdHJldGNoOwotfQotCi1zdGF0aWMgYm9vbCBpc0Nv
bnRlbnRQb3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0g
Q1NTVmFsdWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRl
cgotICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUZsZXhTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUZs
ZXhFbmQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlUmln
aHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2VsaW5lUG9zaXRpb25LZXl3b3JkKENT
U1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1ZhbHVlQmFzZWxpbmUgfHwgaWQg
PT0gQ1NTVmFsdWVMYXN0QmFzZWxpbmU7Ci19Ci0KLXN0YXRpYyBib29sIGlzQWxpZ25tZW50T3Zl
cmZsb3dLZXl3b3JkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1ZhbHVl
VW5zYWZlIHx8IGlkID09IENTU1ZhbHVlU2FmZTsKLX0KLQotc3RhdGljIGJvb2wgaXNJdGVtUG9z
aXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1ZhbHVl
U3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVFbmQgfHwgaWQgPT0gQ1NTVmFsdWVDZW50ZXIKLSAgICAg
ICAgfHwgaWQgPT0gQ1NTVmFsdWVTZWxmU3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVTZWxmRW5kIHx8
IGlkID09IENTU1ZhbHVlRmxleFN0YXJ0Ci0gICAgICAgIHx8IGlkID09IENTU1ZhbHVlRmxleEVu
ZCB8fCBpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdodDsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlTGVnYWN5UG9zaXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQotewotICAgIC8vIFsgbGVnYWN5ICYmIFsgbGVmdCB8IHJpZ2h0IHwgY2Vu
dGVyIF0KLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUxlZ2FjeSkgewotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVDZW50ZXIgJiYgdmFsdWUtPmlkICE9
IENTU1ZhbHVlTGVmdCAmJiB2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVSaWdodCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNlbnRl
ciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJp
Z2h0KSB7Ci0gICAgICAgIGlmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpLT5pZCAhPSBDU1NWYWx1ZUxlZ2FjeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgY3NzVmFs
dWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKLSAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTGVnYWN5KSwgY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS0+aWQpKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gIW1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci19Ci0KLVJlZlB0cjxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpCi17Ci0gICAgLy8gbm9y
bWFsIHwgPGJhc2VsaW5lLXBvc2l0aW9uPiB8IDxjb250ZW50LWRpc3RyaWJ1dGlvbj4gfHwgWyA8
b3ZlcmZsb3ctcG9zaXRpb24+PyAmJiA8Y29udGVudC1wb3NpdGlvbj4gXQotICAgIC8vIDxiYXNl
bGluZS1wb3NpdGlvbj4gPSBiYXNlbGluZSB8IGxhc3QtYmFzZWxpbmU7Ci0gICAgLy8gPGNvbnRl
bnQtZGlzdHJpYnV0aW9uPiA9IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmQgfCBzcGFjZS1l
dmVubHkgfCBzdHJldGNoOwotICAgIC8vIDxjb250ZW50LXBvc2l0aW9uPiA9IGNlbnRlciB8IHN0
YXJ0IHwgZW5kIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgbGVmdCB8IHJpZ2h0OwotICAgIC8v
IDxvdmVyZmxvdy1wb3NpdGlvbj4gPSB1bnNhZmUgfCBzYWZlCi0KLSAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gYXV0byB8IDxiYXNlbGluZS1wb3NpdGlvbj4K
LSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlzQmFzZWxpbmVQb3NpdGlv
bktleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
ICAgICByZXR1cm4gQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVJ
bnZhbGlkLCB2YWx1ZS0+aWQsIENTU1ZhbHVlSW52YWxpZCk7Ci0gICAgfQotCi0gICAgQ1NTVmFs
dWVJRCBkaXN0cmlidXRpb24gPSBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgQ1NTVmFsdWVJRCBwb3Np
dGlvbiA9IENTU1ZhbHVlSW52YWxpZDsKLSAgICBDU1NWYWx1ZUlEIG92ZXJmbG93ID0gQ1NTVmFs
dWVJbnZhbGlkOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBpZiAoaXNDb250ZW50RGlz
dHJpYnV0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgICAgICBpZiAoZGlzdHJpYnV0
aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiA9IHZhbHVlLT5pZDsKLSAgICAgICAgfSBlbHNlIGlm
IChpc0NvbnRlbnRQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICAgICAgaWYg
KHBvc2l0aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHBvc2l0aW9uID0gdmFsdWUtPmlkOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzQWxpZ25tZW50T3ZlcmZsb3dLZXl3b3JkKHZhbHVlLT5pZCkpIHsKLSAgICAgICAgICAg
IGlmIChvdmVyZmxvdyAhPSBDU1NWYWx1ZUludmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgICAgICBvdmVyZmxvdyA9IHZhbHVlLT5pZDsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIC8vIFRoZSBncmFtbWFyIHN0YXRlcyB0aGF0IHdl
IHNob3VsZCBoYXZlIGF0IGxlYXN0IDxjb250ZW50LWRpc3RyaWJ1dGlvbj4gb3IKLSAgICAvLyA8
Y29udGVudC1wb3NpdGlvbj4gKCA8Y29udGVudC1kaXN0cmlidXRpb24+IHx8IDxjb250ZW50LXBv
c2l0aW9uPiApLgotICAgIGlmIChwb3NpdGlvbiA9PSBDU1NWYWx1ZUludmFsaWQgJiYgZGlzdHJp
YnV0aW9uID09IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBUaGUgZ3JhbW1hciBzdGF0ZXMgdGhhdCA8b3ZlcmZsb3ctcG9zaXRpb24+IG11c3QgYmUg
YXNzb2NpYXRlZCB0byA8Y29udGVudC1wb3NpdGlvbj4uCi0gICAgaWYgKG92ZXJmbG93ICE9IENT
U1ZhbHVlSW52YWxpZCAmJiBwb3NpdGlvbiA9PSBDU1NWYWx1ZUludmFsaWQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZTo6
Y3JlYXRlKGRpc3RyaWJ1dGlvbiwgcG9zaXRpb24sIG92ZXJmbG93KTsKLX0KLQotYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gYXV0byB8IG5vcm1hbCB8IHN0cmV0Y2gg
fCA8YmFzZWxpbmUtcG9zaXRpb24+IHwgWzxpdGVtLXBvc2l0aW9uPiAmJiA8b3ZlcmZsb3ctcG9z
aXRpb24+PyBdCi0gICAgLy8gPGJhc2VsaW5lLXBvc2l0aW9uPiA9IGJhc2VsaW5lIHwgbGFzdC1i
YXNlbGluZTsKLSAgICAvLyA8aXRlbS1wb3NpdGlvbj4gPSBjZW50ZXIgfCBzdGFydCB8IGVuZCB8
IHNlbGYtc3RhcnQgfCBzZWxmLWVuZCB8IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGxlZnQgfCBy
aWdodDsKLSAgICAvLyA8b3ZlcmZsb3ctcG9zaXRpb24+ID0gdW5zYWZlIHwgc2FmZQotCi0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFsdWUtPmlkID09IENT
U1ZhbHVlQXV0byB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlU3RyZXRjaCB8fCBpc0Jhc2VsaW5lUG9zaXRpb25LZXl3b3JkKHZhbHVlLT5pZCkp
IHsKLSAgICAgICAgLy8gYWxpZ24taXRlbXMgcHJvcGVydHkgZG9lcyBub3QgYWxsb3cgdGhlICdh
dXRvJyB2YWx1ZS4KLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8gJiYgcHJv
cElkID09IENTU1Byb3BlcnR5QWxpZ25JdGVtcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBv
c2l0aW9uOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb3ZlcmZsb3dBbGlnbm1lbnRL
ZXl3b3JkOwotICAgIGlmIChpc0l0ZW1Qb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkgewotICAg
ICAgICBwb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlkICE9IENTU1Zh
bHVlVW5zYWZlICYmIHZhbHVlLT5pZCAhPSBDU1NWYWx1ZVNhZmUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgb3ZlcmZsb3dBbGlnbm1lbnRLZXl3b3JkID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXNBbGlnbm1lbnRPdmVyZmxvd0tleXdvcmQodmFs
dWUtPmlkKSkgewotICAgICAgICBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAg
ICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiBpc0l0
ZW1Qb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHBvc2l0aW9uKTsKLSAgICBpZiAob3ZlcmZs
b3dBbGlnbm1lbnRLZXl3b3JkKQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVBy
aW1pdGl2ZVZhbHVlUGFpcihwb3NpdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBvdmVyZmxvd0FsaWdu
bWVudEtleXdvcmQucmVsZWFzZU5vbk51bGwoKSksIGltcG9ydGFudCk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBvc2l0aW9uLnJlbGVhc2VOb25OdWxsKCksIGltcG9y
dGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VCYWNrZ3Jv
dW5kQ2xpcChDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUsIFJlZlB0cjxDU1NWYWx1ZT4mIGNz
c1ZhbHVlKQotewotICAgIGlmIChwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8
fCBwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKLSAgICAgICAgfHwgcGFyc2Vy
VmFsdWUuaWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94IHx8IHBhcnNlclZhbHVlLmlkID09IENTU1Zh
bHVlV2Via2l0VGV4dCkgewotICAgICAgICBjc3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBhcnNlclZhbHVlLmlkKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6
OnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBjb25zdAotewotICAg
IHJldHVybiBtX2NvbnRleHQudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlv
cjsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7Ci0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAg
ICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncwotICAgICAgICAgICAgJiYgdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQotICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0KCIpKSB7Ci0gICAg
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqdmFs
dWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKHZh
bGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSk7Ci0gICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0g
ICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBX
VEZNb3ZlKHZhbHVlcyksIGltcG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9sbFNuYXBQb3NpdGlvbnMoUmVmUHRyPENTU1ZhbHVlPiYg
Y3NzVmFsdWVYLCBSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZVkpCi17Ci0gICAgY3NzVmFsdWVY
ID0gcGFyc2VQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKLSAgICBpZiAoIWNzc1ZhbHVlWCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgYWNjZXB0IG9kZC1sZW5ndGggbGlz
dHMgb2YgcG9zaXRpb25zIChtdXN0IGFsd2F5cyBoYXZlIGFuIFggYW5kIGEgWSk6Ci0gICAgaWYg
KCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjc3NW
YWx1ZVkgPSBwYXJzZVBvc2l0aW9uWSgqbV92YWx1ZUxpc3QpOwotICAgIGlmICghY3NzVmFsdWVZ
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKLXsKLSAgICBhdXRvIHBvc2l0aW9uID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWVY
LCBjc3NWYWx1ZVk7Ci0gICAgaWYgKCFwYXJzZVNjcm9sbFNuYXBQb3NpdGlvbnMoY3NzVmFsdWVY
LCBjc3NWYWx1ZVkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwb3NpdGlvbi0+YXBw
ZW5kKGNzc1ZhbHVlWC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBwb3NpdGlvbi0+YXBwZW5kKGNz
c1ZhbHVlWS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1v
dmUocG9zaXRpb24pLCBpbXBvcnRhbnQpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9sbFNuYXBDb29yZGlu
YXRlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBhdXRvIHBv
c2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICB3aGls
ZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNz
c1ZhbHVlWCwgY3NzVmFsdWVZOwotICAgICAgICBpZiAoIXBhcnNlU2Nyb2xsU25hcFBvc2l0aW9u
cyhjc3NWYWx1ZVgsIGNzc1ZhbHVlWSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3NzVmFsdWVYLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
ICAgICBwb3NpdGlvbnMtPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKHBvc2l0aW9ucy0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHBvc2l0aW9ucyks
IGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0jZW5kaWYKLQotY29uc3QgaW50IGNNYXhGaWxsUHJvcGVydGllcyA9IDk7Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNv
bnN0IENTU1Byb3BlcnR5SUQqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzLCBib29sIGlt
cG9ydGFudCkKLXsKLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA8PSBjTWF4RmlsbFByb3BlcnRp
ZXMpOwotICAgIGlmIChudW1Qcm9wZXJ0aWVzID4gY01heEZpbGxQcm9wZXJ0aWVzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQp
OwotCi0gICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtjTWF4RmlsbFByb3BlcnRpZXNdID0geyBmYWxz
ZSB9OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW2NNYXhGaWxsUHJvcGVydGllc107Ci0g
ICAgUmVmUHRyPENTU1ZhbHVlPiBjbGlwVmFsdWU7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbllWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdFlWYWx1ZTsKLSAgICBib29s
IGZvdW5kQ2xpcCA9IGZhbHNlOwotICAgIGludCBpOwotICAgIGJvb2wgZm91bmRQb3NpdGlvbkNT
U1Byb3BlcnR5ID0gZmFsc2U7Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpOwotICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0g
ICAgICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpP
cGVyYXRvciAmJiBjdXJyZW50VmFsdWUuaVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgLy8g
V2UgaGl0IHRoZSBlbmQuICBGaWxsIGluIGFsbCByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIGlu
aXRpYWwgdmFsdWUuCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yICYmIHBhcnNl
ZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBpcyBub3QgYWxsb3dl
ZCBleGNlcHQgYXMgdGhlIGxhc3QgaXRlbSBpbiBhIGxpc3QgZm9yIGJhY2tncm91bmRzLgotICAg
ICAgICAgICAgICAgICAgICAvLyBSZWplY3QgdGhlIGVudGlyZSBwcm9wZXJ0eS4KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQ
cm9wZXJ0eVtpXSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVl
UG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwgcHJv
cGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sLmNy
ZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJv
cGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJ
bml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocHJvcGVydGllc1tpXSA9
PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tPcmlnaW4pICYmICFwYXJzZWRQcm9wZXJ0eVtpXSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRo
ZW4gcmVzZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2l6ZUNTU1Byb3BlcnR5RXhwZWN0ZWQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoY3VycmVudFZhbHVl
KSAmJiBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkpIHsKLSAgICAgICAgICAgIHNpemVDU1NQcm9w
ZXJ0eUV4cGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkgPSBmYWxzZTsKLSAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYg
aSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotCi0gICAgICAgICAgICBpZiAoc2l6ZUNTU1Byb3Bl
cnR5RXhwZWN0ZWQgJiYgKHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6
ZSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFzaXplQ1NTUHJvcGVydHlFeHBl
Y3RlZCAmJiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplIHx8IHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDE7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWwyOwotICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElk
MSwgcHJvcElkMjsKLSAgICAgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUg
PSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChwYXJzZUZp
bGxQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBwcm9wSWQxLCBwcm9wSWQyLCB2YWwxLCB2YWwyKSkg
ewotICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgdmFsMS5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1
ZShwb3NpdGlvbllWYWx1ZSwgdmFsMi5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8
IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwgdmFsMi5yZWxlYXNlTm9u
TnVsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJr
aXRNYXNrT3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBhcnNlIHRoZSB2
YWx1ZSBhcyBhIGNsaXAsIGFuZCBzZWUgaWYgd2Ugc3VjY2VlZC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKHBhcnNlclZhbHVlLCB2YWwxKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCB2YWwxLnJlbGVh
c2VOb25OdWxsKCkpOyAvLyBUaGUgcHJvcGVydHkgcGFyc2VkIHN1Y2Nlc3NmdWxseS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRG
aWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFs
dWUoKSk7IC8vIFNvbWUgdmFsdWUgd2FzIHVzZWQgZm9yIG9yaWdpbiB0aGF0IGlzIG5vdCBzdXBw
b3J0ZWQgYnkgY2xpcC4gSnVzdCByZXNldCBjbGlwIGluc3RlYWQuCi0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFz
a0NsaXApCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZENsaXAgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
KQotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRQb3NpdGlvbkNTU1Byb3BlcnR5ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4KLSAg
ICAgICAgLy8gaW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0Ci0gICAg
ICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCi0gICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAvLyBGaWxsIGluIGFueSByZW1h
aW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAgICAgICBpZiAoIXBh
cnNlZFByb3BlcnR5W2ldKSB7Ci0gICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCBj
c3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICBp
ZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9w
ZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAgICAg
ICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0KQotICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFs
dWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAg
ICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBw
cm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbikgewotICAgICAgICAg
ICAgICAgIC8vIElmIGJhY2tncm91bmQtb3JpZ2luIHdhc24ndCBwcmVzZW50LCB0aGVuIHJlc2V0
IGJhY2tncm91bmQtY2xpcCBhbHNvLgotICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlw
VmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvbikgewotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShwb3NpdGlvbllWYWx1ZSkg
c2luY2Ugd2Ugb25seSBzZWUgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gb25jZQotICAg
ICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCBXVEZN
b3ZlKHBvc2l0aW9uWVZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChwcm9w
ZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKSB7Ci0gICAgICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIFdURk1vdmUodmFs
dWVzW2ldKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIC8vIGl0J3MgT0sgdG8gY2FsbCBXVEZN
b3ZlKHBvc2l0aW9uWVZhbHVlKSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvbiBvbmNlCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tQb3NpdGlvblksIFdURk1vdmUocG9zaXRpb25ZVmFsdWUpLCBpbXBvcnRhbnQpOwotICAg
ICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICAvLyBpdCdz
IE9LIHRvIGNhbGwgV1RGTW92ZShyZXBlYXRZVmFsdWUpIHNpbmNlIHdlIG9ubHkgc2VlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIG9uY2UKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIFdURk1vdmUocmVwZWF0WVZhbHVlKSwgaW1wb3J0
YW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdCkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUmVwZWF0WCwgV1RGTW92ZSh2YWx1ZXNbaV0pLCBpbXBvcnRhbnQpOwotICAgICAgICAg
ICAgLy8gaXQncyBPSyB0byBjYWxsIFdURk1vdmUocmVwZWF0WVZhbHVlKSBzaW5jZSB3ZSBvbmx5
IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiBvbmNlCi0gICAgICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZLCBXVEZNb3ZlKHJlcGVhdFlWYWx1
ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Vi
a2l0TWFza0NsaXApICYmICFmb3VuZENsaXApCi0gICAgICAgICAgICAvLyBWYWx1ZSBpcyBhbHJl
YWR5IHNldCB3aGlsZSB1cGRhdGluZyBvcmlnaW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUg
JiYgIXBhcnNlZFByb3BlcnR5W2ldICYmIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5k
QmVoYXZpb3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9y
dGFudCk7Ci0KLSAgICAgICAgLy8gQWRkIGluIGNsaXAgdmFsdWVzIHdoZW4gd2UgaGl0IHRoZSBj
b3JyZXNwb25kaW5nIG9yaWdpbiBwcm9wZXJ0eS4KLSAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0g
PT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luICYmICFmb3VuZENsaXApCi0gICAgICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBXVEZNb3ZlKGNsaXBWYWx1
ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJv
cGVydHlXZWJraXRNYXNrT3JpZ2luICYmICFmb3VuZENsaXApCi0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLCBXVEZNb3ZlKGNsaXBWYWx1ZSksIGltcG9y
dGFudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjph
ZGRBbmltYXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBSZWY8Q1NTVmFsdWU+JiYg
cnZhbCkKLXsKLSAgICBpZiAoIWx2YWwpIHsKLSAgICAgICAgbHZhbCA9IFdURk1vdmUocnZhbCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbHZh
bCkpIHsKLSAgICAgICAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqbHZhbCkuYXBwZW5kKFdURk1v
dmUocnZhbCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIGxpc3QtPmFwcGVuZChsdmFs
LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIGxpc3QtPmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsKLSAg
ICBsdmFsID0gV1RGTW92ZShsaXN0KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0
aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICBBU1NFUlQocHJvcElkID09IENTU1Byb3BlcnR5QW5pbWF0aW9uIHx8IHByb3BJZCA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbik7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBudW1Qcm9wZXJ0
aWVzID0gODsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBh
bmltYXRpb25TaG9ydGhhbmRGb3JQYXJzaW5nKHByb3BJZCk7Ci0KLSAgICAvLyBUaGUgbGlzdCBv
ZiBwcm9wZXJ0aWVzIGluIHRoZSBzaG9ydGhhbmQgc2hvdWxkIGJlIHRoZSBzYW1lCi0gICAgLy8g
bGVuZ3RoIGFzIHRoZSBsaXN0IHdpdGggYW5pbWF0aW9uIG5hbWUgaW4gbGFzdCBwb3NpdGlvbiwg
ZXZlbiB0aG91Z2ggdGhleSBhcmUKLSAgICAvLyBpbiBhIGRpZmZlcmVudCBvcmRlci4KLSAgICBB
U1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpOwotICAgIEFTU0VSVChu
dW1Qcm9wZXJ0aWVzID09IGFuaW1hdGlvblNob3J0aGFuZCgpLmxlbmd0aCgpKTsKLSAgICBBU1NF
UlQobnVtUHJvcGVydGllcyA9PSB3ZWJraXRBbmltYXRpb25TaG9ydGhhbmQoKS5sZW5ndGgoKSk7
Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotCi0gICAgYm9vbCBw
YXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsKLSAgICBBbmltYXRpb25Q
YXJzZUNvbnRleHQgY29udGV4dDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9w
ZXJ0aWVzXTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCk7Ci0gICAgdW5zaWduZWQgaTsKLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYg
dmFsLT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZC4gIEZp
bGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KLSAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
bnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0
eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBj
c3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwotICAgICAgICAgICAgICAgIGlm
IChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIHZhbCwg
Y29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tp
XSwgdmFsLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRoZXJlIGFy
ZSBtb3JlIHZhbHVlcyB0byBwcm9jZXNzIGJ1dCAnbm9uZScgb3IgJ2FsbCcgd2VyZSBhbHJlYWR5
IGRlZmluZWQgYXMgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSwgdGhlIGRlY2xhcmF0aW9uIGJlY29t
ZXMgaW52YWxpZC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC5hbmltYXRpb25Qcm9wZXJ0eUtl
eXdvcmRBbGxvd2VkKCkgJiYgY29udGV4dC5oYXNDb21taXR0ZWRGaXJzdEFuaW1hdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlm
IHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgotICAgICAgICAv
LyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAgICAgICAgaWYg
KCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGaWxs
IGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAg
IGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwg
Y3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgIH0KLQotICAg
IC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgotICAgIC8vIEluIHRo
aXMgY2FzZSB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYW50IGZvcm0gYXMgd2Vs
bCwKLSAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFuZCBjbGVhcnMgYWxsIGV4aXN0
aW5nIHByZWZpeGVkIGFuZAotICAgIC8vIHVucHJlZml4ZWQgdmFsdWVzLgotICAgIGZvciAoaSA9
IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIGFkZFByb3BlcnR5V2l0aFByZWZp
eGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgV1RGTW92ZSh2YWx1ZXNbaV0p
LCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjph
ZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQ
dHI8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0KQotewot
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsdWUuY29weVJlZigpLCBpbXBvcnRhbnQsIGltcGxp
Y2l0KTsKLQotICAgIENTU1Byb3BlcnR5SUQgcHJlZml4aW5nVmFyaWFudCA9IHByZWZpeGluZ1Zh
cmlhbnRGb3JQcm9wZXJ0eUlkKHByb3BJZCk7Ci0gICAgaWYgKHByZWZpeGluZ1ZhcmlhbnQgPT0g
cHJvcElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jdXJyZW50U2hvcnRoYW5kKSB7
Ci0gICAgICAgIC8vIFdlIGNhbid0IHVzZSBTaG9ydGhhbmRTY29wZSBoZXJlIGFzIHdlIGNhbiBh
bHJlYWR5IGJlIGluc2lkZSBvbmUgKGUuZyB3ZSBhcmUgcGFyc2luZyBDU1NUcmFuc2l0aW9uKS4K
LSAgICAgICAgbV9jdXJyZW50U2hvcnRoYW5kID0gcHJlZml4aW5nVmFyaWFudEZvclByb3BlcnR5
SWQobV9jdXJyZW50U2hvcnRoYW5kKTsKLSAgICAgICAgYWRkUHJvcGVydHkocHJlZml4aW5nVmFy
aWFudCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgaW1wbGljaXQpOwotICAgICAgICBtX2N1
cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVydHlJZChtX2N1cnJlbnRT
aG9ydGhhbmQpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShwcmVmaXhpbmdWYXJp
YW50LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci19Ci0KLQotUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uV2lkdGgoKQotewotICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5pZDsKLSAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBpbiBzdHJpY3QgbW9k
ZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVuIHVzZWQgaW4gdGhl
ICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgaWYgKGlkICE9IENTU1ZhbHVlQXV0
byAmJiAhKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBwYXJz
ZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICByZXR1cm4gcGFyc2VkVmFsdWU7Ci19Ci0KLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbHVtbkNvdW50KCkKLXsKLSAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7
Ci0KLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYmICF2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0
aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICByZXR1cm4gcGFyc2VkVmFsdWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbHVt
bnNTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjb2x1
bW5XaWR0aDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbHVtbkNvdW50OwotICAgIGJvb2wgaGFz
UGVuZGluZ0V4cGxpY2l0QXV0byA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBwcm9wZXJ0
aWVzUGFyc2VkID0gMDsgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsgKytwcm9wZXJ0aWVzUGFyc2VkKSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzUGFyc2Vk
ID49IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRvbyBtYW55IHZhbHVlcyBmb3Ig
dGhpcyBzaG9ydGhhbmQuIEludmFsaWQgZGVjbGFyYXRpb24uCi0gICAgICAgIGlmICghcHJvcGVy
dGllc1BhcnNlZCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICAv
LyAnYXV0bycgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYW55IG9mIHRoZSB0d28gbG9uZ2hhbmRzLCBh
bmQgYXQgdGhpcyBwb2ludAotICAgICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUo
cykgaXQgaXMgbWVhbnQgZm9yLiBXZSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgdmFs
dWVzIGZpcnN0LgotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAg
IGhhc1BlbmRpbmdFeHBsaWNpdEF1dG8gPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKCFjb2x1bW5XaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICgoY29sdW1uV2lk
dGggPSBwYXJzZUNvbHVtbldpZHRoKCkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29sdW1uQ291bnQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoKGNvbHVtbkNvdW50ID0gcGFyc2VDb2x1bW5Db3VudCgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4gaW52YWxpZCBzaG9y
dGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55IHVuYXNzaWduZWQgcHJvcGVydHkgYXQg
dGhpcyBwb2ludCB3aWxsIGJlY29tZSBpbXBsaWNpdCAnYXV0bycuCi0gICAgaWYgKGNvbHVtbldp
ZHRoKQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCBXVEZNb3Zl
KGNvbHVtbldpZHRoKSwgaW1wb3J0YW50KTsKLSAgICBlbHNlIHsKLSAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4
cGxpY2l0QXV0byAvKiBpbXBsaWNpdCAqLyk7Ci0gICAgICAgIGhhc1BlbmRpbmdFeHBsaWNpdEF1
dG8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoY29sdW1uQ291bnQpCi0gICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIFdURk1vdmUoY29sdW1uQ291bnQpLCBpbXBv
cnRhbnQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5D
b3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0QXV0byAvKiBpbXBsaWNp
dCAqLyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJh
bnNpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17
Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtUHJvcGVydGllcyA9IDQ7Ci0gICAgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcElk
KTsKLSAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpOwotCi0g
ICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKLQotICAgIGJvb2wgcGFyc2Vk
UHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07Ci0gICAgQW5pbWF0aW9uUGFyc2VD
b250ZXh0IGNvbnRleHQ7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGll
c107Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
OwotICAgIHVuc2lnbmVkIGk7Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsK
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbC0+
aVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQuIEZpbGwgaW4g
YWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KLSAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJv
cGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkK
LSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1
ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcGFy
c2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpID0gMDsgIWZvdW5kICYmIGkgPCBu
dW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0p
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2
YWwsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0g
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1
ZXNbaV0sIHZhbC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBhcmUgbW9yZSB2YWx1ZXMgdG8gcHJvY2VzcyBidXQgJ25vbmUn
IG9yICdhbGwnIHdlcmUgYWxyZWFkeSBkZWZpbmVkIGFzIHRoZSBhbmltYXRpb24gcHJvcGVydHks
IHRoZSBkZWNsYXJhdGlvbiBiZWNvbWVzIGludmFsaWQuCi0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LmFuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQoKSAmJiBjb250ZXh0Lmhhc0Nv
bW1pdHRlZEZpcnN0QW5pbWF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBm
aW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgotICAgICAgICAvLyBpbnZhbGlkIHNo
b3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAgICAgICAgaWYgKCFmb3VuZCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGaWxsIGluIGFueSByZW1h
aW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAgIGZvciAoaSA9IDA7
IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtp
XSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29s
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgIH0KLQotICAgIC8vIE5vdyBhZGQg
YWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBo
YXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYW50IGZvcm0gYXMgd2VsbCwKLSAgICAvLyB0
byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFuZCBjbGVhcnMgYWxsIGV4aXN0aW5nIHByZWZpeGVk
IGFuZAotICAgIC8vIHVucHJlZml4ZWQgdmFsdWVzLgotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIGFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQo
c2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgV1RGTW92ZSh2YWx1ZXNbaV0pLCBpbXBvcnRhbnQp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNob3J0aGFu
ZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hv
cnRoYW5kLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBXZSB0cnkgdG8gbWF0Y2ggYXMgbWFu
eSBwcm9wZXJ0aWVzIGFzIHBvc3NpYmxlCi0gICAgLy8gV2Ugc2V0IHVwIGFuIGFycmF5IG9mIGJv
b2xlYW5zIHRvIG1hcmsgd2hpY2ggcHJvcGVydHkgaGFzIGJlZW4gZm91bmQsCi0gICAgLy8gYW5k
IHdlIHRyeSB0byBzZWFyY2ggZm9yIHByb3BlcnRpZXMgdW50aWwgaXQgbWFrZXMgbm8gbG9uZ2Vy
IGFueSBzZW5zZS4KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotCi0g
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIHByb3BlcnRpZXNQYXJzZWQgPSAw
OwotICAgIGJvb2wgcHJvcGVydHlGb3VuZFs2XT0geyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlIH07IC8vIDYgaXMgZW5vdWdoIHNpemUuCi0KLSAgICB3aGlsZSAobV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBmb3VuZCA9IGZhbHNlOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIHByb3BJbmRleCA9IDA7ICFmb3VuZCAmJiBwcm9wSW5kZXggPCBzaG9ydGhh
bmQubGVuZ3RoKCk7ICsrcHJvcEluZGV4KSB7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnR5Rm91
bmRbcHJvcEluZGV4XSAmJiBwYXJzZVZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbcHJvcElu
ZGV4XSwgaW1wb3J0YW50KSkgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUZvdW5kW3By
b3BJbmRleF0gPSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNQ
YXJzZWQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGRp
ZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgotICAgICAgICAvLyBpbnZh
bGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAgICAgICAgaWYgKCFmb3Vu
ZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydGll
c1BhcnNlZCA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2
YWx1ZS4KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
OwotICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNp
dCk7Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCogcHJvcGVydGllc0ZvckluaXRp
YWxpemF0aW9uID0gc2hvcnRoYW5kLnByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbigpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICBpZiAocHJvcGVydHlGb3VuZFtpXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGlmIChwcm9wZXJ0aWVzRm9ySW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIGluaXRQcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zvcklu
aXRpYWxpemF0aW9uW2ldOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcm9wSW5kZXggPSAw
OyBwcm9wSW5kZXggPCBpbml0UHJvcGVydGllcy5sZW5ndGgoKTsgKytwcm9wSW5kZXgpCi0gICAg
ICAgICAgICAgICAgYWRkUHJvcGVydHkoaW5pdFByb3BlcnRpZXMucHJvcGVydGllcygpW3Byb3BJ
bmRleF0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRh
bnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgp
LCBpbXBvcnRhbnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1Bh
cnNlcjo6cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0
eUlEICpwcm9wZXJ0aWVzLCAgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLyogRnJvbSB0aGUgQ1NT
IDIgc3BlY3MsIDguMwotICAgICAqIElmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlLCBpdCBhcHBs
aWVzIHRvIGFsbCBzaWRlcy4gSWYgdGhlcmUgYXJlIHR3byB2YWx1ZXMsIHRoZSB0b3AgYW5kCi0g
ICAgICogYm90dG9tIG1hcmdpbnMgYXJlIHNldCB0byB0aGUgZmlyc3QgdmFsdWUgYW5kIHRoZSBy
aWdodCBhbmQgbGVmdCBtYXJnaW5zIGFyZSBzZXQgdG8gdGhlIHNlY29uZC4KLSAgICAgKiBJZiB0
aGVyZSBhcmUgdGhyZWUgdmFsdWVzLCB0aGUgdG9wIGlzIHNldCB0byB0aGUgZmlyc3QgdmFsdWUs
IHRoZSBsZWZ0IGFuZCByaWdodCBhcmUgc2V0IHRvIHRoZQotICAgICAqIHNlY29uZCwgYW5kIHRo
ZSBib3R0b20gaXMgc2V0IHRvIHRoZSB0aGlyZC4gSWYgdGhlcmUgYXJlIGZvdXIgdmFsdWVzLCB0
aGV5IGFwcGx5IHRvIHRoZSB0b3AsCi0gICAgICogcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQsIHJl
c3BlY3RpdmVseS4KLSAgICAgKi8KLQotICAgIHVuc2lnbmVkIG51bSA9IGluU2hvcnRoYW5kKCkg
PyAxIDogbV92YWx1ZUxpc3QtPnNpemUoKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRo
aXMsIHByb3BJZCk7Ci0KLSAgICAvLyB0aGUgb3JkZXIgaXMgdG9wLCByaWdodCwgYm90dG9tLCBs
ZWZ0Ci0gICAgc3dpdGNoIChudW0pIHsKLSAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFBy
b3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxp
Y2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwotICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcGVydGllc1sxXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BlcnRpZXNbM10sIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNl
VmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShwcm9wZXJ0aWVz
WzFdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3BhcnNlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2NvcGUgaW1wbGlj
aXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHZhbHVlID0g
bV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgp
OwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFu
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDM6IHsKLSAg
ICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFw
YXJzZVZhbHVlKHByb3BlcnRpZXNbMV0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVy
dGllc1syXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXNbbV9wYXJzZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDJdLnZhbHVlKCk7Ci0gICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGlt
cGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwotICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDQ6IHsKLSAgICAgICAgICAgIGlmICghcGFyc2VW
YWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNb
MV0sIGltcG9ydGFudCkgfHwKLSAgICAgICAgICAgICAgICAhcGFyc2VWYWx1ZShwcm9wZXJ0aWVz
WzJdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNbM10sIGltcG9ydGFudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGF1dG8gfCA8aWRlbnRp
Zmllcj4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBhZ2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChwcm9wSWQgPT0gQ1NTUHJvcGVydHlQYWdlKTsK
LQotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBp
bXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
ZCA9PSAwICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgq
dmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0vLyA8bGVuZ3RoPnsxLDJ9IHwgYXV0byB8IFsgPHBhZ2Utc2l6ZT4g
fHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0gXQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2l6ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eVNpemUpOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgPiAy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwotCi0gICAgLy8gRmlyc3QgcGFyYW1ldGVyLgotICAgIFNpemVQYXJhbWV0
ZXJUeXBlIHBhcmFtVHlwZSA9IHBhcnNlU2l6ZVBhcmFtZXRlcihwYXJzZWRWYWx1ZXMsICp2YWx1
ZSwgTm9uZSk7Ci0gICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBTZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnkuCi0gICAgdmFsdWUgPSBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBwYXJhbVR5cGUgPSBw
YXJzZVNpemVQYXJhbWV0ZXIocGFyc2VkVmFsdWVzLCAqdmFsdWUsIHBhcmFtVHlwZSk7Ci0gICAg
ICAgIGlmIChwYXJhbVR5cGUgPT0gTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocGFyc2VkVmFsdWVzKSwgaW1w
b3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ1NTUGFyc2VyOjpTaXplUGFyYW1ldGVy
VHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QmIHBhcnNlZFZh
bHVlcywgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBTaXplUGFyYW1ldGVyVHlwZSBwcmV2UGFyYW1U
eXBlKQotewotICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQXV0bzoK
LSAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSkgewotICAgICAgICAgICAgcGFyc2Vk
VmFsdWVzLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZS5pZCkpOwotICAgICAgICAgICAgcmV0dXJuIEF1dG87Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKLSAgICBjYXNl
IENTU1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgIGlmIChwcmV2UGFyYW1UeXBlID09IE5vbmUgfHwg
cHJldlBhcmFtVHlwZSA9PSBQYWdlU2l6ZSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCkpOwotICAgICAgICAgICAgcmV0dXJuIE9yaWVudGF0aW9uOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBOb25lOwotICAgIGNhc2UgQ1NTVmFsdWVBMzoKLSAgICBjYXNlIENTU1ZhbHVl
QTQ6Ci0gICAgY2FzZSBDU1NWYWx1ZUE1OgotICAgIGNhc2UgQ1NTVmFsdWVCNDoKLSAgICBjYXNl
IENTU1ZhbHVlQjU6Ci0gICAgY2FzZSBDU1NWYWx1ZUxlZGdlcjoKLSAgICBjYXNlIENTU1ZhbHVl
TGVnYWw6Ci0gICAgY2FzZSBDU1NWYWx1ZUxldHRlcjoKLSAgICAgICAgaWYgKHByZXZQYXJhbVR5
cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IE9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAg
ICAvLyBOb3JtYWxpemUgdG8gUGFnZSBTaXplIHRoZW4gT3JpZW50YXRpb24gb3JkZXIgYnkgcHJl
cGVuZGluZy4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgQ1NT
MyBQYWdlZCBNZWRpYSBzcGVjaWZpY2F0aW9uLCBidXQgZm9yIHNpbXBsZXIgcHJvY2Vzc2luZyBs
YXRlciAoU3R5bGVSZXNvbHZlcjo6YXBwbHlQYWdlU2l6ZVByb3BlcnR5KS4KLSAgICAgICAgICAg
IHBhcnNlZFZhbHVlcy5wcmVwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLmlkKSk7Ci0gICAgICAgICAgICByZXR1cm4gUGFnZVNpemU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6
IHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFs
dWUpOwotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVu
Z3RoIHwgRk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBl
ID09IExlbmd0aCkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gTGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb25lOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTm9uZTsKLSAgICB9Ci19Ci0KLS8vIFsgPHN0cmlu
Zz4gPHN0cmluZz4gXSsgfCBpbmhlcml0IHwgbm9uZQotLy8gaW5oZXJpdCBhbmQgbm9uZSBhcmUg
aGFuZGxlZCBpbiBwYXJzZVZhbHVlLgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlUXVvdGVzKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBhdXRvIHZhbHVlcyA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICB3aGlsZSAoQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBpZiAodmFs
dWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwotICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLSAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSkgewot
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50KTsK
LSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQWx0KENTU1By
b3BlcnR5SUQgcHJvcElELCBib29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYg
Y3VycmVudFZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZWRWYWx1ZTsKLQotICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQcmlt
aXRpdmVTdHJpbmdWYWx1ZShjdXJyZW50VmFsdWUpOwotICAgIGVsc2UgaWYgKGN1cnJlbnRWYWx1
ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MgPSBjdXJyZW50VmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
ICAgIGlmICghYXJncykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGN1cnJlbnRWYWx1ZS5mdW5jdGlvbi0+bmFtZSwg
ImF0dHIoIikpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQXR0cigqYXJncyk7Ci0g
ICAgfQotICAgIAotICAgIGlmIChwYXJzZWRWYWx1ZSkgewotICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSUQsIHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlE
ZWNsYXJhdGlvbihib29sIGltcG9ydGFudCwgQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICBpZiAobV9j
dXN0b21Qcm9wZXJ0eU5hbWUuaXNFbXB0eSgpIHx8ICFtX3ZhbHVlTGlzdCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVJbmhlcml0KQotICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJbmhl
cml0ZWRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlSW5pdGlhbCkKLSAgICAg
ICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJbml0aWFsVmFsdWUoKTsKLSAg
ICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVVuc2V0KQotICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVl
UG9vbC5jcmVhdGVVbnNldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVSZXZl
cnQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVJldmVydFZhbHVlKCk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVG
cm9tUGFyc2VyVmFsdWVMaXN0KCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlz
dC0+Y29udGFpbnNWYXJpYWJsZXMoKSkKLSAgICAgICAgICAgIHZhbHVlID0gQ1NTVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodmFsdWVMaXN0KSwgQ1NTUHJvcGVydHlDdXN0
b20pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IFdURk1vdmUodmFsdWVMaXN0
KTsKLSAgICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZTo6Y3JlYXRlKG1fY3VzdG9tUHJvcGVydHlOYW1lLCB2YWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IFsgPHN0cmluZz4gfCA8dXJpPiB8IDxjb3VudGVyPiB8IGF0dHIoWCkgfCBvcGVuLXF1b3RlIHwg
Y2xvc2UtcXVvdGUgfCBuby1vcGVuLXF1b3RlIHwgbm8tY2xvc2UtcXVvdGUgXSsgfCBpbmhlcml0
Ci0vLyBpbiBDU1MgMi4xIHRoaXMgZ290IHNvbWV3aGF0IHJlZHVjZWQ6Ci0vLyBbIDxzdHJpbmc+
IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUgfCBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVvdGUgfCBu
by1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8gdmFsdWVz
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotCi0gICAgd2hpbGUgKENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICAvLyB1cmwKLSAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKHZh
bHVlLT5zdHJpbmcpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIGF0dHIoWCkgfCBjb3VudGVyKFgg
WyxZXSkgfCBjb3VudGVycyhYLCBZLCBbLFpdKSB8IC13ZWJraXQtZ3JhZGllbnQoLi4uKQotICAg
ICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdz
LmdldCgpOwotICAgICAgICAgICAgaWYgKCFhcmdzKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1
ZS0+ZnVuY3Rpb24tPm5hbWUsICJhdHRyKCIpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBwYXJzZUF0dHIoKmFyZ3MpOwotICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAi
Y291bnRlcigiKSkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb3VudGVy
Q29udGVudCgqYXJncywgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAi
Y291bnRlcnMoIikpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQ291bnRl
ckNvbnRlbnQoKmFyZ3MsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUoKnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gcGFyc2VJbWFnZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICghcGFyc2Vk
VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXBhcnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0LCBwYXJzZWRWYWx1ZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgICAgICAvLyBvcGVu
LXF1b3RlCi0gICAgICAgICAgICAvLyBjbG9zZS1xdW90ZQotICAgICAgICAgICAgLy8gbm8tb3Bl
bi1xdW90ZQotICAgICAgICAgICAgLy8gbm8tY2xvc2UtcXVvdGUKLSAgICAgICAgICAgIC8vIGlu
aGVyaXQKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgbm90IHlldCBpbXBsZW1lbnRl
ZCAoaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwMykuCi0gICAgICAg
ICAgICAvLyBub25lCi0gICAgICAgICAgICAvLyBub3JtYWwKLSAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUtPmlkKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Tm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9DbG9zZVF1b3RlOgotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3JlYXRlUHJp
bWl0aXZlU3RyaW5nVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXBhcnNl
ZFZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKHBhcnNl
ZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIH0KLQotICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQpOwotICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUF0dHIo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1BhcnNlclZhbHVlJiBhcmd1bWVudCA9
ICphcmdzLmN1cnJlbnQoKTsKLQotICAgIGlmIChhcmd1bWVudC51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJU
KGFyZ3VtZW50LnN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICAvLyBDU1MgYWxsb3dzIGlkZW50aWZp
ZXJzIHdpdGggIi0iIGF0IHRoZSBzdGFydCwgbGlrZSAiLXdlYmtpdC1tYXNrLWltYWdlIi4KLSAg
ICAvLyBCdXQgSFRNTCBhdHRyaWJ1dGUgbmFtZXMgY2FuJ3QgaGF2ZSB0aG9zZSBjaGFyYWN0ZXJz
LCBhbmQgd2Ugc2hvdWxkIG5vdAotICAgIC8vIGV2ZW4gcGFyc2UgdGhlbSBpbnNpZGUgYXR0cigp
LgotICAgIGlmIChhcmd1bWVudC5zdHJpbmdbMF0gPT0gJy0nKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmIChtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIGFyZ3Vt
ZW50LnN0cmluZy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLQotICAgIC8vIEZJ
WE1FOiBJcyB0aGVyZSBzb21lIHNtYWxsIGJlbmVmaXQgdG8gY3JlYXRpbmcgYW4gQXRvbWljU3Ry
aW5nIGhlcmUgaW5zdGVhZCBvZiBhIFN0cmluZz8KLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZShTdHJpbmcoYXJndW1lbnQuc3RyaW5nKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19BVFRSKTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBDU1NWYWx1ZUlEIGlkID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4
dCB8fCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8
IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yCi0gICAgICAgIHx8IChpZCA+PSBDU1NWYWx1ZUdy
ZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgaW5RdWlya3NNb2RlKCkpKQotICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
aWQpOwotICAgIHJldHVybiBwYXJzZUNvbG9yKCk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVl
PiYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlTGlzdC5jdXJyZW50KCktPmlkID09IENTU1ZhbHVl
Tm9uZSkgewotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICBpZiAodmFsdWVMaXN0LmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VSSSkgewotICAgICAgICB2YWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21w
bGV0ZVVSTCh2YWx1ZUxpc3QuY3VycmVudCgpLT5zdHJpbmcpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSgqdmFsdWVMaXN0LmN1
cnJlbnQoKSkpCi0gICAgICAgIHJldHVybiBwYXJzZUdlbmVyYXRlZEltYWdlKHZhbHVlTGlzdCwg
dmFsdWUpOwotICAgIAotICAgIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1ZSgqdmFsdWVMaXN0
LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgdmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAg
IGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
UG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0KQotewotICAgIGludCBpZCA9
IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAgIGlmIChpZCA9PSBDU1NWYWx1ZUxlZnQgfHwg
aWQgPT0gQ1NTVmFsdWVSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcikgewotICAgICAgICBp
bnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJpZ2h0KQotICAgICAg
ICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDZW50
ZXIpCi0gICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7Ci0gICAgfQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKLSAgICBpZiAodmFsaWRhdGVVbml0
KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0KQotewotICAg
IGludCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAgIGlmIChpZCA9PSBDU1NWYWx1
ZVRvcCB8fCBpZCA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcikgewot
ICAgICAgICBpbnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUJvdHRv
bSkKLSAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlQ2VudGVyKQotICAgICAgICAgICAgcGVyY2VudCA9IDUwOwotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgIH0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgdW5zaWduZWQmIGN1bXVsYXRpdmVGbGFncywgRmlsbFBvc2l0aW9uRmxh
ZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlIHBhcnNpbmdNb2RlKQot
ewotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5pZDsKLSAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlVG9wIHx8IGlkID09IENTU1ZhbHVl
UmlnaHQgfHwgaWQgPT0gQ1NTVmFsdWVCb3R0b20gfHwgaWQgPT0gQ1NTVmFsdWVDZW50ZXIpIHsK
LSAgICAgICAgaW50IHBlcmNlbnQgPSAwOwotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMZWZ0
IHx8IGlkID09IENTU1ZhbHVlUmlnaHQpIHsKLSAgICAgICAgICAgIGlmIChjdW11bGF0aXZlRmxh
Z3MgJiBYRmlsbFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFhGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBp
bmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVSaWdodCkKLSAgICAgICAgICAgICAgICBwZXJjZW50ID0gMTAwOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlVG9wIHx8IGlkID09IENTU1ZhbHVlQm90dG9t
KSB7Ci0gICAgICAgICAgICBpZiAoY3VtdWxhdGl2ZUZsYWdzICYgWUZpbGxQb3NpdGlvbikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFn
cyB8PSBZRmlsbFBvc2l0aW9uOwotICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBZRmlsbFBv
c2l0aW9uOwotICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQm90dG9tKQotICAgICAgICAg
ICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVD
ZW50ZXIpIHsKLSAgICAgICAgICAgIC8vIENlbnRlciBpcyBhbWJpZ3VvdXMsIHNvIHdlJ3JlIG5v
dCBzdXJlIHdoaWNoIHBvc2l0aW9uIHdlJ3ZlIGZvdW5kIHlldCwgYW4geCBvciBhIHkuCi0gICAg
ICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgICAgICBjdW11bGF0aXZlRmxhZ3MgfD0gQW1i
aWd1b3VzRmlsbFBvc2l0aW9uOwotICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBBbWJpZ3Vv
dXNGaWxsUG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFyc2luZ01vZGUgPT0g
UmVzb2x2ZVZhbHVlc0FzS2V5d29yZCkKLSAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7Ci0KLSAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkpOwotICAgIGlmICgh
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY3VtdWxhdGl2ZUZsYWdzKSB7Ci0g
ICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9uOwotICAgICAgICBpbmRpdmlk
dWFsRmxhZyA9IFhGaWxsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlmIChjdW11bGF0aXZlRmxhZ3Mg
JiAoWEZpbGxQb3NpdGlvbiB8IEFtYmlndW91c0ZpbGxQb3NpdGlvbikpIHsKLSAgICAgICAgY3Vt
dWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgIGluZGl2aWR1YWxGbGFnID0g
WUZpbGxQb3NpdGlvbjsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7
Ci19Ci0KLXN0YXRpYyBib29sIGlzVmFsdWVDb25mbGljdGluZ1dpdGhDdXJyZW50RWRnZShpbnQg
dmFsdWUxLCBpbnQgdmFsdWUyKQotewotICAgIGlmICgodmFsdWUxID09IENTU1ZhbHVlTGVmdCB8
fCB2YWx1ZTEgPT0gQ1NTVmFsdWVSaWdodCkgJiYgKHZhbHVlMiA9PSBDU1NWYWx1ZUxlZnQgfHwg
dmFsdWUyID09IENTU1ZhbHVlUmlnaHQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
ICgodmFsdWUxID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlMSA9PSBDU1NWYWx1ZUJvdHRvbSkgJiYg
KHZhbHVlMiA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZTIgPT0gQ1NTVmFsdWVCb3R0b20pKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wg
aXNGaWxsUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZh
bHVlID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZSA9PSBD
U1NWYWx1ZUJvdHRvbSB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlID09IENTU1Zh
bHVlQ2VudGVyOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzRmlsbFBvc2l0aW9u
KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMiwgUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBhcnNl
ZFZhbHVlMikKLXsKLSAgICAvLyBbIGxlZnQgfCByaWdodCBdIFsgPHBlcmNlbnRhZ2VdIHwgPGxl
bmd0aD4gXSAmJiBbIHRvcCB8IGJvdHRvbSBdIFsgPHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4gXQot
ICAgIC8vIEluIHRoZSBjYXNlIG9mIDQgdmFsdWVzIDxwb3NpdGlvbj4gcmVxdWlyZXMgdGhlIHNl
Y29uZCB2YWx1ZSB0byBiZSBhIGxlbmd0aCBvciBhIHBlcmNlbnRhZ2UuCi0gICAgaWYgKGlzRmls
bFBvc2l0aW9uS2V5d29yZChwYXJzZWRWYWx1ZTItPmdldFZhbHVlSUQoKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0
aW9uRmxhZyB2YWx1ZTNGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBhdXRvIHZhbHVl
MyA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdz
LCB2YWx1ZTNGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKTsKLSAgICBpZiAoIXZhbHVlMykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFsdWVJRCBpZGVudDEgPSBwYXJzZWRWYWx1ZTEt
PmdldFZhbHVlSUQoKTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MyA9IHZhbHVlMy0+Z2V0VmFsdWVJ
RCgpOwotCi0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNlbnRlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSB8fCBpZGVudDMgPT0g
Q1NTVmFsdWVDZW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIG5lZWQgdG8gY2hl
Y2sgaWYgdGhlIHZhbHVlcyBhcmUgbm90IGNvbmZsaWN0aW5nLCBlLmcuIHRoZXkgYXJlIG5vdCBv
biB0aGUgc2FtZSBlZGdlLiBJdCBpcwotICAgIC8vIG5lZWRlZCBhcyB0aGUgc2Vjb25kIGNhbGwg
dG8gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQgd2FzIG9uIHB1cnBvc2Ugbm90IGNoZWNraW5n
IGl0LiBJbiB0aGUKLSAgICAvLyBjYXNlIG9mIHR3byB2YWx1ZXMgdG9wIDIwcHggaXMgaW52YWxp
ZCBidXQgaW4gdGhlIGNhc2Ugb2YgNCB2YWx1ZXMgaXQgYmVjb21lcyB2YWxpZC4KLSAgICBpZiAo
aXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlkZW50MSwgaWRlbnQzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIGN1bXVsYXRpdmVGbGFn
cyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTRGbGFnID0gSW52YWxpZEZpbGxQb3Np
dGlvbjsKLSAgICBhdXRvIHZhbHVlNCA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVl
TGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTRGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3Jk
KTsKLSAgICBpZiAoIXZhbHVlNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gNHRoIHZhbHVl
IG11c3QgYmUgYSBsZW5ndGggb3IgYSBwZXJjZW50YWdlLgotICAgIGlmIChpc0ZpbGxQb3NpdGlv
bktleXdvcmQodmFsdWU0LT5nZXRWYWx1ZUlEKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2
YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEpLCBX
VEZNb3ZlKHBhcnNlZFZhbHVlMikpOwotICAgIHZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVl
UGFpcih2YWx1ZTMucmVsZWFzZU5vbk51bGwoKSwgdmFsdWU0LnJlbGVhc2VOb25OdWxsKCkpOwot
Ci0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0
b20pCi0gICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7Ci0KLSAgICB2YWx1ZUxpc3QubmV4dCgp
OwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMiwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMikK
LXsKLSAgICB1bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOwotICAgIEZpbGxQb3NpdGlvbkZs
YWcgdmFsdWUzRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0gICAgYXV0byB2YWx1ZTMgPSBw
YXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRpdmVGbGFncywgdmFs
dWUzRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7Ci0KLSAgICAvLyB2YWx1ZTMgaXMgbm90
IGFuIGV4cGVjdGVkIHZhbHVlLCB3ZSByZXR1cm4uCi0gICAgaWYgKCF2YWx1ZTMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHZhbHVlTGlzdC5uZXh0KCk7Ci0KLSAgICBib29sIHN3YXBOZWVkZWQg
PSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNlZFZhbHVlMS0+Z2V0VmFsdWVJ
RCgpOwotICAgIENTU1ZhbHVlSUQgaWRlbnQyID0gcGFyc2VkVmFsdWUyLT5nZXRWYWx1ZUlEKCk7
Ci0gICAgQ1NTVmFsdWVJRCBpZGVudDMgPSB2YWx1ZTMtPmdldFZhbHVlSUQoKTsKLQotICAgIENT
U1ZhbHVlSUQgZmlyc3RQb3NpdGlvbktleXdvcmQ7Ci0gICAgQ1NTVmFsdWVJRCBzZWNvbmRQb3Np
dGlvbktleXdvcmQ7Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpOwotICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVDZW50ZXIpIHsKLSAgICAgICAg
Ly8gPHBvc2l0aW9uPiByZXF1aXJlcyB0aGUgZmlyc3QgJ2NlbnRlcicgdG8gYmUgZm9sbG93ZWQg
YnkgYSBrZXl3b3JkLgotICAgICAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDIp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmICdjZW50ZXInIGlzIHRoZSBm
aXJzdCBrZXl3b3JkIHRoZW4gdGhlIGxhc3Qgb25lIG5lZWRzIHRvIGJlIGEgbGVuZ3RoLgotICAg
ICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MykpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZmlyc3RQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1ZUxlZnQ7Ci0gICAg
ICAgIGlmIChpZGVudDIgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MiA9PSBDU1NWYWx1ZVJpZ2h0
KSB7Ci0gICAgICAgICAgICBmaXJzdFBvc2l0aW9uS2V5d29yZCA9IENTU1ZhbHVlVG9wOwotICAg
ICAgICAgICAgc3dhcE5lZWRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUxID0g
Y3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoZmlyc3RQb3NpdGlvbktleXdvcmQpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoNTAsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOwotICAgICAgICB2YWx1ZTIgPSBjcmVh
dGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTIpLCB2YWx1ZTMuY29weVJl
ZigpKTsKLSAgICB9IGVsc2UgaWYgKGlkZW50MyA9PSBDU1NWYWx1ZUNlbnRlcikgewotICAgICAg
ICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MikpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gQ1NTVmFsdWVUb3A7Ci0gICAgICAg
IGlmIChpZGVudDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09IENTU1ZhbHVlQm90dG9tKSB7
Ci0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1ZUxlZnQ7Ci0gICAg
ICAgICAgICBzd2FwTmVlZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZTEgPSBj
cmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEpLCBwYXJzZWRWYWx1
ZTIuY29weVJlZigpKTsKLSAgICAgICAgdmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWly
KGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc2Vjb25kUG9zaXRpb25LZXl3b3Jk
KSwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDUwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGZpcnN0UG9zaXRpb25WYWx1ZTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBzZWNvbmRQb3NpdGlvblZhbHVlOwotCi0gICAgICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdv
cmQoaWRlbnQyKSkgewotICAgICAgICAgICAgLy8gVG8gbWF0Y2ggQ1NTIGdyYW1tYXIsIHdlIHNo
b3VsZCBvbmx5IGFjY2VwdDogWyBjZW50ZXIgfCBsZWZ0IHwgcmlnaHQgfCBib3R0b20gfCB0b3Ag
XSBbIGxlZnQgfCByaWdodCB8IHRvcCB8IGJvdHRvbSBdIFsgPHBlcmNlbnRhZ2U+IHwgPGxlbmd0
aD4gXS4KLSAgICAgICAgICAgIEFTU0VSVChpZGVudDIgIT0gQ1NTVmFsdWVDZW50ZXIpOwotCi0g
ICAgICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MykpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvblZhbHVlID0gdmFsdWUz
OwotICAgICAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gaWRlbnQyOwotICAgICAgICAg
ICAgZmlyc3RQb3NpdGlvblZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDAsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBQZXIgQ1NTLCB3ZSBzaG91bGQgb25seSBhY2NlcHQ6IFsgcmlnaHQgfCBsZWZ0IHwg
dG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdIFsgY2VudGVyIHwgbGVm
dCB8IHJpZ2h0IHwgYm90dG9tIHwgdG9wIF0uCi0gICAgICAgICAgICBpZiAoIWlzRmlsbFBvc2l0
aW9uS2V5d29yZChpZGVudDMpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgZmlyc3RQb3NpdGlvblZhbHVlID0gcGFyc2VkVmFsdWUyLnB0cigpOwotICAgICAgICAgICAg
c2Vjb25kUG9zaXRpb25LZXl3b3JkID0gaWRlbnQzOwotICAgICAgICAgICAgc2Vjb25kUG9zaXRp
b25WYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVmFsdWVDb25mbGlj
dGluZ1dpdGhDdXJyZW50RWRnZShpZGVudDEsIHNlY29uZFBvc2l0aW9uS2V5d29yZCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURk1vdmUocGFyc2VkVmFsdWUxKSwgZmlyc3RQb3NpdGlvblZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoY3NzVmFs
dWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktleXdvcmQpLCBzZWNv
bmRQb3NpdGlvblZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIGlmIChpZGVu
dDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09IENTU1ZhbHVlQm90dG9tIHx8IHN3YXBOZWVk
ZWQpCi0gICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gKnZhbHVlMTsKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgc2Vjb25kID0gKnZhbHVlMjsKLSAgICBpZGVudDEgPSBmaXJzdC5nZXRQYWlyVmFsdWUoKS0+
Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwotICAgIGlkZW50MiA9IHNlY29uZC5nZXRQYWlyVmFsdWUo
KS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwotICAgIEFTU0VSVChpZGVudDEgPT0gQ1NTVmFsdWVM
ZWZ0IHx8IGlkZW50MSA9PSBDU1NWYWx1ZVJpZ2h0KTsKLSAgICBBU1NFUlQoaWRlbnQyID09IENT
U1ZhbHVlQm90dG9tIHx8IGlkZW50MiA9PSBDU1NWYWx1ZVRvcCk7Ci0jZW5kaWYKLX0KLQotaW5s
aW5lIGJvb2wgQ1NTUGFyc2VyOjppc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoQ1NTUGFyc2VyVmFs
dWUmIHZhbHVlKQotewotICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWUuaWQpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNl
RmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMikK
LXsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gdmFsdWVMaXN0LmN1cnJlbnRJbmRleCgpOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgKytpLCAr
K251bWJlck9mVmFsdWVzKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50ID0gdmFs
dWVMaXN0LnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmICghY3VycmVudCB8fCBpc0NvbW1hKGN1cnJl
bnQpIHx8IGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKmN1cnJlbnQpIHx8ICFpc1BvdGVudGlhbFBv
c2l0aW9uVmFsdWUoKmN1cnJlbnQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKG51bWJlck9mVmFsdWVzID4gNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2Ug
YXJlIHBhcnNpbmcgdHdvIHZhbHVlcywgd2UgY2FuIHNhZmVseSBjYWxsIHRoZSBDU1MgMi4xIHBh
cnNpbmcgZnVuY3Rpb24gYW5kIHJldHVybi4KLSAgICBpZiAobnVtYmVyT2ZWYWx1ZXMgPD0gMikg
ewotICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24odmFsdWVMaXN0LCB2YWx1ZTEsIHZh
bHVlMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobnVtYmVyT2ZWYWx1
ZXMgPiAyICYmIG51bWJlck9mVmFsdWVzIDw9IDQpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKLQotICAgIC8vIDxwb3NpdGlvbj4gcmVxdWlyZXMg
dGhlIGZpcnN0IHZhbHVlIHRvIGJlIGEgYmFja2dyb3VuZCBrZXl3b3JkLgotICAgIGlmICghaXNG
aWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLT5pZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gV2UncmUganVzdCBtYWtpbmcgc3VyZSB0aGF0IGl0IGlz
IG9uZSBvZiB0aGUgdmFsaWQga2V5d29yZHMgb3IgYSBwZXJjZW50YWdlL2xlbmd0aC4KLSAgICB1
bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOwotICAgIEZpbGxQb3NpdGlvbkZsYWcgdmFsdWUx
RmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTJG
bGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICB2YWx1ZTEgPSBwYXJzZUZpbGxQb3NpdGlv
bkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRpdmVGbGFncywgdmFsdWUxRmxhZywgUmVzb2x2
ZVZhbHVlc0FzS2V5d29yZCk7Ci0gICAgaWYgKCF2YWx1ZTEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIC8vIEluIGNhc2Ugd2UgYXJlIHBh
cnNpbmcgbW9yZSB0aGFuIHR3byB2YWx1ZXMsIHJlbGF4IHRoZSBjaGVjayBpbnNpZGUgb2YgcGFy
c2VGaWxsUG9zaXRpb25Db21wb25lbnQuIHRvcCAyMHB4IGlzCi0gICAgLy8gYSB2YWxpZCBzdGFy
dCBmb3IgPHBvc2l0aW9uPi4KLSAgICBjdW11bGF0aXZlRmxhZ3MgPSBBbWJpZ3VvdXNGaWxsUG9z
aXRpb247Ci0gICAgdmFsdWUyID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0
LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlMkZsYWcsIFJlc29sdmVWYWx1ZXNBc0tleXdvcmQpOwot
ICAgIGlmICh2YWx1ZTIpCi0gICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHZhbHVlMSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIHBhcnNlZFZhbHVlMSA9IHZhbHVlMS5yZWxlYXNlTm9uTnVsbCgpOwotICAgIGF1dG8gcGFy
c2VkVmFsdWUyID0gdmFsdWUyLnJlbGVhc2VOb25OdWxsKCk7Ci0KLSAgICAvLyBQZXIgQ1NTMyBz
eW50YXgsIDxwb3NpdGlvbj4gY2FuJ3QgaGF2ZSAnY2VudGVyJyBhcyBpdHMgc2Vjb25kIGtleXdv
cmQgYXMgd2UgaGF2ZSBtb3JlIGFyZ3VtZW50cyB0byBmb2xsb3cuCi0gICAgaWYgKHBhcnNlZFZh
bHVlMi0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobnVtYmVyT2ZWYWx1ZXMgPT0gMykKLSAgICAgICAgcGFyc2UzVmFsdWVzRmlsbFBv
c2l0aW9uKHZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIsIFdURk1vdmUocGFyc2VkVmFsdWUxKSwg
V1RGTW92ZShwYXJzZWRWYWx1ZTIpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhcnNlNFZhbHVlc0Zp
bGxQb3NpdGlvbih2YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyLCBXVEZNb3ZlKHBhcnNlZFZhbHVl
MSksIFdURk1vdmUocGFyc2VkVmFsdWUyKSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZTJW
YWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFs
dWUyKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCk7
Ci0KLSAgICAvLyBQYXJzZSB0aGUgZmlyc3QgdmFsdWUuICBXZSdyZSBqdXN0IG1ha2luZyBzdXJl
IHRoYXQgaXQgaXMgb25lIG9mIHRoZSB2YWxpZCBrZXl3b3JkcyBvciBhIHBlcmNlbnRhZ2UvbGVu
Z3RoLgotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9u
RmxhZyB2YWx1ZTFGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBGaWxsUG9zaXRpb25G
bGFnIHZhbHVlMkZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIHZhbHVlMSA9IHBhcnNl
RmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTFG
bGFnKTsKLSAgICBpZiAoIXZhbHVlMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSXQgb25s
eSB0YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRpb24gdG8gYmUgY29ycmVjdGx5
IHBhcnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRoYW5kIChzaW5jZSB3ZQotICAg
IC8vIGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJlbG9uZyB0byB0aGUgcmVzdCBv
ZiB0aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kLCB0aG91
Z2gsIHRoZQotICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNwZWNpZmllZCBmb3Igb3VyIHBy
b3BlcnR5LgotICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIC8vIEZpcnN0IGNo
ZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJlIGZpbmlzaGVkIHBhcnNpbmcgdGhpcyB2
YWx1ZSBvciB2YWx1ZSBwYWlyLgotICAgIGlmIChpc0NvbW1hKHZhbHVlKSkKLSAgICAgICAgdmFs
dWUgPSBudWxscHRyOwotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHZhbHVlMiA9IHBhcnNl
RmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTJG
bGFnKTsKLSAgICAgICAgaWYgKHZhbHVlMikKLSAgICAgICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFpblNob3J0aGFuZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlMikKLSAgICAg
ICAgLy8gT25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZC4gSWYgdGhhdCB2YWx1ZSB3YXMgbm90
IGEga2V5d29yZCwgdGhlbiBpdCBzZXRzIHRoZSB4IHBvc2l0aW9uLCBhbmQgdGhlIHkgcG9zaXRp
b24KLSAgICAgICAgLy8gaXMgc2ltcGx5IDUwJS4gVGhpcyBpcyBvdXIgZGVmYXVsdC4KLSAgICAg
ICAgLy8gRm9yIGtleXdvcmRzLCB0aGUga2V5d29yZCB3YXMgZWl0aGVyIGFuIHgta2V5d29yZCAo
bGVmdC9yaWdodCksIGEgeS1rZXl3b3JkICh0b3AvYm90dG9tKSwgb3IgYW4gYW1iaWd1b3VzIGtl
eXdvcmQgKGNlbnRlcikuCi0gICAgICAgIC8vIEZvciBsZWZ0L3JpZ2h0L2NlbnRlciwgdGhlIGRl
ZmF1bHQgb2YgNTAlIGluIHRoZSB5IGlzIHN0aWxsIGNvcnJlY3QuCi0gICAgICAgIHZhbHVlMiA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0KLSAgICBpZiAodmFsdWUxRmxhZyA9PSBZRmlsbFBvc2l0
aW9uIHx8IHZhbHVlMkZsYWcgPT0gWEZpbGxQb3NpdGlvbikKLSAgICAgICAgdmFsdWUxLnN3YXAo
dmFsdWUyKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NT
VmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKLXsKLSAgICBDU1NWYWx1
ZUlEIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1Zh
bHVlUmVwZWF0WCkgewotICAgICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAg
ICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVSZXBlYXQpOwotICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0KTsKLSAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVSZXBlYXRZKSB7Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVl
OwotICAgICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0KTsKLSAgICAgICAgdmFsdWUyID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXQpOwot
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlk
ID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkKLSAgICAgICAgdmFsdWUx
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwot
ICAgIGVsc2UgewotICAgICAgICB2YWx1ZTEgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
LQotICAgIC8vIFBhcnNlIHRoZSBzZWNvbmQgdmFsdWUgaWYgb25lIGlzIGF2YWlsYWJsZQotICAg
IGlmICh2YWx1ZSAmJiAhaXNDb21tYSh2YWx1ZSkpIHsKLSAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7
Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVw
ZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkgewotICAg
ICAgICAgICAgdmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWQpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIG9ubHkgb25lIHZhbHVl
IHdhcyBzcGVjaWZpZWQsIHZhbHVlMiBpcyB0aGUgc2FtZSBhcyB2YWx1ZTEuCi0gICAgbV9pbXBs
aWNpdFNob3J0aGFuZCA9IHRydWU7Ci0gICAgdmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZTEpLmdldFZhbHVlSUQoKSk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxvd0Nv
bW1hKQotewotICAgIGFsbG93Q29tbWEgPSB0cnVlOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAodmFsdWUtPmlkID09IENTU1Zh
bHVlQ29udGFpbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3ZlcikKLSAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5p
ZCk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMTsKLQotICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBwYXJzZWRWYWx1ZTEgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pOwotICAgIGVsc2UgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGFyc2VkVmFsdWUyOwotICAgIGlmICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
KSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9y
ICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQotICAgICAgICAgICAgYWxsb3dDb21tYSA9IGZhbHNl
OwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwot
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWluU2hvcnRoYW5kKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4gaXQgaXMgYWR2YW5j
ZWQgd2UnbGwgZW5kIHVwIGJhY2sgYXQgdGhpcyB2YWx1ZS4KLSAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwYXJzZWRWYWx1ZTIgJiYgcHJv
cElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUpIHsKLSAgICAgICAgLy8gRm9y
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHNldCB0aGUgc2Vjb25kIHZhbHVlIHRvIHRoZSBm
aXJzdCBpZiBpdCBpcyBvbWl0dGVkLgotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZG8gdGhp
cyBmb3IgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUuIEl0IHNob3VsZCBiZSBzYWZlIHRvIGxldCBt
YXNrcyBtYXRjaAotICAgICAgICAvLyB0aGUgcmVhbCBwcm9wZXJ0eS4KLSAgICAgICAgcGFyc2Vk
VmFsdWUyID0gcGFyc2VkVmFsdWUxOwotICAgIH0KLQotICAgIGlmICghcGFyc2VkVmFsdWUyKQot
ICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWUxOwotICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVW
YWx1ZVBhaXIocGFyc2VkVmFsdWUxLnJlbGVhc2VOb25OdWxsKCksIHBhcnNlZFZhbHVlMi5yZWxl
YXNlTm9uTnVsbCgpLCBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSA/
IFBhaXI6OklkZW50aWNhbFZhbHVlRW5jb2Rpbmc6OkNvYWxlc2NlIDogUGFpcjo6SWRlbnRpY2Fs
VmFsdWVFbmNvZGluZzo6RG9Ob3RDb2FsZXNjZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElk
MSwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+JiByZXRWYWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZh
bHVlMikKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7Ci0gICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gdmFsdWVzMjsKLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlOwot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTI7
Ci0KLSAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKLQotICAgIHJldFZhbHVlMSA9IHJldFZh
bHVlMiA9IG51bGxwdHI7Ci0gICAgcHJvcElkMSA9IHByb3BJZDsKLSAgICBwcm9wSWQyID0gcHJv
cElkOwotICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24pIHsK
LSAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDsKLSAgICAg
ICAgcHJvcElkMiA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWTsKLSAgICB9IGVsc2Ug
aWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikgewotICAgICAgICBw
cm9wSWQxID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOwotICAgICAgICBwcm9wSWQy
ID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOwotICAgIH0gZWxzZSBpZiAocHJvcElk
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCkgewotICAgICAgICBwcm9wSWQxID0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDsKLSAgICAgICAgcHJvcElkMiA9IENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFk7Ci0gICAgfSBlbHNlIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0KSB7Ci0gICAgICAgIHByb3BJZDEgPSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tSZXBlYXRYOwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoKGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOwotICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTI7Ci0KLSAgICAgICAgaWYgKGFsbG93Q29tbWEpIHsK
LSAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBhbGxvd0NvbW1hID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBh
bGxvd0NvbW1hID0gdHJ1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICAgICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUZpeGVkIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMb2NhbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tJbWFnZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlRmlsbEltYWdl
KCptX3ZhbHVlTGlzdCwgY3VyclZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKLSAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbjoKLSAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBm
aXJzdCB0aHJlZSB2YWx1ZXMgaGVyZSBhcmUgZGVwcmVjYXRlZCBhbmQgZG8gbm90IGFwcGx5IHRv
IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcwotICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgLXdlYmtpdC0gcHJlZml4IHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQm9yZGVyIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVQYWRkaW5nIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250ZW50
Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVl
Qm9yZGVyQm94IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nQm94IHx8IGN1
cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB8fCAoKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwIHx8IHBy
b3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVUZXh0IHx8IGN1cnJlbnRWYWx1ZS0+
aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KGN1cnJlbnRWYWx1ZS0+aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKCpjdXJyZW50VmFsdWUsIGN1
cnJWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZE9yaWdpbjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1
ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1
ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2YWx1ZTE7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdmFsdWUyOwotICAgICAgICAgICAgICAgICAgICBwYXJzZUZpbGxQb3NpdGlv
bigqbV92YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyKTsKLSAgICAgICAgICAgICAgICAgICAgY3Vy
clZhbHVlID0gV1RGTW92ZSh2YWx1ZTEpOwotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUy
ID0gV1RGTW92ZSh2YWx1ZTIpOwotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZUZpbGxQb3Np
dGlvbiBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlci4KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25YOiB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9
IHBhcnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6IHsKLSAgICAgICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENv
bXBvc2l0ZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBv
c2l0ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPj0gQ1NTVmFs
dWVDbGVhciAmJiBjdXJyZW50VmFsdWUtPmlkIDw9IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZEJsZW5kTW9kZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1
ZU11bHRpcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlkID09
IENTU1ZhbHVlU2NyZWVuIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVPdmVybGF5IHx8
IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVEYXJrZW4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaWdodGVuIHx8ICBjdXJyZW50VmFs
dWUtPmlkID09IENTU1ZhbHVlQ29sb3JEb2RnZSB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlQ29sb3JCdXJuCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlk
ID09IENTU1ZhbHVlSGFyZExpZ2h0IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVTb2Z0
TGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURpZmZlcmVuY2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVFeGNsdXNpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWxsUmVwZWF0
KGN1cnJWYWx1ZSwgY3VyclZhbHVlMik7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlRmls
bFJlcGVhdCBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlcgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNp
emU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXpl
OgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZTogewotICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxTaXplKHByb3BJZCwgYWxsb3dD
b21tYSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tTb3VyY2VUeXBlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFs
dWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQWxw
aGEgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUx1bWluYW5jZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmICghY3VyclZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICAgICAgdmFs
dWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh2YWx1ZTIgJiYgIXZhbHVlczIpIHsKLSAgICAgICAgICAgICAgICB2YWx1
ZXMyID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgICAgICAgICAg
ICAgIHZhbHVlczItPmFwcGVuZCh2YWx1ZTIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICAgICAgdmFsdWVzLT5h
cHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZShjdXJyVmFsdWUpOwotICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZTIpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWVzMikKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKGN1cnJWYWx1ZTIucmVsZWFzZU5vbk51bGwoKSk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1ZTIgPSBXVEZNb3Zl
KGN1cnJWYWx1ZTIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hl
biBwYXJzaW5nIGFueSBmaWxsIHNob3J0aGFuZCBwcm9wZXJ0eSwgd2UgbGV0IGl0IGhhbmRsZSBi
dWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAotICAgICAgICAvLyBwcm9wZXJ0aWVzLgotICAg
ICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgewotICAgICAgICByZXRWYWx1ZTEgPSBX
VEZNb3ZlKHZhbHVlcyk7Ci0gICAgICAgIGlmICh2YWx1ZXMyICYmIHZhbHVlczItPmxlbmd0aCgp
KQotICAgICAgICAgICAgcmV0VmFsdWUyID0gV1RGTW92ZSh2YWx1ZXMyKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh2YWx1ZSkgewotICAgICAgICByZXRWYWx1ZTEgPSBX
VEZNb3ZlKHZhbHVlKTsKLSAgICAgICAgcmV0VmFsdWUyID0gV1RGTW92ZSh2YWx1ZTIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCi17Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOwotICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZUaW1lKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCi17Ci0g
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBp
ZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFs
dGVybmF0ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXZlcnNlIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUFsdGVybmF0ZVJldmVyc2UpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VB
bmltYXRpb25EdXJhdGlvbigpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotICAgIGlmICh2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwgRk5vbk5lZykpCi0gICAgICAgIHJldHVy
biBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VBbmltYXRpb25GaWxsTW9kZSgpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
Tm9uZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVCYWNrd2FyZHMgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQm90aCkKLSAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
LT5pZCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKLXsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFs
dWUuaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLSAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgaWYgKHZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZh
bHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZU5vbmUg
fHwgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJub25lIikpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUodmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCkK
LXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
LSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVlLmlkID09IENTU1Zh
bHVlUGF1c2VkKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi0j
aWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VBbmltYXRpb25UcmlnZ2VyKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVBdXRvKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLQotICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Q1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwot
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLT5mdW5jdGlvbi0+
bmFtZSwgImNvbnRhaW5lci1zY3JvbGwoIikpIHsKLSAgICAgICAgaWYgKCFhcmdzIHx8IChhcmdz
LT5zaXplKCkgIT0gMSAmJiBhcmdzLT5zaXplKCkgIT0gMykpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJy
ZW50KCk7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBhdXRvIHN0YXJ0VmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVy
biBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKHN0YXJ0VmFs
dWUpKTsKLQotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHNlY29uZEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1
bWVudCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHNlY29uZEFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IGF1dG8gZW5kVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoc2Vjb25kQXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgIHJldHVybiBDU1NBbmltYXRpb25UcmlnZ2Vy
U2Nyb2xsVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKHN0YXJ0VmFsdWUpLCBXVEZNb3ZlKGVuZFZhbHVl
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0jZW5kaWYKLQotUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0
aW9uUGFyc2VDb250ZXh0JiBjb250ZXh0KQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9
ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIENTU1By
b3BlcnR5SUQgcmVzdWx0ID0gY3NzUHJvcGVydHlJRCh2YWx1ZS5zdHJpbmcpOwotICAgIGlmIChy
ZXN1bHQgJiYgcmVzdWx0ICE9IENTU1Byb3BlcnR5QWxsKSAvLyAiYWxsIiB2YWx1ZSBpbiBhbmlt
YXRpb24gaXMgbm90IGVxdWl2YWxlbnQgdG8gdGhlIGFsbCBwcm9wZXJ0eS4KLSAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3Vs
dCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiYWxsIikp
IHsKLSAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQoKTsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQWxsKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLCAibm9uZSIpKSB7Ci0gICAgICAgIGNvbnRleHQuY29tbWl0QW5pbWF0aW9uUHJv
cGVydHlLZXl3b3JkKCk7Ci0gICAgICAgIGNvbnRleHQuc2F3QW5pbWF0aW9uUHJvcGVydHlLZXl3
b3JkKCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotLyogc3RhdGljICovCi1WZWN0b3I8ZG91YmxlPiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJh
bWVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKSB7Ci0gICAgVmVjdG9yPGRvdWJsZT4g
a2V5czsKLSAgICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOwotICAgIHNlbGVjdG9yLnNwbGl0KCcs
Jywgc3RyaW5ncyk7Ci0KLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RyaW5ncy5z
aXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5ncy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUga2V5ID0gLTE7Ci0gICAgICAgIFN0cmluZyBjdXIgPSBzdHJpbmdz
W2ldLnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgICAgIC8vIEZvciBub3cgdGhlIHN5bnRheCBN
VVNUIGJlICd4eHglJyBvciAnZnJvbScgb3IgJ3RvJywgd2hlcmUgeHh4IGlzIGEgbGVnYWwgZmxv
YXRpbmcgcG9pbnQgbnVtYmVyCi0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShjdXIsICJmcm9tIikpCi0gICAgICAgICAgICBrZXkgPSAwOwotICAgICAgICBlbHNlIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXIsICJ0byIpKQotICAgICAgICAgICAg
a2V5ID0gMTsKLSAgICAgICAgZWxzZSBpZiAoY3VyLmVuZHNXaXRoKCclJykpIHsKLSAgICAgICAg
ICAgIGRvdWJsZSBrID0gY3VyLnN1YnN0cmluZygwLCBjdXIubGVuZ3RoKCkgLSAxKS50b0RvdWJs
ZSgpOwotICAgICAgICAgICAgaWYgKGsgPj0gMCAmJiBrIDw9IDEwMCkKLSAgICAgICAgICAgICAg
ICBrZXkgPSBrIC8gMTAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChrZXkgPCAwKSB7Ci0gICAg
ICAgICAgICBrZXlzLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChrZXkpOwotICAgIH0KLQotICAgIHJldHVybiBrZXlz
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiB2YWx1ZTIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMykKLXsKLSAgICBwYXJzZTJWYWx1ZXNG
aWxsUG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWx1ZTEsIHZhbHVlMik7Ci0KLSAgICAvLyBub3cg
Z2V0IHoKLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgpKSB7Ci0gICAgICAgICAgICB2YWx1ZTMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgdmFsdWUzID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
bXBsaWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1Bh
cnNlcjo6aXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2NvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkOwotfQotCi1PcHRpb25hbDxk
b3VibGU+IENTU1BhcnNlcjo6cGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NT
UGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpKQotICAgICAgICByZXR1cm4gTnVs
bG9wdDsKLSAgICBPcHRpb25hbDxkb3VibGU+IHJlc3VsdCA9IHBhcnNlZERvdWJsZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IGFyZ3Mu
bmV4dCgpOwotICAgIGlmICghbmV4dFZhbHVlKSB7Ci0gICAgICAgIC8vIFRoZSBsYXN0IG51bWJl
ciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3ZSdyZSBkb25lLgot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAoIWlzQ29tbWEobmV4dFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgYXJncy5uZXh0KCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotT3B0aW9uYWw8ZG91YmxlPiBDU1NQYXJzZXI6OnBhcnNlU3ByaW5nVGlt
aW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsK
LSAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcikp
Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIE9wdGlvbmFsPGRvdWJsZT4gcmVzdWx0ID0g
cGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICBhcmdzLm5leHQoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVl
RWFzZSB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1
ZUVhc2VJbiB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQKLSAgICAgICAgfHwgdmFsdWUu
aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVTdGVwU3RhcnQg
fHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVTdGVwRW5kKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotCi0gICAg
Ly8gV2UgbXVzdCBiZSBhIGZ1bmN0aW9uLgotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLQotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInN0
ZXBzKCIpKSB7Ci0gICAgICAgIC8vIEZvciBzdGVwcywgMSBvciAyIHBhcmFtcyBtdXN0IGJlIHNw
ZWNpZmllZCAoY29tbWEtc2VwYXJhdGVkKQotICAgICAgICBpZiAoIWFyZ3MgfHwgKGFyZ3MtPnNp
emUoKSAhPSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gdmFsdWVzLgotICAgICAgICBpbnQgbnVt
U3RlcHM7Ci0gICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxzZTsKLQotICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAg
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlcikpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbnVtU3RlcHMgPSBjbGFtcFRvSW50
ZWdlcihwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgaWYg
KG51bVN0ZXBzIDwgMSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhcmd1
bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICBpZiAoYXJndW1lbnQpIHsKLSAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIGEgY29tbWEgc28gd2UgbmVlZCB0byBwYXJzZSB0aGUgc2Vjb25kIHZh
bHVlCi0gICAgICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlU3RhcnQgJiYgYXJndW1lbnQt
PmlkICE9IENTU1ZhbHVlRW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVTdGFydDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNy
ZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwotICAgIH0KLQotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImN1YmljLWJlemllcigi
KSkgewotICAgICAgICAvLyBGb3IgY3ViaWMgYmV6aWVyLCA0IHZhbHVlcyBtdXN0IGJlIHNwZWNp
ZmllZCAoY29tbWEtc2VwYXJhdGVkKS4KLSAgICAgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUo
KSAhPSA3KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgLy8gVGhlcmUg
YXJlIHR3byBwb2ludHMgc3BlY2lmaWVkLiBUaGUgeCB2YWx1ZXMgbXVzdCBiZSBiZXR3ZWVuIDAg
YW5kIDEgYnV0IHRoZSB5IHZhbHVlcyBjYW4gZXhjZWVkIHRoaXMgcmFuZ2UuCi0KLSAgICAgICAg
YXV0byB4MSA9IHBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAg
ICAgICAgaWYgKCF4MSB8fCB4MS52YWx1ZSgpIDwgMCB8fCB4MS52YWx1ZSgpID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1dG8geTEgPSBwYXJzZUN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICgheTEpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHgyID0gcGFyc2VDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwotICAgICAgICBpZiAoIXgyIHx8IHgyLnZhbHVl
KCkgPCAwIHx8IHgyLnZhbHVlKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgYXV0byB5MiA9IHBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCph
cmdzKTsKLSAgICAgICAgaWYgKCF5MikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIHJldHVybiBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZSh4
MS52YWx1ZSgpLCB5MS52YWx1ZSgpLCB4Mi52YWx1ZSgpLCB5Mi52YWx1ZSgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoaXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKSAmJiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInNwcmluZygiKSkgewotICAg
ICAgICAvLyBGb3IgYSBzcHJpbmcsIDQgdmFsdWVzIG11c3QgYmUgc3BlY2lmaWVkIChzcGFjZS1z
ZXBhcmF0ZWQpLgotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGUgYXJndW1lbnRzIGFsbCBvcHRp
b25hbC4KLSAgICAgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSA0KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICAvLyBNYXNzIG11c3QgYmUgZ3Jl
YXRlciB0aGFuIDAuCi0gICAgICAgIGF1dG8gbWFzcyA9IHBhcnNlU3ByaW5nVGltaW5nRnVuY3Rp
b25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICghbWFzcyB8fCBtYXNzLnZhbHVlKCkgPD0gMCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIC8vIFN0aWZmbmVzcyBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiAwLgotICAgICAgICBhdXRvIHN0aWZmbmVzcyA9IHBhcnNlU3ByaW5n
VGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICghc3RpZmZuZXNzIHx8IHN0
aWZmbmVzcy52YWx1ZSgpIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICAvLyBEYW1waW5nIGNvZWZmaWNpZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
IHRvIDAuCi0gICAgICAgIGF1dG8gZGFtcGluZyA9IHBhcnNlU3ByaW5nVGltaW5nRnVuY3Rpb25W
YWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICghZGFtcGluZyB8fCBkYW1waW5nLnZhbHVlKCkgPCAw
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgLy8gSW5pdGlhbCB2ZWxv
Y2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCi0gICAgICAgIGF1dG8gaW5pdGlhbFZlbG9jaXR5ID0g
cGFyc2VTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFpbml0
aWFsVmVsb2NpdHkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1
cm4gQ1NTU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKG1hc3MudmFsdWUoKSwgc3Rp
ZmZuZXNzLnZhbHVlKCksIGRhbXBpbmcudmFsdWUoKSwgaW5pdGlhbFZlbG9jaXR5LnZhbHVlKCkp
OwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25Qcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVl
PiYgcmVzdWx0LCBBbmltYXRpb25QYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gdmFsdWVzOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWw7Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKLQotICAg
IHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICB3aGlsZSAoKHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOwotICAgICAgICBp
ZiAoYWxsb3dDb21tYSkgewotICAgICAgICAgICAgaWYgKCFpc0NvbW1hKHZhbCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5QW5pbWF0aW9uRGVsYXk6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uRGVsYXk6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkRl
bGF5OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToK
LSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRlbGF5KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBh
cnNlQW5pbWF0aW9uRGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25EdXJhdGlvbjoK
LSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKLSAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgICAgICAgICAg
ICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKTsKLSAgICAgICAgICAgICAg
ICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFu
aW1hdGlvbkZpbGxNb2RlOgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkZpbGxNb2RlOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9u
RmlsbE1vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgotICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsK
LSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbk5hbWU6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uTmFtZToKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFu
aW1hdGlvbk5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblBsYXlTdGF0ZToKLSAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6Ci0gICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25QbGF5U3RhdGUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmlt
YXRpb25Qcm9wZXJ0eShjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIWNv
bnRleHQuYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoK
LSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlv
bjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246
Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0
aW9uOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmIEVO
QUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvblRyaWdnZXI6Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFy
c2VBbmltYXRpb25UcmlnZ2VyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
Ci0gICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICAg
ICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZShjdXJyVmFsdWUpOwotCi0g
ICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdo
ZW4gcGFyc2luZyB0aGUgJ3RyYW5zaXRpb24nIHNob3J0aGFuZCBwcm9wZXJ0eSwgd2UgbGV0IGl0
IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAotICAgICAgICAvLyBwcm9wZXJ0
aWVzLgotICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgewotICAgICAgICByZXN1
bHQgPSBXVEZNb3ZlKHZhbHVlcyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBp
ZiAodmFsdWUpIHsKLSAgICAgICAgcmVzdWx0ID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0dSSURfTEFZT1VUKQotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRHcmlkUG9zaXRpb25DdXN0
b21JZGVudChjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVl
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiB2YWx1ZS5pZCAhPSBDU1NW
YWx1ZVNwYW4gJiYgdmFsdWUuaWQgIT0gQ1NTVmFsdWVBdXRvOwotfQotCi0vLyBUaGUgZnVuY3Rp
b24gcGFyc2VzIFsgPGludGVnZXI+IHx8IDxjdXN0b20taWRlbnQ+IF0gaW4gPGdyaWQtbGluZT4g
KHdoaWNoIGNhbiBiZSBzdGFuZCBhbG9uZSBvciB3aXRoICdzcGFuJykuCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZyb21HcmlkUG9zaXRpb24oUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYgbnVtZXJpY1ZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBn
cmlkTGluZU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0K
LSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7Ci0g
ICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBpZiAobmV4dFZhbHVlICYmIGlzVmFsaWRHcmlkUG9z
aXRpb25DdXN0b21JZGVudCgqbmV4dFZhbHVlKSkgewotICAgICAgICAgICAgZ3JpZExpbmVOYW1l
ID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7Ci0gICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGlmIChpc1ZhbGlkR3JpZFBvc2l0aW9uQ3VzdG9tSWRlbnQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pKSB7Ci0gICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmlu
Z1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgaWYgKENTU1BhcnNlclZhbHVl
KiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKm5leHRWYWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAodmFsaWRhdGVVbml0KG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVn
ZXIpICYmIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgewotICAgICAg
ICAgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShuZXh0
VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VHcmlkUG9zaXRpb24oKQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG51bWVyaWNWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGdyaWRMaW5lTmFtZTsKLSAgICBib29sIGhhc1NlZW5TcGFuS2V5d29yZCA9IGZhbHNl
OwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNwYW4pIHsKLSAgICAgICAgaGFzU2Vl
blNwYW5LZXl3b3JkID0gdHJ1ZTsKLSAgICAgICAgaWYgKGF1dG8qIG5leHRWYWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRv
cigqbmV4dFZhbHVlKSAmJiAhcGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZyb21HcmlkUG9zaXRp
b24obnVtZXJpY1ZhbHVlLCBncmlkTGluZU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChwYXJzZUludGVnZXJPckN1c3RvbUlk
ZW50RnJvbUdyaWRQb3NpdGlvbihudW1lcmljVmFsdWUsIGdyaWRMaW5lTmFtZSkpIHsKLSAgICAg
ICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgICAgICBpZiAodmFsdWUgJiYg
dmFsdWUtPmlkID09IENTU1ZhbHVlU3BhbikgewotICAgICAgICAgICAgaGFzU2VlblNwYW5LZXl3
b3JkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgY29uc3VtZWQgYWxsIHRoZSB2YWx1
ZSBsaXN0LiBGb3Igc2hvcnRoYW5kcywgdGhlIHBhcnNlciB3aWxsIHBhc3MKLSAgICAvLyB0aGUg
d2hvbGUgdmFsdWUgbGlzdCAoaW5jbHVkaW5nIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbikuCi0gICAg
aWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8v
IElmIHdlIGRpZG4ndCBwYXJzZSBhbnl0aGluZywgdGhpcyBpcyBub3QgYSB2YWxpZCBncmlkIHBv
c2l0aW9uLgotICAgIGlmICghaGFzU2VlblNwYW5LZXl3b3JkICYmICFncmlkTGluZU5hbWUgJiYg
IW51bWVyaWNWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBJZiB3ZSBo
YXZlICJzcGFuIiBrZXl3b3JkIGFsb25lIGlzIGludmFsaWQuCi0gICAgaWYgKGhhc1NlZW5TcGFu
S2V5d29yZCAmJiAhZ3JpZExpbmVOYW1lICYmICFudW1lcmljVmFsdWUpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgLy8gTmVnYXRpdmUgbnVtYmVycyBhcmUgbm90IGFsbG93ZWQgZm9y
IHNwYW4gKGJ1dCBhcmUgZm9yIDxpbnRlZ2VyPikuCi0gICAgaWYgKGhhc1NlZW5TcGFuS2V5d29y
ZCAmJiBudW1lcmljVmFsdWUgJiYgbnVtZXJpY1ZhbHVlLT5nZXRJbnRWYWx1ZSgpIDwgMCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGb3IgdGhlIDxjdXN0b20taWRlbnQ+IGNh
c2UuCi0gICAgaWYgKGdyaWRMaW5lTmFtZSAmJiAhbnVtZXJpY1ZhbHVlICYmICFoYXNTZWVuU3Bh
bktleXdvcmQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZVZhbHVlKGdyaWRMaW5lTmFtZS0+Z2V0U3RyaW5nVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpOwotCi0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKGhhc1NlZW5TcGFuS2V5d29yZCkKLSAgICAgICAgdmFs
dWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVTcGFuKSk7Ci0gICAgaWYgKG51bWVyaWNWYWx1ZSkKLSAgICAgICAgdmFsdWVz
LT5hcHBlbmQobnVtZXJpY1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIGlmIChncmlkTGlu
ZU5hbWUpCi0gICAgICAgIHZhbHVlcy0+YXBwZW5kKGdyaWRMaW5lTmFtZS5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIFdURk1vdmUo
dmFsdWVzKTsKLX0KLQotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZ3JpZE1pc3NpbmdHcmlkUG9zaXRp
b25WYWx1ZShDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLX0KLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlR3JpZEl0ZW1Qb3NpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHNo
b3J0aGFuZElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHNob3J0aGFuZElk
KTsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBzaG9ydGhh
bmRGb3JQcm9wZXJ0eShzaG9ydGhhbmRJZCk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZC5sZW5ndGgo
KSA9PSAyKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3RhcnRWYWx1ZSA9IHBhcnNlR3JpZFBv
c2l0aW9uKCk7Ci0gICAgaWYgKCFzdGFydFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGVuZFZhbHVlOwotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKSB7Ci0gICAgICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGVuZFZhbHVlID0gcGFyc2VHcmlkUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFlbmRWYWx1
ZSB8fCBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZQotICAgICAgICBlbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFs
dWUoKnN0YXJ0VmFsdWUpOwotCi0gICAgYWRkUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMo
KVswXSwgc3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFBy
b3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMV0sIGVuZFZhbHVlLnJlbGVhc2VOb25OdWxs
KCksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUdyaWRHYXBTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKGlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBD
U1NQcm9wZXJ0eUdyaWRHYXApOwotICAgIEFTU0VSVChzaG9ydGhhbmRGb3JQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUdyaWRHYXApLmxlbmd0aCgpID09IDIpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiByb3dWYWx1ZVdpdGhDYWxj
dWxhdGlvbigqdmFsdWUpOwotICAgIGlmICghdmFsaWRhdGVVbml0KHJvd1ZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gcm93R2FwID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHJvd1ZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKLQotICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAo
IXZhbHVlKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwg
cm93R2FwLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkUm93R2FwLCBXVEZNb3ZlKHJvd0dhcCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGNvbHVtblZhbHVl
V2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaXQoY29sdW1uVmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gY29sdW1uR2FwID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGNv
bHVtblZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
R3JpZFJvd0dhcCwgV1RGTW92ZShyb3dHYXApLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgV1RGTW92ZShjb2x1bW5HYXApLCBpbXBvcnRhbnQp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUdyaWRUZW1wbGF0ZUNvbHVtbnMoVHJhY2tMaXN0VHlwZSB0cmFja0xpc3RUeXBlKQotewot
ICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0gICAgaWYgKCEobV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSAmJiBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKSAmJiBtX3ZhbHVlTGlzdC0+bmV4dCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKGF1dG8gY29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KHRyYWNr
TGlzdFR5cGUpKSB7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjb2x1bW5zVmFsdWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRU
ZW1wbGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNT
RVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICAvLyBBdCBsZWFzdCB0ZW1wbGF0
ZS1hcmVhcyBzdHJpbmdzIG11c3QgYmUgZGVmaW5lZC4KLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5j
dXJyZW50KCkgfHwgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5hbWVkR3JpZEFyZWFNYXAgZ3JpZEFy
ZWFNYXA7Ci0gICAgdW5zaWduZWQgcm93Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbHVtbkNv
dW50ID0gMDsKLSAgICBib29sIHRyYWlsaW5nSWRlbnRXYXNBZGRlZCA9IGZhbHNlOwotICAgIGF1
dG8gdGVtcGxhdGVSb3dzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwot
Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9yd2FyZFNsYXNoT3Bl
cmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIC8vIEhhbmRsZSBsZWFk
aW5nIDxjdXN0b20taWRlbnQ+Ki4KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewotICAgICAgICAgICAgaWYgKHRy
YWlsaW5nSWRlbnRXYXNBZGRlZCkgewotICAgICAgICAgICAgICAgIC8vIEEgcm93J3MgdHJhaWxp
bmcgaWRlbnQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCByb3cncyBsZWFkaW5n
IG9uZS4KLSAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCB0
ZW1wbGF0ZVJvd3MsIGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4odGVtcGxhdGVSb3dz
LT5pdGVtKHRlbXBsYXRlUm93cy0+bGVuZ3RoKCkgLSAxKSkpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdGVtcGxh
dGVSb3dzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhhbmRsZSBhIHRlbXBsYXRlLWFyZWEn
cyByb3cuCi0gICAgICAgIGlmICghcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhncmlkQXJlYU1h
cCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgKytyb3dDb3VudDsKLQotICAgICAgICAvLyBIYW5kbGUgdGVtcGxhdGUtcm93cydzIHRy
YWNrLXNpemUuCi0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpICYmIG1fdmFsdWVM
aXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG1fdmFs
dWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCAmJiBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VHcmlkVHJh
Y2tTaXplKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKHZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRlbXBs
YXRlUm93cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQXV0bykpOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBoYW5kbGUgdGhl
IHRyYWlsaW5nL2xlYWRpbmcgPGN1c3RvbS1pZGVudD4qIGluIHRoZSBncmFtbWFyLgotICAgICAg
ICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICAgICAgdHJhaWxpbmdJZGVudFdhc0FkZGVkID0gcGFy
c2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdGVtcGxhdGVSb3dzKTsKLSAgICB9Ci0KLSAg
ICAvLyBbLyA8ZXhwbGljaXQtdHJhY2stbGlzdD4gXT8KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRl
bXBsYXRlQ29sdW1uczsKLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAg
ICBBU1NFUlQoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkp
OwotICAgICAgICB0ZW1wbGF0ZUNvbHVtbnMgPSBwYXJzZUdyaWRUZW1wbGF0ZUNvbHVtbnMoR3Jp
ZFRlbXBsYXRlTm9SZXBlYXQpOwotICAgICAgICBpZiAoIXRlbXBsYXRlQ29sdW1ucykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gVGhlIHRlbXBsYXRlLWNvbHVtbnMgPHRy
YWNrLWxpc3Q+IGNhbid0IGJlICdub25lJy4KLSAgICAgICAgaWYgKHRlbXBsYXRlQ29sdW1ucy0+
aXNQcmltaXRpdmVWYWx1ZSgpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdGVtcGxh
dGVDb2x1bW5zKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBs
YXRlUm93cywgV1RGTW92ZSh0ZW1wbGF0ZVJvd3MpLCBpbXBvcnRhbnQpOwotICAgIGlmICh0ZW1w
bGF0ZUNvbHVtbnMpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRl
Q29sdW1ucywgdGVtcGxhdGVDb2x1bW5zLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUNvbHVt
bnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVt
cGxhdGVBcmVhcywgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZTo6Y3JlYXRlKGdyaWRBcmVhTWFw
LCByb3dDb3VudCwgY29sdW1uQ291bnQpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVNob3J0aGFuZChib29sIGlt
cG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAg
IFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlKTsKLSAg
ICBBU1NFUlQoc2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGUpLmxl
bmd0aCgpID09IDMpOwotCi0gICAgLy8gQXQgbGVhc3QgIm5vbmUiIG11c3QgYmUgZGVmaW5lZC4K
LSAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgZmlyc3RWYWx1ZUlzTm9uZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlk
ID09IENTU1ZhbHVlTm9uZTsKLQotICAgIC8vIDEtICdub25lJyBjYXNlLgotICAgIGlmIChmaXJz
dFZhbHVlSXNOb25lICYmICFtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1ucywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVSb3dzLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBv
cnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUFyZWFz
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAv
LyAyLSA8Z3JpZC10ZW1wbGF0ZS1yb3dzPiAvIDxncmlkLXRlbXBsYXRlLWNvbHVtbnM+IHN5bnRh
eC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd3NWYWx1ZTsKLSAgICBpZiAoZmlyc3RWYWx1ZUlz
Tm9uZSkKLSAgICAgICAgcm93c1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICBlbHNlCi0gICAgICAgIHJvd3NW
YWx1ZSA9IHBhcnNlR3JpZFRyYWNrTGlzdChHcmlkVGVtcGxhdGUpOwotCi0gICAgaWYgKHJvd3NW
YWx1ZSkgewotICAgICAgICBhdXRvIGNvbHVtbnNWYWx1ZSA9IHBhcnNlR3JpZFRlbXBsYXRlQ29s
dW1ucygpOwotICAgICAgICBpZiAoIWNvbHVtbnNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUNvbHVt
bnMsIGNvbHVtbnNWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIHJvd3NWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdy
aWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLQotICAgIC8vIDMtIFs8bGluZS1uYW1lcz4/IDxzdHJpbmc+IDx0cmFjay1zaXpl
Pj8gPGxpbmUtbmFtZXM+PyBdKyBzeW50YXguCi0gICAgLy8gSXQgcmVxdWlyZXMgdG8gcmV3aW5k
IHBhcnNpbmcgZHVlIHRvIHByZXZpb3VzIHN5bnRheCBmYWlsdXJlcy4KLSAgICBtX3ZhbHVlTGlz
dC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgIHJldHVybiBwYXJzZUdyaWRUZW1wbGF0ZVJvd3NB
bmRBcmVhc0FuZENvbHVtbnMoaW1wb3J0YW50KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
R3JpZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5
b3V0RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3Bl
cnR5R3JpZCk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENTU1Byb3BlcnR5R3Jp
ZCkubGVuZ3RoKCkgPT0gOCk7Ci0KLSAgICAvLyAxLSA8Z3JpZC10ZW1wbGF0ZT4KLSAgICBpZiAo
cGFyc2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoaW1wb3J0YW50KSkgewotICAgICAgICAvLyBJdCBj
YW4gb25seSBiZSBzcGVjaWZpZWQgdGhlIGV4cGxpY2l0IG9yIHRoZSBpbXBsaWNpdCBncmlkIHBy
b3BlcnRpZXMgaW4gYSBzaW5nbGUgZ3JpZCBkZWNsYXJhdGlvbi4KLSAgICAgICAgLy8gVGhlIHN1
Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQgYXJlIHNldCB0byB0aGVpciBpbml0aWFsIHZhbHVl
LCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMuCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZEF1dG9GbG93LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0
SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZEF1dG9Db2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5R3JpZEF1dG9Sb3dzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUdyaWRSb3dHYXAsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gTmVlZCB0byByZXdpbmQgcGFyc2luZyB0byBleHBsb3JlIHRoZSBhbHRlcm5h
dGl2ZSBzeW50YXggb2YgdGhpcyBzaG9ydGhhbmQuCi0gICAgbV92YWx1ZUxpc3QtPnNldEN1cnJl
bnRJbmRleCgwKTsKLQotICAgIC8vIDItIDxncmlkLWF1dG8tZmxvdz4gWyA8Z3JpZC1hdXRvLWNv
bHVtbnM+IFsgLyA8Z3JpZC1hdXRvLXJvd3M+IF0/IF0KLSAgICBpZiAoIXBhcnNlVmFsdWUoQ1NT
UHJvcGVydHlHcmlkQXV0b0Zsb3csIGltcG9ydGFudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gYXV0b0NvbHVtbnNWYWx1ZTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IGF1dG9Sb3dzVmFsdWU7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkg
ewotICAgICAgICBhdXRvUm93c1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRBdXRvKTsK
LSAgICAgICAgaWYgKCFhdXRvUm93c1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYgKCFp
c0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB8fCAhbV92YWx1
ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBhdXRvQ29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRBdXRvKTsKLSAgICAg
ICAgICAgIGlmICghYXV0b0NvbHVtbnNWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT3RoZXIgb21p
dHRlZCB2YWx1ZXMgYXJlIHNldCB0byB0aGVpciBpbml0aWFsIHZhbHVlcy4KLSAgICAgICAgYXV0
b0NvbHVtbnNWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJ
bml0aWFsVmFsdWUoKTsKLSAgICAgICAgYXV0b1Jvd3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBp
ZiA8Z3JpZC1hdXRvLXJvd3M+IHZhbHVlIGlzIG9taXR0ZWQsIGl0IGlzIHNldCB0byB0aGUgdmFs
dWUgc3BlY2lmaWVkIGZvciBncmlkLWF1dG8tY29sdW1ucy4KLSAgICBpZiAoIWF1dG9Db2x1bW5z
VmFsdWUpCi0gICAgICAgIGF1dG9Db2x1bW5zVmFsdWUgPSBhdXRvUm93c1ZhbHVlOwotCi0gICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQXV0b0NvbHVtbnMsIGF1dG9Db2x1bW5zVmFsdWUu
cmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUdyaWRBdXRvUm93cywgYXV0b1Jvd3NWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQp
OwotCi0gICAgLy8gSXQgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHRoZSBleHBsaWNpdCBvciB0aGUg
aW1wbGljaXQgZ3JpZCBwcm9wZXJ0aWVzIGluIGEgc2luZ2xlIGdyaWQgZGVjbGFyYXRpb24uCi0g
ICAgLy8gVGhlIHN1Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQgYXJlIHNldCB0byB0aGVpciBp
bml0aWFsIHZhbHVlLCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMuCi0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVSb3dzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5R3JpZFJvd0dhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
bXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0gICAgU2hvcnRo
YW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlHcmlkQXJlYSk7Ci0gICAgQVNTRVJUKHNo
b3J0aGFuZEZvclByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEFyZWEpLmxlbmd0aCgpID09IDQpOwot
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiByb3dTdGFydFZhbHVlID0gcGFyc2VHcmlkUG9zaXRpb24o
KTsKLSAgICBpZiAoIXJvd1N0YXJ0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uU3RhcnRWYWx1ZTsKLSAgICBpZiAoIXBhcnNlU2luZ2xl
R3JpZEFyZWFMb25naGFuZChjb2x1bW5TdGFydFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiByb3dFbmRWYWx1ZTsKLSAgICBpZiAoIXBhcnNlU2lu
Z2xlR3JpZEFyZWFMb25naGFuZChyb3dFbmRWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uRW5kVmFsdWU7Ci0gICAgaWYgKCFwYXJzZVNp
bmdsZUdyaWRBcmVhTG9uZ2hhbmQoY29sdW1uRW5kVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWNvbHVtblN0YXJ0VmFsdWUpCi0gICAgICAgIGNvbHVtblN0YXJ0VmFs
dWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKCpyb3dTdGFydFZhbHVlKTsKLQotICAg
IGlmICghcm93RW5kVmFsdWUpCi0gICAgICAgIHJvd0VuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlk
UG9zaXRpb25WYWx1ZSgqcm93U3RhcnRWYWx1ZSk7Ci0KLSAgICBpZiAoIWNvbHVtbkVuZFZhbHVl
KQotICAgICAgICBjb2x1bW5FbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUo
KmNvbHVtblN0YXJ0VmFsdWUpOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkUm93
U3RhcnQsIHJvd1N0YXJ0VmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydCwgY29sdW1uU3RhcnRWYWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
R3JpZFJvd0VuZCwgcm93RW5kVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5FbmQsIGNvbHVtbkVuZFZhbHVlLnJl
bGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoUmVmUHRyPENTU1ZhbHVlPiYg
cHJvcGVydHkpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAg
ICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcm9wZXJ0eSA9IHBhcnNlR3JpZFBvc2l0aW9u
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRMaW5l
TmFtZXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QsIENTU1ZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBDU1NHcmlkTGluZU5hbWVzVmFsdWUqIHByZXZpb3VzTmFtZWRBcmVhVHJhaWxpbmdMaW5l
TmFtZXMpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0gICAgQVNT
RVJUKGlucHV0TGlzdC5jdXJyZW50KCkgJiYgaW5wdXRMaXN0LmN1cnJlbnQoKS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCYgaWRl
bnRMaXN0ID0gKmlucHV0TGlzdC5jdXJyZW50KCktPnZhbHVlTGlzdDsKLSAgICBpZiAoIWlkZW50
TGlzdC5zaXplKCkpIHsKLSAgICAgICAgaW5wdXRMaXN0Lm5leHQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoZSBpZGVudExpc3QgaXMg
YXQgdGhlIGhlYWRpbmcgaW5kZXgsIHNpbmNlIHRoZSBwYXJzZXJMaXN0IG1pZ2h0IGhhdmUgYmVl
biByZXdvdW5kLgotICAgIGlkZW50TGlzdC5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgUmVmPENT
U0dyaWRMaW5lTmFtZXNWYWx1ZT4gbGluZU5hbWVzID0gcHJldmlvdXNOYW1lZEFyZWFUcmFpbGlu
Z0xpbmVOYW1lcyA/IFJlZjxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpwcmV2aW91c05hbWVkQXJl
YVRyYWlsaW5nTGluZU5hbWVzKSA6IENTU0dyaWRMaW5lTmFtZXNWYWx1ZTo6Y3JlYXRlKCk7Ci0g
ICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBpZGVudFZhbHVlID0gaWRlbnRMaXN0LmN1cnJlbnQo
KSkgewotICAgICAgICBBU1NFUlQoaWRlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0lERU5UKTsKLSAgICAgICAgbGluZU5hbWVzLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
U3RyaW5nVmFsdWUoKmlkZW50VmFsdWUpKTsKLSAgICAgICAgaWRlbnRMaXN0Lm5leHQoKTsKLSAg
ICB9Ci0gICAgaWYgKCFwcmV2aW91c05hbWVkQXJlYVRyYWlsaW5nTGluZU5hbWVzKQotICAgICAg
ICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUobGluZU5hbWVzKSk7Ci0KLSAgICBpbnB1dExpc3Qu
bmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBpc0dyaWRUcmFja0Zp
eGVkU2l6ZWQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQotewotICAgIENTU1ZhbHVl
SUQgdmFsdWVJRCA9IHZhbHVlLmdldFZhbHVlSUQoKTsKLSAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRl
bnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUuaXNGbGV4KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVCh2YWx1ZS5pc0xlbmd0aCgpIHx8IHZhbHVlLmlz
UGVyY2VudGFnZSgpIHx8IHZhbHVlLmlzQ2FsY3VsYXRlZCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGJvb2wgaXNHcmlkVHJhY2tGaXhlZFNpemVkKGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1
cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpOwotCi0gICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb25WYWx1ZSgpKTsKLSAgICBBU1NFUlQo
ZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygpKTsKLSAgICBBU1NF
UlQoZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygpLT5sZW5ndGgo
KSA9PSAyKTsKLQotICAgIGF1dG8mIG1pbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
ZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygpLT5pdGVtKDApKTsK
LSAgICBhdXRvJiBtYXggPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRvd25jYXN0PENT
U0Z1bmN0aW9uVmFsdWU+KHZhbHVlKS5hcmd1bWVudHMoKS0+aXRlbSgxKSk7Ci0gICAgcmV0dXJu
IGlzR3JpZFRyYWNrRml4ZWRTaXplZChtaW4pIHx8IGlzR3JpZFRyYWNrRml4ZWRTaXplZChtYXgp
OwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tMaXN0KFRy
YWNrTGlzdFR5cGUgdHJhY2tMaXN0VHlwZSkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
aWYgKHRyYWNrTGlzdFR5cGUgPT0gR3JpZEF1dG8pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0g
ICAgfQotCi0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7Ci0gICAgLy8gSGFuZGxlIGxlYWRpbmcgIDxjdXN0b20taWRlbnQ+Ki4KLSAgICB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgYm9vbCBhbGxvd0dyaWRMaW5lTmFtZXMg
PSB0cmFja0xpc3RUeXBlICE9IEdyaWRBdXRvOwotICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KSB7Ci0gICAgICAgIGlmICghYWxsb3dHcmlk
TGluZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHBhcnNlR3Jp
ZExpbmVOYW1lcygqbV92YWx1ZUxpc3QsIHZhbHVlcyk7Ci0gICAgfQotCi0gICAgYm9vbCBzZWVu
VHJhY2tTaXplT3JSZXBlYXRGdW5jdGlvbiA9IGZhbHNlOwotICAgIGJvb2wgc2VlbkF1dG9SZXBl
YXQgPSBmYWxzZTsKLSAgICBib29sIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQgPSB0cnVlOwotICAg
IGJvb2wgcmVwZWF0QWxsb3dlZCA9IHRyYWNrTGlzdFR5cGUgPT0gR3JpZFRlbXBsYXRlOwotICAg
IHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSkgewotICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqY3VycmVudFZhbHVl
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY3VycmVudFZhbHVlLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShjdXJyZW50VmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0KCIpKSB7Ci0gICAgICAgICAg
ICBpZiAoIXJlcGVhdEFsbG93ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBib29sIGlzQXV0b1JlcGVhdDsKLSAgICAgICAgICAgIGlmICghcGFyc2VHcmlk
VHJhY2tSZXBlYXRGdW5jdGlvbih2YWx1ZXMsIGlzQXV0b1JlcGVhdCwgYWxsVHJhY2tzQXJlRml4
ZWRTaXplZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBp
ZiAoaXNBdXRvUmVwZWF0ICYmIHNlZW5BdXRvUmVwZWF0KQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgc2VlbkF1dG9SZXBlYXQgPSBzZWVuQXV0b1JlcGVhdCB8
fCBpc0F1dG9SZXBlYXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gcGFyc2VHcmlkVHJhY2tTaXplKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgICAgICBhbGxUcmFja3NBcmVGaXhlZFNpemVkID0gYWxsVHJhY2tzQXJlRml4ZWRTaXplZCAm
JiBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoKnZhbHVlKTsKLSAgICAgICAgICAgIHZhbHVlcy0+YXBw
ZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICB9Ci0gICAgICAgIHNlZW5UcmFj
a1NpemVPclJlcGVhdEZ1bmN0aW9uID0gdHJ1ZTsKLQotICAgICAgICBpZiAoc2VlbkF1dG9SZXBl
YXQgJiYgIWFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgaGFuZGxlIHRoZSB0cmFpbGluZyA8Y3VzdG9tLWlk
ZW50PiogaW4gdGhlIGdyYW1tYXIuCi0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVl
OjpWYWx1ZUxpc3QpIHsKLSAgICAgICAgICAgIGlmICghYWxsb3dHcmlkTGluZU5hbWVzKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5h
bWVzKCptX3ZhbHVlTGlzdCwgdmFsdWVzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
c2VlblRyYWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIFdURk1vdmUodmFsdWVzKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
R3JpZFRyYWNrUmVwZWF0RnVuY3Rpb24oQ1NTVmFsdWVMaXN0JiBsaXN0LCBib29sJiBpc0F1dG9S
ZXBlYXQsIGJvb2wmIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCi17Ci0gICAgQVNTRVJUKGlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3VtZW50
cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlm
ICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhaXNDb21tYShhcmd1bWVu
dHMtPnZhbHVlQXQoMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiBmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudHMtPnZhbHVlQXQo
MCkpOwotICAgIENTU1ZhbHVlSUQgZmlyc3RWYWx1ZUlEID0gZmlyc3RWYWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmlkOwotICAgIGlzQXV0b1JlcGVhdCA9IGZpcnN0VmFsdWVJRCA9PSBDU1NW
YWx1ZUF1dG9GaWxsIHx8IGZpcnN0VmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG9GaXQ7Ci0gICAgaWYg
KCFpc0F1dG9SZXBlYXQgJiYgIXZhbGlkYXRlVW5pdChmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGUG9zaXRpdmVJbnRlZ2VyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYg
YXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVuIHJlcGV0aXRpb25z
IGJlY29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdoeSB3ZQotICAgIC8v
IGNsYW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0eXBlIGNhc3Rpbmcu
Ci0gICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyBmb3IgPGF1dG8tcmVwZWF0PiBpcyBu
b3QgaW1wb3J0YW50IGF0IHBhcnNpbmcgbGV2ZWwKLSAgICAvLyBiZWNhdXNlIGl0IHdpbGwgYmUg
Y29tcHV0ZWQgbGF0ZXIsIGxldCdzIHNldCBpdCB0byAxLgotICAgIHVuc2lnbmVkIHJlcGV0aXRp
b25zID0gaXNBdXRvUmVwZWF0ID8gMSA6IGNsYW1wVG88dW5zaWduZWQ+KHBhcnNlZERvdWJsZShm
aXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKSwgMCwga0dyaWRNYXhUcmFja3MpOwotCi0gICAgUmVm
PENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMgPSBpc0F1dG9SZXBlYXQgPyBSZWY8Q1NTVmFs
dWVMaXN0PihDU1NHcmlkQXV0b1JlcGVhdFZhbHVlOjpjcmVhdGUoZmlyc3RWYWx1ZUlEKSkgOiBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgYXJndW1lbnRzLT5uZXh0
KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCi0gICAgYXJndW1lbnRzLT5uZXh0KCk7
IC8vIFNraXAgdGhlIGNvbW1hLgotCi0gICAgLy8gSGFuZGxlIGxlYWRpbmcgPGN1c3RvbS1pZGVu
dD4qLgotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBhcmd1bWVudHMtPmN1cnJl
bnQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKmFyZ3Vt
ZW50cywgcmVwZWF0ZWRWYWx1ZXMpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZUcmFja3MgPSAw
OwotICAgIHdoaWxlIChhcmd1bWVudHMtPmN1cnJlbnQoKSkgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHRyYWNrU2l6ZSA9IHBhcnNlR3JpZFRyYWNrU2l6ZSgqYXJndW1lbnRzKTsKLSAgICAg
ICAgaWYgKCF0cmFja1NpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
YWxsVHJhY2tzQXJlRml4ZWRTaXplZCA9IGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQgJiYgaXNHcmlk
VHJhY2tGaXhlZFNpemVkKCp0cmFja1NpemUpOwotICAgICAgICByZXBlYXRlZFZhbHVlcy0+YXBw
ZW5kKHRyYWNrU2l6ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgKytudW1iZXJPZlRyYWNr
czsKLQotICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUgb2YgYW55IHRyYWlsaW5nIDxjdXN0b20t
aWRlbnQ+KiBpbiB0aGUgZ3JhbW1hci4KLSAgICAgICAgY3VycmVudFZhbHVlID0gYXJndW1lbnRz
LT5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT51
bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgICAgICBwYXJzZUdyaWRM
aW5lTmFtZXMoKmFyZ3VtZW50cywgcmVwZWF0ZWRWYWx1ZXMpOwotICAgIH0KLQotICAgIC8vIFdl
IHNob3VsZCBoYXZlIGZvdW5kIGF0IGxlYXN0IG9uZSA8dHJhY2stc2l6ZT4sIG90aGVyd2lzZSB0
aGUgZGVjbGFyYXRpb24gaXMgaW52YWxpZC4KLSAgICBpZiAoIW51bWJlck9mVHJhY2tzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBjbGFtcCB0aGUgbnVtYmVyIG9mIHJlcGV0
aXRpb25zIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHJlcGVhdCgpIHRyYWNrIGxpc3QncyBzaXplLCB3
aGlsZSBzdGF5aW5nIGJlbG93IHRoZSBtYXgKLSAgICAvLyBncmlkIHNpemUuCi0gICAgcmVwZXRp
dGlvbnMgPSBzdGQ6Om1pbihyZXBldGl0aW9ucywga0dyaWRNYXhUcmFja3MgLyBudW1iZXJPZlRy
YWNrcyk7Ci0KLSAgICBpZiAoaXNBdXRvUmVwZWF0KQotICAgICAgICBsaXN0LmFwcGVuZChXVEZN
b3ZlKHJlcGVhdGVkVmFsdWVzKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZXBldGl0aW9uczsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgcmVwZWF0ZWRWYWx1ZXMtPmxlbmd0aCgpOyArK2opCi0gICAgICAgICAgICAg
ICAgbGlzdC5hcHBlbmQoKnJlcGVhdGVkVmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGop
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFj
a1NpemUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QpCi17Ci0gICAgQVNTRVJUKGlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSYgY3VycmVudFZhbHVl
ID0gKmlucHV0TGlzdC5jdXJyZW50KCk7Ci0gICAgaW5wdXRMaXN0Lm5leHQoKTsKLQotICAgIGlm
IChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsK
LQotICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24g
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAibWlubWF4KCIpKSB7Ci0gICAgICAgIC8vIFRoZSBzcGVjIGRlZmluZXMgdGhlIGZvbGxv
d2luZyBncmFtbWFyOiBtaW5tYXgoIDx0cmFjay1icmVhZHRoPiAsIDx0cmFjay1icmVhZHRoPiAp
Ci0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1lbnRzID0gY3VycmVudFZhbHVlLmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50cyB8fCBhcmd1bWVudHMt
PnNpemUoKSAhPSAzIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgxKSkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1pblRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJyZWFkdGgoKmFyZ3VtZW50cy0+dmFsdWVBdCgw
KSk7Ci0gICAgICAgIGlmICghbWluVHJhY2tCcmVhZHRoIHx8IG1pblRyYWNrQnJlYWR0aC0+aXNG
bGV4KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1heFRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJyZWFkdGgoKmFyZ3Vt
ZW50cy0+dmFsdWVBdCgyKSk7Ci0gICAgICAgIGlmICghbWF4VHJhY2tCcmVhZHRoKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRBcmd1bWVudHMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgIHBhcnNlZEFyZ3Vt
ZW50cy0+YXBwZW5kKG1pblRyYWNrQnJlYWR0aC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
cGFyc2VkQXJndW1lbnRzLT5hcHBlbmQobWF4VHJhY2tCcmVhZHRoLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICByZXR1cm4gQ1NTRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCJtaW5tYXgoIiwgV1RG
TW92ZShwYXJzZWRBcmd1bWVudHMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VHcmlkQnJl
YWR0aChjdXJyZW50VmFsdWUpOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQVNT
RVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NT
VmFsdWVXZWJraXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlV2Via2l0TWF4Q29u
dGVudCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0KLSAg
ICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKSB7Ci0gICAgICAg
IGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7Ci0KLSAgICAgICAgLy8gRnJhY3Rpb25h
bCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KLSAgICAgICAgaWYgKGZsZXhWYWx1
ZSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoZmxleFZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0ZSKTsKLSAgICB9Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRB
dXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIChpZCA9PSBDU1NWYWx1ZVJv
dyB8fCBpZCA9PSBDU1NWYWx1ZUNvbHVtbiB8fCBpZCA9PSBDU1NWYWx1ZURlbnNlKTsKLX0KLQot
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEF1dG9GbG93KENTU1BhcnNlclZh
bHVlTGlzdCYgaW5wdXRMaXN0KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVk
KCkpOwotCi0gICAgLy8gWyByb3cgfCBjb2x1bW4gXSB8fCBkZW5zZQotICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IGlucHV0TGlzdC5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBhcnNlZFZhbHVlcyA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLQotICAgIC8vIEZpcnN0IHBhcmFtZXRlci4KLSAg
ICBDU1NWYWx1ZUlEIGZpcnN0SWQgPSB2YWx1ZS0+aWQ7Ci0gICAgaWYgKCFpc1ZhbGlkR3JpZEF1
dG9GbG93SWQoZmlyc3RJZCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2Vj
b25kIHBhcmFtZXRlciwgaWYgYW55LgotICAgIC8vIElmIHNlY29uZCBwYXJhbWV0ZXIgaXMgbm90
IHZhbGlkIHdlIHNob3VsZCBwcm9jZXNzIGFueXdheSB0aGUgZmlyc3Qgb25lIGFzIHdlIGNhbiBi
ZSBpbnNpZGUgdGhlICJncmlkIiBzaG9ydGhhbmQuCi0gICAgdmFsdWUgPSBpbnB1dExpc3QubmV4
dCgpOwotICAgIGlmICghdmFsdWUgfHwgIWlzVmFsaWRHcmlkQXV0b0Zsb3dJZCh2YWx1ZS0+aWQp
KSB7Ci0gICAgICAgIGlmIChmaXJzdElkID09IENTU1ZhbHVlRGVuc2UpCi0gICAgICAgICAgICBw
YXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVJvdykpOwotCi0gICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQp
KTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyc2VkVmFsdWVzKTsKLSAgICB9Ci0KLSAgICBz
d2l0Y2ggKGZpcnN0SWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlUm93OgotICAgIGNhc2UgQ1NTVmFs
dWVDb2x1bW46Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQpKTsKLSAgICAgICAgaWYgKHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZURlbnNlKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpKTsKLSAgICAgICAgICAgIGlucHV0TGlzdC5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZURlbnNlOgotICAgICAgICBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlUm93IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbHVtbikgewotICAgICAg
ICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBpbnB1dExpc3QubmV4
dCgpOwotICAgICAgICB9Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHBhcnNlZFZhbHVlcyk7Ci19
Ci0jZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KLQotI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKLQotc3RhdGljIGNvbnN0IGludCBkYXNoYm9hcmRSZWdpb25QYXJhbWV0
ZXJDb3VudCA9IDY7Ci1zdGF0aWMgY29uc3QgaW50IGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1l
dGVyQ291bnQgPSAyOwotCi1zdGF0aWMgQ1NTUGFyc2VyVmFsdWUqIHNraXBDb21tYUluRGFzaGJv
YXJkUmVnaW9uKENTU1BhcnNlclZhbHVlTGlzdCAqYXJncykKLXsKLSAgICBpZiAoYXJncy0+c2l6
ZSgpID09IChkYXNoYm9hcmRSZWdpb25QYXJhbWV0ZXJDb3VudCAqIDIgLSAxKSB8fCBhcmdzLT5z
aXplKCkgPT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQgKiAyIC0gMSkpIHsK
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnQgPSAqYXJncy0+Y3VycmVudCgpOwotICAg
ICAgICBpZiAoY3VycmVudC51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJy
ZW50LmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gYXJncy0+bmV4dCgpOwotICAg
IH0KLSAgICByZXR1cm4gYXJncy0+Y3VycmVudCgpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
LXsKLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
Tm9uZSkgewotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwot
ICAgICAgICByZXR1cm4gdmFsaWQ7Ci0gICAgfQotCi0gICAgYXV0byBmaXJzdFJlZ2lvbiA9IERh
c2hib2FyZFJlZ2lvbjo6Y3JlYXRlKCk7Ci0gICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBu
dWxscHRyOwotCi0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIGlmICghcmVnaW9uKSB7Ci0g
ICAgICAgICAgICByZWdpb24gPSBmaXJzdFJlZ2lvbi5wdHIoKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGF1dG8gbmV4dFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lvbjo6Y3JlYXRlKCk7
Ci0gICAgICAgICAgICByZWdpb24tPm1fbmV4dCA9IG5leHRSZWdpb24uY29weVJlZigpOwotICAg
ICAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbi5wdHIoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENvbW1hcyBjb3VudCBhcyB2YWx1ZXMsIHNvIGFsbG93IChmdW5jdGlvbiBuYW1lIGlz
IGRhc2hib2FyZC1yZWdpb24gZm9yIERBU0hCT0FSRF9TVVBQT1JUIGZlYXR1cmUpOgotICAgICAg
ICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlLCB0LCByLCBiLCBsKSBvciBkYXNoYm9h
cmQtcmVnaW9uKGxhYmVsIHR5cGUgdCByIGIgbCkKLSAgICAgICAgLy8gZGFzaGJvYXJkLXJlZ2lv
bihsYWJlbCwgdHlwZSwgdCwgciwgYiwgbCkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBl
IHQgciBiIGwpCi0gICAgICAgIC8vIGFsc28gYWxsb3cKLSAgICAgICAgLy8gZGFzaGJvYXJkLXJl
Z2lvbihsYWJlbCwgdHlwZSkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlKQotICAgICAg
ICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxh
YmVsIHR5cGUpCi0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5j
dGlvbi0+YXJncy5nZXQoKTsKLSAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJkYXNoYm9hcmQtcmVnaW9uKCIpIHx8ICFhcmdz
KSB7Ci0gICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgbnVtQXJncyA9IGFyZ3MtPnNpemUoKTsKLSAgICAgICAgaWYg
KChudW1BcmdzICE9IGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50ICYmIG51bUFyZ3MgIT0g
KGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50KjItMSkpCi0gICAgICAgICAgICAmJiAobnVt
QXJncyAhPSBkYXNoYm9hcmRSZWdpb25TaG9ydFBhcmFtZXRlckNvdW50ICYmIG51bUFyZ3MgIT0g
KGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQqMi0xKSkpIHsKLSAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEZpcnN0IGFyZyBpcyBhIGxhYmVsLgotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJnID0g
YXJncy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoYXJnLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi0+bV9sYWJlbCA9IGFyZy0+c3Ry
aW5nOwotCi0gICAgICAgIC8vIFNlY29uZCBhcmcgaXMgYSB0eXBlLgotICAgICAgICBhcmcgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGFyZyA9IHNraXBDb21tYUluRGFzaGJvYXJkUmVnaW9uKGFy
Z3MpOwotICAgICAgICBpZiAoYXJnLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgqYXJn
LCAiY2lyY2xlIikpCi0gICAgICAgICAgICByZWdpb24tPm1faXNDaXJjbGUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgqYXJnLCAicmVjdGFu
Z2xlIikpCi0gICAgICAgICAgICByZWdpb24tPm1faXNSZWN0YW5nbGUgPSB0cnVlOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi0+bV9nZW9tZXRyeVR5cGUgPSBhcmctPnN0cmlu
ZzsKLQotICAgICAgICBpZiAobnVtQXJncyA9PSBkYXNoYm9hcmRSZWdpb25TaG9ydFBhcmFtZXRl
ckNvdW50IHx8IG51bUFyZ3MgPT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQq
Mi0xKSkgewotICAgICAgICAgICAgLy8gVGhpcyBvcmlnaW5hbGx5IHVzZWQgQ1NTVmFsdWVJbnZh
bGlkIGJ5IGFjY2lkZW50LiBJdCBtaWdodCBiZSBtb3JlIGxvZ2ljYWwgdG8gdXNlIHNvbWV0aGlu
ZyBlbHNlLgotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUlu
dmFsaWQpOwotCi0gICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQuY29weVJlZigpKTsK
LSAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmlnaHQoYW1vdW50LmNvcHlSZWYoKSk7Ci0gICAgICAg
ICAgICByZWdpb24tPnNldEJvdHRvbShhbW91bnQuY29weVJlZigpKTsKLSAgICAgICAgICAgIHJl
Z2lvbi0+c2V0TGVmdChXVEZNb3ZlKGFtb3VudCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gTmV4dCBmb3VyIGFyZ3VtZW50cyBtdXN0IGJlIG9mZnNldCBudW1iZXJzCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgICAgIGFy
ZyA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBhcmcgPSBza2lwQ29tbWFJbkRhc2hi
b2FyZFJlZ2lvbihhcmdzKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IGFyZ1dpdGhDYWxjdWxhdGlvbigqYXJnKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGFyZy0+
aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmdXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91
bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoYXJnV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICAgICAgICAgIGlmIChpID09
IDApCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKFdURk1vdmUoYW1vdW50KSk7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQotICAgICAgICAgICAgICAgICAgICBy
ZWdpb24tPnNldFJpZ2h0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaSA9PSAyKQotICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbShXVEZNb3Zl
KGFtb3VudCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVn
aW9uLT5zZXRMZWZ0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoYXJncy0+bmV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
dmFsaWQpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPihXVEZNb3ZlKGZpcnN0UmVn
aW9uKSkpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHZhbGlkOwotfQotCi0jZW5kaWYgLyog
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKSAqLwotCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9V
VCkKLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzQ29sdW1uTmFt
ZXMoY29uc3QgU3RyaW5nJiBncmlkUm93TmFtZXMpCi17Ci0gICAgQVNTRVJUKCFncmlkUm93TmFt
ZXMuaXNFbXB0eSgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5OYW1lczsKLSAgICAvLyBV
c2luZyBTdHJpbmdJbXBsIHRvIGF2b2lkIGNoZWNrcyBhbmQgaW5kaXJlY3Rpb24gaW4gZXZlcnkg
Y2FsbCB0byBTdHJpbmc6Om9wZXJhdG9yW10uCi0gICAgU3RyaW5nSW1wbCYgdGV4dCA9ICpncmlk
Um93TmFtZXMuaW1wbCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0g
ICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAg
ICAgICBpZiAodGV4dFtpbmRleF0gIT0gJyAnICYmIHRleHRbaW5kZXhdICE9ICcuJykgewotICAg
ICAgICAgICAgdW5zaWduZWQgZ3JpZEFyZWFTdGFydCA9IGluZGV4OwotICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoICYmIHRleHRbaW5kZXhdICE9ICcgJyAmJiB0ZXh0W2luZGV4XSAh
PSAnLicpCi0gICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGNvbHVtbk5hbWVz
LmFwcGVuZCh0ZXh0LnN1YnN0cmluZyhncmlkQXJlYVN0YXJ0LCBpbmRleCAtIGdyaWRBcmVhU3Rh
cnQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRl
eHRbaW5kZXhdID09ICcuJykgewotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYm
IHRleHRbaW5kZXhdID09ICcuJykKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgY29sdW1uTmFtZXMuYXBwZW5kKCIuIik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgICsraW5kZXg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbHVtbk5hbWVz
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhOYW1lZEdy
aWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgY29uc3QgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVk
JiBjb2x1bW5Db3VudCkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsK
LQotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICghY3VycmVudFZhbHVlIHx8IGN1cnJlbnRWYWx1ZS0+dW5pdCAhPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U3RyaW5nIGdyaWRSb3dOYW1lcyA9IGN1cnJlbnRWYWx1ZS0+c3RyaW5nOwotICAgIGlmIChncmlk
Um93TmFtZXMuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5OYW1lcyA9IHBhcnNlR3JpZFRlbXBsYXRlQXJl
YXNDb2x1bW5OYW1lcyhncmlkUm93TmFtZXMpOwotICAgIGlmICghY29sdW1uQ291bnQpIHsKLSAg
ICAgICAgY29sdW1uQ291bnQgPSBjb2x1bW5OYW1lcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChj
b2x1bW5Db3VudCk7Ci0gICAgfSBlbHNlIGlmIChjb2x1bW5Db3VudCAhPSBjb2x1bW5OYW1lcy5z
aXplKCkpIHsKLSAgICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGlzIGludmFsaWQgaXMgYWxsIHRo
ZSByb3dzIGRvbid0IGhhdmUgdGhlIG51bWJlciBvZiBjb2x1bW5zLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBjdXJyZW50Q29sdW1uID0gMDsgY3Vy
cmVudENvbHVtbiA8IGNvbHVtbkNvdW50OyArK2N1cnJlbnRDb2x1bW4pIHsKLSAgICAgICAgY29u
c3QgU3RyaW5nJiBncmlkQXJlYU5hbWUgPSBjb2x1bW5OYW1lc1tjdXJyZW50Q29sdW1uXTsKLQot
ICAgICAgICAvLyBVbmFtZWQgYXJlYXMgYXJlIGFsd2F5cyB2YWxpZCAod2UgY29uc2lkZXIgdGhl
bSB0byBiZSAxeDEpLgotICAgICAgICBpZiAoZ3JpZEFyZWFOYW1lID09ICIuIikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGhhbmRsZSBzZXZlcmFsIGdyaWQgYXJlYXMg
d2l0aCB0aGUgc2FtZSBuYW1lIGF0IG9uY2UgdG8gc2ltcGxpZnkgdGhlIHZhbGlkYXRpb24gY29k
ZS4KLSAgICAgICAgdW5zaWduZWQgbG9va0FoZWFkQ29sdW1uOwotICAgICAgICBmb3IgKGxvb2tB
aGVhZENvbHVtbiA9IGN1cnJlbnRDb2x1bW4gKyAxOyBsb29rQWhlYWRDb2x1bW4gPCBjb2x1bW5D
b3VudDsgKytsb29rQWhlYWRDb2x1bW4pIHsKLSAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lc1ts
b29rQWhlYWRDb2x1bW5dICE9IGdyaWRBcmVhTmFtZSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZ3JpZEFyZWFJdGVyYXRvciA9IGdyaWRBcmVhTWFw
LmZpbmQoZ3JpZEFyZWFOYW1lKTsKLSAgICAgICAgaWYgKGdyaWRBcmVhSXRlcmF0b3IgPT0gZ3Jp
ZEFyZWFNYXAuZW5kKCkpCi0gICAgICAgICAgICBncmlkQXJlYU1hcC5hZGQoZ3JpZEFyZWFOYW1l
LCBHcmlkQXJlYShHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4ocm93Q291bnQs
IHJvd0NvdW50ICsgMSksIEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbihjdXJy
ZW50Q29sdW1uLCBsb29rQWhlYWRDb2x1bW4pKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgR3JpZEFyZWEmIGdyaWRBcmVhID0gZ3JpZEFyZWFJdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAg
ICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2tzIHRlc3QgdGhhdCB0aGUgZ3JpZCBhcmVhIGlz
IGEgc2luZ2xlIGZpbGxlZC1pbiByZWN0YW5nbGUuCi0gICAgICAgICAgICAvLyAxLiBUaGUgbmV3
IHJvdyBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXNseSBwYXJzZWQgcm93LgotICAgICAgICAg
ICAgaWYgKHJvd0NvdW50ICE9IGdyaWRBcmVhLnJvd3MuZW5kTGluZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gMi4gVGhlIG5ldyBhcmVhIHN0YXJ0
cyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNseSBwYXJzZWQgYXJlYS4KLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRBcmVhLmNvbHVtbnMuc3RhcnRMaW5l
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyAzLiBU
aGUgbmV3IGFyZWEgZW5kcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNseSBw
YXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChsb29rQWhlYWRDb2x1bW4gIT0gZ3JpZEFyZWEu
Y29sdW1ucy5lbmRMaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBncmlkQXJlYS5yb3dzID0gR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRT
cGFuKGdyaWRBcmVhLnJvd3Muc3RhcnRMaW5lKCksIGdyaWRBcmVhLnJvd3MuZW5kTGluZSgpICsg
MSk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudENvbHVtbiA9IGxvb2tBaGVhZENvbHVtbiAt
IDE7Ci0gICAgfQotCi0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlQXJlYXMo
KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0gICAgaWYgKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NT
VmFsdWVOb25lKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpOwotICAgIH0KLQotICAgIE5hbWVkR3JpZEFyZWFNYXAgZ3JpZEFyZWFNYXA7Ci0gICAg
dW5zaWduZWQgcm93Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50ID0gMDsKLQot
ICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICghcGFyc2VH
cmlkVGVtcGxhdGVBcmVhc1JvdyhncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICArK3Jvd0NvdW50OwotICAgIH0K
LQotICAgIGlmICghcm93Q291bnQgfHwgIWNvbHVtbkNvdW50KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlOjpjcmVhdGUoZ3Jp
ZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCk7Ci19Ci0jZW5kaWYgLyogRU5BQkxFKENT
U19HUklEX0xBWU9VVCkgKi8KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGNvdW50
ZXJzKQotewotICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKLSAgICBpZiAoY291
bnRlcnMgJiYgbnVtQXJncyAhPSAzICYmIG51bUFyZ3MgIT0gNSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKCFjb3VudGVycyAmJiBudW1BcmdzICE9IDEgJiYgbnVtQXJncyAhPSAz
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVu
dCA9IGFyZ3MuY3VycmVudCgpOwotICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGlk
ZW50aWZpZXIgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqYXJndW1lbnQpOwotCi0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZXBhcmF0b3I7Ci0gICAgaWYgKCFjb3VudGVycykK
LSAgICAgICAgc2VwYXJhdG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShTdHJpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgIGVsc2Ugewot
ICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgICAgICBpZiAoYXJndW1lbnQtPnVu
aXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywn
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdz
Lm5leHQoKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2Vw
YXJhdG9yID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmFyZ3VtZW50KTsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RTdHlsZTsKLSAgICBhcmd1bWVudCA9
IGFyZ3MubmV4dCgpOwotICAgIGlmICghYXJndW1lbnQpIC8vIE1ha2UgdGhlIGxpc3Qgc3R5bGUg
ZGVmYXVsdCBkZWNpbWFsCi0gICAgICAgIGxpc3RTdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGVjaW1hbCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
fHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgICAgICBpZiAoYXJndW1lbnQt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIENTU1ZhbHVlSUQgbGlzdFN0eWxlSUQgPSBDU1NWYWx1ZUlu
dmFsaWQ7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVOb25lIHx8IChhcmd1
bWVudC0+aWQgPj0gQ1NTVmFsdWVEaXNjICYmIGFyZ3VtZW50LT5pZCA8PSBDU1NWYWx1ZUthdGFr
YW5hSXJvaGEpKQotICAgICAgICAgICAgbGlzdFN0eWxlSUQgPSBhcmd1bWVudC0+aWQ7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGxpc3RTdHls
ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGxpc3RT
dHlsZUlEKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoV1RGTW92ZShpZGVudGlmaWVyKSwgbGlzdFN0eWxl
LnJlbGVhc2VOb25OdWxsKCksIHNlcGFyYXRvci5yZWxlYXNlTm9uTnVsbCgpKSk7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7Ci0KLSAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gcmVjdCh0LCByLCBiLCBsKSB8fCByZWN0KHQgciBiIGwpCi0gICAgaWYg
KGFyZ3MtPnNpemUoKSAhPSA0ICYmIGFyZ3MtPnNpemUoKSAhPSA3KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgYXV0byByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7Ci0gICAgYm9vbCB2YWxpZCA9
IHRydWU7Ci0gICAgaW50IGkgPSAwOwotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFy
Z3MtPmN1cnJlbnQoKTsKLSAgICB3aGlsZSAoYXJndW1lbnQpIHsKLSAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAg
dmFsaWQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7Ci0gICAgICAgIGlmICghdmFsaWQpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBh
cmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGlmIChpID09IDApCi0g
ICAgICAgICAgICByZWN0LT5zZXRUb3AoV1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaSA9PSAxKQotICAgICAgICAgICAgcmVjdC0+c2V0UmlnaHQoV1RGTW92ZShsZW5ndGgpKTsK
LSAgICAgICAgZWxzZSBpZiAoaSA9PSAyKQotICAgICAgICAgICAgcmVjdC0+c2V0Qm90dG9tKFdU
Rk1vdmUobGVuZ3RoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3QtPnNldExlZnQo
V1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAg
ICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykgewotICAgICAgICAgICAgaWYg
KGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBhcmd1bWVudC0+
aVZhbHVlID09ICcsJykgewotICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGkrKzsKLSAgICB9Ci0gICAgaWYgKHZhbGlkKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHJlY3QpKSwg
aW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgY29tcGxl
dGVCb3JkZXJSYWRpaShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGlpWzRdKQotewotICAg
IGlmIChyYWRpaVszXSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghcmFkaWlbMl0pIHsKLSAg
ICAgICAgaWYgKCFyYWRpaVsxXSkKLSAgICAgICAgICAgIHJhZGlpWzFdID0gcmFkaWlbMF07Ci0g
ICAgICAgIHJhZGlpWzJdID0gcmFkaWlbMF07Ci0gICAgfQotICAgIHJhZGlpWzNdID0gcmFkaWlb
MV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkIHdpdGggQ1NTUGFy
c2VyOjpwYXJzZUJvcmRlclJhZGl1cy4KLS8vIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMg
Y29udGFpbnMgc3VwcG9ydCBmb3Igc29tZSBsZWdhY3kgcmFkaXVzIGNvbnN0cnVjdGlvbi4KLVJl
ZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3Ju
ZXJzKFJlZjxDU1NCYXNpY1NoYXBlSW5zZXQ+JiYgc2hhcGUsIENTU1BhcnNlclZhbHVlTGlzdCYg
YXJncykKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKLQot
ICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9y
PENTU1BhcnNlclZhbHVlKj4gcmFkaXVzQXJndW1lbnRzOwotICAgIHdoaWxlIChhcmd1bWVudCkg
ewotICAgICAgICByYWRpdXNBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKLSAgICAgICAgYXJn
dW1lbnQgPSBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBudW0gPSByYWRpdXNB
cmd1bWVudHMuc2l6ZSgpOwotICAgIGlmICghbnVtIHx8IG51bSA+IDkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpaVsyXVs0XTsK
LQotICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJTbGFzaCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICpy
YWRpdXNBcmd1bWVudHMuYXQoaSk7Ci0gICAgICAgIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNl
clZhbHVlOjpPcGVyYXRvcikgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlWYWx1ZSAhPSAnLycp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGlmICghaSB8
fCBpbmRleEFmdGVyU2xhc2ggfHwgaSArIDEgPT0gbnVtIHx8IG51bSA+IGkgKyA1KQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAgICBpbmRleEFmdGVyU2xhc2gg
PSBpICsgMTsKLSAgICAgICAgICAgIGNvbXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMF0pOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSAtIGluZGV4QWZ0
ZXJTbGFzaCA+PSA0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwotICAgICAgICBp
ZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50
IHwgRk5vbk5lZykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRv
IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0KLSAgICAgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpCi0gICAgICAgICAgICByYWRpaVsw
XVtpXSA9IFdURk1vdmUocmFkaXVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaWlb
MV1baSAtIGluZGV4QWZ0ZXJTbGFzaF0gPSBXVEZNb3ZlKHJhZGl1cyk7Ci0gICAgfQotCi0gICAg
aWYgKCFpbmRleEFmdGVyU2xhc2gpIHsKLSAgICAgICAgY29tcGxldGVCb3JkZXJSYWRpaShyYWRp
aVswXSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAg
ICAgICByYWRpaVsxXVtpXSA9IHJhZGlpWzBdW2ldOwotICAgIH0gZWxzZQotICAgICAgICBjb21w
bGV0ZUJvcmRlclJhZGlpKHJhZGlpWzFdKTsKLQotICAgIHNoYXBlLT5zZXRUb3BMZWZ0UmFkaXVz
KGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzBdKSwgV1RGTW92ZShy
YWRpaVsxXVswXSkpKTsKLSAgICBzaGFwZS0+c2V0VG9wUmlnaHRSYWRpdXMoY3JlYXRlUHJpbWl0
aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMV0pLCBXVEZNb3ZlKHJhZGlpWzFdWzFdKSkp
OwotICAgIHNoYXBlLT5zZXRCb3R0b21SaWdodFJhZGl1cyhjcmVhdGVQcmltaXRpdmVWYWx1ZVBh
aXIoV1RGTW92ZShyYWRpaVswXVsyXSksIFdURk1vdmUocmFkaWlbMV1bMl0pKSk7Ci0gICAgc2hh
cGUtPnNldEJvdHRvbUxlZnRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUo
cmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlpWzFdWzNdKSkpOwotCi0gICAgcmV0dXJuIFdURk1v
dmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBDU1NQYXJzZXI6OnBh
cnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICBhdXRv
IHNoYXBlID0gQ1NTQmFzaWNTaGFwZUluc2V0OjpjcmVhdGUoKTsKLQotICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOwotICAgIFZlY3RvcjxSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+ID4gd2lkdGhBcmd1bWVudHM7Ci0gICAgYm9vbCBoYXNSb3VuZGVkSW5zZXQgPSBm
YWxzZTsKLSAgICB3aGlsZSAoYXJndW1lbnQpIHsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoYXJndW1lbnQtPnN0cmluZywgInJvdW5kIikpIHsKLSAgICAgICAgICAgIGhhc1Jv
dW5kZWRJbnNldCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIFVuaXRzIHVuaXRGbGFncyA9IEZMZW5ndGggfCBGUGVyY2VudDsKLSAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRGbGFncykg
fHwgd2lkdGhBcmd1bWVudHMuc2l6ZSgpID4gNCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIHdpZHRoQXJndW1lbnRzLmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgYXJndW1lbnQgPSBhcmdz
Lm5leHQoKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHdpZHRoQXJndW1lbnRzLnNpemUoKSkgewot
ICAgIGNhc2UgMTogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXplMVZhbHVlKFdURk1v
dmUod2lkdGhBcmd1bWVudHNbMF0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
MjogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXplMlZhbHVlcyhXVEZNb3ZlKHdpZHRo
QXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1sxXSkpOwotICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIGNhc2UgMzogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVT
aXplM1ZhbHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFyZ3Vt
ZW50c1sxXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgNDogewotICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXplNFZhbHVl
cyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1sxXSks
IFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pLCBXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzNdKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzUm91bmRlZEluc2V0KQotICAgICAgICByZXR1cm4g
cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFdURk1vdmUoc2hhcGUpLCBhcmdzKTsKLSAgICByZXR1
cm4gV1RGTW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVNoYXBlUmFkaXVzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUuaWQgPT0gQ1NTVmFsdWVDbG9zZXN0U2lkZSB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUZh
cnRoZXN0U2lkZSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci19Ci0KLVJlZlB0cjxDU1NCYXNpY1NoYXBlQ2lyY2xl
PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MpCi17Ci0gICAgLy8gY2lyY2xlKHJhZGl1cykKLSAgICAvLyBjaXJjbGUocmFkaXVzIGF0IDxw
b3NpdGlvbj4pCi0gICAgLy8gY2lyY2xlKGF0IDxwb3NpdGlvbj4pCi0gICAgLy8gd2hlcmUgcG9z
aXRpb24gZGVmaW5lcyBjZW50ZXJYIGFuZCBjZW50ZXJZIHVzaW5nIGEgQ1NTIDxwb3NpdGlvbj4g
ZGF0YSB0eXBlLgotICAgIGF1dG8gc2hhcGUgPSBDU1NCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUo
KTsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCk7
IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjYWxs
IHRvIHBhcnNlRmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25zdW1lIGFsbCBvZiB0aGUKLSAg
ICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdHdvLiBUaHVzLCBhbmQgaW5kZXgg
Z3JlYXRlciB0aGFuIG9uZQotICAgICAgICAvLyBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0
aW9uLgotICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA+IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAoIWFyZ3MuY3VycmVudEluZGV4KCkgJiYgYXJn
dW1lbnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoKmFyZ3VtZW50KSkgewotICAg
ICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXMocmFkaXVzLnJlbGVhc2VOb25OdWxsKCkpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmd1bWVudC0+aWQgPT0g
Q1NTVmFsdWVBdCAmJiBhcmdzLm5leHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjZW50ZXJYOwotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjZW50ZXJZOwotICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVyWCwg
Y2VudGVyWSk7Ci0gICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBjZW50ZXJZICYmICFhcmdzLmN1
cnJlbnQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJYKGNlbnRlclgucmVs
ZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkoY2VudGVy
WS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHNoYXBlKTsKLX0KLQotUmVmUHRyPENT
U0Jhc2ljU2hhcGVFbGxpcHNlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NT
UGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIC8vIGVsbGlwc2UocmFkaXVzWCkKLSAgICAv
LyBlbGxpcHNlKHJhZGl1c1ggYXQgPHBvc2l0aW9uPikKLSAgICAvLyBlbGxpcHNlKHJhZGl1c1gg
cmFkaXVzWSkKLSAgICAvLyBlbGxpcHNlKHJhZGl1c1ggcmFkaXVzWSBhdCA8cG9zaXRpb24+KQot
ICAgIC8vIGVsbGlwc2UoYXQgPHBvc2l0aW9uPikKLSAgICAvLyB3aGVyZSBwb3NpdGlvbiBkZWZp
bmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBvc2l0aW9uPiBkYXRhIHR5cGUu
Ci0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVFbGxpcHNlOjpjcmVhdGUoKTsKLQotICAg
IGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCk7IGFyZ3VtZW50
OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjYWxsIHRvIHBhcnNl
RmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25zdW1lIGFsbCBvZiB0aGUKLSAgICAgICAgLy8g
YXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdGhyZWUuIFRodXMsIGFuIGluZGV4IGdyZWF0ZXIg
dGhhbiB0d28KLSAgICAgICAgLy8gaW5kaWNhdGVzIGFuIGludmFsaWQgcHJvZHVjdGlvbi4KLSAg
ICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4KCkgPiAyKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4KCkgPCAyICYmIGFyZ3VtZW50
LT5pZCAhPSBDU1NWYWx1ZUF0KSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKCphcmd1bWVudCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXNoYXBlLT5yYWRpdXNYKCkpCi0gICAgICAgICAgICAgICAgICAgIHNoYXBl
LT5zZXRSYWRpdXNYKHJhZGl1cy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXNZKHJhZGl1cy5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJn
dW1lbnQtPmlkICE9IENTU1ZhbHVlQXQgfHwgIWFyZ3MubmV4dCgpKSAvLyBleHBlY3RpbmcgZWxs
aXBzZSguLiBhdCA8cG9zaXRpb24+KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOwotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFy
Z3MsIGNlbnRlclgsIGNlbnRlclkpOwotICAgICAgICBpZiAoIWNlbnRlclggfHwgIWNlbnRlclkg
fHwgYXJncy5jdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICBzaGFwZS0+c2V0Q2VudGVyWChjZW50ZXJYLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBz
aGFwZS0+c2V0Q2VudGVyWShjZW50ZXJZLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAg
IHJldHVybiBXVEZNb3ZlKHNoYXBlKTsKLX0KLQotUmVmUHRyPENTU0Jhc2ljU2hhcGVQb2x5Z29u
PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiBh
cmdzKQotewotICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLnNpemUoKTsKLSAgICBpZiAoIXNpemUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hh
cGVQb2x5Z29uOjpjcmVhdGUoKTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFy
Z3MuY3VycmVudCgpOwotICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkIHx8
IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbnplcm8pIHsKLSAgICAgICAgc2hhcGUtPnNldFdp
bmRSdWxlKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgPyBSVUxFX0VWRU5PREQgOiBS
VUxFX05PTlpFUk8pOwotCi0gICAgICAgIGlmICghaXNDb21tYShhcmdzLm5leHQoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgp
OwotICAgICAgICBzaXplIC09IDI7Ci0gICAgfQotCi0gICAgLy8gPGxlbmd0aD4gPGxlbmd0aD4s
IC4uLiA8bGVuZ3RoPiA8bGVuZ3RoPiAtPiBlYWNoIHBhaXIgaGFzIDMgZWxlbWVudHMgZXhjZXB0
IHRoZSBsYXN0IG9uZQotICAgIGlmICghc2l6ZSB8fCAoc2l6ZSAlIDMpIC0gMikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRYID0gYXJndW1l
bnQ7Ci0gICAgd2hpbGUgKGFyZ3VtZW50WCkgewotCi0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnRYKTsKLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQoYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8geExlbmd0aCA9IGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24pOwotCi0g
ICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFkgPSBhcmdzLm5leHQoKTsKLSAgICAgICAg
aWYgKCFhcmd1bWVudFkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFkpOwot
ICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFlXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0
byB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50WVdpdGhDYWxj
dWxhdGlvbik7Ci0KLSAgICAgICAgc2hhcGUtPmFwcGVuZFBvaW50KFdURk1vdmUoeExlbmd0aCks
IFdURk1vdmUoeUxlbmd0aCkpOwotCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBjb21tYU9yTnVs
bCA9IGFyZ3MubmV4dCgpOwotICAgICAgICBpZiAoIWNvbW1hT3JOdWxsKQotICAgICAgICAgICAg
YXJndW1lbnRYID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWEoY29tbWFPck51
bGwpKSAKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBlbHNlIAotICAgICAg
ICAgICAgYXJndW1lbnRYID0gYXJncy5uZXh0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1v
dmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZVBhdGg+IENTU1BhcnNlcjo6cGFy
c2VCYXNpY1NoYXBlUGF0aChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgdW5zaWdu
ZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmIChzaXplICE9IDEgJiYgc2l6ZSAhPSAzKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFdpbmRSdWxlIHdpbmRSdWxlID0gUlVMRV9O
T05aRVJPOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCk7
Ci0gICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgfHwgYXJndW1lbnQtPmlk
ID09IENTU1ZhbHVlTm9uemVybykgewotICAgICAgICB3aW5kUnVsZSA9IGFyZ3VtZW50LT5pZCA9
PSBDU1NWYWx1ZUV2ZW5vZGQgPyBSVUxFX0VWRU5PREQgOiBSVUxFX05PTlpFUk87Ci0KLSAgICAg
ICAgaWYgKCFpc0NvbW1hKGFyZ3MubmV4dCgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgIH0KLQotICAgIGlmIChhcmd1
bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJ5dGVTdHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPFNW
R1BhdGhCeXRlU3RyZWFtPigpOwotICAgIGlmICghYnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21T
dHJpbmcoYXJndW1lbnQtPnN0cmluZywgKmJ5dGVTdHJlYW0sIFVuYWx0ZXJlZFBhcnNpbmcpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gc2hhcGUgPSBDU1NCYXNpY1NoYXBl
UGF0aDo6Y3JlYXRlKFdURk1vdmUoYnl0ZVN0cmVhbSkpOwotICAgIHNoYXBlLT5zZXRXaW5kUnVs
ZSh3aW5kUnVsZSk7Ci0KLSAgICBhcmdzLm5leHQoKTsKLSAgICByZXR1cm4gV1RGTW92ZShzaGFw
ZSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQm94VmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZUlkLCBDU1NQ
cm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAgICBzd2l0Y2ggKHZhbHVlSWQpIHsKLSAgICBjYXNlIENT
U1ZhbHVlQ29udGVudEJveDoKLSAgICBjYXNlIENTU1ZhbHVlUGFkZGluZ0JveDoKLSAgICBjYXNl
IENTU1ZhbHVlQm9yZGVyQm94OgotICAgIGNhc2UgQ1NTVmFsdWVNYXJnaW5Cb3g6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgQ1NTVmFsdWVGaWxsOgotICAgIGNhc2UgQ1NTVmFsdWVT
dHJva2U6Ci0gICAgY2FzZSBDU1NWYWx1ZVZpZXdCb3g6Ci0gICAgICAgIHJldHVybiBwcm9wSWQg
PT0gQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aDsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNl
cjo6cGFyc2VCYXNpY1NoYXBlQW5kT3JCb3goQ1NTUHJvcGVydHlJRCBwcm9wSWQpCi17Ci0gICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGJv
b2wgc2hhcGVGb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgYm94Rm91bmQgPSBmYWxzZTsKLSAgICBD
U1NWYWx1ZUlEIHZhbHVlSWQ7Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkg
ewotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHZhbHVl
SWQgPSB2YWx1ZS0+aWQ7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24gJiYgIXNoYXBlRm91bmQpIHsKLSAgICAgICAgICAgIC8vIHBhcnNlQmFzaWNT
aGFwZSBhbHJlYWR5IGFza3MgZm9yIHRoZSBuZXh0IHZhbHVlIGxpc3QgaXRlbS4KLSAgICAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZSA9IHBhcnNlQmFzaWNTaGFw
ZSgpOwotICAgICAgICAgICAgaWYgKCFzaGFwZVZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHNoYXBlVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgICAgICAgICBzaGFwZUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IGlmIChpc0JveFZhbHVlKHZhbHVlSWQsIHByb3BJZCkgJiYgIWJveEZvdW5kKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7Ci0gICAgICAgICAg
ICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAg
ICBib3hGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEZNb3ZlKGxp
c3QpOwotfQotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkKQotewotICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIENTU1Zh
bHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotCi0gICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVO
b25lKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7Ci0gICAgaWYgKHZhbHVlSWQg
IT0gQ1NTVmFsdWVOb25lICYmIHBhcnNlRmlsbEltYWdlKCptX3ZhbHVlTGlzdCwgaW1hZ2VWYWx1
ZSkpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGltYWdl
VmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlQmFzaWNTaGFwZUFuZE9yQm94KHByb3BJ
ZCk7Ci19Ci0jZW5kaWYKLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ2xpcFBh
dGgoKQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOwotCi0gICAgaWYgKHZhbHVl
SWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZUlkKTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VUkkpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuc3RyaW5nLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlQmFzaWNTaGFwZUFuZE9y
Qm94KENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgpOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBBU1NFUlQodmFsdWUudW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pOwotICAgIENTU1BhcnNlclZhbHVlTGlzdCog
YXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotCi0gICAgaWYgKCFhcmdzKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBzaGFwZTsK
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICJjaXJjbGUoIikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKCph
cmdzKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5m
dW5jdGlvbi0+bmFtZSwgImVsbGlwc2UoIikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1No
YXBlRWxsaXBzZSgqYXJncyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwb2x5Z29uKCIpKQotICAgICAgICBzaGFwZSA9
IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oKmFyZ3MpOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicGF0aCgiKSkKLSAgICAg
ICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVQYXRoKCphcmdzKTsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImluc2V0KCIp
KQotICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZUluc2V0KCphcmdzKTsKLQotICAgIGlm
ICghc2hhcGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShz
aGFwZS5yZWxlYXNlTm9uTnVsbCgpKTsKLX0KLQotLy8gWyAnZm9udC1zdHlsZScgfHwgJ2ZvbnQt
dmFyaWFudCcgfHwgJ2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXplJyBbIC8gJ2xpbmUtaGVpZ2h0
JyBdPyAnZm9udC1mYW1pbHknCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0
YW50KQotewotICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3IgaW5p
dGlhbCBzb21ld2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YWx1ZUxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlz
dC0+dmFsdWVBdChpKS0+aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IG1fdmFsdWVMaXN0LT52YWx1
ZUF0KGkpLT5pZCA9PSBDU1NWYWx1ZUluaXRpYWwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlGb250
KTsKLSAgICAvLyBPcHRpb25hbCBmb250LXN0eWxlLCBmb250LXZhcmlhbnQgYW5kIGZvbnQtd2Vp
Z2h0LgotICAgIGJvb2wgZm9udFN0eWxlUGFyc2VkID0gZmFsc2U7Ci0gICAgYm9vbCBmb250VmFy
aWFudFBhcnNlZCA9IGZhbHNlOwotICAgIGJvb2wgZm9udFdlaWdodFBhcnNlZCA9IGZhbHNlOwot
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAgICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgaWYgKCFmb250U3R5bGVQYXJzZWQgJiYgaXNWYWxp
ZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCB2YWx1ZS0+aWQs
IG1fY29udGV4dCwgbV9zdHlsZVNoZWV0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlGb250U3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBmb250U3R5bGVQ
YXJzZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFmb250VmFyaWFudFBhcnNlZCAmJiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNtYWxs
Q2FwcykpIHsKLSAgICAgICAgICAgIC8vIEZvbnQgdmFyaWFudCBpbiB0aGUgc2hvcnRoYW5kIGlz
IHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0cyBub3JtYWwgb3Igc21hbGwtY2Fwcy4KLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRh
bnQpOwotICAgICAgICAgICAgZm9udFZhcmlhbnRQYXJzZWQgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKCFmb250V2VpZ2h0UGFyc2VkICYmIHBhcnNlRm9udFdlaWdodChpbXBvcnRhbnQpKQot
ICAgICAgICAgICAgZm9udFdlaWdodFBhcnNlZCA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAg
IGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZm9udFN0eWxl
UGFyc2VkKQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
LCBpbXBvcnRhbnQsIHRydWUpOwotICAgIGlmICghZm9udFZhcmlhbnRQYXJzZWQpCi0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFu
dCwgdHJ1ZSk7Ci0gICAgaWYgKCFmb250V2VpZ2h0UGFyc2VkKQotICAgICAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLQotICAg
IC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KLSAgICAvLyA8YWJzb2x1dGUtc2l6ZT4g
fCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKLSAg
ICBpZiAoIXBhcnNlRm9udFNpemUoaW1wb3J0YW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCp2
YWx1ZSkpIHsKLSAgICAgICAgLy8gVGhlIGxpbmUtaGVpZ2h0IHByb3BlcnR5LgotICAgICAgICB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VMaW5lSGVpZ2h0KGltcG9ydGFu
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwot
Ci0gICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+
IHBhcnNlZEZhbWlseVZhbHVlID0gcGFyc2VGb250RmFtaWx5KCk7Ci0gICAgaWYgKCFwYXJzZWRG
YW1pbHlWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRGYW1pbHlWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBp
bXBvcnRhbnQpOwotCi0gICAgLy8gRklYTUU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0Qt
Y3NzMy1mb250cy0yMDExMDMyNC8jZm9udC1wcm9wIHJlcXVpcmVzIHRoYXQKLSAgICAvLyAiZm9u
dC1zdHJldGNoIiwgImZvbnQtc2l6ZS1hZGp1c3QiLCBhbmQgImZvbnQta2VybmluZyIgYmUgcmVz
ZXQgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMKLSAgICAvLyBidXQgd2UgZG9uJ3Qgc2VlbSB0byBz
dXBwb3J0IHRoZW0gYXQgdGhlIG1vbWVudC4gVGhleSBzaG91bGQgYWxzbyBiZSBhZGRlZCBoZXJl
IG9uY2UgaW1wbGVtZW50ZWQuCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU1BhcnNl
cjo6cGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChtX3ZhbHVl
TGlzdC0+c2l6ZSgpID09IDEpOwotICAgIENTU1ZhbHVlSUQgc3lzdGVtRm9udElEID0gbV92YWx1
ZUxpc3QtPnZhbHVlQXQoMCktPmlkOwotICAgIEFTU0VSVChzeXN0ZW1Gb250SUQgPj0gQ1NTVmFs
dWVDYXB0aW9uICYmIHN5c3RlbUZvbnRJRCA8PSBDU1NWYWx1ZVN0YXR1c0Jhcik7Ci0gICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLQotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uOwotICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChzeXN0
ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7Ci0gICAgaWYgKCFmb250RGVzY3JpcHRpb24uaXNB
YnNvbHV0ZVNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbXVzdCBzZXQgZm9u
dCdzIGNvbnN0aXR1ZW50IHByb3BlcnRpZXMsIGV2ZW4gZm9yIHN5c3RlbSBmb250cywgc28gdGhl
IGNhc2NhZGUgZnVuY3Rpb25zIGNvcnJlY3RseS4KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0
aGlzLCBDU1NQcm9wZXJ0eUZvbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0
eWxlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShmb250
RGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uID8gQ1NTVmFsdWVJdGFsaWMgOiBD
U1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGZvbnREZXNj
cmlwdGlvbi53ZWlnaHQoKSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250U2l6ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShmb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSwgaW1w
b3J0YW50KTsKLSAgICBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5TGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb250RmFtaWx5TGlzdC0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKGZvbnREZXNj
cmlwdGlvbi5mYW1pbHlBdCgwKSwgRnJvbVN5c3RlbUZvbnRJRDo6WWVzKSk7Ci0gICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBXVEZNb3ZlKGZvbnRGYW1pbHlMaXN0KSwgaW1w
b3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3Jt
YWwpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpLCBpbXBvcnRhbnQpOwotfQotCi1jbGFzcyBGb250RmFtaWx5VmFsdWVCdWlsZGVyIHsK
LXB1YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyKENTU1ZhbHVlTGlzdCYgbGlzdCkK
LSAgICAgICAgOiBtX2xpc3QobGlzdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhZGQoY29u
c3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAgICAgICBpZiAoIW1fYnVpbGRl
ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAg
ICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAgbV9idWlsZGVyLmFwcGVuZChz
dHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYnVpbGRlci5hcHBlbmQoc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0KCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2J1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2xpc3QuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
Rm9udEZhbWlseVZhbHVlKG1fYnVpbGRlci50b1N0cmluZygpKSk7Ci0gICAgICAgIG1fYnVpbGRl
ci5jbGVhcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRl
cjsKLSAgICBDU1NWYWx1ZUxpc3QmIG1fbGlzdDsKLX07Ci0KLXN0YXRpYyBib29sIHZhbHVlSXND
U1NLZXl3b3JkKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICAvLyBGSVhNRTog
d2hlbiB3ZSBhZGQgInVuc2V0Iiwgd2Ugc2hvdWxkIGhhbmRsZSBpdCBoZXJlLgotICAgIHJldHVy
biB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVJbmhl
cml0IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRGVmYXVsdDsKLX0KLQotUmVmUHRyPENTU1ZhbHVl
TGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQotewotICAgIGF1dG8gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgRm9udEZhbWlseVZhbHVlQnVp
bGRlciBmYW1pbHlCdWlsZGVyKGxpc3QpOwotICAgIGJvb2wgaW5GYW1pbHkgPSBmYWxzZTsKLQot
ICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dFZhbHVlID0g
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgYm9vbCBuZXh0VmFsQnJlYWtzRm9udCA9ICFu
ZXh0VmFsdWUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0VmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG5leHRWYWx1ZS0+aVZhbHVlID09
ICcsJyk7Ci0gICAgICAgIGJvb2wgbmV4dFZhbElzRm9udE5hbWUgPSBuZXh0VmFsdWUgJiYKLSAg
ICAgICAgICAgICgobmV4dFZhbHVlLT5pZCA+PSBDU1NWYWx1ZVNlcmlmICYmIG5leHRWYWx1ZS0+
aWQgPD0gQ1NTVmFsdWVXZWJraXRCb2R5KSB8fAotICAgICAgICAgICAgKG5leHRWYWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBuZXh0VmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkpOwotCi0gICAgICAgIGJvb2wgdmFsdWVJc0tl
eXdvcmQgPSB2YWx1ZUlzQ1NTS2V5d29yZCgqdmFsdWUpOwotICAgICAgICBpZiAodmFsdWVJc0tl
eXdvcmQgJiYgIWluRmFtaWx5KSB7Ci0gICAgICAgICAgICBpZiAobmV4dFZhbEJyZWFrc0ZvbnQp
Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAobmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBu
ZXh0VmFsdWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVTZXJpZiAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJr
aXRCb2R5KSB7Ci0gICAgICAgICAgICBpZiAoaW5GYW1pbHkpCi0gICAgICAgICAgICAgICAgZmFt
aWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXh0
VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmFtaWx5
QnVpbGRlci5jb21taXQoKTsKLSAgICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmFkZCh2YWx1
ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpbkZhbWlseSA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIC8vIFN0cmluZ3MgbmV2ZXIgc2hhcmUgaW4gYSBm
YW1pbHkgbmFtZS4KLSAgICAgICAgICAgIGluRmFtaWx5ID0gZmFsc2U7Ci0gICAgICAgICAgICBm
YW1pbHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHZhbHVlLT5zdHJpbmcpKTsK
LSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKSB7Ci0gICAgICAgICAgICBpZiAoaW5GYW1pbHkpCi0gICAgICAgICAgICAgICAgZmFt
aWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXh0
VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVl
KHZhbHVlLT5zdHJpbmcpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZh
bWlseUJ1aWxkZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQo
dmFsdWUtPnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaW5GYW1pbHkgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGlmIChuZXh0VmFsQnJlYWtzRm9udCkgewotICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQoKTsKLSAgICAgICAg
ICAgIGluRmFtaWx5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobmV4dFZh
bElzRm9udE5hbWUpCi0gICAgICAgICAgICB2YWx1ZSA9IG5leHRWYWx1ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7
Ci0KLSAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gV1RGTW92ZShsaXN0KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZUhl
aWdodChib29sIGltcG9ydGFudCkKLXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBp
ZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgYm9vbCB2YWxpZFByaW1p
dGl2ZSA9IGZhbHNlOwotICAgIC8vIG5vcm1hbCB8IDxudW1iZXI+IHwgPGxlbmd0aD4gfCA8cGVy
Y2VudGFnZT4gfCBpbmhlcml0Ci0gICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgIGlmICh2YWxpZFByaW1pdGl2ZSAm
JiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkgfHwgaW5TaG9ydGhhbmQoKSkpCi0gICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFs
dWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB2YWxpZFByaW1pdGl2
ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBpbXBvcnRhbnQpCi17
Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLmlkOwotICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxzZTsKLSAgICAvLyA8
YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdl
PiB8IGluaGVyaXQKLSAgICBpZiAoaWQgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIGlkIDw9IENTU1Zh
bHVlTGFyZ2VyKQotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgZWxzZQotICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7Ci0gICAgaWYgKHZhbGlkUHJpbWl0aXZlICYm
ICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVX
aXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB2YWxpZFByaW1pdGl2ZTsK
LX0KLQotc3RhdGljIENTU1ZhbHVlSUQgY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZChpbnQg
d2VpZ2h0KQotewotICAgIEFTU0VSVCghKHdlaWdodCAlIDEwMCkgJiYgd2VpZ2h0ID49IDEwMCAm
JiB3ZWlnaHQgPD0gOTAwKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVJRD4oQ1NTVmFsdWUxMDAgKyB3ZWlnaHQgLyAxMDAgLSAxKTsKLSAgICBBU1NFUlQodmFs
dWUgPj0gQ1NTVmFsdWUxMDAgJiYgdmFsdWUgPD0gQ1NTVmFsdWU5MDApOwotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFdlaWdodChib29sIGltcG9ydGFu
dCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAoKHZhbHVlLmlkID49IENTU1ZhbHVlTm9ybWFsKSAmJiAodmFsdWUuaWQgPD0g
Q1NTVmFsdWU5MDApKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUu
aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwotICAgIGlmICh2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTUXVp
cmtzTW9kZSkpIHsKLSAgICAgICAgaW50IHdlaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGFyc2Vk
RG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIGlmICghKHdlaWdodCAlIDEw
MCkgJiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7Ci0gICAgICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGNyZWF0ZUZvbnRXZWlnaHRWYWx1ZUtleXdvcmQod2VpZ2h0
KSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRTeW50
aGVzaXMoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gbm9uZSB8IFsgd2VpZ2h0IHx8IHN0eWxl
IF0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwot
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgYm9vbCBlbmNvdW50ZXJlZFdlaWdodCA9IGZhbHNlOwotICAgIGJvb2wgZW5jb3VudGVy
ZWRTdHlsZSA9IGZhbHNlOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0OgotICAgICAgICAgICAgZW5j
b3VudGVyZWRXZWlnaHQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVTdHlsZToKLSAgICAgICAgICAgIGVuY291bnRlcmVkU3R5bGUgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
IH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQo
KTsKLSAgICBpZiAoZW5jb3VudGVyZWRXZWlnaHQpCi0gICAgICAgIGxpc3QtPmFwcGVuZChDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlaWdo
dCkpOwotICAgIGlmIChlbmNvdW50ZXJlZFN0eWxlKQotICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdHls
ZSkpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpcywgV1RGTW92ZShs
aXN0KSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0gICAgYXV0
byB1cmlWYWx1ZSA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpLT5zdHJpbmcpKTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICB2YWx1
ZUxpc3QuYXBwZW5kKFdURk1vdmUodXJpVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYg
dmFsdWUtPmlWYWx1ZSA9PSAnLCcpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgdmFsdWVMaXN0LmFwcGVuZChXVEZNb3ZlKHVyaVZhbHVlKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6
RnVuY3Rpb24gfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLT5mdW5jdGlv
bi0+bmFtZSwgImZvcm1hdCgiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklY
TUU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMTAwNC8gc2F5
cyB0aGF0IGZvcm1hdCgpIGNvbnRhaW5zIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5n
cywKLSAgICAvLyBidXQgQ1NTRm9udEZhY2VTcmNWYWx1ZSBzdG9yZXMgb25seSBvbmUgZm9ybWF0
LiBBbGxvd2luZyBvbmUgZm9ybWF0IGZvciBub3cuCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCBhcmdz
LT5zaXplKCkgIT0gMSB8fCAoYXJncy0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HICYmIGFyZ3MtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVyaVZhbHVlLT5z
ZXRGb3JtYXQoYXJncy0+Y3VycmVudCgpLT5zdHJpbmcpOwotICAgIHZhbHVlTGlzdC5hcHBlbmQo
V1RGTW92ZSh1cmlWYWx1ZSkpOwotICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IHZhbHVlLT5pVmFsdWUgPT0gJywnKQotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyY0xvY2Fs
KENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0KQotewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJn
cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlm
ICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXJncy0+c2l6ZSgpID09IDEgJiYgYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKENTU0ZvbnRG
YWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZ3MtPmN1cnJlbnQoKS0+c3RyaW5nKSk7Ci0gICAg
ZWxzZSBpZiAoYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
SURFTlQpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBmb3IgKENT
U1BhcnNlclZhbHVlKiBsb2NhbFZhbHVlID0gYXJncy0+Y3VycmVudCgpOyBsb2NhbFZhbHVlOyBs
b2NhbFZhbHVlID0gYXJncy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAobG9jYWxWYWx1ZS0+
dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGxvY2FsVmFsdWUtPnN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWVMaXN0LmFwcGVu
ZChDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChidWlsZGVyLnRvU3RyaW5nKCkpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51
bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykK
LSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCi17Ci0gICAgYXV0byB2
YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICB3aGls
ZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAg
ICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAg
ICAgICAgICAgIGlmICghcGFyc2VGb250RmFjZVNyY1VSSSh2YWx1ZXMpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUtPmZ1bmN0aW9uLT5uYW1lLCAibG9jYWwoIikpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VG
b250RmFjZVNyY0xvY2FsKHZhbHVlcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KCF2YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVNyYywgV1RGTW92ZSh2YWx1ZXMpLCBtX2ltcG9ydGFudCk7Ci0gICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKQotewotICAgIGF1dG8gdmFsdWVzID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIGJvb2wgZmFpbGVkID0gZmFs
c2U7Ci0gICAgYm9vbCBvcGVyYXRvckV4cGVjdGVkID0gZmFsc2U7Ci0gICAgZm9yICg7IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IG1fdmFsdWVMaXN0LT5uZXh0KCksIG9wZXJhdG9yRXhwZWN0ZWQg
PSAhb3BlcmF0b3JFeHBlY3RlZCkgewotICAgICAgICBpZiAob3BlcmF0b3JFeHBlY3RlZCkgewot
ICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlWYWx1ZSA9PSAnLCcp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTklDT0RFX1JBTkdFKSB7
Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LT5zdHJpbmc7Ci0gICAgICAgIFVDaGFyMzIgZnJvbSA9IDA7Ci0gICAgICAgIFVDaGFyMzIgdG8g
PSAwOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSByYW5nZVN0cmluZy5sZW5ndGgoKTsKLQot
ICAgICAgICBpZiAobGVuZ3RoIDwgMykgewotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IDI7Ci0g
ICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gcmFuZ2VT
dHJpbmdbaV07Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLScgfHwgYyA9PSAnPycpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmcm9tICo9IDE2OwotICAgICAgICAgICAgaWYg
KGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgICAgIGZyb20gKz0gYyAtICcwJzsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQotICAgICAgICAgICAg
ICAgIGZyb20gKz0gMTAgKyBjIC0gJ0EnOwotICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAnYScg
JiYgYyA8PSAnZicpCi0gICAgICAgICAgICAgICAgZnJvbSArPSAxMCArIGMgLSAnYSc7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSsrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChmYWlsZWQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAo
aSA9PSBsZW5ndGgpCi0gICAgICAgICAgICB0byA9IGZyb207Ci0gICAgICAgIGVsc2UgaWYgKHJh
bmdlU3RyaW5nW2ldID09ICc/JykgewotICAgICAgICAgICAgdW5zaWduZWQgc3BhbiA9IDE7Ci0g
ICAgICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiByYW5nZVN0cmluZ1tpXSA9PSAnPycpIHsK
LSAgICAgICAgICAgICAgICBzcGFuICo9IDE2OwotICAgICAgICAgICAgICAgIGZyb20gKj0gMTY7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkg
PCBsZW5ndGgpCi0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRv
ID0gZnJvbSArIHNwYW4gLSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxl
bmd0aCA8IGkgKyAyKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAg
ICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgYyA9IHJhbmdl
U3RyaW5nW2ldOwotICAgICAgICAgICAgICAgIHRvICo9IDE2OwotICAgICAgICAgICAgICAgIGlm
IChjID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgICAgICAgICAgICAgICAgdG8gKz0gYyAtICcw
JzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKLSAgICAg
ICAgICAgICAgICAgICAgdG8gKz0gMTAgKyBjIC0gJ0EnOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAgICAgICAgICAgICAgICB0byArPSAxMCAr
IGMgLSAnYSc7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZh
aWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
ZmFpbGVkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChm
cm9tIDw9IHRvKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVW5pY29kZVJhbmdlVmFs
dWU6OmNyZWF0ZShmcm9tLCB0bykpOwotICAgIH0KLSAgICBpZiAoZmFpbGVkIHx8ICF2YWx1ZXMt
Pmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlVbmljb2RlUmFuZ2UsIFdURk1vdmUodmFsdWVzKSwgbV9pbXBvcnRhbnQpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGlj
aCBmb3JtIGEgdmFsaWQgZG91YmxlCi0vLyBhbmQgYXJlIHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVu
IHRlcm1pbmF0b3IgY2hhcmFjdGVyCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbnQgY2hlY2tGb3JWYWxpZERvdWJsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdHJp
bmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yKQotewot
ICAgIGludCBsZW5ndGggPSBlbmQgLSBzdHJpbmc7Ci0gICAgaWYgKGxlbmd0aCA8IDEpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKLSAgICBp
bnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9yKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgaWYg
KCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKLSAgICAgICAgICAgICAgICBk
ZWNpbWFsTWFya1NlZW4gPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlY2ltYWxNYXJrU2VlbiAm
JiBwcm9jZXNzZWRMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
cHJvY2Vzc2VkTGVuZ3RoOwotfQotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBjb25zdW1lZCBmb3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQotLy8gdGVybWluYXRlZCBieSB0
aGUgZ2l2ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIGludCBwYXJzZURvdWJsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdHJp
bmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBkb3Vi
bGUmIHZhbHVlKQotewotICAgIGludCBsZW5ndGggPSBjaGVja0ZvclZhbGlkRG91YmxlKHN0cmlu
ZywgZW5kLCB0ZXJtaW5hdG9yKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpbnQgcG9zaXRpb24gPSAwOwotICAgIGRvdWJsZSBsb2NhbFZhbHVlID0gMDsKLQot
ICAgIC8vIFRoZSBjb25zdW1lZCBjaGFyYWN0ZXJzIGhlcmUgYXJlIGd1YXJhbnRlZWQgdG8gYmUK
LSAgICAvLyBBU0NJSSBkaWdpdHMgd2l0aCBvciB3aXRob3V0IGEgZGVjaW1hbCBtYXJrCi0gICAg
Zm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoOyArK3Bvc2l0aW9uKSB7Ci0gICAgICAgIGlmIChzdHJp
bmdbcG9zaXRpb25dID09ICcuJykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBsb2NhbFZh
bHVlID0gbG9jYWxWYWx1ZSAqIDEwICsgc3RyaW5nW3Bvc2l0aW9uXSAtICcwJzsKLSAgICB9Ci0K
LSAgICBpZiAoKytwb3NpdGlvbiA9PSBsZW5ndGgpIHsKLSAgICAgICAgdmFsdWUgPSBsb2NhbFZh
bHVlOwotICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLQotICAgIGRvdWJsZSBmcmFjdGlv
biA9IDA7Ci0gICAgZG91YmxlIHNjYWxlID0gMTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IGxl
bmd0aCAmJiBzY2FsZSA8IE1BWF9TQ0FMRSkgewotICAgICAgICBmcmFjdGlvbiA9IGZyYWN0aW9u
ICogMTAgKyBzdHJpbmdbcG9zaXRpb24rK10gLSAnMCc7Ci0gICAgICAgIHNjYWxlICo9IDEwOwot
ICAgIH0KLQotICAgIHZhbHVlID0gbG9jYWxWYWx1ZSArIGZyYWN0aW9uIC8gc2NhbGU7Ci0gICAg
cmV0dXJuIGxlbmd0aDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IENoYXJhY3RlclR5cGUq
JiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9y
LCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBleHBlY3QsIGludCYgdmFsdWUpCi17Ci0g
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHN0cmluZzsKLSAgICBkb3VibGUgbG9j
YWxWYWx1ZSA9IDA7Ci0gICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwotICAgIHdoaWxlIChjdXJy
ZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCi0gICAgICAgIGN1cnJlbnQrKzsK
LSAgICBpZiAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPT0gJy0nKSB7Ci0gICAgICAgIG5l
Z2F0aXZlID0gdHJ1ZTsKLSAgICAgICAgY3VycmVudCsrOwotICAgIH0KLSAgICBpZiAoY3VycmVu
dCA9PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkg
ewotICAgICAgICBkb3VibGUgbmV3VmFsdWUgPSBsb2NhbFZhbHVlICogMTAgKyAqY3VycmVudCsr
IC0gJzAnOwotICAgICAgICBpZiAobmV3VmFsdWUgPj0gMjU1KSB7Ci0gICAgICAgICAgICAvLyBD
bGFtcCB2YWx1ZXMgYXQgMjU1LgotICAgICAgICAgICAgbG9jYWxWYWx1ZSA9IDI1NTsKLSAgICAg
ICAgICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQot
ICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGxvY2FsVmFsdWUgPSBuZXdWYWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVu
dCA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChleHBlY3QgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50ID09ICcuJyB8fCAqY3VycmVu
dCA9PSAnJScpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKmN1cnJlbnQgPT0g
Jy4nKSB7Ci0gICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRoZSBpbnRlZ3JhbCBwYXJ0LCB0
cnkgdG8gcGFyc2UKLSAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBhcnQgb2YgdGhlIHBlcmNlbnRh
Z2UgdmFsdWUuCi0gICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMDsKLSAgICAgICAgaW50IG51
bUNoYXJhY3RlcnNQYXJzZWQgPSBwYXJzZURvdWJsZShjdXJyZW50LCBlbmQsICclJywgcGVyY2Vu
dGFnZSk7Ci0gICAgICAgIGlmICghbnVtQ2hhcmFjdGVyc1BhcnNlZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgY3VycmVudCArPSBudW1DaGFyYWN0ZXJzUGFyc2VkOwotICAg
ICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRhZ2U7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgKmN1cnJlbnQgIT0gJyUnKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKmN1cnJlbnQgPT0gJyUnKSB7Ci0gICAg
ICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRTsKLSAgICAgICAg
bG9jYWxWYWx1ZSA9IGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4wOwotICAgICAgICAvLyBDbGFt
cCB2YWx1ZXMgYXQgMjU1IGZvciBwZXJjZW50YWdlcyBvdmVyIDEwMCUKLSAgICAgICAgaWYgKGxv
Y2FsVmFsdWUgPiAyNTUpCi0gICAgICAgICAgICBsb2NhbFZhbHVlID0gMjU1OwotICAgICAgICBj
dXJyZW50Kys7Ci0gICAgfSBlbHNlCi0gICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSOwotCi0gICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNl
KCpjdXJyZW50KSkKLSAgICAgICAgY3VycmVudCsrOwotICAgIGlmIChjdXJyZW50ID09IGVuZCB8
fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAv
LyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVyby4KLSAgICB2YWx1ZSA9IG5lZ2F0aXZlID8g
MCA6IHN0YXRpY19jYXN0PGludD4obG9jYWxWYWx1ZSk7Ci0gICAgc3RyaW5nID0gY3VycmVudDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50aEFscGhhKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
cmluZywgY29uc3QgaW50IGxlbmd0aCkKLXsKLSAgICAvLyAiMC5YIgotICAgIGlmIChsZW5ndGgg
PT0gMyAmJiBzdHJpbmdbMF0gPT0gJzAnICYmIHN0cmluZ1sxXSA9PSAnLicgJiYgaXNBU0NJSURp
Z2l0KHN0cmluZ1syXSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gIi5YIgotICAg
IGlmIChsZW5ndGggPT0gMiAmJiBzdHJpbmdbMF0gPT0gJy4nICYmIGlzQVNDSUlEaWdpdChzdHJp
bmdbMV0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgcGFy
c2VBbHBoYVZhbHVlKGNvbnN0IENoYXJhY3RlclR5cGUqJiBzdHJpbmcsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQotewotICAgIHdo
aWxlIChzdHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJpbmcpKQotICAgICAgICArK3N0
cmluZzsKLQotICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKLQotICAgIGlmIChzdHJpbmcgIT0g
ZW5kICYmICpzdHJpbmcgPT0gJy0nKSB7Ci0gICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgKytzdHJpbmc7Ci0gICAgfQotCi0gICAgdmFsdWUgPSAwOwotCi0gICAgaW50IGxlbmd0aCA9
IGVuZCAtIHN0cmluZzsKLSAgICBpZiAobGVuZ3RoIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHN0cmluZ1tsZW5ndGggLSAxXSAhPSB0ZXJtaW5hdG9yIHx8ICFpc0FTQ0lJ
RGlnaXQoc3RyaW5nW2xlbmd0aCAtIDJdKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKHN0cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBzdHJpbmdbMF0gIT0g
Jy4nKSB7Ci0gICAgICAgIGlmIChjaGVja0ZvclZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJt
aW5hdG9yKSkgewotICAgICAgICAgICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiAyNTU7Ci0gICAg
ICAgICAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCA9PSAyICYm
IHN0cmluZ1swXSAhPSAnLicpIHsKLSAgICAgICAgdmFsdWUgPSAhbmVnYXRpdmUgJiYgc3RyaW5n
WzBdID09ICcxJyA/IDI1NSA6IDA7Ci0gICAgICAgIHN0cmluZyA9IGVuZDsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzVGVudGhBbHBoYShzdHJpbmcsIGxlbmd0aCAt
IDEpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgdGVudGhBbHBoYVZhbHVlc1tdID0geyAw
LCAyNSwgNTEsIDc2LCAxMDIsIDEyNywgMTUzLCAxNzksIDIwNCwgMjMwIH07Ci0gICAgICAgIHZh
bHVlID0gbmVnYXRpdmUgPyAwIDogdGVudGhBbHBoYVZhbHVlc1tzdHJpbmdbbGVuZ3RoIC0gMl0g
LSAnMCddOwotICAgICAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGRvdWJsZSBhbHBoYSA9IDA7Ci0gICAgaWYgKCFwYXJzZURvdWJsZShzdHJpbmcs
IGVuZCwgdGVybWluYXRvciwgYWxwaGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFs
dWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGFscGhhICogbmV4dGFmdGVyKDI1
Ni4wLCAwLjApKTsKLSAgICBzdHJpbmcgPSBlbmQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1pZ2h0
QmVSR0JBKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBpZiAobGVuZ3RoIDwgNSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBjaGFyYWN0ZXJzWzRdID09ICcoJwotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKGNoYXJhY3RlcnNbMF0sICdyJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKGNoYXJhY3RlcnNbM10sICdhJyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmIChsZW5ndGggPCA0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNbM10gPT0gJygn
Ci0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ3In
KQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMV0sICdn
JykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAn
YicpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxp
bmUgYm9vbCBmYXN0UGFyc2VDb2xvckludGVybmFsKFJHQkEzMiYgcmdiLCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGggLCBib29sIHN0cmljdCkKLXsKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVU5LTk9XTjsKLSAgICAKLSAgICBpZiAoIXN0cmljdCAmJiBsZW5ndGggPj0gMykgewot
ICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAgICAgICAgIGlmIChDb2xv
cjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSwgcmdiKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUcnkgcmdi
YSgpIHN5bnRheC4KLSAgICBpZiAobWlnaHRCZVJHQkEoY2hhcmFjdGVycywgbGVuZ3RoKSkgewot
ICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gY2hhcmFjdGVycyArIDU7Ci0g
ICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0g
ICAgICAgIGludCByZWQ7Ci0gICAgICAgIGludCBncmVlbjsKLSAgICAgICAgaW50IGJsdWU7Ci0g
ICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcGFyc2VDb2xvckludE9y
UGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3Vy
cmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAn
LCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmdiID0gbWFrZVJHQkEocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBUcnkgcmdiKCkg
c3ludGF4LgotICAgIGlmIChtaWdodEJlUkdCKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IGNoYXJhY3RlcnMgKyA0OwotICAgICAg
ICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgICAg
ICBpbnQgcmVkOwotICAgICAgICBpbnQgZ3JlZW47Ci0gICAgICAgIGludCBibHVlOwotICAgICAg
ICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVj
dCwgcmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJj
ZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJnYiA9IG1ha2VSR0IocmVkLCBncmVlbiwgYmx1ZSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLWJvb2wgQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihS
R0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlwZSYgbmFtZSwgYm9vbCBzdHJpY3QpCi17Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBib29sIHBhcnNlUmVzdWx0Owot
Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChuYW1l
LmlzOEJpdCgpKQotICAgICAgICBwYXJzZVJlc3VsdCA9IGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwo
cmdiLCBuYW1lLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgc3RyaWN0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHBhcnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChyZ2IsIG5hbWUuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCwgc3RyaWN0KTsKLQotICAgIGlmIChwYXJzZVJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUcnkgbmFtZWQgY29sb3JzLgotICAgIENvbG9yIHRj
OwotICAgIHRjLnNldE5hbWVkQ29sb3IobmFtZSk7Ci0gICAgaWYgKHRjLmlzVmFsaWQoKSkgewot
ICAgICAgICByZ2IgPSB0Yy5yZ2IoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWlubGluZSBkb3VibGUgQ1NTUGFyc2VyOjpwYXJzZWRE
b3VibGUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotewotICAg
IHJldHVybiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpID8gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24uY2FsY3VsYXRpb24oKS0+ZG91YmxlVmFsdWUoKSA6IHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuZlZhbHVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6aXNDYWxjdWxhdGlvbihD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICYmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImNhbGMoIikKLSAgICAgICAgICAgIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1j
YWxjKCIpKTsKLX0KLQotaW5saW5lIGludCBDU1NQYXJzZXI6OmNvbG9ySW50RnJvbVZhbHVlKFZh
bHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsKLSAgICBib29sIGlz
UGVyY2VudDsKLSAgICAKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24o
KSkKLSAgICAgICAgaXNQZXJjZW50ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24o
KS0+Y2F0ZWdvcnkoKSA9PSBDYWxjUGVyY2VudDsKLSAgICBlbHNlCi0gICAgICAgIGlzUGVyY2Vu
dCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U7Ci0KLSAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJz
ZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgIAotICAgIGlmIChkb3VibGVWYWx1
ZSA8PSAwLjApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGlzUGVyY2VudCkgewotICAg
ICAgICBpZiAoZG91YmxlVmFsdWUgPj0gMTAwLjApCi0gICAgICAgICAgICByZXR1cm4gMjU1Owot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihkb3VibGVWYWx1ZSAqIDI1Ni4wIC8gMTAw
LjApOwotICAgIH0KLQotICAgIGlmIChkb3VibGVWYWx1ZSA+PSAyNTUuMCkKLSAgICAgICAgcmV0
dXJuIDI1NTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGRvdWJsZVZhbHVlKTsKLX0K
LQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEpCi17Ci0gICAgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+Y3VycmVu
dCgpKTsKLSAgICBVbml0cyB1bml0VHlwZSA9IEZVbmtub3duOwotICAgIC8vIEdldCB0aGUgZmly
c3QgdmFsdWUgYW5kIGl0cyB0eXBlCi0gICAgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgIHVuaXRU
eXBlID0gRkludGVnZXI7Ci0gICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgdW5pdFR5
cGUgPSBGUGVyY2VudDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoZmlyc3RBcmd1bWVudFdpdGhDYWxj
dWxhdGlvbik7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgpOwotICAgICAgICBp
ZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBv
cGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmdzLT5uZXh0KCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbiwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9tVmFsdWUoYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24pOwotICAgIH0KLSAgICBpZiAocGFyc2VBbHBoYSkgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Ci0gICAgICAg
IGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgLy8gQ29udmVydCB0aGUgZmxvYXRpbmcgcG9pbnRl
ciBudW1iZXIgb2YgYWxwaGEgdG8gYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgWzAsIDI1NiksCi0g
ICAgICAgIC8vIHdpdGggYW4gZXF1YWwgZGlzdHJpYnV0aW9uIGFjcm9zcyBhbGwgMjU2IHZhbHVl
cy4KLSAgICAgICAgY29sb3JBcnJheVszXSA9IHN0YXRpY19jYXN0PGludD4oc3RkOjptYXg8ZG91
YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIGRvdWJsZVZhbHVlKSkgKiBuZXh0YWZ0ZXIoMjU2
LjAsIDAuMCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIENTUzMgc3Bl
Y2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgYSBIU0wgY29sb3IgYXMKLS8vIGhzbCg8
bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2VudD4pCi0vLyBhbmQgd2l0aCBhbHBoYSwgdGhlIGZv
cm1hdCBpcwotLy8gaHNsYSg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2VudD4sIDxudW1iZXI+
KQotLy8gVGhlIGZpcnN0IHZhbHVlLCBIVUUsIGlzIGluIGFuIGFuZ2xlIHdpdGggYSB2YWx1ZSBi
ZXR3ZWVuIDAgYW5kIDM2MAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlSFNMUGFyYW1ldGVycyhDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQot
ewotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24oKmFyZ3MtPmN1cnJlbnQoKSk7Ci0gICAgLy8gR2V0IHRoZSBmaXJzdCB2YWx1ZQotICAgIGlm
ICghdmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIENT
U1N0cmljdE1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gbm9ybWFsaXplIHRo
ZSBIdWUgdmFsdWUgYW5kIGNoYW5nZSBpdCB0byBiZSBiZXR3ZWVuIDAgYW5kIDEuMAotICAgIGNv
bG9yQXJyYXlbMF0gPSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZShmaXJzdEFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjAuMDsKLSAgICBm
b3IgKGludCBpID0gMTsgaSA8IDM7ICsraSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3Bl
cmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRvckFyZ3Vt
ZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQu
aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0g
ICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVyY2Vu
dCwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNv
bG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMTAwLCBw
YXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkgLyAxMDAuMDsgLy8gbmVlZHMg
dG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKLSAgICB9Ci0gICAgaWYgKHBhcnNlQWxwaGEp
IHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4
dCgpOwotICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3Vi
bGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKSkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQot
ewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGlmICghcGFyc2VDb2xv
ckZyb21WYWx1ZSh2YWx1ZSA/ICp2YWx1ZSA6ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29s
b3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBSR0JBMzImIGMpCi17Ci0gICAgaWYg
KGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIKLSAgICAgICAgJiYgdmFsdWUuZlZhbHVlID49IDAuICYmIHZhbHVlLmZWYWx1ZSA8IDEw
MDAwMDAuKSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6OmZvcm1hdCgiJTA2ZCIsIHN0
YXRpY19jYXN0PGludD4oKHZhbHVlLmZWYWx1ZSsuNSkpKTsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHN0cmljdCBwYXJzaW5nIGZvciBTVkcgYXMgd2VsbC4KLSAgICAgICAgaWYg
KCFmYXN0UGFyc2VDb2xvcihjLCBzdHIsIGluU3RyaWN0TW9kZSgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QQVJTRVJfSEVYQ09MT1IKLSAgICAgICAgfHwgdmFsdWUudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UCi0gICAgICAgIHx8IChpblF1aXJrc01vZGUoKSAmJiB2YWx1
ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkgewotICAgICAgICBp
ZiAoIWZhc3RQYXJzZUNvbG9yKGMsIHZhbHVlLnN0cmluZywgaW5TdHJpY3RNb2RlKCkgJiYgdmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OkZ1bmN0aW9uCi0gICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICYmIHZh
bHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiByZ2IgKyB0d28gY29tbWFzICovCi0g
ICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAicmdiKCIpKSB7Ci0gICAgICAgIGludCBjb2xvclZhbHVlc1szXTsKLSAgICAgICAgaWYg
KCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIGZhbHNlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYyA9IG1ha2VSR0IoY29sb3JWYWx1ZXNbMF0s
IGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCi0gICAgICAgICAgICAm
JiB2YWx1ZS5mdW5jdGlvbi0+YXJncwotICAgICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFy
Z3MtPnNpemUoKSA9PSA3IC8qIHJnYmEgKyB0aHJlZSBjb21tYXMgKi8KLSAgICAgICAgICAgICYm
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmdi
YSgiKSkgewotICAgICAgICAgICAgaW50IGNvbG9yVmFsdWVzWzRdOwotICAgICAgICAgICAgaWYg
KCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGMgPSBtYWtlUkdCQShjb2xvclZh
bHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVlc1szXSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rp
b24KLSAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2
YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDUgLyogaHNsICsgdHdvIGNvbW1hcyAqLwot
ICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJoc2woIikpIHsKLSAgICAgICAgICAgIGRvdWJsZSBjb2xvclZhbHVlc1szXTsK
LSAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywg
ZmFsc2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGMgPSBt
YWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1
ZXNbMl0sIDEuMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCi0gICAg
ICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDcgLyogaHNsYSArIHRo
cmVlIGNvbW1hcyAqLwotICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2xhKCIpKSB7Ci0gICAgICAgICAgICBkb3VibGUg
Y29sb3JWYWx1ZXNbNF07Ci0gICAgICAgICAgICBpZiAoIXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1
ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVl
c1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIFRoaXMgY2xhc3MgdHJhY2tzIHBhcnNpbmcgc3RhdGUgZm9yIHNoYWRvdyB2YWx1ZXMuICBJ
ZiBpdCBnb2VzIG91dCBvZiBzY29wZSAoZS5nLiwgZHVlIHRvIGFuIGVhcmx5IHJldHVybikKLS8v
IHdpdGhvdXQgdGhlIGFsbG93QnJlYWsgYml0IGJlaW5nIHNldCwgdGhlbiBpdCB3aWxsIGNsZWFu
IHVwIGFsbCBvZiB0aGUgb2JqZWN0cyBhbmQgZGVzdHJveSB0aGVtLgotc3RydWN0IFNoYWRvd1Bh
cnNlQ29udGV4dCB7Ci0gICAgU2hhZG93UGFyc2VDb250ZXh0KENTU1Byb3BlcnR5SUQgcHJvcCwg
Q1NTUGFyc2VyJiBwYXJzZXIpCi0gICAgICAgIDogcHJvcGVydHkocHJvcCkKLSAgICAgICAgLCBt
X3BhcnNlcihwYXJzZXIpCi0gICAgICAgICwgYWxsb3dYKHRydWUpCi0gICAgICAgICwgYWxsb3dZ
KGZhbHNlKQotICAgICAgICAsIGFsbG93Qmx1cihmYWxzZSkKLSAgICAgICAgLCBhbGxvd1NwcmVh
ZChmYWxzZSkKLSAgICAgICAgLCBhbGxvd0NvbG9yKHRydWUpCi0gICAgICAgICwgYWxsb3dTdHls
ZShwcm9wID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3AgPT0gQ1NTUHJvcGVy
dHlCb3hTaGFkb3cpCi0gICAgICAgICwgYWxsb3dCcmVhayh0cnVlKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGFsbG93TGVuZ3RoKCkgeyByZXR1cm4gYWxsb3dYIHx8IGFsbG93WSB8fCBhbGxv
d0JsdXIgfHwgYWxsb3dTcHJlYWQ7IH0KLQotICAgIHZvaWQgY29tbWl0VmFsdWUoKQotICAgIHsK
LSAgICAgICAgLy8gSGFuZGxlIHRoZSAsLCBjYXNlIGdyYWNlZnVsbHkgYnkgZG9pbmcgbm90aGlu
Zy4KLSAgICAgICAgaWYgKHggfHwgeSB8fCBibHVyIHx8IHNwcmVhZCB8fCBjb2xvciB8fCBzdHls
ZSkgewotICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCi0gICAgICAgICAgICAgICAgdmFsdWVzID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotCi0gICAgICAgICAgICAvLyBD
b25zdHJ1Y3QgdGhlIGN1cnJlbnQgc2hhZG93IHZhbHVlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qu
Ci0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1v
dmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoc3ByZWFkKSwgV1RGTW92
ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cg
cmVzZXQgZm9yIHRoZSBuZXh0IHNoYWRvdyB2YWx1ZS4KLSAgICAgICAgeCA9IG51bGxwdHI7Ci0g
ICAgICAgIHkgPSBudWxscHRyOwotICAgICAgICBibHVyID0gbnVsbHB0cjsKLSAgICAgICAgc3By
ZWFkID0gbnVsbHB0cjsKLSAgICAgICAgc3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb2xvciA9
IG51bGxwdHI7Ci0KLSAgICAgICAgYWxsb3dYID0gdHJ1ZTsKLSAgICAgICAgYWxsb3dDb2xvciA9
IHRydWU7Ci0gICAgICAgIGFsbG93QnJlYWsgPSB0cnVlOwotICAgICAgICBhbGxvd1kgPSBmYWxz
ZTsKLSAgICAgICAgYWxsb3dCbHVyID0gZmFsc2U7Ci0gICAgICAgIGFsbG93U3ByZWFkID0gZmFs
c2U7Ci0gICAgICAgIGFsbG93U3R5bGUgPSBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNoYWRvdzsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbW1pdExlbmd0aChDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBt
X3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwotCi0gICAgICAgIGlmIChhbGxvd1gpIHsKLSAgICAgICAgICAgIHggPSBXVEZNb3ZlKHByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93WCA9IGZhbHNlOwotICAgICAgICAgICAgYWxs
b3dZID0gdHJ1ZTsKLSAgICAgICAgICAgIGFsbG93Q29sb3IgPSBmYWxzZTsKLSAgICAgICAgICAg
IGFsbG93U3R5bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93QnJlYWsgPSBmYWxzZTsKLSAg
ICAgICAgfSBlbHNlIGlmIChhbGxvd1kpIHsKLSAgICAgICAgICAgIHkgPSBXVEZNb3ZlKHByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93WSA9IGZhbHNlOwotICAgICAgICAgICAgYWxs
b3dCbHVyID0gdHJ1ZTsKLSAgICAgICAgICAgIGFsbG93Q29sb3IgPSB0cnVlOwotICAgICAgICAg
ICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8
IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OwotICAgICAgICAgICAgYWxsb3dCcmVh
ayA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dCbHVyKSB7Ci0gICAgICAgICAgICBi
bHVyID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICBhbGxvd0JsdXIgPSBm
YWxzZTsKLSAgICAgICAgICAgIGFsbG93U3ByZWFkID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoYWxsb3dTcHJlYWQpIHsKLSAgICAgICAgICAgIHNwcmVhZCA9IFdURk1v
dmUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Q29sb3IoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkKLSAgICB7Ci0gICAgICAgIGNvbG9yID0gdmFsOwotICAgICAgICBhbGxv
d0NvbG9yID0gZmFsc2U7Ci0gICAgICAgIGlmIChhbGxvd1gpIHsKLSAgICAgICAgICAgIGFsbG93
U3R5bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93QnJlYWsgPSBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9IGZhbHNlOwotICAgICAgICAgICAgYWxs
b3dTcHJlYWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93U3R5bGUgPSBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNo
YWRvdzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tbWl0U3R5bGUoQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc3R5bGUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0gICAgICAgIGFsbG93U3R5
bGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKGFsbG93WCkKLSAgICAgICAgICAgIGFsbG93QnJlYWsg
PSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhbGxvd0JsdXIgPSBmYWxzZTsK
LSAgICAgICAgICAgIGFsbG93U3ByZWFkID0gZmFsc2U7Ci0gICAgICAgICAgICBhbGxvd0NvbG9y
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
OwotICAgIENTU1BhcnNlciYgbV9wYXJzZXI7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2
YWx1ZXM7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4geTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzcHJlYWQ7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yOwot
Ci0gICAgYm9vbCBhbGxvd1g7Ci0gICAgYm9vbCBhbGxvd1k7Ci0gICAgYm9vbCBhbGxvd0JsdXI7
Ci0gICAgYm9vbCBhbGxvd1NwcmVhZDsKLSAgICBib29sIGFsbG93Q29sb3I7Ci0gICAgYm9vbCBh
bGxvd1N0eWxlOyAvLyBpbnNldCBvciBub3QuCi0gICAgYm9vbCBhbGxvd0JyZWFrOwotfTsKLQot
UmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpCi17Ci0gICAgU2hhZG93UGFy
c2VDb250ZXh0IGNvbnRleHQocHJvcElkLCAqdGhpcyk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlOwotICAgIHdoaWxlICgodmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpKSkgewotICAgICAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAg
ICAgICAvLyBDaGVjayBmb3IgYSBjb21tYSBicmVhayBmaXJzdC4KLSAgICAgICAgaWYgKHZhbHVl
LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcikgewotICAgICAgICAgICAgaWYgKHZh
bHVlLT5pVmFsdWUgIT0gJywnIHx8ICFjb250ZXh0LmFsbG93QnJlYWspIHsKLSAgICAgICAgICAg
ICAgICAvLyBPdGhlciBvcGVyYXRvcnMgYXJlbid0IGxlZ2FsIG9yIHdlIGFyZW4ndCBkb25lIHdp
dGggdGhlIGN1cnJlbnQgc2hhZG93Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUuICBUcmVhdCBh
cyBpbnZhbGlkLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgbm90IHN1cHBvcnQgbXVs
dGlwbGUgdmFsdWVzLgotICAgICAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtp
dFN2Z1NoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0LgotICAgICAgICAgICAgY29udGV4dC5j
b21taXRWYWx1ZSgpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKLSAgICAgICAgICAgIC8vIFdl
IHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3QgZ2V0IG9uZS4gSW52YWxpZC4KLSAgICAgICAg
ICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgICAgICAvLyBCbHVyIHJhZGl1cyBtdXN0IGJlIG5vbi1uZWdhdGl2
ZS4KLSAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIC8vIEEgbGVuZ3Ro
IGlzIGFsbG93ZWQgaGVyZS4gIENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFkZCBpdC4KLSAgICAg
ICAgICAgIGNvbnRleHQuY29tbWl0TGVuZ3RoKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbnNldCkgewotICAgICAgICAgICAg
aWYgKCFjb250ZXh0LmFsbG93U3R5bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0U3R5bGUodmFsdWVXaXRoQ2FsY3VsYXRpb24p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBv
ZiB2YWx1ZSB0aGF0J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4KLSAgICAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkQ29sb3I7Ci0gICAgICAgICAgICBib29sIGlzQ29sb3Ig
PSAoaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUodmFsdWUtPmlkKSB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVNZW51Ci0gICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZVdlYmtp
dEZvY3VzUmluZ0NvbG9yICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgaW5R
dWlya3NNb2RlKCkpCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKTsKLSAgICAgICAgICAgIGlmIChpc0NvbG9yKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LmFsbG93Q29sb3IpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5v
dCBidWlsdC1pbi4gVHJ5IHRvIHBhcnNlIGl0IGFzIGEgY29sb3IuCi0gICAgICAgICAgICAgICAg
cGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKCFwYXJz
ZWRDb2xvciB8fCAhY29udGV4dC5hbGxvd0NvbG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0aCBhbmQgaXMgaW52
YWxpZCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQg
YSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCi0KLSAgICAgICAgICAgIGNvbnRl
eHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LmFs
bG93QnJlYWspIHsKLSAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwotICAgICAgICBpZiAo
Y29udGV4dC52YWx1ZXMgJiYgY29udGV4dC52YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoY29udGV4dC52YWx1ZXMpOwotICAgIH0KLQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VSZWZsZWN0KENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBib3gtcmVmbGVjdDogPGRpcmVjdGlvbj4g
PG9mZnNldD4gPG1hc2s+Ci0KLSAgICAvLyBEaXJlY3Rpb24gY29tZXMgZmlyc3QuCi0gICAgQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewot
ICAgICAgICBjYXNlIENTU1ZhbHVlQWJvdmU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVCZWxvdzoK
LSAgICAgICAgY2FzZSBDU1NWYWx1ZUxlZnQ6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoK
LSAgICAgICAgICAgIGRpcmVjdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUg
b2Zmc2V0IGNvbWVzIG5leHQuCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0OwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIG9mZnNldCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmICghdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvZmZzZXQgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgIH0KLQotICAgIC8vIE5vdyBm
b3IgdGhlIG1hc2suCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtYXNrOwotICAgIHZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKCFwYXJzZUJv
cmRlckltYWdlKHByb3BJZCwgbWFzaykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NSZWZsZWN0VmFsdWU6OmNyZWF0ZShkaXJl
Y3Rpb24ucmVsZWFzZU5vbk51bGwoKSwgb2Zmc2V0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
bWFzaykpLCBpbXBvcnRhbnQpOwotICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0
JiBhcmdzLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAoIWFyZ3Muc2l6ZSgpIHx8IGFyZ3Mu
c2l6ZSgpID4gMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgdW5zZXRWYWx1ZSA9IC0xOwotICAgIGRvdWJsZSBmbGV4R3JvdyA9IHVuc2V0VmFsdWU7Ci0g
ICAgZG91YmxlIGZsZXhTaHJpbmsgPSB1bnNldFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZmxleEJhc2lzOwotCi0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBhcmd1bWVu
dCA9IGFyZ3MuY3VycmVudCgpKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkgewotICAgICAgICAg
ICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleEdyb3cg
PSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgZWxz
ZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgIGZsZXhTaHJp
bmsgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAg
ZWxzZSBpZiAoIXBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykg
aWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0
LgotICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgMyBudW1iZXJzIHdpdGhv
dXQgdW5pdHMgaWYgdGhlIGxhc3QgdmFsdWUgaXMgMC4gRS5nLiwgZmxleDoxIDEgMSBpcyBpbnZh
bGlkLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKSkKLSAgICAgICAgICAgIGZsZXhC
YXNpcyA9IHBhcnNlVmFsaWRQcmltaXRpdmUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5pZCwgYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIE5vdCBhIHZhbGlkIGFyZyBmb3IgZmxleC4KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxl
eEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgZmxleEdyb3cgPSAxOwotICAgIGlmIChmbGV4
U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgIGZsZXhTaHJpbmsgPSAxOwotICAgIGlmICgh
ZmxleEJhc2lzKQotICAgICAgICBmbGV4QmFzaXMgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotCi0gICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlGbGV4R3JvdywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShjbGFtcFRvRmxvYXQoZmxleEdyb3cpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4U2hyaW5r
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNsYW1wVG9GbG9hdChmbGV4
U2hyaW5rKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwotICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEJhc2lzLCBmbGV4QmFzaXMucmVsZWFzZU5vbk51
bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RydWN0IEJvcmRlcklt
YWdlUGFyc2VDb250ZXh0IHsKLSAgICBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCgpCi0gICAgOiBt
X2NhbkFkdmFuY2UoZmFsc2UpCi0gICAgLCBtX2FsbG93Q29tbWl0KHRydWUpCi0gICAgLCBtX2Fs
bG93SW1hZ2UodHJ1ZSkKLSAgICAsIG1fYWxsb3dJbWFnZVNsaWNlKHRydWUpCi0gICAgLCBtX2Fs
bG93UmVwZWF0KHRydWUpCi0gICAgLCBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IoZmFsc2Up
Ci0gICAgLCBtX3JlcXVpcmVXaWR0aChmYWxzZSkKLSAgICAsIG1fcmVxdWlyZU91dHNldChmYWxz
ZSkKLSAgICB7fQotCi0gICAgYm9vbCBjYW5BZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5B
ZHZhbmNlOyB9Ci0gICAgdm9pZCBzZXRDYW5BZHZhbmNlKGJvb2wgY2FuQWR2YW5jZSkgeyBtX2Nh
bkFkdmFuY2UgPSBjYW5BZHZhbmNlOyB9Ci0KLSAgICBib29sIGFsbG93Q29tbWl0KCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0NvbW1pdDsgfQotICAgIGJvb2wgYWxsb3dJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYWxsb3dJbWFnZTsgfQotICAgIGJvb2wgYWxsb3dJbWFnZVNsaWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ltYWdlU2xpY2U7IH0KLSAgICBib29sIGFsbG93UmVwZWF0KCkgY29u
c3QgeyByZXR1cm4gbV9hbGxvd1JlcGVhdDsgfQotICAgIGJvb2wgYWxsb3dGb3J3YXJkU2xhc2hP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcjsgfQot
Ci0gICAgYm9vbCByZXF1aXJlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVXaWR0aDsg
fQotICAgIGJvb2wgcmVxdWlyZU91dHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZU91dHNl
dDsgfQotCi0gICAgdm9pZCBjb21taXRJbWFnZShSZWZQdHI8Q1NTVmFsdWU+JiYgaW1hZ2UpCi0g
ICAgewotICAgICAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7Ci0gICAgICAgIG1fY2FuQWR2
YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwotICAgICAgICBtX2Fs
bG93SW1hZ2UgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3JlcXVpcmVXaWR0aCA9
IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICBtX2FsbG93SW1hZ2VTbGljZSA9ICFt
X2ltYWdlU2xpY2U7Ci0gICAgICAgIG1fYWxsb3dSZXBlYXQgPSAhbV9yZXBlYXQ7Ci0gICAgfQot
ICAgIHZvaWQgY29tbWl0SW1hZ2VTbGljZShSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PiYmIHNsaWNlKQotICAgIHsKLSAgICAgICAgbV9pbWFnZVNsaWNlID0gV1RGTW92ZShzbGljZSk7
Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dDb21taXQgPSBt
X2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSB0cnVlOwotICAgICAgICBtX2FsbG93SW1hZ2VT
bGljZSA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7Ci0gICAgICAg
IG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBtX2FsbG93UmVwZWF0ID0gIW1fcmVw
ZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdEZvcndhcmRTbGFzaE9wZXJhdG9yKCkKLSAgICB7
Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dDb21taXQgPSBt
X2FsbG93SW1hZ2UgPSBtX2FsbG93SW1hZ2VTbGljZSA9IG1fYWxsb3dSZXBlYXQgPSBtX2FsbG93
Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2JvcmRlclNsaWNl
KSB7Ci0gICAgICAgICAgICBtX3JlcXVpcmVXaWR0aCA9IHRydWU7Ci0gICAgICAgICAgICBtX3Jl
cXVpcmVPdXRzZXQgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fcmVx
dWlyZU91dHNldCA9IHRydWU7Ci0gICAgICAgICAgICBtX3JlcXVpcmVXaWR0aCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgY29tbWl0Qm9yZGVyV2lkdGgoUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYmIHNsaWNlKQotICAgIHsKLSAgICAgICAgbV9ib3JkZXJTbGljZSA9IFdU
Rk1vdmUoc2xpY2UpOwotICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOwotICAgICAgICBtX2Fs
bG93Q29tbWl0ID0gbV9hbGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9yID0gdHJ1ZTsKLSAgICAgICAg
bV9hbGxvd0ltYWdlU2xpY2UgPSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNldCA9IGZh
bHNlOwotICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsKLSAgICAgICAgbV9hbGxvd1Jl
cGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJPdXRzZXQoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIG91dHNldCkKLSAgICB7Ci0gICAgICAgIG1fb3V0c2V0
ID0gV1RGTW92ZShvdXRzZXQpOwotICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOwotICAgICAg
ICBtX2FsbG93Q29tbWl0ID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSBtX2Fs
bG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNl
dCA9IGZhbHNlOwotICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsKLSAgICAgICAgbV9h
bGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9Ci0gICAgdm9pZCBjb21taXRSZXBlYXQoUmVm
UHRyPENTU1ZhbHVlPiYmIHJlcGVhdCkKLSAgICB7Ci0gICAgICAgIG1fcmVwZWF0ID0gV1RGTW92
ZShyZXBlYXQpOwotICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOwotICAgICAgICBtX2FsbG93
Q29tbWl0ID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd1JlcGVhdCA9IG1fYWxsb3dGb3J3YXJkU2xh
c2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7Ci0g
ICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gIW1faW1hZ2VTbGljZTsKLSAgICAgICAgbV9hbGxv
d0ltYWdlID0gIW1faW1hZ2U7Ci0gICAgfQotCi0gICAgUmVmPENTU1ZhbHVlPiBjb21taXRXZWJL
aXRCb3JkZXJJbWFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1hZ2VW
YWx1ZShtX2ltYWdlLmNvcHlSZWYoKSwgbV9pbWFnZVNsaWNlLmNvcHlSZWYoKSwgbV9ib3JkZXJT
bGljZS5jb3B5UmVmKCksIG1fb3V0c2V0LmNvcHlSZWYoKSwgbV9yZXBlYXQuY29weVJlZigpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNvbW1pdEJvcmRlckltYWdlKENTU1BhcnNlciYgcGFyc2VyLCBi
b29sIGltcG9ydGFudCkKLSAgICB7Ci0gICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHko
Q1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwgcGFyc2VyLCBXVEZNb3ZlKG1faW1hZ2UpLCBp
bXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTbGljZSwgcGFyc2VyLCBtX2ltYWdlU2xpY2UsIGltcG9ydGFudCk7Ci0gICAg
ICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRo
LCBwYXJzZXIsIG1fYm9yZGVyU2xpY2UsIGltcG9ydGFudCk7Ci0gICAgICAgIGNvbW1pdEJvcmRl
ckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldCwgcGFyc2VyLCBtX291
dHNldCwgaW1wb3J0YW50KTsKLSAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0LCBwYXJzZXIsIFdURk1vdmUobV9yZXBlYXQpLCBpbXBv
cnRhbnQpOwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgQ1NTUGFyc2VyJiBwYXJzZXIsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCi0gICAgewotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAg
ICAgICBwYXJzZXIuYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBp
bXBvcnRhbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZXIuYWRkUHJvcGVydHko
cHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZh
bHVlKCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBtX2NhbkFkdmFuY2U7
Ci0KLSAgICBib29sIG1fYWxsb3dDb21taXQ7Ci0gICAgYm9vbCBtX2FsbG93SW1hZ2U7Ci0gICAg
Ym9vbCBtX2FsbG93SW1hZ2VTbGljZTsKLSAgICBib29sIG1fYWxsb3dSZXBlYXQ7Ci0gICAgYm9v
bCBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3I7Ci0KLSAgICBib29sIG1fcmVxdWlyZVdpZHRo
OwotICAgIGJvb2wgbV9yZXF1aXJlT3V0c2V0OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX2lt
YWdlOwotICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IG1faW1hZ2VTbGljZTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm9yZGVyU2xpY2U7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX291dHNldDsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9y
ZXBlYXQ7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0LCBib29sIGltcG9ydGFudCkKLXsK
LSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAgIEJvcmRlckltYWdl
UGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBjdXJyZW50
VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Q2Fu
QWR2YW5jZShmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBj
b250ZXh0LmFsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IoKSAmJiBpc0ZvcndhcmRTbGFzaE9wZXJh
dG9yKCpjdXJyZW50VmFsdWUpKQotICAgICAgICAgICAgY29udGV4dC5jb21taXRGb3J3YXJkU2xh
c2hPcGVyYXRvcigpOwotCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29u
dGV4dC5hbGxvd0ltYWdlKCkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5j
b21taXRJbWFnZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwoY3VycmVudFZhbHVl
LT5zdHJpbmcpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUo
KmN1cnJlbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
OwotICAgICAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwg
dmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKFdURk1vdmUo
dmFsdWUpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUo
KmN1cnJlbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
ID0gcGFyc2VJbWFnZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdl
U2xpY2UoKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4g
aW1hZ2VTbGljZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlU2xpY2UocHJvcElk
LCBpbWFnZVNsaWNlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlU2xpY2Uo
V1RGTW92ZShpbWFnZVNsaWNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnRleHQu
Y2FuQWR2YW5jZSgpICYmIGNvbnRleHQuYWxsb3dSZXBlYXQoKSkgewotICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiByZXBlYXQ7Ci0gICAgICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVJl
cGVhdChyZXBlYXQpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0UmVwZWF0KFdURk1v
dmUocmVwZWF0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5j
ZSgpICYmIGNvbnRleHQucmVxdWlyZVdpZHRoKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gYm9yZGVyU2xpY2U7Ci0gICAgICAgICAgICBpZiAocGFyc2VCb3JkZXJJ
bWFnZVdpZHRoKGJvcmRlclNsaWNlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEJv
cmRlcldpZHRoKFdURk1vdmUoYm9yZGVyU2xpY2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5yZXF1aXJlT3V0c2V0KCkpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm9yZGVyT3V0c2V0OwotICAgICAg
ICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VPdXRzZXQoYm9yZGVyT3V0c2V0KSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmNvbW1pdEJvcmRlck91dHNldChXVEZNb3ZlKGJvcmRlck91dHNldCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAg
IH0KLQotICAgIGlmIChjb250ZXh0LmFsbG93Q29tbWl0KCkpIHsKLSAgICAgICAgaWYgKHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5jb21taXRC
b3JkZXJJbWFnZSgqdGhpcywgaW1wb3J0YW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Ly8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFsdWUuCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjb250ZXh0LmNvbW1pdFdlYktpdEJvcmRlckltYWdlKCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaXNC
b3JkZXJJbWFnZVJlcGVhdEtleXdvcmQoaW50IGlkKQotewotICAgIHJldHVybiBpZCA9PSBDU1NW
YWx1ZVN0cmV0Y2ggfHwgaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFj
ZSB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3Jk
ZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBmaXJzdFZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc2Vjb25kVmFsdWU7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7Ci0gICAgaWYgKCF2YWwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
aXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkpCi0gICAgICAgIGZpcnN0VmFsdWUg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlk
KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZhbCA9IG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgaWYgKHZhbCkgewotICAgICAgICBpZiAoaXNCb3JkZXJJbWFnZVJl
cGVhdEtleXdvcmQodmFsLT5pZCkpCi0gICAgICAgICAgICBzZWNvbmRWYWx1ZSA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwotICAgICAg
ICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90
IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
cmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4gaXRzIGFkdmFuY2VkIHdlJ2xsCi0g
ICAgICAgICAgICAvLyBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPnByZXZpb3VzKCk7Ci0gICAgICAgICAgICBzZWNvbmRWYWx1ZSA9IGZpcnN0VmFs
dWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc2Vjb25kVmFsdWUgPSBmaXJzdFZh
bHVlOwotCi0gICAgcmVzdWx0ID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGZpcnN0VmFsdWUu
cmVsZWFzZU5vbk51bGwoKSwgc2Vjb25kVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWNsYXNzIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQgewotcHVi
bGljOgotICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQoQ1NTUGFyc2VyJiBwYXJzZXIp
Ci0gICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgLCBtX2FsbG93TnVtYmVyKHRydWUpCi0gICAg
LCBtX2FsbG93RmlsbCh0cnVlKQotICAgICwgbV9hbGxvd0ZpbmFsQ29tbWl0KGZhbHNlKQotICAg
ICwgbV9maWxsKGZhbHNlKQotICAgIHsgfQotCi0gICAgYm9vbCBhbGxvd051bWJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYWxsb3dOdW1iZXI7IH0KLSAgICBib29sIGFsbG93RmlsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWxsb3dGaWxsOyB9Ci0gICAgYm9vbCBhbGxvd0ZpbmFsQ29tbWl0KCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0KLSAgICB2b2lkIGNvbW1pdE51bWJl
cihDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikK
LSAgICB7Ci0gICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBpZiAoIW1f
dG9wKQotICAgICAgICAgICAgbV90b3AgPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoIW1fcmlnaHQpCi0gICAgICAgICAgICBtX3JpZ2h0ID0gV1RGTW92ZShwcmlt
aXRpdmVWYWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2JvdHRvbSkKLSAgICAgICAgICAgIG1f
Ym90dG9tID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKCFtX2xlZnQpOwotICAgICAgICAgICAgbV9sZWZ0ID0gV1RGTW92ZShwcmlt
aXRpdmVWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2FsbG93TnVtYmVyID0gIW1fbGVm
dDsKLSAgICAgICAgbV9hbGxvd0ZpbmFsQ29tbWl0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNvbW1pdEZpbGwoKSB7IG1fZmlsbCA9IHRydWU7IG1fYWxsb3dGaWxsID0gZmFsc2U7IG1fYWxs
b3dOdW1iZXIgPSAhbV90b3A7IH0KLQotICAgIFJlZjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+
IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQotICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBj
bG9uZSBhbmQgcmVwZWF0IHZhbHVlcyBmb3IgYW55IG9taXNzaW9ucy4KLSAgICAgICAgQVNTRVJU
KG1fdG9wKTsKLSAgICAgICAgaWYgKCFtX3JpZ2h0KSB7Ci0gICAgICAgICAgICBtX3JpZ2h0ID0g
bV90b3A7Ci0gICAgICAgICAgICBtX2JvdHRvbSA9IG1fdG9wOwotICAgICAgICAgICAgbV9sZWZ0
ID0gbV90b3A7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2JvdHRvbSkgewotICAgICAgICAg
ICAgbV9ib3R0b20gPSBtX3RvcDsKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fcmlnaHQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFtX2xlZnQpCi0gICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0
OwotCi0gICAgICAgIC8vIE5vdyBidWlsZCBhIHJlY3QgdmFsdWUgdG8gaG9sZCBhbGwgZm91ciBv
ZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICAgICAgYXV0byBxdWFkID0gUXVhZDo6Y3JlYXRl
KCk7Ci0gICAgICAgIHF1YWQtPnNldFRvcChtX3RvcC5jb3B5UmVmKCkpOwotICAgICAgICBxdWFk
LT5zZXRSaWdodChtX3JpZ2h0LmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1YWQtPnNldEJvdHRvbSht
X2JvdHRvbS5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRMZWZ0KG1fbGVmdC5jb3B5UmVm
KCkpOwotCi0gICAgICAgIC8vIE1ha2Ugb3VyIG5ldyBib3JkZXIgaW1hZ2UgdmFsdWUgbm93Lgot
ICAgICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1YWQpKSwgbV9maWxsKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKLQotICAgIGJvb2wgbV9h
bGxvd051bWJlcjsKLSAgICBib29sIG1fYWxsb3dGaWxsOwotICAgIGJvb2wgbV9hbGxvd0ZpbmFs
Q29tbWl0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKLQot
ICAgIGJvb2wgbV9maWxsOwotfTsKLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VT
bGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZT4mIHJlc3VsdCkKLXsKLSAgICBCb3JkZXJJbWFnZVNsaWNlUGFyc2VDb250ZXh0IGNvbnRleHQo
KnRoaXMpOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAgICB3aGlsZSAoKHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
dmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgLy8gRklYTUUgY2FsYygpIGh0
dHA6Ly93ZWJraXQub3JnL2IvMTY2NjIgOiBjYWxjIGlzIHBhcnNlZCBidXQgdmFsdWVzIGFyZSBu
b3QgY3JlYXRlZCB5ZXQuCi0gICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgIWlz
Q2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQsIENTU1N0cmljdE1v
ZGUpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5hbGxvd0ZpbGwoKSAmJiB2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVGaWxsKQotICAgICAgICAgICAgY29udGV4dC5jb21taXRGaWxsKCk7Ci0g
ICAgICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdy
ZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlkLgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNvbnRl
eHQuYWxsb3dGaW5hbENvbW1pdCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcg
dG8gc3VjY2Vzc2Z1bGx5IHBhcnNlLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdW1lIHRoaXMg
dG9rZW4uCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LmFsbG93RmluYWxDb21taXQoKSkg
ewotICAgICAgICAvLyBGSVhNRTogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCAtd2Via2l0
LWJvcmRlci1pbWFnZSwgLXdlYmtpdC1tYXNrLWJveC1pbWFnZSBhbmQgLXdlYmtpdC1ib3gtcmVm
bGVjdCBoYXZlIHRvIGRvIGEgZmlsbCBieSBkZWZhdWx0LgotICAgICAgICAvLyBGSVhNRTogV2hh
dCBkbyB3ZSBkbyB3aXRoIC13ZWJraXQtYm94LXJlZmxlY3QgYW5kIC13ZWJraXQtbWFzay1ib3gt
aW1hZ2U/IFByb2JhYmx5IGp1c3QgaGF2ZSB0byBsZWF2ZSB0aGVtIGZpbGxpbmcuLi4KLSAgICAg
ICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlIHx8IHByb3BJZCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSB8fCBwcm9wSWQgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hSZWZsZWN0KQotICAgICAgICAgICAgY29udGV4dC5jb21taXRGaWxsKCk7Ci0KLSAg
ICAgICAgLy8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFsdWUuCi0gICAgICAg
IHJlc3VsdCA9IGNvbnRleHQuY29tbWl0Qm9yZGVySW1hZ2VTbGljZSgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNsYXNzIEJvcmRlcklt
YWdlUXVhZFBhcnNlQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQm9yZGVySW1hZ2VRdWFkUGFyc2VD
b250ZXh0KENTU1BhcnNlciYgcGFyc2VyKQotICAgIDogbV9wYXJzZXIocGFyc2VyKQotICAgICwg
bV9hbGxvd051bWJlcih0cnVlKQotICAgICwgbV9hbGxvd0ZpbmFsQ29tbWl0KGZhbHNlKQotICAg
IHsgfQotCi0gICAgYm9vbCBhbGxvd051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dOdW1i
ZXI7IH0KLSAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
RmluYWxDb21taXQ7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1
cm4gbV90b3AuZ2V0KCk7IH0KLQotICAgIHZvaWQgY29tbWl0TnVtYmVyKENTU1BhcnNlcjo6VmFs
dWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotICAgIHsKLSAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAgaWYgKHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgIGlmICghbV90b3Ap
Ci0gICAgICAgICAgICBtX3RvcCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBl
bHNlIGlmICghbV9yaWdodCkKLSAgICAgICAgICAgIG1fcmlnaHQgPSBXVEZNb3ZlKHByaW1pdGl2
ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoIW1fYm90dG9tKQotICAgICAgICAgICAgbV9ib3R0
b20gPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1fbGVmdCk7Ci0gICAgICAgICAgICBtX2xlZnQgPSBXVEZNb3ZlKHByaW1pdGl2
ZVZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWxsb3dOdW1iZXIgPSAhbV9sZWZ0Owot
ICAgICAgICBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgc2V0
QWxsb3dGaW5hbENvbW1pdCgpIHsgbV9hbGxvd0ZpbmFsQ29tbWl0ID0gdHJ1ZTsgfQotICAgIHZv
aWQgc2V0VG9wKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV90b3AgPSBXVEZN
b3ZlKHZhbCk7IH0KLQotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY29tbWl0Qm9yZGVySW1h
Z2VRdWFkKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgYW5kIHJlcGVhdCB2
YWx1ZXMgZm9yIGFueSBvbWlzc2lvbnMuCi0gICAgICAgIEFTU0VSVChtX3RvcCk7Ci0gICAgICAg
IGlmICghbV9yaWdodCkgewotICAgICAgICAgICAgbV9yaWdodCA9IG1fdG9wOwotICAgICAgICAg
ICAgbV9ib3R0b20gPSBtX3RvcDsKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fdG9wOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghbV9ib3R0b20pIHsKLSAgICAgICAgICAgIG1fYm90dG9tID0gbV90
b3A7Ci0gICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0OwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghbV9sZWZ0KQotICAgICAgICAgICAgbV9sZWZ0ID0gbV9yaWdodDsKLQotICAgICAgICAvLyBO
b3cgYnVpbGQgYSBxdWFkIHZhbHVlIHRvIGhvbGQgYWxsIGZvdXIgb2Ygb3VyIHByaW1pdGl2ZSB2
YWx1ZXMuCi0gICAgICAgIGF1dG8gcXVhZCA9IFF1YWQ6OmNyZWF0ZSgpOwotICAgICAgICBxdWFk
LT5zZXRUb3AobV90b3AuY29weVJlZigpKTsKLSAgICAgICAgcXVhZC0+c2V0UmlnaHQobV9yaWdo
dC5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRCb3R0b20obV9ib3R0b20uY29weVJlZigp
KTsKLSAgICAgICAgcXVhZC0+c2V0TGVmdChtX2xlZnQuY29weVJlZigpKTsKLQotICAgICAgICAv
LyBNYWtlIG91ciBuZXcgdmFsdWUgbm93LgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1YWQpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKLQotICAgIGJvb2wgbV9hbGxvd051bWJlcjsKLSAg
ICBib29sIG1fYWxsb3dGaW5hbENvbW1pdDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBtX2xlZnQ7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVF1
YWQoVW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQot
ewotICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWU7Ci0gICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1
bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgKHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRVbml0cywgQ1NTU3RyaWN0TW9k
ZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKLSAgICAgICAgICAgIGNvbnRleHQu
Y29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmICgh
aW5TaG9ydGhhbmQoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IHBhcnNpbmcgYSBz
aG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93RmluYWxDb21t
aXQoKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsgLy8gVGhlIHNo
b3J0aGFuZCBsb29wIHdpbGwgYWR2YW5jZSBiYWNrIHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0K
LQotICAgIGlmIChjb250ZXh0LmFsbG93RmluYWxDb21taXQoKSkgewotICAgICAgICAvLyBOZWVk
IHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAgICAgICAgcmVzdWx0ID0gY29u
dGV4dC5jb21taXRCb3JkZXJJbWFnZVF1YWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1h
Z2VXaWR0aChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCi17Ci0gICAgcmV0dXJu
IHBhcnNlQm9yZGVySW1hZ2VRdWFkKEZMZW5ndGggfCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVy
Y2VudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VPdXRz
ZXQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQotewotICAgIHJldHVybiBwYXJz
ZUJvcmRlckltYWdlUXVhZChGTGVuZ3RoIHwgRkludGVnZXIgfCBGTm9uTmVnLCByZXN1bHQpOwot
fQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVkIG51bSA9IG1fdmFsdWVMaXN0LT5z
aXplKCk7Ci0gICAgaWYgKG51bSA+IDkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNo
b3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpaVsyXVs0XTsKLQotICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJTbGFzaCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgIENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdChpKTsKLSAgICAgICAgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaVZhbHVlICE9ICcvJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgICAgIGlmICghaSB8fCBpbmRleEFmdGVyU2xhc2ggfHwgaSArIDEgPT0gbnVtIHx8
IG51bSA+IGkgKyA1KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgaW5kZXhBZnRlclNsYXNoID0gaSArIDE7Ci0gICAgICAgICAgICBjb21wbGV0ZUJvcmRlclJh
ZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGkgLSBpbmRleEFmdGVyU2xhc2ggPj0gNCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2
YWx1ZSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBhdXRvIHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpIHsKLSAg
ICAgICAgICAgIHJhZGlpWzBdW2ldID0gV1RGTW92ZShyYWRpdXMpOwotCi0gICAgICAgICAgICAv
LyBMZWdhY3kgc3ludGF4OiAtd2Via2l0LWJvcmRlci1yYWRpdXM6IGwxIGwyOyBpcyBlcXVpdmFs
ZW50IHRvIGJvcmRlci1yYWRpdXM6IGwxIC8gbDI7Ci0gICAgICAgICAgICBpZiAobnVtID09IDIg
JiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzKSB7Ci0gICAgICAgICAg
ICAgICAgaW5kZXhBZnRlclNsYXNoID0gMTsKLSAgICAgICAgICAgICAgICBjb21wbGV0ZUJvcmRl
clJhZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByYWRpaVsxXVtpIC0gaW5kZXhBZnRlclNsYXNoXSA9IFdURk1vdmUocmFkaXVzKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewotICAgICAgICBjb21wbGV0ZUJvcmRl
clJhZGlpKHJhZGlpWzBdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsr
aSkKLSAgICAgICAgICAgIHJhZGlpWzFdW2ldID0gcmFkaWlbMF1baV07Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGNvbXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMV0pOwotCi0gICAgSW1wbGljaXRTY29w
ZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKLSAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFp
cihXVEZNb3ZlKHJhZGlpWzBdWzBdKSwgV1RGTW92ZShyYWRpaVsxXVswXSkpLCBpbXBvcnRhbnQp
OwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsIGNyZWF0
ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzFdKSwgV1RGTW92ZShyYWRpaVsx
XVsxXSkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tUmlnaHRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBd
WzJdKSwgV1RGTW92ZShyYWRpaVsxXVsyXSkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURk1vdmUocmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlpWzFdWzNdKSksIGltcG9ydGFu
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFzcGVjdFJh
dGlvKGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVkIG51bSA9IG1fdmFsdWVMaXN0LT5z
aXplKCk7Ci0gICAgaWYgKG51bSA9PSAxKSB7Ci0gICAgICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9
IG1fdmFsdWVMaXN0LT52YWx1ZUF0KDApLT5pZDsKLSAgICAgICAgaWYgKHZhbHVlSWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IHZhbHVlSWQgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9ucyB8fCB2YWx1ZUlk
ID09IENTU1ZhbHVlRnJvbUludHJpbnNpYykgewotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChudW0gIT0gMykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIG9wID0gKm1fdmFsdWVMaXN0LT52
YWx1ZUF0KDEpOwotCi0gICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKG9wKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbHZhbHVlV2l0aENh
bGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKSk7Ci0gICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gcnZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgyKSk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVVuaXQobHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5v
bk5lZykgfHwgIXZhbGlkYXRlVW5pdChydmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
Tm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCi0gICAgaWYgKCFsdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWUgfHwgIXJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZW
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQobHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSwgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChydmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUp
KSwgaW1wb3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBib29s
IGltcG9ydGFudCkKLXsKLSAgICBlbnVtIHsgSUQsIFZBTCB9IHN0YXRlID0gSUQ7Ci0KLSAgICBh
dXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb3VudGVyTmFtZTsKLQotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICAgIGNhc2UgSUQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgY291bnRlck5hbWUgPSBjcmVhdGVQcmlt
aXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFZB
TDsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBWQUw6IHsKLSAgICAgICAgICAgICAgICBpbnQgaSA9IGRl
ZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgaSA9
IGNsYW1wVG9JbnRlZ2VyKHZhbHVlLT5mVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShjb3VudGVyTmFtZSks
Ci0gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUoaSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSk7Ci0gICAgICAgICAgICAgICAg
c3RhdGUgPSBJRDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobGlzdC0+bGVuZ3RoKCkg
PiAwKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShsaXN0KSwgaW1wb3J0
YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi0vLyBUaGlzIHNob3VsZCBnbyBhd2F5IG9uY2Ugd2UgZHJvcCBzdXBwb3J0IGZvciAtd2Vi
a2l0LWdyYWRpZW50Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZURlcHJl
Y2F0ZWRHcmFkaWVudFBvaW50KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgYm9vbCBob3Jpem9udGFs
KQotewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OwotICAgIGlmICh2YWx1
ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgaWYgKChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImxlZnQiKSAmJiBob3Jpem9udGFs
KQotICAgICAgICAgICAgfHwgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAi
dG9wIikgJiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFKTsKLSAgICAgICAgZWxzZSBpZiAoKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLCAicmlnaHQiKSAmJiBob3Jpem9udGFsKQotICAgICAgICAgICAgfHwgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQot
ICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImNlbnRlciIpKQotICAg
ICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSg1
MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgfSBlbHNlIGlmICh2
YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSIHx8IHZhbHVlLnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICByZXN1bHQgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29s
b3JTdG9wKENTU1BhcnNlciYgcGFyc2VyLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIENTU0dyYWRp
ZW50Q29sb3JTdG9wJiBzdG9wKQotewotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikKLSAg
ICAgICAgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAidG8oIikKLSAgICAgICAgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7Ci0gICAgaWYgKCFhcmdzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJmcm9t
KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0
aW9uLT5uYW1lLCAidG8oIikpIHsKLSAgICAgICAgLy8gVGhlICJmcm9tIiBhbmQgInRvIiBzdG9w
cyBleHBlY3QgMSBhcmd1bWVudC4KLSAgICAgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikpCi0gICAgICAgICAgICBz
dG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3RvcC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0KLSAgICAgICAgQ1NTVmFsdWVJ
RCBpZCA9IGFyZ3MtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdl
YmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQg
PT0gQ1NTVmFsdWVNZW51KQotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VDb2xvcihhcmdzLT5jdXJyZW50
KCkpOwotICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1bmN0aW9uIGV4cGVjdHMgMyBh
cmd1bWVudHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkgewotICAgICAgICBpZiAoYXJncy0+c2l6ZSgp
ICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ1NTUGFyc2VyVmFs
dWUqIHN0b3BBcmcgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChzdG9wQXJnLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIHN0b3Au
bV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RvcEFy
Zy0+ZlZhbHVlIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAg
IGVsc2UgaWYgKHN0b3BBcmctPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
Ci0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKHN0b3BBcmctPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
c3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKHN0b3BBcmctPnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IHN0b3BBcmctPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgQ1NTVmFsdWVJRCBpZCA9IHN0b3BBcmctPmlkOwotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVXZWJraXRUZXh0IHx8IENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQp
IHx8IGlkID09IENTU1ZhbHVlTWVudSkKLSAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VyLnBhcnNlQ29sb3Ioc3RvcEFy
Zyk7Ci0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NWYWx1ZT4mIGdyYWRpZW50KQotewotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBD
U1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+
YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpID09IDApCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZ3JhZGll
bnQgdHlwZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCi0gICAgQ1NTR3JhZGllbnRUeXBlIGdyYWRp
ZW50VHlwZTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7
Ci0gICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImxpbmVhciIpKQotICAgICAgICBncmFkaWVu
dFR5cGUgPSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQ7Ci0gICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAicmFkaWFsIikpCi0gICAgICAgIGdy
YWRpZW50VHlwZSA9IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudDsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiByZXN1bHQ7
Ci0gICAgc3dpdGNoIChncmFkaWVudFR5cGUpIHsKLSAgICBjYXNlIENTU0RlcHJlY2F0ZWRMaW5l
YXJHcmFkaWVudDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlKE5vblJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQ6Ci0gICAgICAgIHJlc3VsdCA9IENTU1JhZGlh
bEdyYWRpZW50VmFsdWU6OmNyZWF0ZShOb25SZXBlYXRpbmcsIGdyYWRpZW50VHlwZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBncmFk
aWVudCB0eXBlcyBzaG91bGRuJ3QgYXBwZWFyIGhlcmUuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLQotICAgIC8vIENvbW1hLgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwotICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIE5leHQgY29tZXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgZ3JhZGllbnQg
YXMgYW4geCB5IHBhaXIuICBUaGVyZSBpcyBubwotICAgIC8vIGNvbW1hIGJldHdlZW4gdGhlIHgg
YW5kIHRoZSB5IHZhbHVlcy4KLSAgICAvLyBGaXJzdCBYLiAgSXQgY2FuIGJlIGxlZnQsIHJpZ2h0
LCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICBp
ZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoKmFyZ3VtZW50
LCB0cnVlKTsKLSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVz
dWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGaXJzdCBZ
LiAgSXQgY2FuIGJlIHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwg
ZmFsc2UpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1
bHQtPnNldEZpcnN0WShwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIC8vIENvbW1hIGFm
dGVyIHRoZSBmaXJzdCBwb2ludC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICBp
ZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
b3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IGEgbnVtZXJpYyByYWRpdXMu
Ci0gICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsK
LSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMuCi0gICAgICAgIGlmICghYXJndW1l
bnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGRvd25jYXN0PENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVzKGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIC8vIENv
bW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5leHQgaXMgdGhlIGVuZGluZyBwb2ludCBmb3IgdGhl
IGdyYWRpZW50IGFzIGFuIHgsIHkgcGFpci4KLSAgICAvLyBTZWNvbmQgWC4gIEl0IGNhbiBiZSBs
ZWZ0LCByaWdodCwgbnVtYmVyIG9yIHBlcmNlbnQuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50
ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIHRydWUpOwotICAgIGlm
ICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQtPnNldFNlY29uZFgo
cG9pbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBTZWNvbmQgWS4gIEl0IGNhbiBiZSB0
b3AsIGJvdHRvbSwgbnVtYmVyIG9yIHBlcmNlbnQuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50
ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIGZhbHNlKTsKLSAgICBp
ZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZ
KHBvaW50LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gRm9yIHJhZGlhbCBncmFkaWVudHMg
b25seSwgd2Ugbm93IGV4cGVjdCB0aGUgc2Vjb25kIHJhZGl1cy4KLSAgICBpZiAoZ3JhZGllbnRU
eXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewotICAgICAgICAvLyBDb21tYSBh
ZnRlciB0aGUgc2Vjb25kIHBvaW50LgotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KLSAgICAgICAgaWYgKCFh
cmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgZG93bmNhc3Q8
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVzKGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgIH0KLQot
ICAgIC8vIFdlIG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3BzICgwIG9yIG1vcmUp
LgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgIHdoaWxlIChhcmd1bWVudCkgewot
ICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCi0gICAg
ICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgLy8gTm93IGV4YW1pbmUgdGhlIHN0b3AgaXRzZWxmLgotICAgICAgICBhcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAvLyBUaGUgZnVuY3Rpb24gbmFtZSBuZWVkcyB0byBiZSBv
bmUgb2YgImZyb20iLCAidG8iLCBvciAiY29sb3Itc3RvcC4iCi0gICAgICAgIENTU0dyYWRpZW50
Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIGlmICghcGFyc2VEZXByZWNhdGVkR3JhZGllbnRDb2xv
clN0b3AoKnRoaXMsICphcmd1bWVudCwgc3RvcCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJlc3VsdC0+YWRkU3RvcChzdG9wKTsKLQotICAgICAgICAvLyBBZHZhbmNlCi0g
ICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgIH0KLQotICAgIGdyYWRpZW50ID0g
V1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIGJvb2wmIGlzSG9yaXpvbnRhbCkKLXsKLSAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN3
aXRjaCAodmFsdWUuaWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxlZnQ6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGlzSG9yaXpvbnRhbCA9IHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRvcDoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUJvdHRvbToKLSAgICAgICAgICAgIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1BhcnNlciYgcGFyc2VyLCBDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOwotICAg
IGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVt
Q29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoaWQpOwotCi0gICAgcmV0dXJuIHBhcnNlci5wYXJzZUNvbG9yKCZ2
YWx1ZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVu
dChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGll
bnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IENT
U0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFy
R3JhZGllbnQpOwotCi0gICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZh
bHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgp
OwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAg
aWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0KLSAgICBib29sIGV4
cGVjdENvbW1hID0gZmFsc2U7Ci0gICAgLy8gTG9vayBmb3IgYW5nbGUuCi0gICAgaWYgKHZhbGlk
YXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkg
ewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIExvb2sgb25l
IG9yIHR3byBvcHRpb25hbCBrZXl3b3JkcyB0aGF0IGluZGljYXRlIGEgc2lkZSBvciBjb3JuZXIu
Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3RhcnRYLCBzdGFydFk7Ci0gICAg
ICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoKmFyZ3VtZW50LCBp
c0hvcml6b250YWwpKSB7Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAg
ICAgICAgIHN0YXJ0WCA9IFdURk1vdmUobG9jYXRpb24pOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1vdmUobG9jYXRpb24pOwotCi0gICAgICAgICAgICBp
ZiAoKGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpKSkgewotICAgICAgICAgICAgICAgIGlmICgobG9j
YXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9yaXpvbnRhbCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFydFgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gV1RGTW92ZShsb2NhdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhcnRZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1vdmUobG9jYXRpb24pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYXJncy0+bmV4dCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXhwZWN0Q29t
bWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzdGFydFggJiYgIXN0YXJ0WSkK
LSAgICAgICAgICAgIHN0YXJ0WSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKLQotICAgICAgICByZXN1bHQtPnNldEZpcnN0WChX
VEZNb3ZlKHN0YXJ0WCkpOwotICAgICAgICByZXN1bHQtPnNldEZpcnN0WShXVEZNb3ZlKHN0YXJ0
WSkpOwotICAgIH0KLQotICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJl
c3VsdCwgZXhwZWN0Q29tbWEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJl
c3VsdC0+c3RvcENvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdyYWRpZW50
ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBl
YXRpbmcpCi17Ci0gICAgYXV0byByZXN1bHQgPSBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVh
dGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZFJhZGlhbEdyYWRpZW50KTsKLQotICAgIC8vIFdhbGsg
dGhlIGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3Qu
Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgIWFyZ3Mt
PnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFy
Z3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKLQotICAgIC8vIE9w
dGlvbmFsIGJhY2tncm91bmQtcG9zaXRpb24KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNlbnRlclg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwotICAgIC8v
IHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbiBhZHZhbmNlcyB0aGUgYXJncyBuZXh0IHBvaW50ZXIu
Ci0gICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCphcmdzLCBjZW50ZXJYLCBjZW50ZXJZKTsK
LSAgICBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2VudGVyWCB8fCBjZW50ZXJZKSB7Ci0gICAg
ICAgIC8vIENvbW1hCi0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAg
ICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0
U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgpKTsKLSAgICAvLyBDU1MzIHJhZGlhbCBncmFkaWVudHMg
YWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgcG9pbnQuCi0gICAgcmVzdWx0LT5z
ZXRGaXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWShXVEZN
b3ZlKGNlbnRlclkpKTsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1
ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemVWYWx1ZTsKLQotICAgIC8vIE9w
dGlvbmFsIHNoYXBlIGFuZC9vciBzaXplIGluIGFueSBvcmRlci4KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDI7ICsraSkgewotICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGJvb2wg
Zm91bmRWYWx1ZSA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50LT5pZCkgewotICAg
ICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgotICAgICAgICBjYXNlIENTU1ZhbHVlRWxsaXBzZToK
LSAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAgICAgICAgZm91bmRWYWx1ZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3Nlc3RT
aWRlOgotICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VzdENvcm5lcjoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUZhcnRoZXN0U2lkZToKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0Q29ybmVy
OgotICAgICAgICBjYXNlIENTU1ZhbHVlQ29udGFpbjoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUNv
dmVyOgotICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKLSAgICAgICAgICAgIGZvdW5kVmFs
dWUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb3VuZFZhbHVlKSB7Ci0gICAg
ICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIGlmICghYXJndW1l
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldFNoYXBlKHNo
YXBlVmFsdWUuY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVW
YWx1ZS5jb3B5UmVmKCkpOwotCi0gICAgLy8gT3IsIHR3byBsZW5ndGhzIG9yIHBlcmNlbnRhZ2Vz
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsU2l6ZTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKLQotICAgIGlmICghc2hhcGVWYWx1
ZSAmJiAhc2l6ZVZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGhTaXplV2l0
aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQoaFNpemVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGhvcml6
b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhTaXplV2l0aENhbGN1bGF0
aW9uKTsKLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIGlmICh2
YWxpZGF0ZVVuaXQodlNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
LSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
U2l6ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4
dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBNdXN0IGhhdmUgbmVpdGhlciBvciBib3RoLgotICAgIGlmICghaG9yaXpvbnRh
bFNpemUgIT0gIXZlcnRpY2FsU2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
dWx0LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShXVEZNb3ZlKGhvcml6b250YWxTaXplKSk7Ci0gICAg
cmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUoV1RGTW92ZSh2ZXJ0aWNhbFNpemUpKTsKLQotICAg
IGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBncmFkaWVudCA9IFdURk1vdmUocmVzdWx0
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdy
YWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCi17Ci0gICAgYXV0byByZXN1bHQg
PSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFk
aWVudCk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVu
dCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFhcmdzLT5jdXJyZW50KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7Ci0KLSAgICBib29sIGV4cGVj
dENvbW1hID0gZmFsc2U7Ci0gICAgLy8gTG9vayBmb3IgYW5nbGUuCi0gICAgaWYgKHZhbGlkYXRl
VW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUp
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLQotICAgICAgICBhcmdzLT5uZXh0KCk7
Ci0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
SURFTlQgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlyc3RBcmd1bWVudFdpdGhD
YWxjdWxhdGlvbiwgInRvIikpIHsKLSAgICAgICAgLy8gdG8gWyBbbGVmdCB8IHJpZ2h0XSB8fCBb
dG9wIHwgYm90dG9tXSBdCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0QXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghbmV4dEFyZ3VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29y
ZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOwotICAgICAgICBpZiAoIWxvY2F0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZW5kWCwgZW5kWTsKLSAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAg
IGVuZFggPSBXVEZNb3ZlKGxvY2F0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5k
WSA9IFdURk1vdmUobG9jYXRpb24pOwotCi0gICAgICAgIG5leHRBcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqbmV4dEFyZ3Vt
ZW50LCBpc0hvcml6b250YWwpOwotICAgICAgICBpZiAobG9jYXRpb24pIHsKLSAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW5kWCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGVuZFggPSBXVEZNb3Zl
KGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVu
ZFkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBl
bmRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoV1RGTW92ZShlbmRYKSk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0Rmlyc3RZKFdURk1vdmUoZW5kWSkpOwotICAgIH0KLQotICAgIGlmICghcGFyc2VHcmFkaWVu
dENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIXJlc3VsdC0+c3RvcENvdW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50
UmVwZWF0IHJlcGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50
VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1JhZGlhbEdyYWRpZW50KTsKLQotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdz
LmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7
Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBl
eHBlY3RDb21tYSA9IGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFw
ZVZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZhbHVlOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaG9yaXpvbnRhbFNpemU7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7Ci0KLSAgICAvLyBGaXJzdCBwYXJ0IG9mIGdyYW1t
YXIsIHRoZSBzaXplL3NoYXBlIGNsYXVzZToKLSAgICAvLyBbIGNpcmNsZSB8fCA8bGVuZ3RoPiBd
IHwKLSAgICAvLyBbIGVsbGlwc2UgfHwgWyA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiBdezJ9IF0g
fAotICAgIC8vIFsgWyBjaXJjbGUgfCBlbGxpcHNlXSB8fCA8c2l6ZS1rZXl3b3JkPiBdCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKGFyZ3Vt
ZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAg
IGJvb2wgYmFkSWRlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnQtPmlk
KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUVsbGlwc2U6Ci0gICAgICAgICAgICAgICAgaWYgKHNoYXBlVmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzaGFwZVZhbHVlID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQt
PmlkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVD
bG9zZXN0U2lkZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZXN0Q29ybmVyOgotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0U2lkZToKLSAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVGYXJ0aGVzdENvcm5lcjoKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZVZhbHVlIHx8IGhv
cml6b250YWxTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYmFkSWRlbnQgPSB0cnVlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
RlBlcmNlbnQpKSB7Ci0KLSAgICAgICAgICAgIGlmIChzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNp
emUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaG9yaXpvbnRh
bFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pOwotCi0gICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAg
IGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2U2l6ZVdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQp
OwotICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2U2l6ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgKytpOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICAvLyBZb3UgY2FuIHNwZWNpZnkgc2l6ZSBhcyBhIGtleXdvcmQgb3IgYSBs
ZW5ndGgvcGVyY2VudGFnZSwgbm90IGJvdGguCi0gICAgaWYgKHNpemVWYWx1ZSAmJiBob3Jpem9u
dGFsU2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIENpcmNsZXMgbXVzdCBoYXZl
IDAgb3IgMSBsZW5ndGhzLgotICAgIGlmIChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUNpcmNsZSAmJiB2ZXJ0aWNhbFNpemUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAvLyBFbGxpcHNlcyBtdXN0IGhhdmUgMCBvciAyIGxlbmd0aC9wZXJjZW50
YWdlcy4KLSAgICBpZiAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVFbGxpcHNlICYmIGhvcml6b250YWxTaXplICYmICF2ZXJ0aWNhbFNpemUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHNpemUsIGl0IG11
c3QgYmUgYSBsZW5ndGguCi0gICAgaWYgKCF2ZXJ0aWNhbFNpemUgJiYgaG9yaXpvbnRhbFNpemUg
JiYgaG9yaXpvbnRhbFNpemUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlVmFsdWUuY29weVJlZigpKTsKLSAgICByZXN1
bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVWYWx1ZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+
c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJlZigpKTsKLSAgICByZXN1
bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigpKTsKLQotICAgIC8v
IFNlY29uZCBwYXJ0IG9mIGdyYW1tYXIsIHRoZSBjZW50ZXItcG9zaXRpb24gY2xhdXNlOgotICAg
IC8vIGF0IDxwb3NpdGlvbj4KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwotICAgIGlmIChhcmd1bWVu
dC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UICYmIGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImF0IikpIHsKLSAgICAgICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oKmFyZ3MsIGNlbnRlclgsIGNlbnRl
clkpOwotICAgICAgICBpZiAoIShjZW50ZXJYICYmIGNlbnRlclkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgICAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJl
c3VsdC0+c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRG
aXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgICAgICAvLyBSaWdodCBub3csIENTUyByYWRp
YWwgZ3JhZGllbnRzIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBjZW50ZXJzLgotICAgICAg
ICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICByZXN1bHQt
PnNldFNlY29uZFkoY2VudGVyWS5jb3B5UmVmKCkpOwotICAgIH0KLQotICAgIGlmIChzaGFwZVZh
bHVlIHx8IHNpemVWYWx1ZSB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNlbnRlclkp
Ci0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLQotICAgIGlmICghcGFyc2VHcmFkaWVudENv
bG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBncmFkaWVudCA9IFdURk1vdmUocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCwgYm9vbCBleHBl
Y3RDb21tYSkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVu
dCgpOwotICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSB0cnVlOwotCi0gICAgLy8g
Tm93IGxvb2sgZm9yIGNvbG9yIHN0b3BzLgotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICAv
LyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCi0gICAgICAgIGlmIChl
eHBlY3RDb21tYSkgewotICAgICAgICAgICAgaWYgKCFpc0NvbW1hKHZhbHVlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5l
eHQoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGNvbG9yLXN0b3A+ID0gPGNvbG9yPiBbIDxw
ZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0/Ci0gICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0
b3A7Ci0gICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZCgq
dGhpcywgKnZhbHVlKTsKLSAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpIHsKLSAgICAgICAgICAg
IGlmIChwcmV2aW91c1N0b3BXYXNNaWRwb2ludCkgLy8gMiBtaWRwb2ludHMgaW4gYSByb3cgaXMg
bm90IGFsbG93ZWQuIFRoaXMgYWxzbyBjYXRjaGVzIHN0YXJ0aW5nIHdpdGggYSBtaWRwb2ludC4K
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHN0b3AuaXNNaWRw
b2ludCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxp
c3QubmV4dCgpOwotCi0gICAgICAgIHByZXZpb3VzU3RvcFdhc01pZHBvaW50ID0gc3RvcC5pc01p
ZHBvaW50OwotCi0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsK
LSAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFs
dWVMaXN0Lm5leHQoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcC5pc01pZHBvaW50KQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGdyYWRp
ZW50LmFkZFN0b3Aoc3RvcCk7Ci0gICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBjYW4ndCBlbmQgb24gYSBtaWRwb2ludC4KLSAgICBpZiAocHJldmlvdXNTdG9w
V2FzTWlkcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE11c3QgaGF2ZSAy
IG9yIG1vcmUgc3RvcHMgdG8gYmUgdmFsaWQuCi0gICAgcmV0dXJuIGdyYWRpZW50LnN0b3BDb3Vu
dCgpID49IDI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0dlbmVyYXRlZEltYWdlVmFsdWUoQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlKSBjb25zdAotewotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1Bh
cnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbGluZWFyLWdyYWRpZW50KCIpCi0gICAg
ICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAibGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRpbmctbGluZWFyLWdy
YWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKQotICAgICAgICB8
fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13
ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmFkaWFsLWdyYWRpZW50KCIpCi0gICAg
ICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5n
LXJhZGlhbC1ncmFkaWVudCgiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FudmFzKCIpCi0gICAgICAgIHx8
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3Jv
c3MtZmFkZSgiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1
ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3MtZmFkZSgiKQotICAgICAgICB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZpbHRlcigi
KQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgIi13ZWJraXQtZmlsdGVyKCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1uYW1lZC1pbWFnZSgi
KTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQotewotICAgIENTU1Bh
cnNlclZhbHVlJiBwYXJzZXJWYWx1ZSA9ICp2YWx1ZUxpc3QuY3VycmVudCgpOwotCi0gICAgaWYg
KHBhcnNlclZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFy
c2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWdyYWRpZW50KCIpKQotICAgICAgICBy
ZXR1cm4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSk7Ci0KLSAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LWxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRGVw
cmVjYXRlZExpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGluZyk7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJsaW5lYXItZ3JhZGllbnQoIikpCi0gICAgICAgIHJldHVybiBwYXJzZUxpbmVh
ckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGluZyk7Ci0KLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIikpCi0gICAgICAgIHJldHVybiBwYXJz
ZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBlYXRpbmcpOwot
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0
aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlTGluZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgUmVwZWF0aW5nKTsKLQotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+
bmFtZSwgIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VE
ZXByZWNhdGVkUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsK
LQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgInJhZGlhbC1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlUmFk
aWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsKLQotICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIFJlcGVhdGluZyk7
Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1
cm4gcGFyc2VSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBlYXRpbmcpOwotCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiLXdlYmtpdC1jYW52YXMoIikpCi0gICAgICAgIHJldHVybiBwYXJzZUNhbnZhcyh2
YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3MtZmFkZSgiKSkKLSAg
ICAgICAgcmV0dXJuIHBhcnNlQ3Jvc3NmYWRlKHZhbHVlTGlzdCwgdmFsdWUsIHRydWUpOwotCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiY3Jvc3MtZmFkZSgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3Jvc3NmYWRlKHZh
bHVlTGlzdCwgdmFsdWUsIGZhbHNlKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZpbHRlcigiKSB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJr
aXQtZmlsdGVyKCIpKQotICAgICAgICByZXR1cm4gcGFyc2VGaWx0ZXJJbWFnZSh2YWx1ZUxpc3Qs
IHZhbHVlKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJW
YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbmFtZWQtaW1hZ2UoIikpCi0gICAgICAgIHJl
dHVybiBwYXJzZU5hbWVkSW1hZ2UodmFsdWVMaXN0LCB2YWx1ZSk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbHRlckltYWdlKENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBmaWx0ZXIpCi17Ci0gICAgLy8gV2Fs
ayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlz
dC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGFyZ3MtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBU
aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGltYWdlLiBJdCBpcyBhIGZpbGwgaW1hZ2UuCi0gICAg
UmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwotICAgIGlmICghcGFyc2VGaWxsSW1hZ2UoKmFy
Z3MsIGltYWdlVmFsdWUpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIGltYWdlVmFsdWUgPSBDU1NJbWFnZVZh
bHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUtPnN0cmluZykpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmFsdWUgPSBhcmdzLT5uZXh0
KCk7Ci0KLSAgICAvLyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBmaWx0ZXJWYWx1ZTsKLSAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZUZp
bHRlcigqYXJncywgZmlsdGVyVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFs
dWUgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICBmaWx0ZXIgPSBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpj
cmVhdGUoaW1hZ2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBmaWx0ZXJWYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VD
cm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4m
IGNyb3NzZmFkZSwgYm9vbCBwcmVmaXhlZCkKLXsKLSAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMu
Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVu
Y3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSA1KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBh
cmdzLT5jdXJyZW50KCk7Ci0KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlICJmcm9t
IiBpbWFnZS4gSXQgaXMgYSBmaWxsIGltYWdlLgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZnJvbUlt
YWdlVmFsdWU7Ci0gICAgaWYgKCFhcmd1bWVudCB8fCAhcGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIGZy
b21JbWFnZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFyZ3VtZW50ID0gYXJn
cy0+bmV4dCgpOwotCi0gICAgLy8gU2tpcCBhIGNvbW1hCi0gICAgaWYgKCFpc0NvbW1hKGFyZ3Vt
ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotCi0gICAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgInRvIiBpbWFnZS4gSXQgaXMg
YSBmaWxsIGltYWdlLgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9JbWFnZVZhbHVlOwotICAgIGlm
ICghYXJndW1lbnQgfHwgIXBhcnNlRmlsbEltYWdlKCphcmdzLCB0b0ltYWdlVmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAv
LyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAvLyBUaGUgdGhp
cmQgYXJndW1lbnQgaXMgdGhlIGNyb3NzZmFkZSB2YWx1ZS4gSXQgaXMgYSBwZXJjZW50YWdlIG9y
IGEgZnJhY3Rpb25hbCBudW1iZXIuCi0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGVyY2VudGFnZTsK
LSAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKQotICAgICAgICBwZXJjZW50YWdlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oYXJndW1lbnQtPmZWYWx1ZSAvIDEwMCwgMCwgMSksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICBlbHNlIGlmIChhcmd1bWVudC0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgcGVyY2VudGFnZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KGFy
Z3VtZW50LT5mVmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjcm9zc2ZhZGUgPSBDU1NDcm9z
c2ZhZGVWYWx1ZTo6Y3JlYXRlKGZyb21JbWFnZVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIHRvSW1h
Z2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBwZXJjZW50YWdlLnJlbGVhc2VOb25OdWxsKCksIHBy
ZWZpeGVkKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VD
YW52YXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGNh
bnZhcykKLXsKLSAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2VyVmFsdWVM
aXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0g
ICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhbnZhcyBuYW1lLiAgSXQgaXMg
YW4gaWRlbnRpZmllci4KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBhcmdzLT5jdXJyZW50
KCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYW52YXMgPSBDU1NDYW52
YXNWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VOYW1lZEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBuYW1lZEltYWdlKQotewotICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwot
ICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIGltYWdlIG5hbWUuCi0gICAgQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUgfHwg
dmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbmFtZWRJbWFnZSA9IENTU05hbWVkSW1hZ2VWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5zdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKENTU19J
TUFHRV9SRVNPTFVUSU9OKQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUlt
YWdlUmVzb2x1dGlvbigpCi17Ci0gICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVT
cGFjZVNlcGFyYXRlZCgpOwotICAgIGJvb2wgaGF2ZVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBi
b29sIGhhdmVGcm9tSW1hZ2UgPSBmYWxzZTsKLSAgICBib29sIGhhdmVTbmFwID0gZmFsc2U7Ci0K
LSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
IHdoaWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIWhhdmVGcm9tSW1hZ2UgJiYgdmFsdWUt
PmlkID09IENTU1ZhbHVlRnJvbUltYWdlKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7
Ci0gICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICgh
aGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25hcCkgewotICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCkpOwotICAgICAgICAgICAgaGF2ZVNuYXAgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZWYWx1ZSA+IDApIHsKLSAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRo
Q2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAgIGhhdmVSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLSAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWhhdmVGcm9tSW1hZ2UgJiYgIWhhdmVSZXNv
bHV0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGTW92ZShsaXN0
KTsKLX0KLSNlbmRpZgotCi1SZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUltYWdlU2V0KCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24pOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBmdW5jdGlvbkFyZ3MgPSB2YWx1ZS5m
dW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWZ1bmN0aW9uQXJncyB8fCAhZnVuY3Rpb25B
cmdzLT5zaXplKCkgfHwgIWZ1bmN0aW9uQXJncy0+Y3VycmVudCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUo
KTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJnID0gZnVuY3Rpb25BcmdzLT5jdXJyZW50KCk7Ci0g
ICAgd2hpbGUgKGFyZykgewotICAgICAgICBpZiAoYXJnLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1h
Z2VTZXQtPmFwcGVuZChDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwoYXJnLT5zdHJp
bmcpKSk7Ci0gICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgpOwotICAgICAgICBpZiAo
IWFyZyB8fCBhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBkb3VibGUgaW1hZ2VTY2FsZUZh
Y3RvciA9IDA7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nID0gYXJnLT5zdHJpbmc7Ci0g
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKHN0cmluZy5p
czhCaXQoKSkgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIHN0YXJ0ID0gc3RyaW5nLmNoYXJh
Y3RlcnM4KCk7Ci0gICAgICAgICAgICBwYXJzZURvdWJsZShzdGFydCwgc3RhcnQgKyBsZW5ndGgs
ICd4JywgaW1hZ2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
b25zdCBVQ2hhciogc3RhcnQgPSBzdHJpbmcuY2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICBw
YXJzZURvdWJsZShzdGFydCwgc3RhcnQgKyBsZW5ndGgsICd4JywgaW1hZ2VTY2FsZUZhY3Rvcik7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGltYWdlU2NhbGVGYWN0b3IgPD0gMCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbWFnZVNldC0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW1hZ2VTY2FsZUZhY3RvciwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBh
cmd1bWVudHMsIHdlJ3JlIGRvbmUuCi0gICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoIWFyZykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIElm
IHRoZXJlIGFyZSBtb3JlIGFyZ3VtZW50cywgdGhleSBzaG91bGQgYmUgYWZ0ZXIgYSBjb21tYS4K
LSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBhcmd1
bWVudC4KLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0KCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFdURk1vdmUoaW1hZ2VTZXQpOwotfQotCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25J
bmZvIHsKLXB1YmxpYzoKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvKGNvbnN0IENTU1BhcnNl
clN0cmluZyYgbmFtZSkKLSAgICAgICAgOiBtX3R5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICwgbV9hcmdDb3VudCgxKQotICAg
ICAgICAsIG1fYWxsb3dTaW5nbGVBcmd1bWVudChmYWxzZSkKLSAgICAgICAgLCBtX3VuaXQoQ1NT
UGFyc2VyOjpGVW5rbm93bikKLSAgICB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
OwotICAgICAgICB1bnNpZ25lZCBuYW1lTGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLQotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBsb25nZXN0TmFtZUxlbmd0aCA9IDEyOwotICAgICAgICBVQ2hhciBj
aGFyYWN0ZXJCdWZmZXJbbG9uZ2VzdE5hbWVMZW5ndGhdOwotICAgICAgICBpZiAobmFtZS5pczhC
aXQoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RkOjptaW4obG9uZ2VzdE5h
bWVMZW5ndGgsIG5hbWVMZW5ndGgpOwotICAgICAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnM4ID0gbmFtZS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGNoYXJhY3RlckJ1ZmZlcltpXSA9
IGNoYXJhY3RlcnM4W2ldOwotICAgICAgICAgICAgY2hhcmFjdGVycyA9IGNoYXJhY3RlckJ1ZmZl
cjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0
ZXJzMTYoKTsKLQotICAgICAgICBzd2l0Y2ggKG5hbWVMZW5ndGgpIHsKLSAgICAgICAgY2FzZSA1
OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZTogc2tldyguCi0gICAgICAgICAgICBpZiAoKChj
aGFyYWN0ZXJzWzBdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkKLSAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAnaycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdL
JykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2UnKSB8fCAoY2hhcmFj
dGVyc1syXSA9PSAnRScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICd3
JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKLSAgICAgICAgICAgICAgICAmIChjaGFyYWN0
ZXJzWzRdID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZB
bmdsZTsKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICBtX2FsbG93U2luZ2xlQXJn
dW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIC8v
IFZhbGlkIG5hbWVzOiBza2V3eCgsIHNrZXd5KCwgc2NhbGUoLgotICAgICAgICAgICAgaWYgKChj
aGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ0MnKSkgewotICAgICAg
ICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1swXSA9
PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8
IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzNdID09ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKLSAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScp
KQotICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzVdID09ICcoJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAg
ICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVBcmd1bWVudCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdzJykgfHwgKGNo
YXJhY3RlcnNbMF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbMV0gPT0gJ2snKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnSycpKQotICAgICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdF
JykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICd3JykgfHwg
KGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFj
dGVyc1s1XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzRdID09
ICd4JykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1gnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3knKSB8fCAoY2hhcmFjdGVy
c1s0XSA9PSAnWScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6
RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAg
IC8vIFZhbGlkIG5hbWVzOiBtYXRyaXgoLCByb3RhdGUoLCBzY2FsZXgoLCBzY2FsZXkoLCBzY2Fs
ZXooLgotICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdtJykgfHwgKGNoYXJhY3Rl
cnNbMF0gPT0gJ00nKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMV0gPT0g
J2EnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykpCi0gICAgICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbM10g
PT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2knKSB8
fCAoY2hhcmFjdGVyc1s0XSA9PSAnSScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1s1XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdYJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAxMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdyJykgfHwgKGNoYXJhY3RlcnNb
MF0gPT0gJ1InKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMV0gPT0gJ28n
KSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykpCi0gICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbM10gPT0g
J0EnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3QnKSB8fCAo
Y2hhcmFjdGVyc1s0XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVy
c1s1XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdFJykpCi0gICAgICAgICAgICAgICAg
ICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBtX3Vu
aXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAncycp
IHx8IChjaGFyYWN0ZXJzWzBdID09ICdTJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ0MnKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sy
XSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAn
bCcpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdMJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzRdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ0UnKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKChjaGFyYWN0ZXJzWzVdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1gn
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFj
dGVyc1s1XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdZJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAgICAgICAg
ICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0
aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbNV0gPT0gJ3onKSB8
fCAoY2hhcmFjdGVyc1s1XSA9PSAnWicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9
IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA4
OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IHJvdGF0ZXgoLCByb3RhdGV5KCwgcm90YXRl
eigsIHNjYWxlM2QoLgotICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdzJykgfHwg
KGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3Rl
cnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKQotICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdBJykp
Ci0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdsJykgfHwgKGNoYXJh
Y3RlcnNbM10gPT0gJ0wnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAm
IChjaGFyYWN0ZXJzWzVdID09ICczJykKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbNl0gPT0gJ2QnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnRCcpKQotICAgICAgICAgICAgICAg
ICAgICAmIChjaGFyYWN0ZXJzWzddID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91
bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1sw
XSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAn
bycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8fCAoY2hhcmFjdGVy
c1szXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9
PSAndCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICAg
ICYgKChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s3XSA9PSAnKCcpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzZdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNl0gPT0g
J1gnKSkgewotICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsK
LSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hh
cmFjdGVyc1s2XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdZJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3Bl
cmF0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbNl0gPT0gJ3on
KSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnWicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5p
dCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSA5OgotICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IG1hdHJpeDNkKCwgcm90YXRlM2QoLgot
ICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdtJykgfHwgKGNoYXJhY3RlcnNbMF0g
PT0gJ00nKSkgewotICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMV0gPT0gJ2EnKSB8
fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1In
KSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2knKSB8fCAoY2hh
cmFjdGVyc1s0XSA9PSAnSScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s1
XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdYJykpCi0gICAgICAgICAgICAgICAgICAg
ICYgKGNoYXJhY3RlcnNbNl0gPT0gJzMnKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1s3XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdEJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKGNoYXJhY3RlcnNbOF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDMxOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdyJykgfHwgKGNoYXJhY3Rl
cnNbMF0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMV0g
PT0gJ28nKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQotICAgICAgICAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykpCi0g
ICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdhJykgfHwgKGNoYXJh
Y3RlcnNbM10gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNb
NF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdFJykp
Ci0gICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJzMnKQotICAgICAg
ICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJz
WzddID09ICdEJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbOF0gPT0g
JygnKSkgewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAg
ICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RU
cmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAg
ICAgIC8vIFZhbGlkIG5hbWU6IHRyYW5zbGF0ZSguCi0gICAgICAgICAgICBpZiAoKChjaGFyYWN0
ZXJzWzBdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1QnKSkKLSAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1sxXSA9PSAncicpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdSJykpCi0g
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sy
XSA9PSAnQScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICduJykgfHwg
KGNoYXJhY3RlcnNbM10gPT0gJ04nKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0
XSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdTJykpCi0gICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnTCcpKQotICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzZdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbNl0gPT0g
J0EnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAndCcpIHx8IChjaGFy
YWN0ZXJzWzddID09ICdUJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbOF0gPT0g
J2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnRScpKQotICAgICAgICAgICAgICAgICYgKGNoYXJh
Y3RlcnNbOV0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6
Rkxlbmd0aCB8IENTU1BhcnNlcjo6RlBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgbV90eXBlID0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICBtX2FsbG93U2luZ2xlQXJndW1lbnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIG1fYXJnQ291bnQgPSAzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgMTE6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogdHJhbnNsYXRleCgs
IHRyYW5zbGF0ZXkoLCB0cmFuc2xhdGV6KC4KLSAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNb
MF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ1InKSkKLSAgICAg
ICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09
ICdBJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ24nKSB8fCAoY2hh
cmFjdGVyc1szXSA9PSAnTicpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09
ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykpCi0gICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnQScp
KQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0JykgfHwgKGNoYXJhY3Rl
cnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s4XSA9PSAnZScp
IHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVy
c1sxMF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIGlmICgoY2hhcmFjdGVyc1s5XSA9PSAn
eCcpIHx8IChjaGFyYWN0ZXJzWzldID09ICdYJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91
bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2VudDsKLSAgICAgICAg
ICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhU
cmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVy
c1s5XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzldID09ICdZJykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2VudDsK
LSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgo
Y2hhcmFjdGVyc1s5XSA9PSAneicpIHx8IChjaGFyYWN0ZXJzWzldID09ICdaJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpG
UGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTI6Ci0gICAg
ICAgICAgICAvLyBWYWxpZCBuYW1lczogcGVyc3BlY3RpdmUoLCB0cmFuc2xhdGUzZCguCi0gICAg
ICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3AnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAn
UCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9PSAnZScpIHx8IChj
aGFyYWN0ZXJzWzFdID09ICdFJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzJdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnUycpKQot
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAncCcpIHx8IChjaGFyYWN0
ZXJzWzRdID09ICdQJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzVdID09
ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbNl0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnQycpKQotICAgICAg
ICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzdd
ID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzhdID09ICdpJykg
fHwgKGNoYXJhY3RlcnNbOF0gPT0gJ0knKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbOV0gPT0gJ3YnKSB8fCAoY2hhcmFjdGVyc1s5XSA9PSAnVicpKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1sxMF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1sxMF0gPT0g
J0UnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1sxMV0gPT0gJygnKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzBdID09ICdUJykp
Ci0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNo
YXJhY3RlcnNbMV0gPT0gJ1InKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbMl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnQScpKQotICAgICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnbicpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdO
JykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09ICdzJykgfHwg
KGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnTCcpKQotICAgICAgICAgICAg
ICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s2XSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzZdID09
ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0Jykg
fHwgKGNoYXJhY3RlcnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNo
YXJhY3RlcnNbOF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnRScpKQotICAgICAgICAg
ICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzldID09ICczJykKLSAgICAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbMTBdID09ICdkJykgfHwgKGNoYXJhY3RlcnNbMTBdID09ICdE
JykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbMTFdID09ICcoJykpIHsK
LSAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6
OkZQZXJjZW50OwotICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICBtX2Fy
Z0NvdW50ID0gNTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
IC8vIGVuZCBzd2l0Y2ggKCkKLSAgICB9Ci0KLSAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0g
ICAgdW5zaWduZWQgYXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ0NvdW50OyB9Ci0gICAg
Q1NTUGFyc2VyOjpVbml0cyB1bml0KCkgY29uc3QgeyByZXR1cm4gbV91bml0OyB9Ci0KLSAgICBi
b29sIHVua25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KLSAgICBib29sIGhhc0NvcnJlY3RB
cmdDb3VudCh1bnNpZ25lZCBhcmdDb3VudCkgeyByZXR1cm4gbV9hcmdDb3VudCA9PSBhcmdDb3Vu
dCB8fCAobV9hbGxvd1NpbmdsZUFyZ3VtZW50ICYmIGFyZ0NvdW50ID09IDEpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUg
bV90eXBlOwotICAgIHVuc2lnbmVkIG1fYXJnQ291bnQ7Ci0gICAgYm9vbCBtX2FsbG93U2luZ2xl
QXJndW1lbnQ7Ci0gICAgQ1NTUGFyc2VyOjpVbml0cyBtX3VuaXQ7Ci19OwotCi1SZWZQdHI8Q1NT
VmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKLXsKLSAgICBpZiAoIW1fdmFs
dWVMaXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCkpIHsKLSAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IHBhcnNl
VHJhbnNmb3JtVmFsdWUoKnZhbHVlKTsKLSAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGxpc3QtPmFwcGVuZChw
YXJzZWRUcmFuc2Zvcm1WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gV1RGTW92ZShsaXN0KTsKLX0KLQotUmVmUHRyPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCAhdmFsdWUu
ZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gRXZlcnkgcHJpbWl0
aXZlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KLSAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2VlIGlmIHRoZSBzcGVjaWZpZWQgcHJp
bWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5kLgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbkluZm8g
aW5mbyh2YWx1ZS5mdW5jdGlvbi0+bmFtZSk7Ci0gICAgaWYgKGluZm8udW5rbm93bigpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghaW5mby5oYXNDb3JyZWN0QXJnQ291bnQo
YXJncy0+c2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgdHJh
bnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5jdGlvbmFsIHByaW1pdGl2ZXMgdGhhdCBzcGVjaWZ5IHRy
YW5zZm9ybSBvcGVyYXRpb25zLgotICAgIC8vIFdlIGNvbGxlY3QgYSBsaXN0IG9mIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVjaWZpZXMgYSBzaW5nbGUgb3Bl
cmF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIHRoZSBuZXcgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUg
Zm9yIHRoaXMgb3BlcmF0aW9uIGFuZCBhZGQgaXQgdG8gb3VyIGxpc3QuCi0gICAgYXV0byB0cmFu
c2Zvcm1WYWx1ZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUoaW5mby50eXBlKCkp
OwotCi0gICAgLy8gU25hZyBvdXIgdmFsdWVzLgotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVu
dCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICB1bnNpZ25lZCBhcmdOdW1iZXIgPSAwOwotICAgIHdo
aWxlIChhcmd1bWVudCkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBDU1NQYXJzZXI6OlVuaXRzIHVuaXQg
PSBpbmZvLnVuaXQoKTsKLQotICAgICAgICBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9PSAz
KSB7Ci0gICAgICAgICAgICAvLyA0dGggcGFyYW0gb2Ygcm90YXRlM2QoKSBpcyBhbiBhbmdsZSBy
YXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVyLCB2YWxpZGF0ZSBpdCBhcyBzdWNoCi0gICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NT
dHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSBl
bHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
M0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDIpIHsKLSAgICAgICAgICAgIC8v
IDNyZCBwYXJhbSBvZiB0cmFuc2xhdGUzZCgpIGNhbm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
LCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7Ci0gICAgICAgICAgICAv
LyAxc3QgcGFyYW0gb2YgdHJhbnNsYXRlWigpIGNhbm5vdCBiZSBhIHBlcmNlbnRhZ2UKLSAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
LCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewotICAgICAgICAgICAg
Ly8gMXN0IHBhcmFtIG9mIHBlcnNwZWN0aXZlKCkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1i
ZXIgKGRlcHJlY2F0ZWQpIG9yIGxlbmd0aC4KLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcsIENT
U1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
IGVsc2UgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXQsIENT
U1N0cmljdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgLy8g
QWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgotICAgICAg
ICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlm
IChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQt
PmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXJn
dW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0KLSAgICAgICAgKythcmdOdW1iZXI7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdURk1vdmUodHJhbnNmb3JtVmFsdWUpOwotfQotCi1ib29sIENTU1BhcnNlcjo6
aXNCbGVuZE1vZGUoQ1NTVmFsdWVJRCB2YWx1ZUlEKQotewotICAgIHJldHVybiAodmFsdWVJRCA+
PSBDU1NWYWx1ZU11bHRpcGx5ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVMdW1pbm9zaXR5KQotICAg
ICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsCi0gICAgICAgIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVPdmVybGF5OwotfQotCi1ib29sIENTU1BhcnNlcjo6aXNDb21wb3NpdGVPcGVyYXRv
cihDU1NWYWx1ZUlEIHZhbHVlSUQpCi17Ci0gICAgLy8gRklYTUU6IEFkZCBDU1NWYWx1ZURlc3Rp
bmF0aW9uIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIgd2hlbiB0aGUgQ29tcG9zaXRpbmcgc3BlYyB1cGRh
dGVzLgotICAgIHJldHVybiB2YWx1ZUlEID49IENTU1ZhbHVlQ2xlYXIgJiYgdmFsdWVJRCA8PSBD
U1NWYWx1ZVhvcjsKLX0KLQotc3RhdGljIHZvaWQgZmlsdGVySW5mb0Zvck5hbWUoY29uc3QgQ1NT
UGFyc2VyU3RyaW5nJiBuYW1lLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9u
VHlwZSYgZmlsdGVyVHlwZSwgdW5zaWduZWQmIG1heGltdW1Bcmd1bWVudENvdW50KQotewotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAiZ3JheXNjYWxlKCIpKQot
ICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRl
ck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCAic2VwaWEoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgInNhdHVyYXRlKCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJodWUtcm90YXRlKCIpKQotICAg
ICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9w
ZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiaW52ZXJ0KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkludmVydEZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCAib3BhY2l0eSgiKSkKLSAgICAgICAgZmlsdGVyVHlwZSA9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJicmlnaHRuZXNzKCIpKQotICAgICAg
ICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVy
YXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
ImNvbnRyYXN0KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsICJibHVyKCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImRyb3Atc2hhZG93KCIpKSB7Ci0gICAgICAg
IGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbjsKLSAgICAgICAgbWF4aW11bUFyZ3VtZW50Q291bnQgPSA0OyAgLy8geC1vZmZzZXQsIHkt
b2Zmc2V0LCBibHVyLXJhZGl1cywgY29sb3IgLS0gc3ByZWFkIGFuZCBpbnNldCBzdHlsZSBub3Qg
YWxsb3dlZC4KLSAgICB9Ci19Ci0KLVJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdz
LCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSBmaWx0ZXJUeXBlKQot
ewotICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKGZp
bHRlclR5cGUpOwotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7ICAgIAotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246Ci0gICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAvLyBPbmUg
b3B0aW9uYWwgYXJndW1lbnQsIDAtMSBvciAwJS0xMDAlLCBpZiBtaXNzaW5nIHVzZSAxMDAlLgot
ICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIg
fCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgICAgICBhdXRvIHByaW1pdGl2ZVZhbHVlID0gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAg
ICAgICAgLy8gU2F0dXJhdGUgYW5kIENvbnRyYXN0IGFsbG93IHZhbHVlcyBvdmVyIDEwMCUuCi0g
ICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJh
dGVGaWx0ZXJPcGVyYXRpb24KLSAgICAgICAgICAgICAgICAmJiBmaWx0ZXJUeXBlICE9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbikgewotICAgICAgICAgICAg
ICAgIGRvdWJsZSBtYXhBbGxvd2VkID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6IDEuMDsKLSAgICAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgPiBtYXhBbGxv
d2VkKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChXVEZNb3ZlKHByaW1pdGl2ZVZhbHVl
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgLy8gT25l
IG9wdGlvbmFsIGFyZ3VtZW50LCBpZiBtaXNzaW5nIHVzZSAxMDAlLgotICAgICAgICBpZiAoYXJn
cy5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKCF2YWxp
ZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwgQ1NT
U3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAg
ICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjog
ewotICAgICAgICAvLyBodWUtcm90YXRlKCkgdGFrZXMgb25lIG9wdGlvbmFsIGFuZ2xlLgotICAg
ICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFu
Z2xlLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVy
T3BlcmF0aW9uOiB7Ci0gICAgICAgIC8vIEJsdXIgdGFrZXMgYSBzaW5nbGUgbGVuZ3RoLiBaZXJv
IHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQuCi0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIGlmIChhcmdzLnNp
emUoKSkgewotICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9k
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAg
ICAgLy8gZHJvcC1zaGFkb3coKSB0YWtlcyBhIHNpbmdsZSBzaGFkb3cuCi0gICAgICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hhZG93KGFyZ3MsIENTU1By
b3BlcnR5RmlsdGVyKTsKLSAgICAgICAgaWYgKCFzaGFkb3dWYWx1ZUxpc3QgfHwgc2hhZG93VmFs
dWVMaXN0LT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIAotICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKCpzaGFkb3dWYWx1ZUxpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBXVEZN
b3ZlKGZpbHRlclZhbHVlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsdGVyKENTU1Bh
cnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYgcmVzdWx0KQot
ewotICAgIC8vIFRoZSBmaWx0ZXIgaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwgcHJpbWl0aXZlcyB0
aGF0IHNwZWNpZnkgaW5kaXZpZHVhbCBvcGVyYXRpb25zLgotICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKGF1dG8qIHZhbHVlID0g
dmFsdWVMaXN0LmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKSkgewot
ICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYg
KHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCAhdmFsdWUtPmZ1bmN0
aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb247Ci0KLSAgICAgICAgLy8gU2VlIGlmIHRoZSBz
cGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5kLgotICAgICAgICBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIGF1
dG8gcmVmZXJlbmNlRmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdl
YktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgcmVmZXJlbmNlRmlsdGVyVmFsdWUtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSk7Ci0gICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoV1RGTW92ZShyZWZlcmVuY2VGaWx0ZXJWYWx1ZSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY29uc3QgQ1NTUGFyc2VyU3RyaW5nIG5hbWUgPSB2YWx1ZS0+
ZnVuY3Rpb24tPm5hbWU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXJndW1lbnRDb3Vu
dCA9IDE7Ci0KLSAgICAgICAgICAgIGZpbHRlckluZm9Gb3JOYW1lKG5hbWUsIGZpbHRlclR5cGUs
IG1heGltdW1Bcmd1bWVudENvdW50KTsKLQotICAgICAgICAgICAgaWYgKGZpbHRlclR5cGUgPT0g
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb24pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFy
Z3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3Mp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBSZWZQdHI8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWU+IGZpbHRlclZhbHVlID0gcGFyc2VCdWlsdGluRmlsdGVyQXJndW1l
bnRzKCphcmdzLCBmaWx0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
aXN0LT5hcHBlbmQoZmlsdGVyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKGxpc3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi1zdGF0aWMgYm9vbCB2YWxpZEZsb3dOYW1lKGNv
bnN0IFN0cmluZyYgZmxvd05hbWUpCi17Ci0gICAgcmV0dXJuICEoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmxvd05hbWUsICJhdXRvIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJkZWZhdWx0IikKLSAgICAgICAgfHwgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJpbmhlcml0IikKLSAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJpbml0aWFsIikKLSAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJub25lIikpOwotfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLWJvb2wgQ1NTUGFyc2Vy
Ojppc1RleHRBdXRvc2l6aW5nRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4
dC50ZXh0QXV0b3NpemluZ0VuYWJsZWQ7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfR1JJ
RF9MQVlPVVQpCi1ib29sIENTU1BhcnNlcjo6aXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dC5jc3NHcmlkTGF5b3V0RW5hYmxlZDsKLX0KLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotCi0vLyBub25lIHwgPGlkZW50PgotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRv
KTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZh
bHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBTdHJpbmcodmFsdWUtPnN0cmlu
Zyk7Ci0gICAgaWYgKCFpbnB1dFByb3BlcnR5LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIXZh
bGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGlt
cG9ydGFudCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwg
aW1wb3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAtd2Via2l0LWZsb3ctZnJv
bTogbm9uZSB8IDxpZGVudD4KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZ2lvblRocmVhZChDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJZCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tKTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6
ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFu
dCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBpbnB1dFByb3BlcnR5ID0gU3RyaW5nKHZh
bHVlLT5zdHJpbmcpOwotICAgICAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGlucHV0UHJvcGVydHksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNm
b3JtT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBD
U1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQzLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUy
LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTMpCi17Ci0gICAgcHJvcElkMSA9IHByb3BJZDsKLSAg
ICBwcm9wSWQyID0gcHJvcElkOwotICAgIHByb3BJZDMgPSBwcm9wSWQ7Ci0gICAgaWYgKHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbikgewotICAgICAgICBwcm9wSWQxID0gQ1NT
UHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YOwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlU
cmFuc2Zvcm1PcmlnaW5ZOwotICAgICAgICBwcm9wSWQzID0gQ1NTUHJvcGVydHlUcmFuc2Zvcm1P
cmlnaW5aOwotICAgIH0KLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybU9yaWdpbjoKLSAgICAgICAgaWYgKCFwYXJzZVRyYW5zZm9ybU9yaWdpblNo
b3J0aGFuZCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAvLyBwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZCBhZHZhbmNlcyB0aGUg
bV92YWx1ZUxpc3QgcG9pbnRlcgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luWDogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25YKCptX3Zh
bHVlTGlzdCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luWTogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25ZKCptX3ZhbHVlTGlz
dCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3Jp
Z2luWjogewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpKQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBD
U1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUy
KQotewotICAgIHByb3BJZDEgPSBwcm9wSWQ7Ci0gICAgcHJvcElkMiA9IHByb3BJZDsKLSAgICBp
ZiAocHJvcElkID09IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW4pIHsKLSAgICAgICAgcHJv
cElkMSA9IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YOwotICAgICAgICBwcm9wSWQyID0g
Q1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW46Ci0gICAgICAgIGlm
IChtX3ZhbHVlTGlzdC0+c2l6ZSgpID4gMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCptX3ZhbHVlTGlzdCwgdmFsdWUsIHZhbHVl
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdp
blg6IHsKLSAgICAgICAgdmFsdWUgPSBwYXJzZVBvc2l0aW9uWCgqbV92YWx1ZUxpc3QpOwotICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWTog
ewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25ZKCptX3ZhbHVlTGlzdCk7Ci0gICAgICAg
IGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
dm9pZCBDU1NQYXJzZXI6OmFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAg
Ly8gVGhlIHRleHQtZGVjb3JhdGlvbi1saW5lIHByb3BlcnR5IHRha2VzIHByaW9yaXR5IG92ZXIg
dGV4dC1kZWNvcmF0aW9uLCB1bmxlc3MgdGhlIGxhdHRlciBoYXMgaW1wb3J0YW50IHByaW9yaXR5
IHNldC4KLSAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24gJiYgIWlt
cG9ydGFudCAmJiAhaW5TaG9ydGhhbmQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
bV9wYXJzZWRQcm9wZXJ0aWVzW2ldLmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbkxpbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCk7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVRleHREZWNvcmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25l
KSB7Ci0gICAgICAgIGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBv
cnRhbnQpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2Vw
YXJhdGVkKCk7Ci0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaXNWYWxpZCAm
JiB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENT
U1ZhbHVlQmxpbms6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lVGhyb3VnaDoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgotICAgICAgICBjYXNlIENTU1ZhbHVlVW5kZXJsaW5lOgot
I2lmIEVOQUJMRShMRVRURVJQUkVTUykKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExldHRl
cnByZXNzOgotI2VuZGlmCi0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1ZhbGlkKQotICAg
ICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIC8vIFZh
bHVlcyBhcmUgZWl0aGVyIHZhbGlkIG9yIGluIHNob3J0aGFuZCBzY29wZS4KLSAgICBpZiAobGlz
dC0+bGVuZ3RoKCkgJiYgKGlzVmFsaWQgfHwgaW5TaG9ydGhhbmQoKSkpIHsKLSAgICAgICAgYWRk
VGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUobGlzdCksIGltcG9ydGFudCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGJvb2wgaW1wb3J0YW50KQot
ewotICAgIC8vIFRoZSB0ZXh0LWRlY29yYXRpb24tc2tpcCBwcm9wZXJ0eSBoYXMgc3ludGF4ICJu
b25lIHwgWyBvYmplY3RzIHx8IHNwYWNlcyB8fCBpbmsgfHwgZWRnZXMgfHwgYm94LWRlY29yYXRp
b24gXSIuCi0gICAgLy8gSG93ZXZlciwgb25seSAnbm9uZScgYW5kICdpbmsnIGFyZSBpbXBsZW1l
bnRlZCB5ZXQsIHNvIHdlIHdpbGwgcGFyc2Ugc3ludGF4ICJub25lIHwgaW5rIiBmb3Igbm93Lgot
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAg
ZG8gewotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVl
Tm9uZToKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVJ
bms6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPYmplY3RzOgotICAgICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dFVu
ZGVybGluZVBvc2l0aW9uKGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIFRoZSB0ZXh0LXVuZGVy
bGluZS1wb3NpdGlvbiBwcm9wZXJ0eSBoYXMgc2ludGF4ICJhdXRvIHwgYWxwaGFiZXRpYyB8IFsg
dW5kZXIgfHwgWyBsZWZ0IHwgcmlnaHQgXSBdIi4KLSAgICAvLyBIb3dldmVyLCB2YWx1ZXMgJ2xl
ZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBzbyB3ZSB3aWxsIHBhcnNl
IHNpbnRheAotICAgIC8vICJhdXRvIHwgYWxwaGFiZXRpYyB8IHVuZGVyIiBmb3Igbm93LgotICAg
IENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIHN3
aXRjaCAodmFsdWUuaWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICBjYXNlIENTU1Zh
bHVlQWxwaGFiZXRpYzoKLSAgICBjYXNlIENTU1ZhbHVlVW5kZXI6Ci0gICAgICAgIGlmIChtX3Zh
bHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCksIGltcG9y
dGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRl
eHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVkIHZhbHVlTGlz
dFNpemUgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBmaWxsOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGU7Ci0KLSAgICBm
b3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVl
OyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7Ci0gICAgICAgICAgICBpZiAoZmls
bCB8fCBzaGFwZSB8fCAodmFsdWVMaXN0U2l6ZSAhPSAxICYmICFpblNob3J0aGFuZCgpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1
ZSgqdmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIGlmIChmaWxsIHx8IHNoYXBlIHx8
ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0
VGV4dEVtcGhhc2lzU3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT3BlbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVGaWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChmaWxsKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGZpbGwgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZURvdCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDaXJjbGUgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlRG91YmxlQ2lyY2xlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVRy
aWFuZ2xlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNlc2FtZSkgewotICAgICAgICAgICAgaWYg
KHNoYXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNoYXBl
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKTsKLSAgICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaWYgKGZpbGwgJiYgc2hhcGUpIHsKLSAgICAgICAgYXV0byBwYXJzZWRWYWx1ZXMgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+
YXBwZW5kKGZpbGwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHBhcnNlZFZhbHVlcy0+YXBw
ZW5kKHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBXVEZNb3ZlKHBhcnNlZFZhbHVlcyksIGltcG9y
dGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoZmlsbCkgewotICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBmaWxs
LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICBpZiAoc2hhcGUpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXNTdHlsZSwgc2hhcGUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihib29sIGltcG9ydGFudCkK
LXsKLSAgICBib29sIGZvdW5kT3Zlck9yVW5kZXIgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIG92
ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZU92ZXI7Ci0gICAgYm9vbCBmb3VuZExlZnRPclJpZ2h0
ID0gZmFsc2U7Ci0gICAgQ1NTVmFsdWVJRCBsZWZ0UmlnaHRWYWx1ZUlEID0gQ1NTVmFsdWVSaWdo
dDsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU92ZXI6Ci0gICAgICAgICAgICBp
ZiAoZm91bmRPdmVyT3JVbmRlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBmb3VuZE92ZXJPclVuZGVyID0gdHJ1ZTsKLSAgICAgICAgICAgIG92ZXJVbmRlclZh
bHVlSUQgPSBDU1NWYWx1ZU92ZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZVVuZGVyOgotICAgICAgICAgICAgaWYgKGZvdW5kT3Zlck9yVW5kZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZm91bmRPdmVyT3JVbmRlciA9IHRy
dWU7Ci0gICAgICAgICAgICBvdmVyVW5kZXJWYWx1ZUlEID0gQ1NTVmFsdWVVbmRlcjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKLSAgICAgICAgICAgIGlm
IChmb3VuZExlZnRPclJpZ2h0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGZvdW5kTGVmdE9yUmlnaHQgPSB0cnVlOwotICAgICAgICAgICAgbGVmdFJpZ2h0VmFs
dWVJRCA9IENTU1ZhbHVlTGVmdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlUmlnaHQ6Ci0gICAgICAgICAgICBpZiAoZm91bmRMZWZ0T3JSaWdodCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3VuZExlZnRPclJpZ2h0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGxlZnRSaWdodFZhbHVlSUQgPSBDU1NWYWx1ZVJpZ2h0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb3VuZE92ZXJPclVuZGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNl
cGFyYXRlZCgpOwotICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShvdmVyVW5kZXJWYWx1ZUlEKSk7Ci0gICAgaWYgKGZvdW5kTGVm
dE9yUmlnaHQpCi0gICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShsZWZ0UmlnaHRWYWx1ZUlEKSk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbiwgV1RGTW92ZShsaXN0KSwg
aW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZVRleHRJbmRlbnQoKQotewotICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNl
bnRhZ2U+IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQgaXMgZGlzYWJsZWQuCi0gICAgLy8gWyA8
bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiBdICYmIFsgLXdlYmtpdC1oYW5naW5nIHx8IC13ZWJraXQt
ZWFjaC1saW5lIF0/IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQgaXMgZW5hYmxlZC4KLSAgICBh
dXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgYm9v
bCBoYXNMZW5ndGhPclBlcmNlbnRhZ2UgPSBmYWxzZTsKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQot
ICAgIGJvb2wgaGFzRWFjaExpbmUgPSBmYWxzZTsKLSAgICBib29sIGhhc0hhbmdpbmcgPSBmYWxz
ZTsKLSNlbmRpZgotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKTsKLSAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKCFoYXNMZW5ndGhP
clBlcmNlbnRhZ2UgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgICAgICBoYXNMZW5n
dGhPclBlcmNlbnRhZ2UgPSB0cnVlOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkK
LSAgICAgICAgZWxzZSBpZiAoIWhhc0VhY2hMaW5lICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdl
YmtpdEVhY2hMaW5lKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkp
OwotICAgICAgICAgICAgaGFzRWFjaExpbmUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFo
YXNIYW5naW5nICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtpdEhhbmdpbmcpIHsKLSAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEhhbmdpbmcpKTsKLSAgICAgICAgICAgIGhhc0hhbmdp
bmcgPSB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIH0KLQotICAgIGlmICghaGFzTGVuZ3RoT3JQZXJjZW50YWdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VIYW5naW5nUHVuY3R1YXRpb24oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUg
JiYgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUhhbmdpbmdQdW5jdHVhdGlvbiwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBi
b29sIGlzVmFsaWQgPSB0cnVlOwotICAgIHN0ZDo6Yml0c2V0PG51bUNTU1ZhbHVlS2V5d29yZHM+
IHNlZW5WYWx1ZXM7Ci0gICAgd2hpbGUgKGlzVmFsaWQgJiYgdmFsdWUpIHsKLSAgICAgICAgaWYg
KHNlZW5WYWx1ZXNbdmFsdWUtPmlkXQotICAgICAgICAgICAgfHwgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUFsbG93RW5kICYmIHNlZW5WYWx1ZXNbQ1NTVmFsdWVGb3JjZUVuZF0pCi0gICAgICAgICAg
ICB8fCAodmFsdWUtPmlkID09IENTU1ZhbHVlRm9yY2VFbmQgJiYgc2VlblZhbHVlc1tDU1NWYWx1
ZUFsbG93RW5kXSkpIHsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVBbGxvd0VuZDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZpcnN0OgotICAg
ICAgICBjYXNlIENTU1ZhbHVlRm9yY2VFbmQ6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMYXN0Ogot
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAgICAgc2VlblZhbHVlcy5zZXQo
dmFsdWUtPmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzVmFsaWQpCi0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgfQotICAgIAotICAgIC8vIFZhbHVlcyBhcmUgZWl0aGVyIHZhbGlkIG9yIGluIHNo
b3J0aGFuZCBzY29wZS4KLSAgICBpZiAobGlzdC0+bGVuZ3RoKCkgJiYgaXNWYWxpZCkgewotICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhhbmdpbmdQdW5jdHVhdGlvbiwgV1RGTW92ZShs
aXN0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZUJveENvbnRhaW4o
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgTGluZUJveENvbnRhaW4gbGluZUJveENvbnRhaW4gPSBM
aW5lQm94Q29udGFpbk5vbmU7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkp
IHsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJsb2NrKSB7Ci0gICAgICAgICAg
ICBpZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkJsb2NrKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVCb3hDb250YWluIHw9IExpbmVCb3hD
b250YWluQmxvY2s7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5s
aW5lKSB7Ci0gICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbklu
bGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lQm94
Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbklubGluZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVGb250KSB7Ci0gICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4g
JiBMaW5lQm94Q29udGFpbkZvbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5Gb250OwotICAgICAgICB9
IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUdseXBocykgewotICAgICAgICAgICAgaWYg
KGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRhaW5HbHlwaHMpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRh
aW5HbHlwaHM7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlUmVwbGFj
ZWQpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWluUmVw
bGFjZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJv
eENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5SZXBsYWNlZDsKLSAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmxpbmVCb3gpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94
Q29udGFpbiAmIExpbmVCb3hDb250YWluSW5saW5lQm94KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVCb3hDb250YWluIHw9IExpbmVCb3hDb250YWluSW5s
aW5lQm94OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluaXRpYWxM
ZXR0ZXIpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWlu
SW5pdGlhbExldHRlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbkluaXRpYWxMZXR0ZXI7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbGlu
ZUJveENvbnRhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW4sIENTU0xpbmVCb3hDb250YWluVmFsdWU6OmNy
ZWF0ZShsaW5lQm94Q29udGFpbiksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGZWF0dXJlVGFnKENTU1ZhbHVlTGlzdCYgc2V0dGlu
Z3MpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICAvLyBGZWF0dXJlIHRhZyBuYW1lIGNvbWVzIGZpcnN0Ci0gICAgaWYgKHZhbHVlLT51
bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgRm9udEZlYXR1cmVUYWcgdGFnOwotICAgIGlmICh2YWx1ZS0+c3RyaW5nLmxlbmd0
aCgpICE9IHRhZy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGFnLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIExpbWl0cyB0aGUg
cmFuZ2Ugb2YgY2hhcmFjdGVycyB0byAweDIwLTB4N0UsIGZvbGxvd2luZyB0aGUgdGFnIG5hbWUg
cnVsZXMgZGVmaWVuZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgVUNo
YXIgY2hhcmFjdGVyID0gdmFsdWUtPnN0cmluZ1tpXTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA8
IDB4MjAgfHwgY2hhcmFjdGVyID4gMHg3RSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdGFnW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7Ci0gICAgfQotCi0gICAgaW50
IHRhZ1ZhbHVlID0gMTsKLSAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8
aW50ZWdlcj4gfCBvbiB8IG9mZgotICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT5pc0ludCAmJiB2YWx1ZS0+ZlZhbHVlID49IDApIHsK
LSAgICAgICAgICAgIHRhZ1ZhbHVlID0gY2xhbXBUb0ludGVnZXIodmFsdWUtPmZWYWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAodGFnVmFsdWUgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlT24gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlT2ZmKSB7Ci0g
ICAgICAgICAgICB0YWdWYWx1ZSA9IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU9uOwotICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBzZXR0aW5ncy5h
cHBlbmQoQ1NTRm9udEZlYXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZlYXR1
cmVTZXR0aW5ncyhib29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUo
KSA9PSAxICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9ybWFsKSB7
Ci0gICAgICAgIGF1dG8gbm9ybWFsVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7Ci0gICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZlYXR1cmVTZXR0
aW5ncywgV1RGTW92ZShub3JtYWxWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGF1dG8gc2V0dGluZ3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNv
bW1hU2VwYXJhdGVkKCk7Ci0gICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0g
ICAgICAgIGlmICghcGFyc2VGb250RmVhdHVyZVRhZyhzZXR0aW5ncykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXNuJ3QgcGFyc2VkIGZ1bGx5
LCB0aGUgY3VycmVudCB2YWx1ZSBzaG91bGQgYmUgY29tbWEuCi0gICAgICAgIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmICFpc0NvbW1hKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNldHRpbmdzLT5s
ZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGZWF0dXJlU2V0
dGluZ3MsIFdURk1vdmUoc2V0dGluZ3MpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VG
b250VmFyaWFudExpZ2F0dXJlcyhib29sIGltcG9ydGFudCwgYm9vbCB1bmtub3duSXNGYWlsdXJl
LCBib29sIGltcGxpY2l0KQotewotICAgIGF1dG8gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0
dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRMaWdh
dHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlcyA9IEZvbnRW
YXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29udGV4
dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOwotCi0gICAgZm9y
IChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsg
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVO
b0NvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlcyA9IEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpObzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Zh
bHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzID0gRm9udFZh
cmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICAgICAgZGlzY3JldGlvbmFy
eUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAg
ICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdh
dHVyZXM6Ci0gICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVIaXN0
b3JpY2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJlcyA9IEZvbnRW
YXJpYW50TGlnYXR1cmVzOjpZZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUNvbnRleHR1YWw6Ci0gICAgICAgICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9IEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vQ29udGV4dHVhbDoKLSAgICAgICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVz
ID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5rbm93bklzRmFpbHVyZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN3aXRjaCAoY29tbW9uTGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgotICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHN3aXRjaCAoZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykgewotICAgIGNhc2Ug
Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudExpZ2F0dXJlczo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURpc2NyZXRp
b25hcnlMaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm86Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoaGlzdG9yaWNhbExp
Z2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgotICAgICAgICB2
YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9I
aXN0b3JpY2FsTGlnYXR1cmVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRj
aCAoY29udGV4dHVhbEFsdGVybmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVz
OjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6
OlllczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250ZXh0dWFsKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgotICAgICAgICB2YWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vQ29udGV4dHVhbCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXZh
bHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAhdW5rbm93bklzRmFpbHVyZTsKLQotICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMsIFdURk1vdmUodmFs
dWVzKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhib29sIGltcG9ydGFudCwgYm9vbCB1
bmtub3duSXNGYWlsdXJlLCBib29sIGltcGxpY2l0KQotewotICAgIGF1dG8gdmFsdWVzID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIEZvbnRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZSBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDsKLSAgICBG
b250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmcgPSBGb250VmFyaWFudE51bWVyaWNTcGFj
aW5nOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb24gPSBG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50TnVtZXJp
Y09yZGluYWwgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDsKLSAg
ICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBzbGFzaGVkWmVybyA9IEZvbnRWYXJpYW50
TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmluZ051bXM6Ci0gICAgICAg
ICAgICBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU9sZHN0eWxlTnVtczoKLSAg
ICAgICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1i
ZXJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9u
YWxOdW1zOgotICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6
OlByb3BvcnRpb25hbE51bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZVRhYnVsYXJOdW1zOgotICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9uczoKLSAgICAgICAgICAgIGZyYWN0aW9uID0g
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zOgotICAgICAg
ICAgICAgZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0
aW9uczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlT3JkaW5hbDoK
LSAgICAgICAgICAgIG9yZGluYWwgPSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNsYXNoZWRaZXJvOgotICAg
ICAgICAgICAgc2xhc2hlZFplcm8gPSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAo
dW5rbm93bklzRmFpbHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAoZmlndXJlKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6Ci0g
ICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTGluaW5nTnVtcykpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgotICAgICAgICB2
YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU9sZHN0eWxlTnVtcykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBzd2l0Y2ggKHNwYWNpbmcpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6
Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTcGFj
aW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVByb3BvcnRp
b25hbE51bXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUYWJ1bGFyTnVt
cykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZyYWN0aW9uKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0aW9u
czoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9ucykpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rp
b25zOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnMpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChvcmRpbmFsKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9yZGlu
YWwpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzbGFzaGVkWmVybykg
ewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVzOgot
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNsYXNoZWRaZXJvKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuICF1bmtub3du
SXNGYWlsdXJlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudE51bWVy
aWMsIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGJvb2wg
aW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAg
YXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAg
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIHdpZHRoID0g
Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieSBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw7Ci0KLSAgICBm
b3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVl
OyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUppczc4OgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzNzg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczgz
OgotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
ODM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczkwOgotICAg
ICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczA0OgotICAgICAgICAg
ICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBsaWZpZWQ6Ci0gICAgICAgICAg
ICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVUcmFkaXRpb25hbDoKLSAgICAg
ICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFs
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVGdWxsV2lkdGg6Ci0g
ICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgot
ICAgICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9u
YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVJ1Ynk6Ci0gICAg
ICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmtub3duSXNGYWls
dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgY2FzZSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgotICAgICAgICB2YWx1ZXMt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUppczc4KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50OjpKaXM4MzoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM4MykpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA6
Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzOTApKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0OgotICAgICAgICB2YWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUppczA0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50OjpTaW1wbGlmaWVkOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNpbXBsaWZpZWQp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OlRyYWRpdGlvbmFsOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRyYWRpdGlvbmFsKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAod2lkdGgpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUZ1
bGxXaWR0aCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFu
V2lkdGg6OlByb3BvcnRpb25hbDoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQcm9wb3J0aW9uYWxX
aWR0aCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJ1YnkpIHsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgotICAgICAgICB2YWx1ZXMt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVJ1YnkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiAhdW5rbm93bklzRmFpbHVyZTsKLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFZhcmlhbnRFYXN0QXNpYW4sIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBs
aWNpdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRW
YXJpYW50KGJvb2wgaW1wb3J0YW50KQotewotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwotICAgIGlmICghcGFyc2VGb250VmFyaWFudExpZ2F0
dXJlcyhpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgIGlmICghcGFyc2VGb250VmFy
aWFudE51bWVyaWMoaW1wb3J0YW50LCBmYWxzZSwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV92YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRleCgwKTsKLSAgICBpZiAoIXBhcnNl
Rm9udFZhcmlhbnRFYXN0QXNpYW4oaW1wb3J0YW50LCBmYWxzZSwgZmFsc2UpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV92YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRleCgwKTsKLQotICAg
IEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpOb3Jt
YWw7Ci0gICAgRm9udFZhcmlhbnRDYXBzIGNhcHMgPSBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsK
LSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcyA9IEZvbnRWYXJpYW50QWx0ZXJu
YXRlczo6Tm9ybWFsOwotCi0gICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUNvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vRGlzY3JldGlv
bmFyeUxpZ2F0dXJlczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVy
ZXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzOgotICAgICAgICBjYXNlIENTU1ZhbHVl
Q29udGV4dHVhbDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29udGV4dHVhbDoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxpbmluZ051bXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPbGRzdHlsZU51
bXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxOdW1zOgotICAgICAgICBjYXNl
IENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVEaWFnb25hbEZyYWN0
aW9uczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnM6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVPcmRpbmFsOgotICAgICAgICBjYXNlIENTU1ZhbHVlU2xhc2hlZFplcm86Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM3ODoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczgzOgot
ICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVKaXMwNDoK
LSAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBsaWZpZWQ6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVU
cmFkaXRpb25hbDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZ1bGxXaWR0aDoKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgotICAgICAgICBjYXNlIENTU1ZhbHVlUnVieToK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU3ViOgotICAgICAgICAg
ICAgcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgotICAgICAgICAgICAgcG9zaXRp
b24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZv
bnRWYXJpYW50Q2Fwczo6U21hbGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUFsbFNtYWxsQ2FwczoKLSAgICAgICAgICAgIGNhcHMgPSBGb250VmFyaWFudENhcHM6
OkFsbFNtYWxsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVQZXRp
dGVDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxQZXRpdGVDYXBzOgotICAg
ICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgotICAgICAgICAgICAgY2FwcyA9
IEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU1ZhbHVlVGl0bGluZ0NhcHM6Ci0gICAgICAgICAgICBjYXBzID0gRm9udFZhcmlhbnRD
YXBzOjpUaXRsaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVI
aXN0b3JpY2FsRm9ybXM6Ci0gICAgICAgICAgICBhbHRlcm5hdGVzID0gRm9udFZhcmlhbnRBbHRl
cm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHN3aXRjaCAocG9zaXRpb24pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1h
bDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3Jp
cHQ6Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRQb3NpdGlvbiwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVT
dWIpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1cGVyKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoY2FwcykgewotICAgIGNhc2UgRm9udFZhcmlh
bnRDYXBzOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBz
OjpTbWFsbDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
U21hbGxDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQWxsU21hbGxDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6Ci0gICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBldGl0ZUNhcHMpLCBpbXBvcnRh
bnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFs
bFBldGl0ZToKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QWxsUGV0aXRlQ2FwcyksIGltcG9ydGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlVW5pY2FzZSksIGltcG9ydGFudCwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVGl0bGluZ0NhcHMpLCBpbXBvcnRh
bnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChhbHRlcm5h
dGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoK
LSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXMsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSGlz
dG9yaWNhbEZvcm1zKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFdpbGxD
aGFuZ2VBbmltYXRhYmxlRmVhdHVyZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVBbGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh2YWx1ZUlzQ1NTS2V5d29yZCh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChjc3NQcm9wZXJ0eUlEKHZhbHVlLnN0cmluZykgPT0gQ1NTUHJvcGVydHlXaWxs
Q2hhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlV2lsbENoYW5nZShib29sIGltcG9ydGFudCkKLXsKLSAgICBh
dXRvIHdpbGxDaGFuZ2VQcm9wZXJ0eVZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKLQotICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKLSAgICBmb3IgKENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGV4cGVjdENvbW1hKSB7Ci0g
ICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFpc1ZhbGlkV2lsbENoYW5nZUFuaW1hdGFibGVGZWF0dXJlKCp2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiBjc3NWYWx1ZTsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNjcm9sbFBv
c2l0aW9uIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRzKQotICAgICAgICAgICAgY3Nz
VmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7Ci0gICAgICAgICAgICBpZiAo
cHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUludmFsaWQpCi0gICAgICAgICAgICAgICAgY3NzVmFs
dWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgICAgIGVsc2UgLy8gVGhpcyBtaWdodCBiZSBhIHByb3BlcnR5IHdl
IGRvbid0IHN1cHBvcnQuCi0gICAgICAgICAgICAgICAgY3NzVmFsdWUgPSBjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgd2lsbENoYW5nZVBy
b3BlcnR5VmFsdWVzLT5hcHBlbmQoY3NzVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdpbGxDaGFuZ2UsIFdURk1vdmUod2lsbENoYW5nZVByb3BlcnR5VmFsdWVzKSwgaW1wb3J0YW50
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2FsY3VsYXRpb25QZXJt
aXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQotewotICAgIEFTU0VSVChpc0NhbGN1bGF0aW9uKHZhbHVl
KSk7Ci0gICAgCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24t
PmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIENTU0NhbGNWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAqYXJncywgcmFuZ2UpOwotfQotCi0jZGVmaW5lIEVORF9UT0tFTiAwCi0K
LSNpbmNsdWRlICJDU1NHcmFtbWFyLmgiCi0KLWVudW0gQ2hhcmFjdGVyVHlwZSB7Ci0gICAgLy8g
VHlwZXMgZm9yIHRoZSBtYWluIHN3aXRjaC4KLQotICAgIC8vIFRoZSBmaXJzdCA0IHR5cGVzIG11
c3QgYmUgZ3JvdXBlZCB0b2dldGhlciwgYXMgdGhleQotICAgIC8vIHJlcHJlc2VudCB0aGUgYWxs
b3dlZCBjaGFycyBpbiBhbiBpZGVudGlmaWVyLgotICAgIENoYXJhY3RlckNhc2VsZXNzVSwKLSAg
ICBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0gICAgQ2hhcmFjdGVyTnVtYmVyLAotICAgIENo
YXJhY3RlckRhc2gsCi0KLSAgICBDaGFyYWN0ZXJPdGhlciwKLSAgICBDaGFyYWN0ZXJOdWxsLAot
ICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCi0gICAgQ2hhcmFjdGVyRW5kQ29uZGl0aW9uUXVlcnks
Ci0gICAgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCi0gICAgQ2hhcmFjdGVyUXVvdGUsCi0gICAgQ2hh
cmFjdGVyRXhjbGFtYXRpb25NYXJrLAotICAgIENoYXJhY3Rlckhhc2htYXJrLAotICAgIENoYXJh
Y3RlckRvbGxhciwKLSAgICBDaGFyYWN0ZXJBc3RlcmlzaywKLSAgICBDaGFyYWN0ZXJQbHVzLAot
ICAgIENoYXJhY3RlckRvdCwKLSAgICBDaGFyYWN0ZXJTbGFzaCwKLSAgICBDaGFyYWN0ZXJMZXNz
LAotICAgIENoYXJhY3RlckF0LAotICAgIENoYXJhY3RlckJhY2tTbGFzaCwKLSAgICBDaGFyYWN0
ZXJYb3IsCi0gICAgQ2hhcmFjdGVyVmVydGljYWxCYXIsCi0gICAgQ2hhcmFjdGVyVGlsZGUsCi19
OwotCi0vLyAxMjggQVNDSUkgY29kZXMKLXN0YXRpYyBjb25zdCBDaGFyYWN0ZXJUeXBlIHR5cGVz
T2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKLS8qICAgMCAtIE51bGwgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJOdWxsLAotLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAgICovIENoYXJhY3Rl
ck90aGVyLAotLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJhY3Rlck90aGVyLAot
LyogICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA0IC0g
RW5kIG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA1IC0gRW5xdWlyeSAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogICA2IC0gQWNrbm93bGVkZ21lbnQgICAg
ICovIENoYXJhY3Rlck90aGVyLAotLyogICA3IC0gQmVsbCAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlck90aGVyLAotLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAotLyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCi0v
KiAgMTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLS8qICAx
MSAtIFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxMiAtIEZvcm0g
RmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAotLyogIDEzIC0gQ2FycmlhZ2Ug
UmV0dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCi0vKiAgMTQgLSBTaGlmdCBPdXQgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMTUgLSBTaGlmdCBJbiAgICAgICAgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCi0vKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0v
KiAgMTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMTkgLSBE
ZXZpY2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjAgLSBEZXZpY2UgQ29u
dHJvbCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjEgLSBOZWdhdGl2ZSBBY2suICAgICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxlICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjUg
LSBFbmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjYgLSBTdWJzdGl0
dXRlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjcgLSBFc2NhcGUgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMjggLSBGaWxlIFNlcGFyYXRvciAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCi0vKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCi0vKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAg
MzEgLSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgMzIgLSBTcGFj
ZSAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLS8qICAzMyAtICEgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCi0vKiAgMzQgLSAiICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCi0vKiAgMzUgLSAjICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySGFzaG1hcmssCi0vKiAgMzYgLSAkICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyRG9sbGFyLAotLyogIDM3IC0gJSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck90aGVyLAotLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAot
LyogIDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3RlLAotLyogIDQwIC0g
KCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDQxIC0gKSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAotLyogIDQyIC0gKiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlckFzdGVyaXNrLAotLyogIDQzIC0gKyAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlclBsdXMsCi0vKiAgNDQgLSAsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRGFzaCwK
LS8qICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3QsCi0vKiAgNDcgLSAv
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCi0vKiAgNDggLSAwICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDQ5IC0gMSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1MCAtIDIgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJOdW1iZXIsCi0vKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVt
YmVyLAotLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8q
ICA1MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTQgLSA2
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDU1IC0gNyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NiAtIDggICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTcgLSA5ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyTnVtYmVyLAotLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAotLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZENvbmRpdGlv
blF1ZXJ5LAotLyogIDYwIC0gPCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlckxlc3MsCi0v
KiAgNjEgLSA9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNjIgLSA+
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNjMgLSA/ICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNjQgLSBAICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVyQXQsCi0vKiAgNjUgLSBBICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAotLyogIDY2IC0gQiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKLS8qICA2NyAtIEMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjggLSBEICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAotLyogIDY5IC0gRSAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MCAtIEYgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzEgLSBHICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDcyIC0gSCAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MyAtIEkgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzQgLSBKICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc1IC0gSyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NiAtIEwgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzcgLSBNICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc4IC0gTiAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3OSAtIE8gICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODAgLSBQICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDgxIC0gUSAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4MiAtIFIgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODMgLSBTICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg0IC0gVCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4NSAtIFUgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCi0vKiAgODYgLSBWICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg3IC0gVyAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4OCAtIFggICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODkgLSBZICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDkwIC0gWiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA5MSAtIFsgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA5MiAtIFwgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJCYWNrU2xhc2gsCi0vKiAgOTMgLSBdICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCi0vKiAgOTQgLSBeICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyWG9y
LAotLyogIDk1IC0gXyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKLS8qICA5NiAtIGAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA5
NyAtIGEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAg
OTggLSBiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyog
IDk5IC0gYyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8q
IDEwMCAtIGQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0v
KiAxMDEgLSBlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAot
LyogMTAyIC0gZiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
LS8qIDEwMyAtIGcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
Ci0vKiAxMDQgLSBoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAotLyogMTA1IC0gaSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKLS8qIDEwNiAtIGogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCi0vKiAxMDcgLSBrICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAotLyogMTA4IC0gbCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKLS8qIDEwOSAtIG0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCi0vKiAxMTAgLSBuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAotLyogMTExIC0gbyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKLS8qIDExMiAtIHAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCi0vKiAxMTMgLSBxICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAotLyogMTE0IC0gciAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDExNSAtIHMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMTYgLSB0ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTE3IC0gdSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckNh
c2VsZXNzVSwKLS8qIDExOCAtIHYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCi0vKiAxMTkgLSB3ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAotLyogMTIwIC0geCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDEyMSAtIHkgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMjIgLSB6ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTIzIC0geyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVu
ZENvbmRpdGlvblF1ZXJ5LAotLyogMTI0IC0gfCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
clZlcnRpY2FsQmFyLAotLyogMTI1IC0gfSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90
aGVyLAotLyogMTI2IC0gfiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclRpbGRlLAotLyog
MTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotfTsKLQotLy8gVXRp
bGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBDU1MgdG9rZW5pemVyLgotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NTU0xldHRlcihDaGFyYWN0
ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVyID49IDEyOCB8fCB0eXBl
c09mQVNDSUlDaGFyYWN0ZXJzW2NoYXJhY3Rlcl0gPD0gQ2hhcmFjdGVyRGFzaDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NF
c2NhcGUoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA+
PSAnICcgJiYgY2hhcmFjdGVyICE9IDEyNzsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIoQ2hhcmFjdGVyVHlwZSBj
aGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0gJyonICYmIGNoYXJhY3RlciAh
PSAxMjcpIHx8IChjaGFyYWN0ZXIgPj0gJyMnICYmIGNoYXJhY3RlciA8PSAnJicpIHx8IGNoYXJh
Y3RlciA9PSAnISc7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKENoYXJhY3RlclR5cGUq
IGN1cnJlbnRDaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjdXJyZW50Q2hh
cmFjdGVyWzBdKSB8fCBjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdfJyB8fCBjdXJyZW50Q2hhcmFj
dGVyWzBdID49IDEyOAotICAgICAgICB8fCAoY3VycmVudENoYXJhY3RlclswXSA9PSAnXFwnICYm
IGlzQ1NTRXNjYXBlKGN1cnJlbnRDaGFyYWN0ZXJbMV0pKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eUlk
ZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcikKLXsKLSAgICByZXR1cm4g
aXNBU0NJSUFscGhhKGN1cnJlbnRDaGFyYWN0ZXJbMF0pIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0g
PT0gJ18nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPj0gMTI4Ci0gICAgICAgIHx8IChjdXJyZW50
Q2hhcmFjdGVyWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoY3VycmVudENoYXJhY3RlclsxXSkp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKENoYXJhY3RlclR5cGUqIGNzc1N0cmluZywgY29u
c3QgY2hhciogY29uc3RhbnRTdHJpbmcpCi17Ci0gICAgLy8gQ29tcGFyZSBhbiBjaGFyYWN0ZXIg
bWVtb3J5IGRhdGEgd2l0aCBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcuCi0gICAgZG8gewotICAg
ICAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgaWYgY29uc3Rh
bnRDaGFyIG9yIGNvbnN0U3RyaW5nCi0gICAgICAgIC8vIGNvbnRhaW5zICctJy4gT3RoZXJ3aXNl
IHRvQVNDSUlMb3dlclVuY2hlY2tlZCgnXHInKSB3b3VsZCBiZSBlcXVhbCB0byAnLScuCi0gICAg
ICAgIEFTU0VSVCgoKmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3RhbnRTdHJpbmcgPD0g
J3onKSB8fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0nKTsKLSAgICAgICAgQVNTRVJUKCpjb25zdGFu
dFN0cmluZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOwotICAgICAgICBpZiAo
dG9BU0NJSUxvd2VyVW5jaGVja2VkKCpjc3NTdHJpbmcrKykgIT0gKCpjb25zdGFudFN0cmluZysr
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJp
bmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsVG9DU1NDYXNlU2Vuc2l0aXZlSWRlbnRp
ZmllcihDaGFyYWN0ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IGNoYXIqIGNvbnN0YW50U3RyaW5nKQot
ewotICAgIGRvIHsKLSAgICAgICAgaWYgKCpzdHJpbmcrKyAhPSAqY29uc3RhbnRTdHJpbmcrKykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdoaWxlICgqY29uc3RhbnRTdHJpbmcp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNraXBFc2NhcGUoQ2hhcmFjdGVyVHlw
ZSogY3VycmVudENoYXJhY3RlcikKLXsKLSAgICAvLyBSZXR1cm5zIHdpdGggMCwgaWYgZXNjYXBl
IGNoZWNrIGlzIGZhaWxlZC4gT3RoZXJ3aXNlCi0gICAgLy8gaXQgcmV0dXJucyB3aXRoIHRoZSBm
b2xsb3dpbmcgY2hhcmFjdGVyLgotICAgIEFTU0VSVCgqY3VycmVudENoYXJhY3RlciA9PSAnXFwn
KTsKLQotICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAoIWlzQ1NTRXNjYXBlKCpjdXJy
ZW50Q2hhcmFjdGVyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaXNBU0NJ
SUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSkgewotICAgICAgICBpbnQgbGVuZ3RoID0gNjsK
LQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAg
IH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJhY3RlcikgJiYgLS1sZW5ndGgp
OwotCi0gICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2NhcGUgc2VxdWVuY2Uu
Ci0gICAgICAgIGlmIChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJhY3RlcikpCi0gICAgICAgICAg
ICArK2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOwot
ICAgIH0KLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlciArIDE7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBDaGFyYWN0ZXJUeXBlKiBza2lw
V2hpdGVTcGFjZShDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyKQotewotICAgIHdoaWxl
IChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJhY3RlcikpCi0gICAgICAgICsrY3VycmVudENoYXJh
Y3RlcjsKLSAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcjsKLX0KLQotLy8gTWFpbiBDU1MgdG9r
ZW5pemVyIGZ1bmN0aW9ucy4KLQotdGVtcGxhdGUgPD4KLUxDaGFyKiBDU1NQYXJzZXJTdHJpbmc6
OmNoYXJhY3RlcnM8TENoYXI+KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczgoKTsgfQotCi10
ZW1wbGF0ZSA8PgotVUNoYXIqIENTU1BhcnNlclN0cmluZzo6Y2hhcmFjdGVyczxVQ2hhcj4oKSBj
b25zdCB7IHJldHVybiBjaGFyYWN0ZXJzMTYoKTsgfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIExD
aGFyKiYgQ1NTUGFyc2VyOjpjdXJyZW50Q2hhcmFjdGVyPExDaGFyPigpCi17Ci0gICAgcmV0dXJu
IG1fY3VycmVudENoYXJhY3Rlcjg7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgVUNoYXIqJiBD
U1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXI8VUNoYXI+KCkKLXsKLSAgICByZXR1cm4gbV9jdXJy
ZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLVVDaGFyKiYgQ1NTUGFyc2VyOjpjdXJyZW50Q2hhcmFjdGVy
MTYoKQotewotICAgIGlmICghbV9jdXJyZW50Q2hhcmFjdGVyMTYpIHsKLSAgICAgICAgbV9kYXRh
U3RhcnQxNiA9IHN0ZDo6bWFrZV91bmlxdWU8VUNoYXJbXT4obV9sZW5ndGgpOwotICAgICAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG1fZGF0YVN0YXJ0MTYuZ2V0KCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjE2OwotfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIExD
aGFyKiBDU1NQYXJzZXI6OnRva2VuU3RhcnQ8TENoYXI+KCkKLXsKLSAgICByZXR1cm4gbV90b2tl
blN0YXJ0LnB0cjg7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgVUNoYXIqIENTU1BhcnNlcjo6
dG9rZW5TdGFydDxVQ2hhcj4oKQotewotICAgIHJldHVybiBtX3Rva2VuU3RhcnQucHRyMTY7Ci19
Ci0KLUNTU1BhcnNlcjo6TG9jYXRpb24gQ1NTUGFyc2VyOjpjdXJyZW50TG9jYXRpb24oKQotewot
ICAgIExvY2F0aW9uIGxvY2F0aW9uOwotICAgIGxvY2F0aW9uLmxpbmVOdW1iZXIgPSBtX3Rva2Vu
U3RhcnRMaW5lTnVtYmVyOwotICAgIGxvY2F0aW9uLmNvbHVtbk51bWJlciA9IG1fdG9rZW5TdGFy
dENvbHVtbk51bWJlcjsKLQotICAgIEFTU0VSVChsb2NhdGlvbi5saW5lTnVtYmVyID49IDApOwot
ICAgIEFTU0VSVChsb2NhdGlvbi5jb2x1bW5OdW1iZXIgPj0gMCk7Ci0KLSAgICBpZiAobG9jYXRp
b24ubGluZU51bWJlciA9PSBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyKQotICAgICAgICBsb2NhdGlv
bi5jb2x1bW5OdW1iZXIgKz0gbV9zaGVldFN0YXJ0Q29sdW1uTnVtYmVyOwotCi0gICAgaWYgKGlz
OEJpdFNvdXJjZSgpKQotICAgICAgICBsb2NhdGlvbi50b2tlbi5pbml0KHRva2VuU3RhcnQ8TENo
YXI+KCksIGN1cnJlbnRDaGFyYWN0ZXI8TENoYXI+KCkgLSB0b2tlblN0YXJ0PExDaGFyPigpKTsK
LSAgICBlbHNlCi0gICAgICAgIGxvY2F0aW9uLnRva2VuLmluaXQodG9rZW5TdGFydDxVQ2hhcj4o
KSwgY3VycmVudENoYXJhY3RlcjxVQ2hhcj4oKSAtIHRva2VuU3RhcnQ8VUNoYXI+KCkpOwotCi0g
ICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6aXNJZGVudGlmaWVyU3RhcnQoKQotewotICAgIC8v
IENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBzdGFydGVkLgotICAgIHJldHVybiBpc0lk
ZW50aWZpZXJTdGFydEFmdGVyRGFzaCgoKmN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4o
KSAhPSAnLScpID8gY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpIDogY3VycmVudENo
YXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpICsgMSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNraXBT
dHJpbmcoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlciwgaW50IHF1b3RlKQotewotICAg
IC8vIFJldHVybnMgd2l0aCAwLCBpZiBzdHJpbmcgY2hlY2sgaXMgZmFpbGVkLiBPdGhlcndpc2UK
LSAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIuIFRoaXMgaXMg
bmVjZXNzYXJ5Ci0gICAgLy8gc2luY2Ugd2UgY2Fubm90IHJldmVydCBlc2NhcGUgc2VxdWVuY2Vz
LCB0aHVzIHN0cmluZ3MKLSAgICAvLyBtdXN0IGJlIHZhbGlkYXRlZCBiZWZvcmUgcGFyc2luZy4K
LSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0
ZXIgPT0gcXVvdGUpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBzdWNjZXNz
ZnVsLgotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXIgKyAxOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghKmN1cnJlbnRDaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAvLyBTdHJpbmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsIHVwIHRvIGVuZCBvZiBpbnB1dC4KLSAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChVTkxJS0VMWSgqY3VycmVudENoYXJhY3RlciA8PSAnXHInICYmICgqY3VycmVudENoYXJhY3Rl
ciA9PSAnXG4nIHx8ICgqY3VycmVudENoYXJhY3RlciB8IDB4MSkgPT0gJ1xyJykpKSB7Ci0gICAg
ICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9yIGNoYXJhY3RlciAnXG4nLCAn
XGYnIG9yICdccicuCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChMSUtFTFkoY3VycmVudENoYXJhY3RlclswXSAhPSAnXFwnKSkKLSAgICAgICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXJhY3Rl
clsxXSA9PSAnXG4nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMV0gPT0gJ1xmJykKLSAgICAgICAgICAg
IGN1cnJlbnRDaGFyYWN0ZXIgKz0gMjsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXJhY3Rl
clsxXSA9PSAnXHInKQotICAgICAgICAgICAgY3VycmVudENoYXJhY3RlciArPSBjdXJyZW50Q2hh
cmFjdGVyWzJdID09ICdcbicgPyAzIDogMjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBj
dXJyZW50Q2hhcmFjdGVyID0gY2hlY2tBbmRTa2lwRXNjYXBlKGN1cnJlbnRDaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXVuc2lnbmVkIENTU1BhcnNlcjo6cGFyc2VFc2NhcGUoQ2hhcmFjdGVyVHlw
ZSomIHNyYykKLXsKLSAgICBBU1NFUlQoKnNyYyA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKHNyY1sx
XSkpOwotCi0gICAgdW5zaWduZWQgdW5pY29kZSA9IDA7Ci0KLSAgICArK3NyYzsKLSAgICBpZiAo
aXNBU0NJSUhleERpZ2l0KCpzcmMpKSB7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IDY7Ci0KLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgdW5pY29kZSA9ICh1bmljb2RlIDw8IDQpICsgdG9BU0NJ
SUhleFZhbHVlKCpzcmMrKyk7Ci0gICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlI
ZXhEaWdpdCgqc3JjKSk7Ci0KLSAgICAgICAgaWYgKHVuaWNvZGUgPiBVQ0hBUl9NQVhfVkFMVUUp
Ci0gICAgICAgICAgICB1bmljb2RlID0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0KLSAgICAgICAg
Ly8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgICAgaWYg
KGlzSFRNTFNwYWNlKCpzcmMpKQotICAgICAgICAgICAgKytzcmM7Ci0KLSAgICAgICAgcmV0dXJu
IHVuaWNvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuICpjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3Rl
clR5cGU+KCkrKzsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6VW5p
Y29kZVRvQ2hhcnM8TENoYXI+KExDaGFyKiYgcmVzdWx0LCB1bnNpZ25lZCB1bmljb2RlKQotewot
ICAgIEFTU0VSVCh1bmljb2RlIDw9IDB4ZmYpOwotICAgICpyZXN1bHQgPSB1bmljb2RlOwotCi0g
ICAgKytyZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OlVu
aWNvZGVUb0NoYXJzPFVDaGFyPihVQ2hhciomIHJlc3VsdCwgdW5zaWduZWQgdW5pY29kZSkKLXsK
LSAgICAvLyBSZXBsYWNlIHVuaWNvZGUgd2l0aCBhIHN1cnJvZ2F0ZSBwYWlycyB3aGVuIGl0IGlz
IGJpZ2dlciB0aGFuIDB4ZmZmZgotICAgIGlmIChVMTZfTEVOR1RIKHVuaWNvZGUpID09IDIpIHsK
LSAgICAgICAgKnJlc3VsdCsrID0gVTE2X0xFQUQodW5pY29kZSk7Ci0gICAgICAgICpyZXN1bHQg
PSBVMTZfVFJBSUwodW5pY29kZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgICpyZXN1bHQgPSB1bmlj
b2RlOwotCi0gICAgKytyZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0
ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNl
cjo6cGFyc2VJZGVudGlmaWVySW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNyYywgRGVzdENo
YXJhY3RlclR5cGUqJiByZXN1bHQsIGJvb2wmIGhhc0VzY2FwZSkKLXsKLSAgICBoYXNFc2NhcGUg
PSBmYWxzZTsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChMSUtFTFkoKnNyYyAhPSAnXFwnKSkKLSAg
ICAgICAgICAgICpyZXN1bHQrKyA9ICpzcmMrKzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBoYXNFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgU3JjQ2hhcmFjdGVyVHlwZSogc2F2ZWRF
c2NhcGVTdGFydCA9IHNyYzsKLSAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUgPSBwYXJzZUVz
Y2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGUgPiAw
eGZmICYmIHNpemVvZihEZXN0Q2hhcmFjdGVyVHlwZSkgPT0gMSkgewotICAgICAgICAgICAgICAg
IHNyYyA9IHNhdmVkRXNjYXBlU3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMocmVzdWx0LCB1bmljb2Rl
KTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGlzQ1NTTGV0dGVyKHNyY1swXSkgfHwgKHNyY1sw
XSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKHNyY1sxXSkpKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1Bh
cnNlcjo6cGFyc2VJZGVudGlmaWVyKENoYXJhY3RlclR5cGUqJiByZXN1bHQsIENTU1BhcnNlclN0
cmluZyYgcmVzdWx0U3RyaW5nLCBib29sJiBoYXNFc2NhcGUpCi17Ci0gICAgQ2hhcmFjdGVyVHlw
ZSogc3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgaWYgKFVO
TElLRUxZKCFwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3Rl
clR5cGU+KCksIHJlc3VsdCwgaGFzRXNjYXBlKSkpIHsKLSAgICAgICAgLy8gRm91bmQgYW4gZXNj
YXBlIHdlIGNvdWxkbid0IGhhbmRsZSB3aXRoIDggYml0cywgY29weSB3aGF0IGhhcyBiZWVuIHJl
Y29nbml6ZWQgYW5kIGNvbnRpbnVlCi0gICAgICAgIEFTU0VSVChpczhCaXRTb3VyY2UoKSk7Ci0g
ICAgICAgIFVDaGFyKiYgcmVzdWx0MTYgPSBjdXJyZW50Q2hhcmFjdGVyMTYoKTsKLSAgICAgICAg
VUNoYXIqIHN0YXJ0MTYgPSByZXN1bHQxNjsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBm
b3IgKDsgaSA8IHJlc3VsdCAtIHN0YXJ0OyArK2kpCi0gICAgICAgICAgICByZXN1bHQxNltpXSA9
IHN0YXJ0W2ldOwotCi0gICAgICAgIHJlc3VsdDE2ICs9IGk7Ci0KLSAgICAgICAgcGFyc2VJZGVu
dGlmaWVySW50ZXJuYWwoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCByZXN1bHQx
NiwgaGFzRXNjYXBlKTsKLQotICAgICAgICByZXN1bHQgKz0gcmVzdWx0MTYgLSBzdGFydDE2Owot
ICAgICAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1bHQxNiAtIHN0YXJ0MTYpOwot
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydCwg
cmVzdWx0IC0gc3RhcnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlU3RyaW5nSW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNyYywgRGVzdENoYXJhY3RlclR5
cGUqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSgqc3JjID09IHF1b3RlKSkgewotICAgICAgICAgICAgLy8gU3RyaW5nIHBh
cnNpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgICsrc3JjOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFVOTElLRUxZKCEqc3JjKSkgewotICAgICAgICAg
ICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZSwgYnV0IGRvbid0IGFkdmFuY2UgcG9pbnRlciBp
ZiBhdCB0aGUgZW5kIG9mIGlucHV0LgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKCpzcmMgPiAnXHInIHx8ICgqc3JjIDwgJ1xuJyAmJiAqc3JjKSB8
fCAqc3JjID09ICdcdicpOwotCi0gICAgICAgIGlmIChMSUtFTFkoc3JjWzBdICE9ICdcXCcpKQot
ICAgICAgICAgICAgKnJlc3VsdCsrID0gKnNyYysrOwotICAgICAgICBlbHNlIGlmIChzcmNbMV0g
PT0gJ1xuJyB8fCBzcmNbMV0gPT0gJ1xmJykKLSAgICAgICAgICAgIHNyYyArPSAyOwotICAgICAg
ICBlbHNlIGlmIChzcmNbMV0gPT0gJ1xyJykKLSAgICAgICAgICAgIHNyYyArPSBzcmNbMl0gPT0g
J1xuJyA/IDMgOiAyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5
cGUqIHNhdmVkRXNjYXBlU3RhcnQgPSBzcmM7Ci0gICAgICAgICAgICB1bnNpZ25lZCB1bmljb2Rl
ID0gcGFyc2VFc2NhcGU8U3JjQ2hhcmFjdGVyVHlwZT4oc3JjKTsKLSAgICAgICAgICAgIGlmICh1
bmljb2RlID4gMHhmZiAmJiBzaXplb2YoRGVzdENoYXJhY3RlclR5cGUpID09IDEpIHsKLSAgICAg
ICAgICAgICAgICBzcmMgPSBzYXZlZEVzY2FwZVN0YXJ0OwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFVuaWNvZGVUb0NoYXJzKHJlc3Vs
dCwgdW5pY29kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6
OnBhcnNlU3RyaW5nKENoYXJhY3RlclR5cGUqJiByZXN1bHQsIENTU1BhcnNlclN0cmluZyYgcmVz
dWx0U3RyaW5nLCBVQ2hhciBxdW90ZSkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IGN1
cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAgIGlmIChVTkxJS0VMWSghcGFy
c2VTdHJpbmdJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIHJlc3Vs
dCwgcXVvdGUpKSkgewotICAgICAgICAvLyBGb3VuZCBhbiBlc2NhcGUgd2UgY291bGRuJ3QgaGFu
ZGxlIHdpdGggOCBiaXRzLCBjb3B5IHdoYXQgaGFzIGJlZW4gcmVjb2duaXplZCBhbmQgY29udGlu
dWUKLSAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsKLSAgICAgICAgVUNoYXIqJiByZXN1
bHQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAgICBVQ2hhciogc3RhcnQxNiA9IHJl
c3VsdDE2OwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgcmVzdWx0IC0g
c3RhcnQ7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdDE2W2ldID0gc3RhcnRbaV07Ci0KLSAgICAg
ICAgcmVzdWx0MTYgKz0gaTsKLQotICAgICAgICBwYXJzZVN0cmluZ0ludGVybmFsKGN1cnJlbnRD
aGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSwgcmVzdWx0MTYsIHF1b3RlKTsKLQotICAgICAgICBy
ZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1bHQxNiAtIHN0YXJ0MTYpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0U3RyaW5nLmluaXQoc3RhcnQsIHJlc3VsdCAtIHN0
YXJ0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9v
bCBDU1NQYXJzZXI6OmZpbmRVUkkoQ2hhcmFjdGVyVHlwZSomIHN0YXJ0LCBDaGFyYWN0ZXJUeXBl
KiYgZW5kLCBVQ2hhciYgcXVvdGUpCi17Ci0gICAgc3RhcnQgPSBza2lwV2hpdGVTcGFjZShjdXJy
ZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkpOwotICAgIAotICAgIGlmICgqc3RhcnQgPT0g
JyInIHx8ICpzdGFydCA9PSAnXCcnKSB7Ci0gICAgICAgIHF1b3RlID0gKnN0YXJ0Kys7Ci0gICAg
ICAgIGVuZCA9IGNoZWNrQW5kU2tpcFN0cmluZyhzdGFydCwgcXVvdGUpOwotICAgICAgICBpZiAo
IWVuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBx
dW90ZSA9IDA7Ci0gICAgICAgIGVuZCA9IHN0YXJ0OwotICAgICAgICB3aGlsZSAoaXNVUklMZXR0
ZXIoKmVuZCkpIHsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoKmVuZCAhPSAnXFwnKSkKLSAgICAg
ICAgICAgICAgICArK2VuZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGVu
ZCA9IGNoZWNrQW5kU2tpcEVzY2FwZShlbmQpOwotICAgICAgICAgICAgICAgIGlmICghZW5kKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBlbmQgPSBza2lwV2hpdGVTcGFjZShlbmQpOwotICAgIGlmICgqZW5k
ICE9ICcpJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENo
YXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVVJJSW50ZXJuYWwoU3Jj
Q2hhcmFjdGVyVHlwZSomIHNyYywgRGVzdENoYXJhY3RlclR5cGUqJiBkZXN0LCBVQ2hhciBxdW90
ZSkKLXsKLSAgICBpZiAocXVvdGUpIHsKLSAgICAgICAgQVNTRVJUKHF1b3RlID09ICciJyB8fCBx
dW90ZSA9PSAnXCcnKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nSW50ZXJuYWwoc3JjLCBk
ZXN0LCBxdW90ZSk7Ci0gICAgfQotICAgIAotICAgIHdoaWxlIChpc1VSSUxldHRlcigqc3JjKSkg
ewotICAgICAgICBpZiAoTElLRUxZKCpzcmMgIT0gJ1xcJykpCi0gICAgICAgICAgICAqZGVzdCsr
ID0gKnNyYysrOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNvZGUg
PSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwotICAgICAgICAgICAgaWYgKHVu
aWNvZGUgPiAweGZmICYmIHNpemVvZihTcmNDaGFyYWN0ZXJUeXBlKSA9PSAxKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFVuaWNvZGVUb0NoYXJzKGRlc3QsIHVu
aWNvZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpwYXJz
ZVVSSShDU1NQYXJzZXJTdHJpbmcmIHN0cmluZykKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiB1cmlT
dGFydDsKLSAgICBDaGFyYWN0ZXJUeXBlKiB1cmlFbmQ7Ci0gICAgVUNoYXIgcXVvdGU7Ci0gICAg
aWYgKCFmaW5kVVJJKHVyaVN0YXJ0LCB1cmlFbmQsIHF1b3RlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIENoYXJhY3RlclR5cGUqIGRlc3QgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3Rl
clR5cGU+KCkgPSB1cmlTdGFydDsKLSAgICBpZiAoTElLRUxZKHBhcnNlVVJJSW50ZXJuYWwoY3Vy
cmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCBkZXN0LCBxdW90ZSkpKQotICAgICAgICBz
dHJpbmcuaW5pdCh1cmlTdGFydCwgZGVzdCAtIHVyaVN0YXJ0KTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgLy8gQW4gZXNjYXBlIHNlcXVlbmNlIHdhcyBlbmNvdW50ZXJlZCB0aGF0IGNhbid0IGJlIHN0
b3JlZCBpbiA4IGJpdHMuCi0gICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IGNoYXJhY3RlciB0
byB0aGUgc3RhcnQgb2YgdGhlIFVSSSBhbmQgcmUtcGFyc2Ugd2l0aAotICAgICAgICAvLyBhIDE2
LWJpdCBkZXN0aW5hdGlvbi4KLSAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsKLSAgICAg
ICAgVUNoYXIqIHVyaVN0YXJ0MTYgPSBjdXJyZW50Q2hhcmFjdGVyMTYoKTsKLSAgICAgICAgY3Vy
cmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gdXJpU3RhcnQ7Ci0gICAgICAgIGJvb2wg
cmVzdWx0ID0gcGFyc2VVUklJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+
KCksIGN1cnJlbnRDaGFyYWN0ZXIxNigpLCBxdW90ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQpOwotICAgICAgICBzdHJpbmcuaW5pdCh1cmlTdGFydDE2LCBjdXJyZW50
Q2hhcmFjdGVyMTYoKSAtIHVyaVN0YXJ0MTYpOwotICAgIH0KLQotICAgIGN1cnJlbnRDaGFyYWN0
ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IHVyaUVuZCArIDE7Ci0gICAgbV90b2tlbiA9IFVSSTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIg
PSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgKyAxOwotICAgIGludCBsZW5ndGgg
PSA2OwotICAgIEFTU0VSVCgqY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID09ICcr
Jyk7Ci0KLSAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpjaGFyYWN0ZXIpICYmIGxlbmd0aCkg
ewotICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgLS1sZW5ndGg7Ci0gICAgfQotCi0gICAg
aWYgKGxlbmd0aCAmJiAqY2hhcmFjdGVyID09ICc/JykgewotICAgICAgICAvLyBBdCBtb3N0IDUg
aGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAtLWxlbmd0aDsKLSAgICAgICAgfSB3
aGlsZSAoKmNoYXJhY3RlciA9PSAnPycgJiYgbGVuZ3RoKTsKLSAgICAgICAgY3VycmVudENoYXJh
Y3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoIDwgNikgewotICAgICAgICAvLyBBdCBsZWFzdCBvbmUg
aGV4IGRpZ2l0LgotICAgICAgICBpZiAoY2hhcmFjdGVyWzBdID09ICctJyAmJiBpc0FTQ0lJSGV4
RGlnaXQoY2hhcmFjdGVyWzFdKSkgewotICAgICAgICAgICAgLy8gRm9sbG93ZWQgYnkgYSBkYXNo
IGFuZCBhIGhleCBkaWdpdC4KLSAgICAgICAgICAgICsrY2hhcmFjdGVyOwotICAgICAgICAgICAg
bGVuZ3RoID0gNjsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICArK2NoYXJhY3Rl
cjsKLSAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdCgqY2hh
cmFjdGVyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJU
eXBlPigpID0gY2hhcmFjdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICB3aGlsZSAoaXNB
U0NJSURpZ2l0KCpjaGFyYWN0ZXIpKQotICAgICAgICArK2NoYXJhY3RlcjsKLSAgICBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY2hhcmFjdGVyLCAnbicpKSB7Ci0gICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IGNoYXJhY3RlciArIDE7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlTnRoQ2hpbGRFeHRyYSgp
Ci17Ci0gICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVyID0gc2tpcFdoaXRlU3BhY2UoY3VycmVu
dENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICBpZiAoKmNoYXJhY3RlciAhPSAnKycg
JiYgKmNoYXJhY3RlciAhPSAnLScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXJh
Y3RlciA9IHNraXBXaGl0ZVNwYWNlKGNoYXJhY3RlciArIDEpOwotICAgIGlmICghaXNBU0NJSURp
Z2l0KCpjaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAg
ICAgICsrY2hhcmFjdGVyOwotICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdpdCgqY2hhcmFjdGVyKSk7
Ci0KLSAgICBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
aW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpkZXRlY3RGdW5jdGlvblR5cGVUb2tlbihpbnQgbGVuZ3Ro
KQotewotICAgIEFTU0VSVChsZW5ndGggPiAwKTsKLSAgICBDaGFyYWN0ZXJUeXBlKiBuYW1lID0g
dG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgc3dpdGNoIChsZW5ndGgpIHsKLSAg
ICBjYXNlIDM6Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0s
ICduJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkgewotICAgICAgICAgICAgbV90b2tl
biA9IE5PVEZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3UnKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbChuYW1lWzJdLCAnbCcpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gVVJJOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3YnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMV0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAncicp
KSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gVkFSRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2MnKSAmJiBpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMV0sICd1JykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzJdLCAnZScpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gQ1VFRlVOQ1RJT047Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19T
RUxFQ1RPUlNfTEVWRUw0KQotICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzBdLCAnZCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ2knKSAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdyJykpIHsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBESVJGVU5DVElPTjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSA0OgotICAgICAg
ICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAiY2FsYyIpKSB7Ci0gICAgICAgICAg
ICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgImxhbmciKSkg
ewotICAgICAgICAgICAgbV90b2tlbiA9IExBTkdGVU5DVElPTjsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAg
ICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAicm9sZSIpKSB7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gUk9MRUZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1l
LCAiaG9zdCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gSE9TVEZVTkNUSU9OOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY2FzZSA3OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibWF0
Y2hlcyIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gTUFUQ0hFU0ZVTkNUSU9OOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSwgInNsb3R0ZWQiKSkgewotICAgICAgICAgICAgbV90b2tlbiA9IFNMT1RU
RURGVU5DVElPTjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgOToKLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSwgIm50aC1jaGlsZCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gTlRI
Q0hJTERGVU5DVElPTlM7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hpbGRNb2Rl
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY2FzZSAxMToKLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIo
bmFtZSwgIm50aC1vZi10eXBlIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhD
aGlsZE1vZGU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIDE0OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkgewotICAgICAgICAgICAgbV90b2tlbiA9
IE5USENISUxERlVOQ1RJT05TOwotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50aENoaWxk
TW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNhc2UgMTY6Ci0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlm
aWVyKG5hbWUsICJudGgtbGFzdC1vZi10eXBlIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01v
ZGUgPSBOdGhDaGlsZE1vZGU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6
ZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1fcGFyc2lu
Z01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpOwotICAgIENoYXJhY3RlclR5cGUqIG5hbWUgPSB0b2tl
blN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBpZiAobGVuZ3RoID09IDMpIHsKLSAgICAg
ICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2EnKSAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbChuYW1lWzJdLCAnZCcpKQotICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX0FORDsKLSAg
ICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbicpICYm
IGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ28nKSAmJiBpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMl0sICd0JykpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUVESUFf
Tk9UOwotICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKG5hbWVbMV0sICduJykKLSAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG5hbWVbMl0sICdsJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzNd
LCAneScpKQotICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX09OTFk7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6
ZGV0ZWN0TnVtYmVyVG9rZW4oQ2hhcmFjdGVyVHlwZSogdHlwZSwgaW50IGxlbmd0aCkKLXsKLSAg
ICBBU1NFUlQobGVuZ3RoID4gMCk7Ci0KLSAgICBzd2l0Y2ggKHRvQVNDSUlMb3dlclVuY2hlY2tl
ZCh0eXBlWzBdKSkgewotICAgIGNhc2UgJ2MnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQotICAgICAgICAgICAgbV90
b2tlbiA9IENNUzsKLSAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcpKQotICAgICAgICAgICAgbV90b2tlbiA9IENIUzsK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnZCc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQotICAgICAgICAgICAgbV90b2tlbiA9IERF
R1M7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKLSAgICAgICAgZWxzZSBpZiAobGVuZ3RoID4gMiAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdwJykpIHsKLSAgICAgICAgICAgIGlmIChsZW5ndGgg
PT0gNCkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZGlzY3Vzc2lvbiBhYm91dCB0
aGUgbmFtZSBvZiB0aGlzIHVuaXQgb24gd3d3LXN0eWxlLgotICAgICAgICAgICAgICAgIC8vIEtl
ZXAgdGhpcyBjb21waWxlIHRpbWUgZ3VhcmQgaW4gcGxhY2UgdW50aWwgdGhhdCBpcyByZXNvbHZl
ZC4KLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1Ymxp
Yy93d3ctc3R5bGUvMjAxMk1heS8wOTE1Lmh0bWwKLSAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodHlwZVszXSwgJ3gnKSkKLSAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQUFg7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBl
WzJdLCAnYycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwgJ20nKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQQ007Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGxlbmd0aCA9PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2knKSkK
LSAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQSTsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2UnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIp
IHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdt
JykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEVNUzsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKLSAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gRVhTOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
J2YnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bCh0eXBlWzFdLCAncicpKQotICAgICAgICAgICAgbV90b2tlbiA9IEZSOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSAnZyc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gNCAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykKLSAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh0eXBlWzNdLCAnZCcpKQotICAgICAgICAgICAgbV90b2tlbiA9IEdSQURTOwotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjYXNlICdoJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAyICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkKLSAgICAgICAgICAgIG1fdG9r
ZW4gPSBIRVJUWjsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnaSc6Ci0gICAgICAgIGlm
IChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICduJykp
Ci0gICAgICAgICAgICBtX3Rva2VuID0gSU5TOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
ICdrJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwodHlwZVsxXSwgJ2gnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICd6
JykpCi0gICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRaOwotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjYXNlICdtJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICBpZiAo
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBNTVM7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbMV0sICdzJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IE1TRUNTOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3AnOgotICAgICAgICBpZiAo
bGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KHR5cGVbMV0sICd4JykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFBYUzsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3QnKSkKLSAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gUFRTOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYycpKQotICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBQQ1M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAncic6Ci0g
ICAgICAgIGlmIChsZW5ndGggPT0gMykgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdkJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFJBRFM7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQotICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBSRU1TOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3Mn
OgotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICBtX3Rva2VuID0gU0VDUzsK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAndCc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
NCAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd1JykKLSAgICAgICAgICAg
ICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdyJykgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQotICAgICAgICAgICAgbV90b2tlbiA9
IFRVUk5TOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSAndic6Ci0gICAgICAgIGlmIChsZW5n
dGggPT0gMikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlw
ZVsxXSwgJ3cnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gVlc7Ci0gICAgICAgICAgICBl
bHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdoJykpCi0gICAgICAg
ICAgICAgICAgbV90b2tlbiA9IFZIOwotICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSA0ICYm
IGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkgewotICAgICAgICAgICAg
aWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2knKSAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICduJykpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9
IFZNSU47Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAneCcpKQot
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBWTUFYOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh0eXBlWzBdID09ICdfJyAmJiBsZW5ndGgg
PT0gNSAmJiB0eXBlWzFdID09ICdfJyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVb
Ml0sICdxJykKLSAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbM10sICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzRdLCAnbScpKQot
ICAgICAgICAgICAgbV90b2tlbiA9IFFFTVM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBuYW1l
ID0gdG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgaWYgKGxlbmd0aCA9PSAxMSkg
ewotICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ3knKSAm
JiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Via2l0LWFuIikpCi0gICAgICAg
ICAgICBtX3Rva2VuID0gQU5ZRlVOQ1RJT047Ci0gICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihu
YW1lICsgMSwgIndlYmtpdC1taSIpKQotICAgICAgICAgICAgbV90b2tlbiA9IE1JTkZVTkNUSU9O
OwotICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAn
eCcpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtbWEiKSkKLSAg
ICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElPTjsKLSAgICB9IGVsc2UgaWYgKGxlbmd0aCA9
PSAxMiAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Via2l0LWNhbGMiKSkK
LSAgICAgICAgbV90b2tlbiA9IENBTENGVU5DVElPTjsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50
IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCi17Ci0gICAgQ2hhcmFjdGVyVHlwZSogbmFtZSA9IHRv
a2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBBU1NFUlQobmFtZVswXSA9PSAnQCcgJiYg
bGVuZ3RoID49IDIpOwotCi0gICAgLy8gY2hhcnNldCwgZm9udC1mYWNlLCBpbXBvcnQsIG1lZGlh
LCBuYW1lc3BhY2UsIHBhZ2UsIHN1cHBvcnRzLAotICAgIC8vIC13ZWJraXQta2V5ZnJhbWVzLCBh
bmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFzRXNjYXBlLgotICAg
IHN3aXRjaCAodG9BU0NJSUxvd2VyVW5jaGVja2VkKG5hbWVbMV0pKSB7Ci0gICAgY2FzZSAnYic6
Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
c3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAgY2FzZSAxMjoKLSAgICAgICAgICAgIGlmIChpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVmdCIpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBjYXNlIDEzOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFt
ZSArIDIsICJvdHRvbS1yaWdodCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01S
SUdIVF9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxNDoKLSAgICAg
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tY2VudGVy
IikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRFUl9TWU07Ci0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxOToKLSAgICAgICAgICAgIGlmIChpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVmdC1jb3JuZXIiKSkKLSAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07Ci0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgY2FzZSAyMDoKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVu
dGlmaWVyKG5hbWUgKyAyLCAib3R0b20tcmlnaHQtY29ybmVyIikpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdjJzoKLSAgICAgICAgaWYgKGxl
bmd0aCA9PSA4ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJoYXJzZXQiKSkK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY2FzZSAnZic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lICsgMiwgIm9udC1mYWNlIikpCi0gICAgICAgICAgICBtX3Rva2VuID0gRk9O
VF9GQUNFX1NZTTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnaSc6Ci0gICAgICAgIGlm
IChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQi
KSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwotICAgICAg
ICAgICAgbV90b2tlbiA9IElNUE9SVF9TWU07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSAnayc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgImV5ZnJhbWVzIikpCi0gICAgICAgICAgICBtX3Rva2VuID0g
S0VZRlJBTUVTX1NZTTsKLSAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDE0ICYmICFoYXNFc2Nh
cGUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImV5ZnJhbWUtcnVsZSIpKQot
ICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FX1JVTEVfU1lNOwotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlICdsJzoKLSAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAobGVuZ3RoID09IDkpIHsKLSAgICAgICAgICAgIGlmIChpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LXRvcCIpKQotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBMRUZUVE9QX1NZTTsKLSAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMTIp
IHsKLSAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3RlciBmaXJzdCBjb3Vs
ZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgotICAgICAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lICsgMiwgImVmdC1taWRkbCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBMRUZUTUlERExFX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVsxMV0sICdtJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsg
MiwgImVmdC1ib3R0byIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUQk9UVE9NX1NZ
TTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdtJzoKLSAgICAgICAg
aWYgKGxlbmd0aCA9PSA2ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJlZGlh
IikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBNRURJQV9TWU07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgImFtZXNwYWNlIikpCi0gICAgICAgICAgICBtX3Rva2VuID0g
TkFNRVNQQUNFX1NZTTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAncCc6Ci0gICAgICAg
IGlmIChsZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiYWdl
IikpCi0gICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgJ3InOgotICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKLSAgICAgICAgICAgIGlmIChpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC10b3AiKSkKLSAgICAgICAgICAgICAgICBt
X3Rva2VuID0gUklHSFRUT1BfU1lNOwotICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAxMykg
ewotICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNvdWxk
IGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCi0gICAgICAgICAgICBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEyXSwgJ2UnKSAmJiBpc0VxdWFsVG9DU1NJZGVu
dGlmaWVyKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBSSUdIVE1JRERMRV9TWU07Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMTJdLCAnbScpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSAr
IDIsICJpZ2h0LWJvdHRvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFJJR0hUQk9UVE9N
X1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdzJzoKLSAgICAg
ICAgaWYgKGxlbmd0aCA9PSA5ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ1
cHBvcnRzIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBTdXBwb3J0c01vZGU7Ci0g
ICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfU1lNOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLQotICAgIGNhc2UgJ3QnOgotICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7Ci0gICAgICAgIGNhc2UgOToK
LSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtbGVm
dCIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUX1NZTTsKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NT
U0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1yaWdodCIpKQotICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBUT1BSSUdIVF9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAx
MToKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3At
Y2VudGVyIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUENFTlRFUl9TWU07Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgIGlmIChpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtbGVmdC1jb3JuZXIiKSkKLSAgICAgICAg
ICAgICAgICBtX3Rva2VuID0gVE9QTEVGVENPUk5FUl9TWU07Ci0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY2FzZSAxNzoKLSAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlm
aWVyKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IFRPUFJJR0hUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICctJzoKLSAgICAgICAgc3dpdGNoIChsZW5ndGgp
IHsKLSAgICAgICAgY2FzZSAxMzoKLSAgICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtcnVsZSIpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBXRUJLSVRfUlVMRV9TWU07Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgY2FzZSAxNDoKLSAgICAgICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIg
Zmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KLSAgICAgICAg
ICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAncycpICYmIGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNfU1lNOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ2UnKSAmJiBpc0VxdWFsVG9DU1NJZGVu
dGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXZhbHUiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gV0VCS0lUX1ZBTFVFX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNl
IDE1OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbChuYW1lWzE0XSwgJ24nKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUgKyAyLCAid2Via2l0LXJlZ2lvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJ
VF9SRUdJT05fUlVMRV9TWU07Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIDE3OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
MTZdLCAncicpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc2Vs
ZWN0byIpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU0VMRUNUT1JfU1lNOwot
I2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgICAgICAgICBlbHNlIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTZdLCAndCcpICYmIGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtdmlld3BvciIpKQotICAgICAgICAgICAgICAgIG1f
dG9rZW4gPSBXRUJLSVRfVklFV1BPUlRfUlVMRV9TWU07Ci0jZW5kaWYKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIDE4OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IEtFWUZSQU1FU19TWU07Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXNpemVzYXR0ciIpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBXRUJLSVRfU0laRVNBVFRSX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBjYXNlIDE5OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZp
ZXIobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVyeSIpKSB7Ci0gICAgICAgICAgICAgICAgbV9w
YXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBX
RUJLSVRfTUVESUFRVUVSWV9TWU07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY2FzZSAyMjoKLSAgICAgICAgICAgIGlmICghaGFzRXNjYXBlICYmIGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWUtcnVsZSIpKQotICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBLRVlGUkFNRV9SVUxFX1NZTTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIDI3OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc3VwcG9ydHMtY29uZGl0aW9uIikpIHsKLSAgICAg
ICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gU3VwcG9ydHNNb2RlOwotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBXRUJLSVRfU1VQUE9SVFNfQ09ORElUSU9OX1NZTTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdFN1cHBv
cnRzVG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9wYXJzaW5nTW9kZSA9PSBTdXBw
b3J0c01vZGUpOwotICAgIENoYXJhY3RlclR5cGUqIG5hbWUgPSB0b2tlblN0YXJ0PENoYXJhY3Rl
clR5cGU+KCk7Ci0KLSAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKG5hbWVbMV0sICdyJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfT1I7Ci0g
ICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMykgewotICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFt
ZVsxXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdkJykpCi0g
ICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfQU5EOwotICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICduJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsy
XSwgJ3QnKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19OT1Q7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZT4KLWludCBDU1NQYXJzZXI6OnJl
YWxMZXgodm9pZCogeXlsdmFsV2l0aG91dFR5cGUpCi17Ci0gICAgWVlTVFlQRSogeXlsdmFsID0g
c3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKLSAgICAvLyBXcml0ZSBw
b2ludGVyIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gICAgU3JjQ2hhcmFjdGVyVHlwZSogcmVz
dWx0OwotICAgIENTU1BhcnNlclN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgYm9vbCBoYXNFc2Nh
cGU7Ci0KLSAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1pbmF0ZWQgYnkgYSBcMCBjaGFy
YWN0ZXIsIHNvCi0gICAgLy8gaXQgaXMgc2FmZSB0byByZWFkIG9uZSBjaGFyYWN0ZXIgYWhlYWQg
b2YgYSBrbm93biBub24tbnVsbC4KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gSW4gZGVidWcgd2Ug
Y2hlY2sgd2l0aCBhbiBBU1NFUlQgdGhhdCB0aGUgbGVuZ3RoIGlzID4gMCBmb3Igc3RyaW5nIHR5
cGVzLgotICAgIHl5bHZhbC0+c3RyaW5nLmNsZWFyKCk7Ci0jZW5kaWYKLQotcmVzdGFydEFmdGVy
Q29tbWVudDoKLSAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCk7Ci0gICAgc2V0VG9rZW5TdGFydChyZXN1bHQpOwotICAgIG1fdG9rZW5TdGFydExpbmVOdW1i
ZXIgPSBtX2xpbmVOdW1iZXI7Ci0gICAgbV90b2tlblN0YXJ0Q29sdW1uTnVtYmVyID0gdG9rZW5T
dGFydE9mZnNldCgpIC0gbV9jb2x1bW5PZmZzZXRGb3JMaW5lOwotICAgIG1fdG9rZW4gPSAqY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICsrY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgc3dpdGNoICgobV90b2tlbiA8PSAxMjcpID8g
dHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1ttX3Rva2VuXSA6IENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCkgewotICAgIGNhc2UgQ2hhcmFjdGVyQ2FzZWxlc3NVOgotICAgICAgICBpZiAoVU5MSUtFTFko
KmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKycpKSB7Ci0gICAgICAg
ICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2U8U3JjQ2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7Ci0gICAgICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFy
YWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgRkFMTFRIUk9VR0g7IC8vIFRvIENoYXJhY3RlcklkZW50aWZpZXJTdGFydC4KLQotICAg
IGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OgotICAgICAgICAtLWN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCwg
eXlsdmFsLT5zdHJpbmcsIGhhc0VzY2FwZSk7Ci0gICAgICAgIG1fdG9rZW4gPSBJREVOVDsKLQot
ICAgICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBTdXBwb3J0c01v
ZGUgJiYgIWhhc0VzY2FwZSkgewotICAgICAgICAgICAgICAgIGRldGVjdFN1cHBvcnRzVG9rZW48
U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigp
KTsKLSAgICAgICAgICAgICAgICBpZiAobV90b2tlbiAhPSBJREVOVCkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJ
T047Ci0gICAgICAgICAgICBib29sIHNob3VsZFNraXBQYXJlbnRoZXNpcyA9IHRydWU7Ci0gICAg
ICAgICAgICBpZiAoIWhhc0VzY2FwZSkgewotICAgICAgICAgICAgICAgIGJvb2wgZGV0ZWN0ZWQg
PSBkZXRlY3RGdW5jdGlvblR5cGVUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tl
blN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgICAgIGlmICghZGV0ZWN0
ZWQgJiYgbV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyAuLi4gYW5kKG1heC13aWR0aDogNDgwcHgpIC4uLiBsb29rcyBsaWtlIGEgZnVuY3Rp
b24sIGJ1dCBpbiBmYWN0IGl0IGlzIG5vdCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gcnVu
IG1vcmUgZGV0ZWN0aW9uIGNvZGUgaW4gdGhlIE1lZGlhUXVlcnlNb2RlLgotICAgICAgICAgICAg
ICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0g
dG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hv
dWxkU2tpcFBhcmVudGhlc2lzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoTElLRUxZKHNob3VsZFNraXBQYXJlbnRoZXNpcykpIHsK
LSAgICAgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsK
LSAgICAgICAgICAgICAgICArK3Jlc3VsdDsKLSAgICAgICAgICAgICAgICArK3l5bHZhbC0+c3Ry
aW5nLm1fbGVuZ3RoOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG9rZW4oKSA9
PSBVUkkpIHsKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047Ci0gICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyByZWFsbHkgYW4gVVJJLgotICAgICAgICAgICAg
ICAgIGlmICh5eWx2YWwtPnN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFy
c2VVUkk8TENoYXI+KHl5bHZhbC0+c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHBhcnNlVVJJPFVDaGFyPih5eWx2YWwtPnN0cmluZyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSAhPSBOb3Jt
YWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9
PSBNZWRpYVF1ZXJ5TW9kZSkKLSAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW48
U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gU3VwcG9ydHNNb2RlKQot
ICAgICAgICAgICAgICAgIGRldGVjdFN1cHBvcnRzVG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVz
dWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdLCAnbicpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibiIgaXMgSURFTlQgYnV0ICJuKzEi
IGlzIE5USC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmND
aGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRI
OwotICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubV9sZW5ndGggPSBjdXJy
ZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3Rl
clR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+PSAyICYmIHRva2Vu
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8gJy0nIHRvIGNvbnRpbnVlIHBhcnNp
bmcuCi0gICAgICAgICAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIG5leHRDaGFyYWN0ZXIg
PSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKSA9IHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSArIDE7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFjdGVyVHlwZT4oKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLnNldExlbmd0aChjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJ0
IHRoZSBjaGFuZ2UgdG8gY3VycmVudENoYXJhY3RlciBpZiB1bnN1Y2Nlc3NmdWwuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPSBu
ZXh0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50
aENoaWxkTW9kZSAmJiBtX3Rva2VuID09IElERU5UICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCgp
ID09IDIgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeXlsdmFsLT5zdHJpbmcsICJv
ZiIpKSB7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKLSAgICAgICAg
ICAgIG1fdG9rZW4gPSBOVEhDSElMRFNFTEVDVE9SU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJEb3Q6Ci0gICAgICAgIGlmICghaXNBU0NJ
SURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVswXSkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgRkFMTFRIUk9VR0g7IC8vIFRvIENoYXJhY3Rlck51bWJlci4K
LQotICAgIGNhc2UgQ2hhcmFjdGVyTnVtYmVyOiB7Ci0gICAgICAgIGJvb2wgZG90U2VlbiA9ICht
X3Rva2VuID09ICcuJyk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlm
ICghaXNBU0NJSURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVswXSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBkb3QgaXMgYWxsb3dlZCBmb3IgYSBudW1i
ZXIsCi0gICAgICAgICAgICAgICAgLy8gYW5kIGl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdp
dC4KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpWzBdICE9ICcuJyB8fCBkb3RTZWVuIHx8ICFpc0FTQ0lJRGlnaXQoY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWRv
dFNlZW4gJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY3VycmVudENoYXJhY3RlcjxTcmND
aGFyYWN0ZXJUeXBlPigpLCAnbicpKSB7Ci0gICAgICAgICAgICAvLyAiWzAtOV0rbiIgaXMgYWx3
YXlzIGFuIE50aENoaWxkLgotICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFjdGVy
VHlwZT4oKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0gICAgICAgICAgICB5eWx2YWwt
PnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIFNWRyBw
YXJzZXIgZm9yIG51bWJlcnMgb24gU1ZHIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzLgotICAgICAg
ICBpZiAobV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSkgewotICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgdW5pdHMgbGlrZSAnZW0nIG9yICdleCcuCi0gICAg
ICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCgqY2hhcmFjdGVyLCAnZScpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNoYXJhY3Rl
ciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+IDApOwotICAgICAgICAgICAgICAg
ICsrY2hhcmFjdGVyOwotICAgICAgICAgICAgICAgIGlmICgqY2hhcmFjdGVyID09ICctJyB8fCAq
Y2hhcmFjdGVyID09ICcrJyB8fCBpc0FTQ0lJRGlnaXQoKmNoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc0FT
Q0lJRGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICArK2NoYXJhY3Rl
cjsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZMT0FUVE9LRU4gaWYgdGhlIHN0cmluZyBj
b250YWlucyBleHBvbmVudHMuCi0gICAgICAgICAgICAgICAgICAgIGRvdFNlZW4gPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkg
PSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFwYXJzZVNWR051bWJlcih0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGNo
YXJhY3RlciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgeXlsdmFsLT5udW1iZXIp
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHl5
bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFy
dDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAKLSAgICAgICAgLy8gVHlwZSBvZiB0aGUgZnVuY3Rp
b24uCi0gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7
Ci0gICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiB0eXBlID0gY3VycmVudENoYXJhY3RlcjxT
cmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVz
dWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7Ci0KLSAgICAgICAgICAgIG1fdG9rZW4gPSBE
SU1FTjsKLSAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQotICAgICAgICAgICAgICAgIGRldGVj
dE51bWJlclRva2VuKHR5cGUsIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAt
IHR5cGUpOwotCi0gICAgICAgICAgICBpZiAobV90b2tlbiA9PSBESU1FTikgewotICAgICAgICAg
ICAgICAgIC8vIFRoZSBkZWNvZGVkIG51bWJlciBpcyBvdmVyd3JpdHRlbiwgYnV0IHRoaXMgaXMg
aW50ZW50aW9uYWwuCi0gICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuaW5pdCh0b2tlblN0
YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9
PSAnJScpIHsKLSAgICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSBDU1MgZ3JhbW1hciBzYXlzIHtu
dW19JSB3ZSBmb2xsb3cKLSAgICAgICAgICAgIC8vIHdlYmtpdCBhdCB0aGUgbW9tZW50IHdoaWNo
IHVzZXMge251bX0lKy4KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICArK2N1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCpj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJyUnKTsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBQRVJDRU5UQUdFOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fdG9r
ZW4gPSBkb3RTZWVuID8gRkxPQVRUT0tFTiA6IElOVEVHRVI7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgQ2hhcmFjdGVyRGFzaDoKLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0
YXJ0QWZ0ZXJEYXNoKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSkpIHsKLSAg
ICAgICAgICAgIC0tY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAg
ICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCwgcmVzdWx0U3RyaW5nLCBoYXNFc2NhcGUpOwot
ICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOwotCi0gICAgICAgICAgICBpZiAoKmN1cnJlbnRD
aGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKCcpIHsKLSAgICAgICAgICAgICAgICBt
X3Rva2VuID0gRlVOQ1RJT047Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCi0gICAg
ICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQg
LSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgICAgICsrcmVz
dWx0OwotICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50
aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHRv
a2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSwgJ24nKSkgewotICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gMikgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uIiBpcyBJREVOVCBidXQgIi1uKzEiIGlzIE5U
SC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0
ZXJUeXBlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkgPj0gMyAmJiB0b2tl
blN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KClbMl0gPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBidXQgIi1uLTEiIGlzIE5USC4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8gc2Vjb25kICctJyBvZiAnLW4t
JyB0byBjb250aW51ZSBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICBTcmNDaGFyYWN0ZXJU
eXBlKiBuZXh0Q2hhcmFjdGVyID0gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCkgKyAyOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhPFNy
Y0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZSB0byBjdXJyZW50Q2hhcmFjdGVy
IGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IG5leHRDaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1
bHRTdHJpbmcuc2V0TGVuZ3RoKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSk7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZyA9IHJlc3VsdFN0cmluZzsKLSAgICAgICAg
fSBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMF0gPT0gJy0n
ICYmIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSA9PSAnPicpIHsKLSAg
ICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSArPSAyOwotICAg
ICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdID09ICctJykgewotICAgICAgICAgICAgLS1j
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBwYXJzZUlk
ZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7Ci0gICAgICAgICAgICBt
X3Rva2VuID0gQ1VTVE9NX1BST1BFUlRZOwotICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcgPSBy
ZXN1bHRTdHJpbmc7Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9
PSBOdGhDaGlsZE1vZGUpKSB7Ci0gICAgICAgICAgICAvLyAiLVswLTldK24iIGlzIGFsd2F5cyBh
biBOdGhDaGlsZC4KLSAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkPFNyY0NoYXJhY3RlclR5
cGU+KCkpIHsKLSAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFjdGVy
VHlwZT4oKTsKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAgICAg
IHl5bHZhbC0+c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBjdXJy
ZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3Rl
clR5cGU+KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKLSAgICAgICAgLy8gbV90b2tlbiBpcyBzaW1wbHkgdGhl
IGN1cnJlbnQgY2hhcmFjdGVyLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVy
TnVsbDoKLSAgICAgICAgLy8gRG8gbm90IGFkdmFuY2UgcG9pbnRlciBhdCB0aGUgZW5kIG9mIGlu
cHV0LgotICAgICAgICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlcldoaXRlU3BhY2U6Ci0gICAgICAgIG1f
dG9rZW4gPSBXSElURVNQQUNFOwotICAgICAgICAvLyBNaWdodCBzdGFydCB3aXRoIGEgJ1xuJy4K
LSAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICArK21fbGluZU51bWJlcjsKLSAgICAgICAg
ICAgICAgICBtX2NvbHVtbk9mZnNldEZvckxpbmUgPSBjdXJyZW50Q2hhcmFjdGVyT2Zmc2V0KCkg
KyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCk7Ci0gICAgICAgIH0gd2hpbGUgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0ZXJzWypjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCldID09IENoYXJhY3RlcldoaXRlU3BhY2UpKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckVuZENvbmRpdGlvblF1ZXJ5OiB7
Ci0gICAgICAgIGJvb2wgaXNQYXJzaW5nQ29uZGl0aW9uID0gbV9wYXJzaW5nTW9kZSA9PSBNZWRp
YVF1ZXJ5TW9kZSB8fCBtX3BhcnNpbmdNb2RlID09IFN1cHBvcnRzTW9kZTsKLSAgICAgICAgaWYg
KGlzUGFyc2luZ0NvbmRpdGlvbikKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxN
b2RlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENoYXJhY3RlckVuZE50aENo
aWxkOgotICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpCi0gICAgICAg
ICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIENoYXJhY3RlclF1b3RlOgotICAgICAgICBpZiAoY2hlY2tBbmRTa2lwU3RyaW5nKGN1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgbV90b2tlbikpIHsKLSAgICAgICAgICAg
ICsrcmVzdWx0OwotICAgICAgICAgICAgcGFyc2VTdHJpbmc8U3JjQ2hhcmFjdGVyVHlwZT4ocmVz
dWx0LCB5eWx2YWwtPnN0cmluZywgbV90b2tlbik7Ci0gICAgICAgICAgICBtX3Rva2VuID0gU1RS
SU5HOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJFeGNs
YW1hdGlvbk1hcms6IHsKLSAgICAgICAgU3JjQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBza2lwV2hp
dGVTcGFjZShjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICBp
ZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihzdGFydCwgImltcG9ydGFudCIpKSB7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHN0YXJ0ICsgOTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENoYXJhY3Rlckhhc2htYXJrOiB7Ci0gICAgICAgIFNy
Y0NoYXJhY3RlclR5cGUqIHN0YXJ0ID0gY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpOwotICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCk7Ci0KLSAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFy
YWN0ZXJUeXBlPigpKSkgewotICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgdmFsaWQgaGV4
IG51bWJlciB0b2tlbi4KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICArK2N1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKGlz
QVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSk7Ci0g
ICAgICAgICAgICBtX3Rva2VuID0gSEVYOwotICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuaW5p
dChzdGFydCwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gc3RhcnQpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkp
IHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBJRFNFTDsKLSAgICAgICAgICAgIHBhcnNlSWRlbnRp
ZmllcihyZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgaWYg
KCFoYXNFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpZGVu
dGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgotICAgICAgICAgICAgICAgIFNyY0No
YXJhY3RlclR5cGUqIGN1cnJlbnQgPSBzdGFydDsKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0g
SEVYOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJSGV4RGlnaXQoKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gSURTRUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAg
fSB3aGlsZSAoY3VycmVudCA8IHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDaGFyYWN0ZXJTbGFzaDoKLSAgICAgICAg
Ly8gSWdub3JlIGNvbW1lbnRzLiBUaGV5IGFyZSBub3QgZXZlbiBjb25zaWRlcmVkIGFzIHdoaXRl
IHNwYWNlcy4KLSAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCkgPT0gJyonKSB7Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVy
VHlwZT4oKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KClbMF0gIT0gJyonIHx8IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KVsxXSAhPSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICsrbV9saW5l
TnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX2NvbHVtbk9mZnNldEZvckxpbmUgPSBjdXJy
ZW50Q2hhcmFjdGVyT2Zmc2V0KCkgKyAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKmN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnXDAnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFVudGVybWluYXRlZCBjb21tZW50cyBhcmUgc2ltcGx5IGlnbm9yZWQuCi0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAt
PSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCkgKz0gMjsKLSAgICAgICAgICAgIGdvdG8gcmVzdGFydEFmdGVyQ29tbWVudDsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyRG9sbGFyOgotICAgICAgICBp
ZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAg
ICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAg
ICAgbV90b2tlbiA9IEVORFNXSVRIOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBDaGFyYWN0ZXJBc3RlcmlzazoKLSAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCkgPT0gJz0nKSB7Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBDT05UQUlOUzsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyUGx1czoKLSAg
ICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSkgewotICAg
ICAgICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBpcyBhbHdheXMgTnRoQ2hpbGQu
Ci0gICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZDxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0g
ICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKLSAgICAgICAgICAgICAgICB5eWx2YWwtPnN0
cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hh
cmFjdGVyTGVzczoKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKVswXSA9PSAnIScgJiYgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFd
ID09ICctJyAmJiBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMl0gPT0gJy0n
KSB7Ci0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgKz0g
MzsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJBdDoKLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0
YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBBVEtFWVdP
UkQ7Ci0gICAgICAgICAgICArK3Jlc3VsdDsKLSAgICAgICAgICAgIHBhcnNlSWRlbnRpZmllcihy
ZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgICAgIGRldGVjdEF0VG9r
ZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBl
PigpLCBoYXNFc2NhcGUpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
aGFyYWN0ZXJCYWNrU2xhc2g6Ci0gICAgICAgIGlmIChpc0NTU0VzY2FwZSgqY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgewotICAgICAgICAgICAgLS1jdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVz
dWx0LCB5eWx2YWwtPnN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBJ
REVOVDsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1v
ZGUgJiYgbV90b2tlbiA9PSBJREVOVCAmJiB5eWx2YWwtPnN0cmluZy5sZW5ndGgoKSA9PSAyICYm
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHl5bHZhbC0+c3RyaW5nLCAib2YiKSkgewot
ICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7Ci0gICAgICAgICAgICBtX3Rv
a2VuID0gTlRIQ0hJTERTRUxFQ1RPUlNFUEFSQVRPUjsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ2hhcmFjdGVyWG9yOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IEJFR0lO
U1dJVEg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlclZl
cnRpY2FsQmFyOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IERBU0hNQVRDSDsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyVGlsZGU6Ci0gICAgICAgIGlmICgq
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9JykgewotICAgICAgICAg
ICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBt
X3Rva2VuID0gSU5DTFVERVM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRva2VuKCk7Ci19Ci0KLVJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IENT
U1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVybCwgUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEpCi17Ci0gICAgaWYgKCFtZWRpYSB8fCAhbV9hbGxv
d0ltcG9ydFJ1bGVzKSB7Ci0gICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1
cmwsIG1lZGlhLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9T
b3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gV1RGTW92ZShydWxlKTsKLX0KLQotUmVm
PFN0eWxlUnVsZU1lZGlhPiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZShSZWZQdHI8TWVkaWFR
dWVyeVNldD4mJiBtZWRpYSwgUnVsZUxpc3QqIHJ1bGVzKQotewotICAgIG1fYWxsb3dJbXBvcnRS
dWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBSZWZQdHI8
U3R5bGVSdWxlTWVkaWE+IHJ1bGU7Ci0gICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKLSAgICBpZiAo
IW1lZGlhKSB7Ci0gICAgICAgIC8vIFRvIGNvbXBseSB3aXRoIHczYyB0ZXN0IHN1aXRlIGV4cGVj
dGF0aW9uLCBjcmVhdGUgYW4gZW1wdHkgbWVkaWEgcXVlcnkKLSAgICAgICAgLy8gZXZlbiB3aGVu
IGl0IGlzIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0LgotICAgICAgICBydWxlID0gU3R5bGVSdWxl
TWVkaWE6OmNyZWF0ZShNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKSwgZW1wdHlSdWxlcyk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbWVkaWEtPnNocmlua1RvRml0KCk7Ci0gICAgICAgIHJ1bGUgPSBT
dHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLnJlbGVhc2VOb25OdWxsKCksIHJ1bGVzID8gKnJ1
bGVzIDogZW1wdHlSdWxlcyk7Ci0gICAgfQotICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3Vy
Y2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgpOwotfQot
Ci1SZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRlRW1wdHlNZWRpYVJ1bGUoUnVs
ZUxpc3QqIHJ1bGVzKQotewotICAgIHJldHVybiBjcmVhdGVNZWRpYVJ1bGUoTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKCksIHJ1bGVzKTsKLX0KLQotUmVmPFN0eWxlUnVsZVN1cHBvcnRzPiBDU1NQYXJz
ZXI6OmNyZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9ydGVkLCBSdWxlTGlz
dCogcnVsZXMpCi17Ci0gICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURl
Y2xhcmF0aW9ucyA9IGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBkYXRh
ID0gcG9wU3VwcG9ydHNSdWxlRGF0YSgpOwotICAgIFN0cmluZyBjb25kaXRpb25UZXh0OwotICAg
IHVuc2lnbmVkIGNvbmRpdGlvbk9mZnNldCA9IGRhdGEtPnJ1bGVIZWFkZXJSYW5nZS5zdGFydCAr
IDk7Ci0gICAgdW5zaWduZWQgY29uZGl0aW9uTGVuZ3RoID0gZGF0YS0+cnVsZUhlYWRlclJhbmdl
Lmxlbmd0aCgpIC0gOTsKLQotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgY29uZGl0
aW9uVGV4dCA9IFN0cmluZyhtX2RhdGFTdGFydDguZ2V0KCkgKyBjb25kaXRpb25PZmZzZXQsIGNv
bmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgZWxzZQotICAgICAgICBjb25k
aXRpb25UZXh0ID0gU3RyaW5nKG1fZGF0YVN0YXJ0MTYuZ2V0KCkgKyBjb25kaXRpb25PZmZzZXQs
IGNvbmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBSZWZQdHI8U3R5bGVS
dWxlU3VwcG9ydHM+IHJ1bGU7Ci0gICAgaWYgKHJ1bGVzKQotICAgICAgICBydWxlID0gU3R5bGVS
dWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25kaXRpb25Jc1N1cHBvcnRlZCwg
KnJ1bGVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKLSAgICAg
ICAgcnVsZSA9IFN0eWxlUnVsZVN1cHBvcnRzOjpjcmVhdGUoY29uZGl0aW9uVGV4dCwgY29uZGl0
aW9uSXNTdXBwb3J0ZWQsIGVtcHR5UnVsZXMpOwotICAgIH0KLQotICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiBydWxlLnJlbGVhc2VO
b25OdWxsKCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrU3VwcG9ydHNSdWxlSGVhZGVyU3Rh
cnQoKQotewotICAgIGlmICghbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2spCi0gICAgICAgIG1fc3Vw
cG9ydHNSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291cmNlRGF0YUxpc3Q+
KCk7Ci0KLSAgICBhdXRvIGRhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVT
b3VyY2VEYXRhOjpTVVBQT1JUU19SVUxFKTsKLSAgICBkYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3Rh
cnQgPSB0b2tlblN0YXJ0T2Zmc2V0KCk7Ci0gICAgbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmFw
cGVuZChXVEZNb3ZlKGRhdGEpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtTdXBwb3J0c1J1
bGVIZWFkZXJFbmQoKQotewotICAgIEFTU0VSVChtX3N1cHBvcnRzUnVsZURhdGFTdGFjayAmJiAh
bV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoaXM4Qml0U291
cmNlKCkpCi0gICAgICAgIG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVIZWFk
ZXJSYW5nZS5lbmQgPSB0b2tlblN0YXJ0PExDaGFyPigpIC0gbV9kYXRhU3RhcnQ4LmdldCgpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUhl
YWRlclJhbmdlLmVuZCA9IHRva2VuU3RhcnQ8VUNoYXI+KCkgLSBtX2RhdGFTdGFydDE2LmdldCgp
OwotfQotCi1SZWY8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9wU3VwcG9ydHNSdWxl
RGF0YSgpCi17Ci0gICAgQVNTRVJUKG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrICYmICFtX3N1cHBv
cnRzUnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9zdXBwb3J0c1J1bGVE
YXRhU3RhY2stPnRha2VMYXN0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwcm9jZXNzQW5kQWRk
TmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1Nv
dXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1hcmtSdWxlQm9keUVuZCgpOwotICAg
IFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSA9ICpwb3BSdWxlRGF0YSgpOwotICAgIGZpeFVu
cGFyc2VkUHJvcGVydHlSYW5nZXMocnVsZSk7Ci0gICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShX
VEZNb3ZlKHJ1bGUpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRy
ZWUoUmVmPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGUpCi17Ci0gICAgLy8gUHJlY29uZGl0aW9u
OiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4KLSAgICBpZiAoIW1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50UnVsZURhdGFTdGFjay0+
aXNFbXB0eSgpKQotICAgICAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5hcHBlbmQoV1RGTW92
ZShydWxlKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0
KCktPmNoaWxkUnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZSkpOwotfQotCi1SZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQotewotICAgIGlmICghbV9ydWxl
U291cmNlRGF0YVJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQo
IW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7Ci0gICAgbV9jdXJyZW50UnVsZURh
dGEgPSBudWxscHRyOwotICAgIHJldHVybiBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT50YWtlTGFz
dCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6c3ludGF4RXJyb3IoY29uc3QgTG9jYXRpb24mIGxv
Y2F0aW9uLCBTeW50YXhFcnJvclR5cGUgZXJyb3IpCi17Ci0gICAgaWYgKCFpc0xvZ2dpbmdFcnJv
cnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IHN3aXRjaCAoZXJyb3IpIHsKLSAgICBjYXNlIFByb3BlcnR5RGVjbGFyYXRpb25FcnJvcjoKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJJbnZhbGlkIENTUyBwcm9wZXJ0eSBkZWNsYXJh
dGlvbiBhdDogIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiVW5leHBlY3RlZCBDU1MgdG9rZW46ICIpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAobG9jYXRpb24udG9rZW4uaXM4Qml0KCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGxvY2F0aW9uLnRva2VuLmNoYXJhY3RlcnM4KCksIGxvY2F0aW9uLnRva2Vu
Lmxlbmd0aCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxvY2F0aW9uLnRv
a2VuLmNoYXJhY3RlcnMxNigpLCBsb2NhdGlvbi50b2tlbi5sZW5ndGgoKSk7Ci0KLSAgICBsb2dF
cnJvcihidWlsZGVyLnRvU3RyaW5nKCksIGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0aW9uLmNv
bHVtbk51bWJlcik7Ci0KLSAgICBtX2lnbm9yZUVycm9yc0luRGVjbGFyYXRpb24gPSB0cnVlOwot
fQotCi1ib29sIENTU1BhcnNlcjo6aXNMb2dnaW5nRXJyb3JzKCkKLXsKLSAgICByZXR1cm4gbV9s
b2dFcnJvcnMgJiYgIW1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbjsKLX0KLQotdm9pZCBDU1NQ
YXJzZXI6OmxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjb2x1bW5OdW1iZXIpCi17Ci0gICAgUGFnZUNvbnNvbGVDbGllbnQmIGNvbnNvbGUgPSBtX3N0
eWxlU2hlZXQtPnNpbmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgpLT5jb25zb2xlKCk7Ci0gICAg
Y29uc29sZS5hZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywgTWVzc2FnZUxldmVsOjpXYXJu
aW5nLCBtZXNzYWdlLCBtX3N0eWxlU2hlZXQtPmJhc2VVUkwoKS5zdHJpbmcoKSwgbGluZU51bWJl
ciArIDEsIGNvbHVtbk51bWJlciArIDEpOwotfQotCi1SZWY8U3R5bGVSdWxlS2V5ZnJhbWVzPiBD
U1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUoY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+IGtleWZyYW1lcykKLXsKLSAg
ICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFs
c2U7Ci0gICAgUmVmPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9IFN0eWxlUnVsZUtleWZyYW1l
czo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlGcmFtZSA6ICprZXlmcmFtZXMpCi0gICAg
ICAgIHJ1bGUtPnBhcnNlckFwcGVuZEtleWZyYW1lKFdURk1vdmUoa2V5RnJhbWUpKTsKLSAgICBy
dWxlLT5zZXROYW1lKG5hbWUpOwotICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVl
SWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcnVsZTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZT4gQ1NT
UGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4+KiBzZWxlY3RvcnMpCi17Ci0gICAgUmVmUHRyPFN0eWxlUnVsZT4gcnVsZTsKLSAg
ICBpZiAoc2VsZWN0b3JzKSB7Ci0gICAgICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IGZhbHNlOwot
ICAgICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgICAgIHJ1
bGUgPSBTdHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIsIGNyZWF0ZVN0
eWxlUHJvcGVydGllcygpKTsKLSAgICAgICAgcnVsZS0+cGFyc2VyQWRvcHRTZWxlY3RvclZlY3Rv
cigqc2VsZWN0b3JzKTsKLSAgICAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJ
Zk5lZWRlZCgpOwotICAgIH0gZWxzZQotICAgICAgICBwb3BSdWxlRGF0YSgpOwotICAgIGNsZWFy
UHJvcGVydGllcygpOwotICAgIHJldHVybiBydWxlOwotfQotCi1SZWZQdHI8U3R5bGVSdWxlRm9u
dEZhY2U+IENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKLXsKLSAgICBtX2FsbG93SW1w
b3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgZm9y
IChhdXRvJiBwcm9wZXJ0eSA6IG1fcGFyc2VkUHJvcGVydGllcykgewotICAgICAgICBpZiAocHJv
cGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxDU1NWYWx1ZUxpc3Q+
KCpwcm9wZXJ0eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52
YWx1ZSgpKS5sZW5ndGgoKSAhPSAxKSkgewotICAgICAgICAgICAgLy8gVW5saWtlIGZvbnQtZmFt
aWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250LWZhY2UgcnVsZQot
ICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4YWN0bHkgb25lIGZh
bWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCi0gICAgICAgICAgICAvLyBoYXZlICdpbml0aWFs
JyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KLSAgICAgICAgICAgIC8v
IFNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWZvbnRzLyNmb250LWZhbWlseS1kZXNj
Ci0gICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIHBvcFJ1bGVEYXRh
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLSAgICBh
dXRvIHJ1bGUgPSBTdHlsZVJ1bGVGb250RmFjZTo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydGll
cygpKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRv
U291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIFdURk1vdmUocnVsZSk7Ci19Ci0KLXZv
aWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgdXJpKQotewotICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2Fs
bG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hbGxvd0lt
cG9ydFJ1bGVzID0gZmFsc2U7Ci0gICAgbV9zdHlsZVNoZWV0LT5wYXJzZXJBZGROYW1lc3BhY2Uo
cHJlZml4LCB1cmkpOwotICAgIGlmIChwcmVmaXguaXNFbXB0eSgpICYmICF1cmkuaXNOdWxsKCkp
Ci0gICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKLX0KLQotUXVhbGlmaWVkTmFtZSBD
U1NQYXJzZXI6OmRldGVybWluZU5hbWVJbk5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi17Ci0gICAgaWYgKHByZWZpeC5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFt
ZSwgbnVsbEF0b20pOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhh
cyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCi0gICAgaWYgKHByZWZpeC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKGVtcHR5QXRvbSwgbG9jYWxOYW1lLCBl
bXB0eUF0b20pOyAvLyBFbXB0eSBuYW1lc3BhY2UuCi0gICAgaWYgKHByZWZpeCA9PSBzdGFyQXRv
bSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHN0YXJB
dG9tKTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KLQotICAgIGlmICghbV9zdHlsZVNo
ZWV0KQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbV9k
ZWZhdWx0TmFtZXNwYWNlKTsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2Fs
TmFtZSwgbV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2UocHJlZml4KSk7Ci19Ci0KLXZv
aWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhOYW1lc3BhY2VJZk5lZWRlZChDU1NQ
YXJzZXJTZWxlY3RvciYgc3BlY2lmaWVycykKLXsKLSAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNl
ICE9IHN0YXJBdG9tIHx8IHNwZWNpZmllcnMuaXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsKLSAg
ICAgICAgUXVhbGlmaWVkTmFtZSBlbGVtZW50TmFtZShudWxsQXRvbSwgc3RhckF0b20sIG1fZGVm
YXVsdE5hbWVzcGFjZSk7Ci0gICAgICAgIHJld3JpdGVTcGVjaWZpZXJzV2l0aEVsZW1lbnROYW1l
KGVsZW1lbnROYW1lLCBzcGVjaWZpZXJzLCAvKnRhZ0lzRm9yTmFtZXNwYWNlUnVsZSovdHJ1ZSk7
Ci0gICAgfQotfQotCi12b2lkIENTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVu
dE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJiBzcGVjaWZpZXJzKQotewotICAg
IFF1YWxpZmllZE5hbWUgdGFnKGRldGVybWluZU5hbWVJbk5hbWVzcGFjZShuYW1lc3BhY2VQcmVm
aXgsIGVsZW1lbnROYW1lKSk7Ci0gICAgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5hbWUo
dGFnLCBzcGVjaWZpZXJzLCBmYWxzZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3Bl
Y2lmaWVyc1dpdGhFbGVtZW50TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIENTU1BhcnNl
clNlbGVjdG9yJiBzcGVjaWZpZXJzLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSkKLXsKLSAg
ICBpZiAoIXNwZWNpZmllcnMuaXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgaWYg
KHRhZyA9PSBhbnlRTmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXNw
ZWNpZmllcnMuaXNQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSkKLSAgICAgICAgICAgIHNwZWNp
ZmllcnMucHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgdGFnSXNGb3JOYW1lc3BhY2VSdWxlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1BhcnNlclNlbGVjdG9yKiBsYXN0U2hhZG93
RGVzY2VuZGFudCA9ICZzcGVjaWZpZXJzOwotICAgIENTU1BhcnNlclNlbGVjdG9yKiBoaXN0b3J5
ID0gJnNwZWNpZmllcnM7Ci0gICAgd2hpbGUgKGhpc3RvcnktPnRhZ0hpc3RvcnkoKSkgewotICAg
ICAgICBoaXN0b3J5ID0gaGlzdG9yeS0+dGFnSGlzdG9yeSgpOwotICAgICAgICBpZiAoaGlzdG9y
eS0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkgfHwgaGlzdG9yeS0+aGFzU2hhZG93RGVzY2VuZGFu
dCgpKQotICAgICAgICAgICAgbGFzdFNoYWRvd0Rlc2NlbmRhbnQgPSBoaXN0b3J5OwotICAgIH0K
LQotICAgIGlmIChsYXN0U2hhZG93RGVzY2VuZGFudC0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAg
IGlmICh0YWcgIT0gYW55UU5hbWUoKSkKLSAgICAgICAgICAgIGxhc3RTaGFkb3dEZXNjZW5kYW50
LT50YWdIaXN0b3J5KCktPnByZXBlbmRUYWdTZWxlY3Rvcih0YWcsIHRhZ0lzRm9yTmFtZXNwYWNl
UnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3Igc2hhZG93LUlEIHBz
ZXVkby1lbGVtZW50cyB0byBiZSBjb3JyZWN0bHkgbWF0Y2hlZCwgdGhlIFNoYWRvd0Rlc2NlbmRh
bnQgY29tYmluYXRvciBoYXMgdG8gYmUgdXNlZC4KLSAgICAvLyBXZSB0aGVyZWZvcmUgY3JlYXRl
IGEgbmV3IFNlbGVjdG9yIHdpdGggdGhhdCBjb21iaW5hdG9yIGhlcmUgaW4gYW55IGNhc2UsIGV2
ZW4gaWYgbWF0Y2hpbmcgYW55IChob3N0KSBlbGVtZW50IGluIGFueSBuYW1lc3BhY2UgKGkuZS4g
JyonKS4KLSAgICBsYXN0U2hhZG93RGVzY2VuZGFudC0+c2V0VGFnSGlzdG9yeShzdGQ6Om1ha2Vf
dW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPih0YWcpKTsKLSAgICBsYXN0U2hhZG93RGVzY2VuZGFu
dC0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQpOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmll
cnMoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzcGVjaWZpZXJzLCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5ld1NwZWNpZmllcikKLXsKLSAgICBpZiAobmV3
U3BlY2lmaWVyLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBuZXdTcGVjaWZpZXItPmlzUHNl
dWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkpIHsKLSAgICAgICAgLy8gVW5rbm93biBwc2V1ZG8gZWxl
bWVudCBhbHdheXMgZ29lcyBhdCB0aGUgdG9wIG9mIHNlbGVjdG9yIGNoYWluLgotICAgICAgICBu
ZXdTcGVjaWZpZXItPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRh
bnQsIFdURk1vdmUoc3BlY2lmaWVycykpOwotICAgICAgICByZXR1cm4gbmV3U3BlY2lmaWVyOwot
ICAgIH0KLSAgICBpZiAoc3BlY2lmaWVycy0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gU3BlY2lmaWVycyBmb3IgdW5rbm93biBwc2V1ZG8gZWxlbWVudCBnbyByaWdodCBi
ZWhpbmQgaXQgaW4gdGhlIGNoYWluLgotICAgICAgICBzcGVjaWZpZXJzLT5pbnNlcnRUYWdIaXN0
b3J5KENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvciwgV1RGTW92ZShuZXdTcGVjaWZpZXIpLCBDU1NT
ZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCk7Ci0gICAgICAgIHJldHVybiBzcGVjaWZpZXJzOwot
ICAgIH0KLSAgICBzcGVjaWZpZXJzLT5hcHBlbmRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvciwgV1RGTW92ZShuZXdTcGVjaWZpZXIpKTsKLSAgICByZXR1cm4gc3BlY2lmaWVyczsK
LX0KLQotUmVmUHRyPFN0eWxlUnVsZVBhZ2U+IENTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUoc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpCi17Ci0gICAgLy8g
RklYTUU6IE1hcmdpbiBhdC1ydWxlcyBhcmUgaWdub3JlZC4KLSAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgaWYgKHBhZ2VT
ZWxlY3RvcikgewotICAgICAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVQYWdlOjpjcmVhdGUoY3Jl
YXRlU3R5bGVQcm9wZXJ0aWVzKCkpOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclNlbGVjdG9yPj4gc2VsZWN0b3JWZWN0b3I7Ci0gICAgICAgIHNlbGVjdG9yVmVjdG9y
LmFwcGVuZChXVEZNb3ZlKHBhZ2VTZWxlY3RvcikpOwotICAgICAgICBydWxlLT5wYXJzZXJBZG9w
dFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsK
LSAgICAgICAgcmV0dXJuIFdURk1vdmUocnVsZSk7Ci0gICAgfQotCi0gICAgcG9wUnVsZURhdGEo
KTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4g
Q1NTUGFyc2VyOjpjcmVhdGVTZWxlY3RvclZlY3RvcigpCi17Ci0gICAgaWYgKG1fcmVjeWNsZWRT
ZWxlY3RvclZlY3RvcikgewotICAgICAgICBtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3ItPnNocmlu
aygwKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9yZWN5Y2xlZFNlbGVjdG9yVmVjdG9yKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PigpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cmVjeWNsZVNl
bGVjdG9yVmVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1Bh
cnNlclNlbGVjdG9yPj4+IHZlY3RvcikKLXsKLSAgICBpZiAodmVjdG9yICYmICFtX3JlY3ljbGVk
U2VsZWN0b3JWZWN0b3IpCi0gICAgICAgIG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvciA9IFdURk1v
dmUodmVjdG9yKTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZVJlZ2lvbj4gQ1NTUGFyc2VyOjpjcmVh
dGVSZWdpb25SdWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piog
cmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcykKLXsKLSAgICBpZiAoIXJlZ2lvblNlbGVj
dG9yIHx8ICFydWxlcykgewotICAgICAgICBwb3BSdWxlRGF0YSgpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNw
YWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0KLSAgICBhdXRvIHJlZ2lvblJ1bGUgPSBTdHlsZVJ1
bGVSZWdpb246OmNyZWF0ZShyZWdpb25TZWxlY3RvciwgKnJ1bGVzKTsKLQotICAgIGlmIChpc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoQ1NT
UnVsZVNvdXJjZURhdGE6OmNyZWF0ZVVua25vd24oKSk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShy
ZWdpb25SdWxlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmNyZWF0ZU1hcmdpbkF0UnVsZShDU1NT
ZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSAvKiBtYXJnaW5Cb3ggKi8pCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBtYXJnaW4gYXQtcnVsZSBoZXJlLCB1c2luZzoKLSAgICAvLyAgICAgICAgLSBt
YXJnaW5Cb3g6IG1hcmdpbiBib3gKLSAgICAvLyAgICAgICAgLSBtX3BhcnNlZFByb3BlcnRpZXM6
IHByb3BlcnRpZXMgYXQgW21fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCwgbV9w
YXJzZWRQcm9wZXJ0aWVzLnNpemUoKV0gYXJlIGZvciB0aGlzIGF0LXJ1bGUuCi0gICAgLy8gRG9u
J3QgZm9yZ2V0IHRvIGFsc28gdXBkYXRlIHRoZSBhY3Rpb24gZm9yIHBhZ2Ugc3ltYm9sIGluIENT
U0dyYW1tYXIueSBzdWNoIHRoYXQgbWFyZ2luIGF0LXJ1bGUgZGF0YSBpcyBjbGVhcmVkIGlmIHBh
Z2Vfc2VsZWN0b3IgaXMgaW52YWxpZC4KLQotICAgIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6c3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3go
KQotewotICAgIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IG1fcGFyc2Vk
UHJvcGVydGllcy5zaXplKCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjplbmREZWNsYXJhdGlvbnNG
b3JNYXJnaW5Cb3goKQotewotICAgIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMobV9wYXJzZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCk7Ci0g
ICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gaW52YWxpZFBhcnNlZFBy
b3BlcnRpZXNDb3VudDsKLX0KLQotUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENTU1BhcnNlcjo6Y3Jl
YXRlS2V5ZnJhbWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBrZXlzKQotewotICAgIC8vIENyZWF0ZSBh
IGtleSBzdHJpbmcgZnJvbSB0aGUgcGFzc2VkIGtleXMKLSAgICBTdHJpbmdCdWlsZGVyIGtleVN0
cmluZzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAvLyBKdXN0IGFzIHBlciB0aGUgY29tbWVudCBiZWxvdywgd2UgaWdub3JlIGtleWZy
YW1lcyB3aXRoCi0gICAgICAgIC8vIGludmFsaWQga2V5IHZhbHVlcyAocGxhaW4gbnVtYmVycyBv
ciB1bmtub3duIGlkZW50aWZpZXJzKQotICAgICAgICAvLyBtYXJrZWQgYXMgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VTktOT1dOIGR1cmluZyBwYXJzaW5nLgotICAgICAgICBpZiAoa2V5cy52YWx1
ZUF0KGkpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgewotICAgICAg
ICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFTU0VSVChrZXlzLnZhbHVlQXQoaSktPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICBmbG9hdCBrZXkgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oa2V5cy52YWx1ZUF0KGkpLT5mVmFsdWUpOwotICAgICAgICBpZiAoa2V5IDwgMCB8
fCBrZXkgPiAxMDApIHsKLSAgICAgICAgICAgIC8vIEFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9U
Ui9jc3MzLWFuaW1hdGlvbnMvI2tleWZyYW1lcywKLSAgICAgICAgICAgIC8vICJJZiBhIGtleWZy
YW1lIHNlbGVjdG9yIHNwZWNpZmllcyBuZWdhdGl2ZSBwZXJjZW50YWdlIHZhbHVlcwotICAgICAg
ICAgICAgLy8gb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDEwMCUsIHRoZW4gdGhlIGtleWZyYW1lIHdp
bGwgYmUgaWdub3JlZC4iCi0gICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpICE9IDApCi0gICAg
ICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7Ci0gICAgICAgIGtleVN0cmluZy5hcHBlbmRO
dW1iZXIoa2V5KTsKLSAgICAgICAga2V5U3RyaW5nLmFwcGVuZCgnJScpOwotICAgIH0KLQotICAg
IGF1dG8ga2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
aWVzKCkpOwotICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZy50b1N0cmluZygpKTsK
LQotICAgIGNsZWFyUHJvcGVydGllcygpOwotCi0gICAgcmV0dXJuIFdURk1vdmUoa2V5ZnJhbWUp
OwotfQotCi12b2lkIENTU1BhcnNlcjo6aW52YWxpZEJsb2NrSGl0KCkKLXsKLSAgICBpZiAobV9z
dHlsZVNoZWV0ICYmICFtX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENTU1J1bGUpCi0gICAgICAgIG1f
c3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGZhbHNlKTsKLX0K
LQotdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpCi17
Ci0gICAgbV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyID0gbV9saW5lTnVtYmVyOwotfQotCi12b2lk
IENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1ZXJ5U2V0JiBtZWRpYSkKLXsK
LSAgICBtZWRpYS5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaXhVbnBhcnNlZFByb3Bl
cnRpZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgQ1NTUnVsZVNvdXJjZURhdGEm
IHJ1bGVEYXRhKQotewotICAgIGF1dG8mIHByb3BlcnR5RGF0YSA9IHJ1bGVEYXRhLnN0eWxlU291
cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEu
c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQg
c3R5bGVTdGFydCA9IHJ1bGVEYXRhLnJ1bGVCb2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgYXV0byogbmV4
dERhdGEgPSAmcHJvcGVydHlEYXRhWzBdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgYXV0byogY3VycmVudERhdGEgPSBuZXh0RGF0YTsKLSAgICAg
ICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmcHJvcGVydHlEYXRhW2kgKyAxXSA6IDA7Ci0K
LSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tz
dHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09ICc7JykKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVuc2lnbmVkIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
OwotICAgICAgICBpZiAoIW5leHREYXRhKQotICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgPSBydWxlRGF0YS5ydWxlQm9keVJhbmdlLmVuZCAtIDE7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRh
LT5yYW5nZS5zdGFydCAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3Rl
cnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXQ7Ci0KLSAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRz
IGF0IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgotICAgICAgICB1bnNpZ25lZCBu
ZXdQcm9wZXJ0eUVuZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7
IC8vIEV4Y2x1c2l2ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAg
ICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKLSAgICAg
ICAgICAgIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVu
dERhdGEtPnJhbmdlLnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7Ci0gICAgICAg
ICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0ICYmIGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQotICAgICAg
ICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIGlmICh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCi0gICAgICAgICAg
ICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCi0g
ICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5T
dHlsZVNoZWV0ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVl
dF0pKQotICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5
IHZhbHVlLgotICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gU3RyaW5nKGNoYXJhY3Rl
cnMgKyB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVl
dF0gPT0gJzsnID8gMCA6IDEpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDU1NQYXJz
ZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEmIHJ1bGVEYXRh
KQotewotICAgIGlmICghcnVsZURhdGEuc3R5bGVTb3VyY2VEYXRhKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoaXM4Qml0U291cmNlKCkpIHsKLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0
aWVzPExDaGFyPihtX2RhdGFTdGFydDguZ2V0KCkgKyBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGgs
IHJ1bGVEYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpeFVucGFyc2VkUHJv
cGVydGllczxVQ2hhcj4obV9kYXRhU3RhcnQxNi5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExl
bmd0aCwgcnVsZURhdGEpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1J1bGVIZWFkZXJTdGFy
dChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSBydWxlVHlwZSkKLXsKLSAgICBpZiAoIWlzRXh0cmFj
dGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUG9wIG9mZiBkYXRh
IGZvciBhIHByZXZpb3VzIGludmFsaWQgcnVsZS4KLSAgICBpZiAobV9jdXJyZW50UnVsZURhdGEp
Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnJlbW92ZUxhc3QoKTsKLQotICAgIGF1
dG8gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVsZVR5cGUpOwotICAgIGRhdGEt
PnJ1bGVIZWFkZXJSYW5nZS5zdGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBtX2N1cnJl
bnRSdWxlRGF0YSA9IGRhdGEuY29weVJlZigpOwotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2st
PmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFJ1bGVIZWFkZXJFbmQoY29uc3QgQ2hh
cmFjdGVyVHlwZSogZGF0YVN0YXJ0KQotewotICAgIENoYXJhY3RlclR5cGUqIGxpc3RFbmQgPSB0
b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0gICAgd2hpbGUgKGxpc3RFbmQgPiBkYXRhU3Rh
cnQgKyAxKSB7Ci0gICAgICAgIGlmIChpc0hUTUxTcGFjZSgqKGxpc3RFbmQgLSAxKSkpCi0gICAg
ICAgICAgICAtLWxpc3RFbmQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUhlYWRlclJhbmdl
LmVuZCA9IGxpc3RFbmQgLSBkYXRhU3RhcnQ7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVs
ZUhlYWRlckVuZCgpCi17Ci0gICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHko
KSk7Ci0KLSAgICBpZiAoaXM4Qml0U291cmNlKCkpCi0gICAgICAgIHNldFJ1bGVIZWFkZXJFbmQ8
TENoYXI+KG1fZGF0YVN0YXJ0OC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRSdWxlSGVh
ZGVyRW5kPFVDaGFyPihtX2RhdGFTdGFydDE2LmdldCgpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
Om1hcmtTZWxlY3RvclN0YXJ0KCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEo
KSB8fCBtX25lc3RlZFNlbGVjdG9yTGV2ZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQo
IW1fc2VsZWN0b3JSYW5nZS5lbmQpOwotCi0gICAgbV9zZWxlY3RvclJhbmdlLnN0YXJ0ID0gdG9r
ZW5TdGFydE9mZnNldCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yRW5kKCkK
LXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSB8fCBtX25lc3RlZFNlbGVjdG9y
TGV2ZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fc2VsZWN0b3JSYW5nZS5lbmQp
OwotICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5zaXplKCkpOwotCi0gICAgbV9z
ZWxlY3RvclJhbmdlLmVuZCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLT5sYXN0KCktPnNlbGVjdG9yUmFuZ2VzLmFwcGVuZChtX3NlbGVjdG9yUmFuZ2Up
OwotICAgIG1fc2VsZWN0b3JSYW5nZS5zdGFydCA9IDA7Ci0gICAgbV9zZWxlY3RvclJhbmdlLmVu
ZCA9IDA7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCi17Ci0gICAg
aWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2N1
cnJlbnRSdWxlRGF0YSA9IG51bGxwdHI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gdG9rZW5TdGFy
dE9mZnNldCgpOwotICAgIGlmICh0b2tlblN0YXJ0Q2hhcigpID09ICd7JykKLSAgICAgICAgKytv
ZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgotICAgIEFTU0VSVCgh
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7Ci19Ci0KLXZvaWQg
Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQotewotICAgIC8vIFByZWNvbmRpdGlvbjogKCFp
c0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gdG9rZW5TdGFy
dE9mZnNldCgpOwotICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgp
KTsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2UuZW5k
ID0gb2Zmc2V0OwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQotewot
ICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IGZhbHNlOwotICAgIGlmICghaXNFeHRy
YWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgp
LT5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJvcGVydHlSYW5n
ZS5zdGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtQ
cm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkK
LXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkgfHwgIW1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmxhc3QoKS0+c3R5bGVTb3VyY2VEYXRhKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHRva2Vu
U3RhcnRDaGFyKCkgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0
eSB0ZXh0LgotICAgICAgICArK29mZnNldDsKLSAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zm
c2V0OwotICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpICYmICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxl
IGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCi0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihzdGFydCA8IGVuZCk7Ci0gICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0
cmluZzsKLSAgICAgICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICAgICAgcHJvcGVydHlT
dHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQ4LmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvcGVydHlTdHJp
bmcgPSBTdHJpbmcobV9kYXRhU3RhcnQxNi5nZXQoKSArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eVN0cmluZy5lbmRzV2l0aCgnOycp
KQotICAgICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KHByb3Bl
cnR5U3RyaW5nLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgIHNpemVfdCBjb2xvbkluZGV4ID0gcHJv
cGVydHlTdHJpbmcuZmluZCgnOicpOwotICAgICAgICBBU1NFUlQoY29sb25JbmRleCAhPSBub3RG
b3VuZCk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNvbG9u
SW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0
eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0aCgp
KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgLy8gVGhlIHByb3BlcnR5IHJhbmdlIGlzIHJl
bGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQuCi0gICAgICAgIFNvdXJjZVJh
bmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5y
dWxlQm9keVJhbmdlOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnN0
eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKLSAgICAgICAgICAgIENTU1Byb3Bl
cnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBh
cnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0LCBlbmQgLSB0
b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwotICAgIH0KLSAgICByZXNldFByb3BlcnR5UmFuZ2Uo
KTsKLX0KLQotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi1SZWY8U3R5bGVSdWxl
Vmlld3BvcnQ+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKLXsKLSAgICBtX2FsbG93
SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0KLSAg
ICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVy
dGllcygpKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLQotICAgIHByb2Nlc3NBbmRBZGROZXdS
dWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiBydWxlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKLXsKLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENh
bGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLQotICAgIENTU1ZhbHVlSUQgaWQg
PSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIGJvb2wgdmFsaWRQcmltaXRp
dmUgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1pbldpZHRoOiAvLyBhdXRvIHwgZGV2aWNlLXdpZHRoIHwgZGV2aWNlLWhlaWdodCB8IDxsZW5n
dGg+IHwgPHBlcmNlbnRhZ2U+Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoK
LSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZURldmljZVdp
ZHRoIHx8IGlkID09IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBl
cmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
aWR0aDogLy8gc2hvcnRoYW5kCi0gICAgICAgIHJldHVybiBwYXJzZVZpZXdwb3J0U2hvcnRoYW5k
KHByb3BJZCwgQ1NTUHJvcGVydHlNaW5XaWR0aCwgQ1NTUHJvcGVydHlNYXhXaWR0aCwgaW1wb3J0
YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgotICAgICAgICByZXR1cm4gcGFyc2VW
aWV3cG9ydFNob3J0aGFuZChwcm9wSWQsIENTU1Byb3BlcnR5TWluSGVpZ2h0LCBDU1NQcm9wZXJ0
eU1heEhlaWdodCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluWm9vbTogLy8g
YXV0byB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFpv
b206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29tOiAvLyB6b29tIHwgZml4ZWQKLSAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlWm9vbSB8fCBpZCA9PSBDU1NWYWx1ZUZpeGVkKQotICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5T3JpZW50YXRpb246IC8vIGF1dG8gfCBwb3J0cmFpdCB8IGxhbmRzY2FwZQot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlUG9ydHJhaXQg
fHwgaWQgPT0gQ1NTVmFsdWVMYW5kc2NhcGUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICBpZiAodmFsaWRQcmltaXRpdmUpIHsKLSAgICAg
ICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFw
YXJzZWRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkgJiYgIWluU2hvcnRoYW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmll
d3BvcnRTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQgZmlyc3Qs
IENTU1Byb3BlcnR5SUQgc2Vjb25kLCBib29sIGltcG9ydGFudCkKLXsKLSAgICB1bnNpZ25lZCBu
dW1WYWx1ZXMgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAgaWYgKG51bVZhbHVlcyA+IDIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IHByb3BJZCk7Ci0KLSAgICBpZiAoIXBhcnNlVmlld3BvcnRQcm9wZXJ0eShmaXJzdCwgaW1wb3J0
YW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYganVzdCBvbmUgdmFsdWUg
aXMgc3VwcGxpZWQsIHRoZSBzZWNvbmQgdmFsdWUKLSAgICAvLyBpcyBpbXBsaWNpdGx5IGluaXRp
YWxpemVkIHdpdGggdGhlIGZpcnN0IHZhbHVlLgotICAgIGlmIChudW1WYWx1ZXMgPT0gMSkKLSAg
ICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7Ci0KLSAgICByZXR1cm4gcGFyc2VWaWV3cG9y
dFByb3BlcnR5KHNlY29uZCwgaW1wb3J0YW50KTsKLX0KLSNlbmRpZgotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgY2hhciBidWZmZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoICsgMSArIDFdOyAvLyAxIHRv
IHR1cm4gImFwcGxlIi8ia2h0bWwiIGludG8gIndlYmtpdCIsIDEgZm9yIG51bGwgY2hhcmFjdGVy
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IENoYXJhY3RlclR5cGUgYyA9IHByb3BlcnR5TmFtZVtpXTsKLSAgICAgICAgaWYgKGMgPT0gMCB8
fCBjID49IDB4N0YpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOyAvLyBp
bGxlZ2FsIGNoYXJhY3RlcgotICAgICAgICBidWZmZXJbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0g
ICAgfQotICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKLQotICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSBidWZmZXI7Ci0gICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsKLSNpZiBFTkFCTEUoTEVHQUNZ
X0NTU19WRU5ET1JfUFJFRklYRVMpCi0gICAgICAgIC8vIElmIHRoZSBwcmVmaXggaXMgLWFwcGxl
LSBvciAta2h0bWwtLCBjaGFuZ2UgaXQgdG8gLXdlYmtpdC0uCi0gICAgICAgIC8vIFRoaXMgbWFr
ZXMgdGhlIHN0cmluZyBvbmUgY2hhcmFjdGVyIGxvbmdlci4KLSAgICAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGVnYWN5Q1NTVmVuZG9yUHJlZml4ZXNF
bmFibGVkKCkKLSAgICAgICAgICAgICYmIChoYXNQcmVmaXgoYnVmZmVyLCBsZW5ndGgsICItYXBw
bGUtIikgfHwgaGFzUHJlZml4KGJ1ZmZlciwgbGVuZ3RoLCAiLWtodG1sLSIpKSkgewotICAgICAg
ICAgICAgbWVtbW92ZShidWZmZXIgKyA3LCBidWZmZXIgKyA2LCBsZW5ndGggKyAxIC0gNik7Ci0g
ICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCAiLXdlYmtpdCIsIDcpOwotICAgICAgICAgICAgKyts
ZW5ndGg7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgY3Nz
UHJvcGVydHlOYW1lSU9TQWxpYXNpbmcoYnVmZmVyLCBuYW1lLCBsZW5ndGgpOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgY29uc3QgUHJvcGVydHkqIGhhc2hUYWJsZUVudHJ5ID0gZmluZFByb3BlcnR5
KG5hbWUsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGhhc2hUYWJsZUVudHJ5ID8gc3RhdGljX2Nhc3Q8
Q1NTUHJvcGVydHlJRD4oaGFzaFRhYmxlRW50cnktPmlkKSA6IENTU1Byb3BlcnR5SW52YWxpZDsK
LX0KLQotQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwotICAgIGlmIChsZW5ndGgg
PiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUlu
dmFsaWQ7Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZy5pczhCaXQoKSA/IGNzc1Byb3BlcnR5SUQo
c3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NQcm9wZXJ0eUlEKHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlEKGNv
bnN0IENTU1BhcnNlclN0cmluZyYgc3RyaW5nKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1NTUHJv
cGVydHlJbnZhbGlkOwotICAgIGlmIChsZW5ndGggPiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0gICAgCi0gICAgcmV0dXJuIHN0
cmluZy5pczhCaXQoKSA/IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0
aCkgOiBjc3NQcm9wZXJ0eUlEKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQot
I2lmIFBMQVRGT1JNKElPUykKLXZvaWQgY3NzUHJvcGVydHlOYW1lSU9TQWxpYXNpbmcoY29uc3Qg
Y2hhciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVydHlOYW1lQWxpYXMsIHVuc2ln
bmVkJiBuZXdMZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiLXdlYmtp
dC1oeXBoZW5hdGUtbG9jYWxlIikpIHsKLSAgICAgICAgLy8gV29ya2VkIGluIGlPUyA0LjIuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHdlYmtpdExvY2FsZVtdID0gIi13ZWJraXQtbG9jYWxl
IjsKLSAgICAgICAgcHJvcGVydHlOYW1lQWxpYXMgPSB3ZWJraXRMb2NhbGU7Ci0gICAgICAgIG5l
d0xlbmd0aCA9IHN0cmxlbih3ZWJraXRMb2NhbGUpOwotICAgIH0KLX0KLSNlbmRpZgotCi1zdGF0
aWMgYm9vbCBpc0FwcGxlTGVnYWN5Q3NzVmFsdWVLZXl3b3JkKGNvbnN0IGNoYXIqIHZhbHVlS2V5
d29yZCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyIGFwcGxlUHJl
Zml4W10gPSAiLWFwcGxlLSI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgYXBwbGVTeXN0ZW1QcmVm
aXhbXSA9ICItYXBwbGUtc3lzdGVtIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogYXBwbGVXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlID0gZ2V0VmFsdWVOYW1lKENTU1ZhbHVlQXBwbGVXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlKTsKLQotICAgIHJldHVybiBoYXNQcmVmaXgodmFsdWVL
ZXl3b3JkLCBsZW5ndGgsIGFwcGxlUHJlZml4KQotICAgICAgICAmJiAhaGFzUHJlZml4KHZhbHVl
S2V5d29yZCwgbGVuZ3RoLCBhcHBsZVN5c3RlbVByZWZpeCkKLSAgICAgICAgJiYgIVdURjo6ZXF1
YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlS2V5d29yZCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhcHBsZVdpcmVsZXNzUGxheWJhY2tUYXJnZXRBY3RpdmUp
LCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyBDU1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENoYXJhY3RlclR5cGUqIHZhbHVl
S2V5d29yZCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGNoYXIgYnVmZmVyW21heENTU1ZhbHVl
S2V5d29yZExlbmd0aCArIDEgKyAxXTsgLy8gMSB0byB0dXJuICJhcHBsZSIvImtodG1sIiBpbnRv
ICJ3ZWJraXQiLCAxIGZvciBudWxsIGNoYXJhY3RlcgotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBDaGFyYWN0ZXJUeXBlIGMgPSB2YWx1ZUtl
eXdvcmRbaV07Ci0gICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQotICAgICAgICAgICAg
cmV0dXJuIENTU1ZhbHVlSW52YWxpZDsgLy8gaWxsZWdhbCBrZXl3b3JkLgotICAgICAgICBidWZm
ZXJbaV0gPSBXVEY6OnRvQVNDSUlMb3dlcihjKTsKLSAgICB9Ci0gICAgYnVmZmVyW2xlbmd0aF0g
PSAnXDAnOwotCi0gICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsKLSAgICAgICAgLy8gSWYgdGhl
IHByZWZpeCBpcyAtYXBwbGUtIG9yIC1raHRtbC0sIGNoYW5nZSBpdCB0byAtd2Via2l0LS4KLSAg
ICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgc3RyaW5nIG9uZSBjaGFyYWN0ZXIgbG9uZ2VyLgotICAg
ICAgICAvLyBPbiBpT1Mgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdmFsdWVzIHN0YXJ0aW5nIHdp
dGggLWFwcGxlLXN5c3RlbSB0byAtd2Via2l0LXN5c3RlbS4KLSAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSB0aGlzIG1hbmdsaW5nIHdpdGhvdXQgYnJlYWtpbmcgdGhlIHdlYi4KLSAgICAgICAgaWYg
KGlzQXBwbGVMZWdhY3lDc3NWYWx1ZUtleXdvcmQoYnVmZmVyLCBsZW5ndGgpIHx8IGhhc1ByZWZp
eChidWZmZXIsIGxlbmd0aCwgIi1raHRtbC0iKSkgewotICAgICAgICAgICAgbWVtbW92ZShidWZm
ZXIgKyA3LCBidWZmZXIgKyA2LCBsZW5ndGggKyAxIC0gNik7Ci0gICAgICAgICAgICBtZW1jcHko
YnVmZmVyLCAiLXdlYmtpdCIsIDcpOwotICAgICAgICAgICAgKytsZW5ndGg7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBjb25zdCBWYWx1ZSogaGFzaFRhYmxlRW50cnkgPSBmaW5kVmFsdWUoYnVm
ZmVyLCBsZW5ndGgpOwotICAgIHJldHVybiBoYXNoVGFibGVFbnRyeSA/IHN0YXRpY19jYXN0PENT
U1ZhbHVlSUQ+KGhhc2hUYWJsZUVudHJ5LT5pZCkgOiBDU1NWYWx1ZUludmFsaWQ7Ci19Ci0KLUNT
U1ZhbHVlSUQgY3NzVmFsdWVLZXl3b3JkSUQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOwotICAgIGlmIChsZW5ndGggPiBt
YXhDU1NWYWx1ZUtleXdvcmRMZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZUludmFsaWQ7
Ci0KLSAgICByZXR1cm4gc3RyaW5nLmlzOEJpdCgpID8gY3NzVmFsdWVLZXl3b3JkSUQoc3RyaW5n
LmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcuY2hhcmFj
dGVyczE2KCksIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGlubGluZSBib29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgQ2hh
cmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLQotICAgIC8vIC0/Ci0gICAg
aWYgKGNoYXJhY3RlcnMgIT0gZW5kICYmIGNoYXJhY3RlcnNbMF0gPT0gJy0nKQotICAgICAgICAr
K2NoYXJhY3RlcnM7Ci0KLSAgICAvLyB7bm1zdGFydH0KLSAgICBpZiAoY2hhcmFjdGVycyA9PSBl
bmQgfHwgIShjaGFyYWN0ZXJzWzBdID09ICdfJyB8fCBjaGFyYWN0ZXJzWzBdID49IDEyOCB8fCBp
c0FTQ0lJQWxwaGEoY2hhcmFjdGVyc1swXSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
KytjaGFyYWN0ZXJzOwotCi0gICAgLy8ge25tY2hhcn0qCi0gICAgZm9yICg7IGNoYXJhY3RlcnMg
IT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKLSAgICAgICAgaWYgKCEoY2hhcmFjdGVyc1swXSA9PSAn
XycgfHwgY2hhcmFjdGVyc1swXSA9PSAnLScgfHwgY2hhcmFjdGVyc1swXSA+PSAxMjggfHwgaXNB
U0NJSUFscGhhbnVtZXJpYyhjaGFyYWN0ZXJzWzBdKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vICJpZGVudCIgZnJvbSB0aGUg
Q1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5jZXMKLXN0YXRpYyBi
b29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihzdHJpbmcuY2hhcmFjdGVyczgoKSwg
bGVuZ3RoKTsKLSAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgCi0gICAgZm9yICg7IGNoYXJh
Y3RlcnMgIT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKLSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjID0g
Y2hhcmFjdGVyc1swXTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICch
JzoKLSAgICAgICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAgY2FzZSAnJCc6Ci0gICAgICAg
ICAgICBjYXNlICclJzoKLSAgICAgICAgICAgIGNhc2UgJyYnOgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoYyA8ICcqJykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChj
IDw9ICd+JykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYg
KGMgPCAxMjgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gInVybCIgZnJvbSB0aGUgQ1NT
IHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5jZXMKLXN0YXRpYyBib29s
IGlzQ1NTVG9rZW5pemVyVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBp
c0NTU1Rva2VuaXplclVSTChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1
cm4gaXNDU1NUb2tlbml6ZXJVUkwoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQot
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBTdHJp
bmcgcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRm9yIGVmZmljaWVuY3ksIHdlIGZpcnN0IHBy
ZS1jYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcXVvdGVkIHN0cmluZywgdGhlbiB3ZSBidWls
ZCB0aGUgYWN0dWFsIG9uZS4KLSAgICAvLyBQbGVhc2Ugc2VlIGJlbG93IGZvciB0aGUgYWN0dWFs
IGxvZ2ljLgotICAgIHVuc2lnbmVkIHF1b3RlZFN0cmluZ1NpemUgPSAyOyAvLyBUd28gcXVvdGVz
IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUgc3RyaW5nLgotICAgIGJvb2wgYWZ0ZXJFc2NhcGUgPSBm
YWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgQ2hhcmFjdGVyVHlwZSBjaCA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChjaCA9PSAn
XFwnIHx8IGNoID09ICdcJycpIHsKLSAgICAgICAgICAgIHF1b3RlZFN0cmluZ1NpemUgKz0gMjsK
LSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2gg
PCAweDIwIHx8IGNoID09IDB4N0YpIHsKLSAgICAgICAgICAgIHF1b3RlZFN0cmluZ1NpemUgKz0g
MiArIChjaCA+PSAweDEwKTsKLSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHF1b3RlZFN0cmluZ1NpemUgKz0gMSArIChhZnRlckVz
Y2FwZSAmJiAoaXNBU0NJSUhleERpZ2l0KGNoKSB8fCBjaCA9PSAnICcpKTsKLSAgICAgICAgICAg
IGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKHF1b3RlZFN0cmluZ1NpemUpOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKLSAgICBidWZmZXJbaW5kZXgrK10gPSAnXCcnOwotICAgIGFmdGVyRXNjYXBl
ID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoY2gg
PT0gJ1xcJyB8fCBjaCA9PSAnXCcnKSB7Ci0gICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSAn
XFwnOwotICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gY2g7Ci0gICAgICAgICAgICBhZnRl
ckVzY2FwZSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGNoIDwgMHgyMCB8fCBjaCA9PSAw
eDdGKSB7IC8vIENvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsr
XSA9ICdcXCc7Ci0gICAgICAgICAgICBwbGFjZUJ5dGVBc0hleENvbXByZXNzSWZQb3NzaWJsZShj
aCwgYnVmZmVyLCBpbmRleCwgTG93ZXJjYXNlKTsKLSAgICAgICAgICAgIGFmdGVyRXNjYXBlID0g
dHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNwYWNlIGNoYXJhY3RlciBt
YXkgYmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5jZSBhbmQg
bm9ybWFsIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBpZiAoYWZ0ZXJFc2NhcGUgJiYgKGlzQVND
SUlIZXhEaWdpdChjaCkgfHwgY2ggPT0gJyAnKSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaW5k
ZXgrK10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBjaDsKLSAgICAgICAg
ICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnVmZmVyW2lu
ZGV4KytdID0gJ1wnJzsKLQotICAgIEFTU0VSVChxdW90ZWRTdHJpbmdTaXplID09IGluZGV4KTsK
LSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQotCi0vLyBXZSB1c2Ugc2luZ2xl
IHF1b3RlcyBmb3Igbm93IGJlY2F1c2UgbWFya3VwLmNwcCB1c2VzIGRvdWJsZSBxdW90ZXMuCi1T
dHJpbmcgcXVvdGVDU1NTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBleHBhbmRzIGVhY2ggY2hhcmFjdGVyIHRvIGF0IG1vc3QgMyBjaGFyYWN0ZXJz
ICgnXHUwMDEwJyAtPiAnXCcgJzEnICcwJykgYXMgd2VsbCBhcyBhZGRzCi0gICAgLy8gMiBxdW90
ZSBjaGFyYWN0ZXJzIChiZWZvcmUgYW5kIGFmdGVyKS4gTWFrZSBzdXJlIHRoZSByZXN1bHRpbmcg
c2l6ZSAoMyAqIGxlbmd0aCArIDIpIHdpbGwgbm90IG92ZXJmbG93IHVuc2lnbmVkLgotCi0gICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlwnXCciKTsKLQotICAgIGlmIChsZW5ndGggPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyAzIC0gMikKLSAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KTsKLSAgICByZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2
KCksIGxlbmd0aCk7Ci19Ci0KLVN0cmluZyBxdW90ZUNTU1N0cmluZ0lmTmVlZGVkKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIoc3Ry
aW5nKSA/IHN0cmluZyA6IHF1b3RlQ1NTU3RyaW5nKHN0cmluZyk7Ci19Ci0KLVN0cmluZyBxdW90
ZUNTU1VSTElmTmVlZGVkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBpc0NT
U1Rva2VuaXplclVSTChzdHJpbmcpID8gc3RyaW5nIDogcXVvdGVDU1NTdHJpbmcoc3RyaW5nKTsK
LX0KLQotYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB0b2tlbikK
LXsKLSAgICAvLyBUaGUgdG9rZW5pemVyIGNoZWNrcyBmb3IgdGhlIGNvbnN0cnVjdCBvZiBhbiti
LgotICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSB7aWRlbnR9IHJ1bGUgcHJlY2VkZXMgdGhlIHtu
dGh9IHJ1bGUsIHNvbWUgb2YgdGhvc2UKLSAgICAvLyB0b2tlbnMgYXJlIGlkZW50aWZpZWQgYXMg
c3RyaW5nIGxpdGVyYWwuIEZ1cnRoZXJtb3JlIHdlIG5lZWQgdG8gYWNjZXB0Ci0gICAgLy8gIm9k
ZCIgYW5kICJldmVuIiB3aGljaCBkb2VzIG5vdCBtYXRjaCB0byBhbitiLgotICAgIHJldHVybiBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbiwgIm9kZCIpCi0gICAgICAgIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiZXZlbiIpCi0gICAgICAgIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAibiIpCi0gICAgICAgIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiLW4iKTsKLX0KLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOSAtIDIwMTAgIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlv
blZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Bh
cnNlck1vZGUuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiU291cmNl
U2l6ZUxpc3QuaCIKLSNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKLSNpbmNsdWRlICJXZWJL
aXRDU1NGaWx0ZXJWYWx1ZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KLQotI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCi0jaW5jbHVkZSAiR3JpZEFyZWEuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFuaW1hdGlvblBhcnNlQ29udGV4dDsKLWNsYXNz
IENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTsKLWNsYXNzIENTU0NvbnRlbnREaXN0cmlidXRpb25W
YWx1ZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xhc3MgQ1NTU2VsZWN0b3JMaXN0Owot
Y2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBDU1NWYWx1ZUxpc3Q7Ci1jbGFzcyBDU1NCYXNpY1NoYXBl
OwotY2xhc3MgQ1NTQmFzaWNTaGFwZUNpcmNsZTsKLWNsYXNzIENTU0Jhc2ljU2hhcGVFbGxpcHNl
OwotY2xhc3MgQ1NTQmFzaWNTaGFwZUluc2V0OwotY2xhc3MgQ1NTQmFzaWNTaGFwZVBhdGg7Ci1j
bGFzcyBDU1NCYXNpY1NoYXBlUG9seWdvbjsKLWNsYXNzIENTU0dyaWRMaW5lTmFtZXNWYWx1ZTsK
LWNsYXNzIENTU0ltYWdlU2V0VmFsdWU7Ci1jbGFzcyBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVl
OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgSW1tdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOwotY2xhc3MgTWVkaWFRdWVyeUV4cHJlc3Npb247Ci1jbGFzcyBNZWRpYVF1ZXJ5
U2V0OwotY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydGllczsKLWNsYXNzIFNWR0NvbG9yOwotY2xh
c3MgU1ZHUGFpbnQ7Ci1jbGFzcyBTdHlsZUtleWZyYW1lOwotY2xhc3MgU3R5bGVQcm9wZXJ0eVNo
b3J0aGFuZDsKLWNsYXNzIFN0eWxlUnVsZTsKLWNsYXNzIFN0eWxlUnVsZUJhc2U7Ci1jbGFzcyBT
dHlsZVJ1bGVGb250RmFjZTsKLWNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKLWNsYXNzIFN0eWxl
UnVsZU1lZGlhOwotY2xhc3MgU3R5bGVSdWxlUGFnZTsKLWNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsK
LWNsYXNzIFN0eWxlUnVsZVN1cHBvcnRzOwotY2xhc3MgU3R5bGVSdWxlVmlld3BvcnQ7Ci1jbGFz
cyBTdHlsZUtleWZyYW1lOwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotY2xhc3MgU3R5bGVk
RWxlbWVudDsKLWNsYXNzIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOwotCi1jbGFzcyBDU1NQYXJz
ZXIgewotICAgIGZyaWVuZCBpbmxpbmUgaW50IGNzc3l5bGV4KHZvaWQqLCBDU1NQYXJzZXIqKTsK
LQotcHVibGljOgotICAgIHN0cnVjdCBMb2NhdGlvbjsKLSAgICBlbnVtIFN5bnRheEVycm9yVHlw
ZSB7Ci0gICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb25FcnJvciwKLSAgICAgICAgR2VuZXJhbFN5
bnRheEVycm9yCi0gICAgfTsKLQotICAgIGVudW0gY2xhc3MgUGFyc2VSZXN1bHQgewotICAgICAg
ICBDaGFuZ2VkLAotICAgICAgICBVbmNoYW5nZWQsCi0gICAgICAgIEVycm9yCi0gICAgfTsKLQot
ICAgIGNsYXNzIFZhbHVlV2l0aENhbGN1bGF0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4
cGxpY2l0IFZhbHVlV2l0aENhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLSAgICAg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgICAgICBvcGVyYXRv
ciBDU1NQYXJzZXJWYWx1ZSYoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICAgICAgUmVmUHRy
PENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NhbGN1bGF0aW9u
OyB9Ci0gICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVmUHRyPENTU0NhbGNWYWx1ZT4mJiBj
YWxjdWxhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24o
bV92YWx1ZSkpOwotICAgICAgICAgICAgbV9jYWxjdWxhdGlvbiA9IGNhbGN1bGF0aW9uOwotICAg
ICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgbV92YWx1ZTsK
LSAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjdWxhdGlvbjsKLSAgICB9OwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyKGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB+Q1NTUGFyc2VyKCk7Ci0KLSAgICB2b2lkIHBhcnNlU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVGV4dFBvc2l0aW9uJiwgUnVs
ZVNvdXJjZURhdGFMaXN0KiwgYm9vbCBsb2dFcnJvcnMpOwotICAgIFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7Ci0gICAg
UmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50
cyosIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25z
dCBTdHJpbmcmKTsKLQotICAgIHN0YXRpYyBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVT
dHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9y
dGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7Ci0gICAgc3RhdGljIFBh
cnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYsIGJvb2wg
aW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KTsKLQotICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29u
c3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFN5c3RlbUNvbG9yVmFsdWUoQ1NTVmFsdWVJRCk7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0
ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwotICAgIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJik7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0
aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1bGF0aW9uJik7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyYs
IGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiwgU3R5bGVTaGVldENv
bnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0gICAgc3RhdGljIFJlZjxJbW11dGFibGVTdHls
ZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBF
bGVtZW50Kik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVy
eShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgYWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFy
aWFudChDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYsIGJvb2wgaW1wb3J0YW50LCBi
b29sIGltcGxpY2l0ID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCwgUmVmUHRyPENTU1ZhbHVlPiYmLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZh
bHNlKTsKLSAgICB2b2lkIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoaW50IG51bSk7Ci0gICAgYm9v
bCBoYXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0Vt
cHR5KCk7IH0KLSAgICB2b2lkIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmLCBib29sKTsKLQotICAgIGJvb2wgcGFyc2VWYWx1
ZShDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVNob3J0aGFu
ZChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiwgYm9vbCBpbXBv
cnRhbnQpOwotICAgIGJvb2wgcGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1By
b3BlcnR5SUQqIHByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQ29u
dGVudChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVF1b3Rl
cyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUFsdChDU1NQ
cm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgCi0gICAgYm9vbCBwYXJzZUN1c3RvbVBy
b3BlcnR5RGVjbGFyYXRpb24oYm9vbCBpbXBvcnRhbnQsIENTU1ZhbHVlSUQpOwotICAgIAotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBdHRyKENTU1BhcnNlclZhbHVlTGlzdCYg
YXJncyk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQmFja2dyb3VuZENv
bG9yKCk7Ci0KLSAgICBzdHJ1Y3QgU291cmNlU2l6ZSB7Ci0gICAgICAgIE1lZGlhUXVlcnlFeHBy
ZXNzaW9uIGV4cHJlc3Npb247Ci0gICAgICAgIFJlZjxDU1NWYWx1ZT4gbGVuZ3RoOwotCi0gICAg
ICAgIFNvdXJjZVNpemUoU291cmNlU2l6ZSYmKTsKLSAgICAgICAgU291cmNlU2l6ZShNZWRpYVF1
ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+JiYpOwotICAgIH07Ci0gICAgVmVjdG9yPFNv
dXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyk7Ci0gICAgT3B0aW9uYWw8
U291cmNlU2l6ZT4gc291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBDU1NQYXJzZXJW
YWx1ZSYpOwotCi0gICAgYm9vbCBwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBS
ZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBlbnVtIEZpbGxQb3NpdGlvbkZsYWcgeyBJbnZhbGlk
RmlsbFBvc2l0aW9uID0gMCwgQW1iaWd1b3VzRmlsbFBvc2l0aW9uID0gMSwgWEZpbGxQb3NpdGlv
biA9IDIsIFlGaWxsUG9zaXRpb24gPSA0IH07Ci0gICAgZW51bSBGaWxsUG9zaXRpb25QYXJzaW5n
TW9kZSB7IFJlc29sdmVWYWx1ZXNBc1BlcmNlbnQgPSAwLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3Jk
ID0gMSB9OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25D
b21wb25lbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgdW5zaWduZWQmIGN1bXVsYXRpdmVGbGFncywg
RmlsbFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQb3NpdGlvblBhcnNpbmdNb2Rl
ID0gUmVzb2x2ZVZhbHVlc0FzUGVyY2VudCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZVBvc2l0aW9uWChDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHBhcnNlUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAgIHZv
aWQgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0gICAgYm9v
bCBpc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICB2b2lkIHBh
cnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0gICAgdm9pZCBwYXJzZTNWYWx1
ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7Ci0gICAgdm9pZCBwYXJzZTRWYWx1ZXNGaWxs
UG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYsIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7Ci0KLSAgICB2b2lkIHBhcnNlRmlsbFJlcGVhdChSZWZQ
dHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBib29sICZhbGxvd0NvbW1hKTsK
LQotICAgIGJvb2wgcGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1By
b3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIFJlZlB0cjxDU1NWYWx1
ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUZpbGxTaG9ydGhhbmQoQ1NT
UHJvcGVydHlJRCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVydGllcywgaW50IG51bVByb3Bl
cnRpZXMsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIHZvaWQgYWRkRmlsbFZhbHVlKFJlZlB0cjxD
U1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKTsKLSAgICB2b2lkIGFkZEFuaW1h
dGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKTsK
LQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25EZWxheSgpOwot
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5pbWF0aW9uRmlsbE1vZGUoKTsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5pbWF0aW9uTmFtZSgp
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25QbGF5U3RhdGUo
KTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQW5pbWF0aW9uUHJvcGVydHko
QW5pbWF0aW9uUGFyc2VDb250ZXh0Jik7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1h
dGlvblRpbWluZ0Z1bmN0aW9uKCk7Ci0jaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIp
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvblRyaWdnZXIoKTsKLSNlbmRpZgot
ICAgIHN0YXRpYyBWZWN0b3I8ZG91YmxlPiBwYXJzZUtleWZyYW1lU2VsZWN0b3IoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBib29sIHBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENT
U1ZhbHVlPiYpOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBw
YXJzZVNwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAg
Ym9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1
ZT4mLCBBbmltYXRpb25QYXJzZUNvbnRleHQmKTsKLSAgICBib29sIHBhcnNlVHJhbnNpdGlvblNo
b3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUFu
aW1hdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBi
b29sIGlzU3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkKCkgY29uc3Q7Ci0KLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uV2lkdGgoKTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uQ291bnQoKTsKLSAgICBib29sIHBhcnNlQ29sdW1uc1No
b3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLSAgICBib29sIGlzVGV4dEF1dG9zaXppbmdFbmFibGVkKCkgY29uc3Q7Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgYm9vbCBpc0NTU0dyaWRMYXlvdXRFbmFi
bGVkKCkgY29uc3Q7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRQb3NpdGlvbigpOwot
ICAgIGJvb2wgcGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBlbnVtIFRyYWNrTGlzdFR5cGUgeyBHcmlkVGVtcGxhdGUsIEdy
aWRUZW1wbGF0ZU5vUmVwZWF0LCBHcmlkQXV0byB9OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFy
c2VHcmlkVGVtcGxhdGVDb2x1bW5zKFRyYWNrTGlzdFR5cGUgPSBHcmlkVGVtcGxhdGUpOwotICAg
IGJvb2wgcGFyc2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXNBbmRDb2x1bW5zKGJvb2wgaW1wb3J0
YW50KTsKLSAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlR3JpZFNob3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0gICAgYm9v
bCBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNl
R3JpZEdhcFNob3J0aGFuZChib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVNpbmdsZUdy
aWRBcmVhTG9uZ2hhbmQoUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VHcmlkVHJhY2tMaXN0KFRyYWNrTGlzdFR5cGUpOwotICAgIGJvb2wgcGFyc2VHcmlkVHJh
Y2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmLCBib29sJiBpc0F1dG9SZXBlYXQsIGJvb2wm
IGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlk
VHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KTsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICBi
b29sIHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFtZWRHcmlkQXJlYU1hcCYsIGNvbnN0IHVu
c2lnbmVkLCB1bnNpZ25lZCYpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVGVtcGxh
dGVBcmVhcygpOwotICAgIGJvb2wgcGFyc2VHcmlkTGluZU5hbWVzKENTU1BhcnNlclZhbHVlTGlz
dCYsIENTU1ZhbHVlTGlzdCYsIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSogPSBudWxscHRyKTsKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlR3JpZEF1dG9GbG93KENTU1BhcnNlclZhbHVlTGlzdCYp
OwotI2VuZGlmCi0KLSAgICBib29sIHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlE
LCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5
SUQsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgcGFyc2VMZWdhY3lQb3NpdGlvbihDU1NQ
cm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUl0ZW1Qb3NpdGlvbk92
ZXJmbG93UG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIFJlZlB0
cjxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+IHBhcnNlQ29udGVudERpc3RyaWJ1dGlvbk92
ZXJmbG93UG9zaXRpb24oKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwotI2VuZGlmCi0KLSAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0
eUlEIHByb3BJZCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUJhc2ljU2hh
cGUoKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlU2hhcGVSYWRpdXMoQ1NT
UGFyc2VyVmFsdWUmKTsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZUNpcmNsZT4gcGFyc2VCYXNp
Y1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NCYXNpY1No
YXBlRWxsaXBzZT4gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QmKTsK
LSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZVBvbHlnb24+IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24o
Q1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVQYXRoPiBwYXJz
ZUJhc2ljU2hhcGVQYXRoKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NCYXNp
Y1NoYXBlSW5zZXQ+IHBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYpOwot
Ci0gICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpOwotICAgIHZvaWQgcGFyc2VTeXN0
ZW1Gb250KGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZv
bnRGYW1pbHkoKTsKLQotICAgIGJvb2wgcGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQsIGludCBk
ZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGNv
dW50ZXJzKTsKLQotICAgIGJvb2wgcGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUm
LCBpbnQqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEpOwotICAgIGJvb2wgcGFyc2VIU0xQ
YXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiwgZG91YmxlKiBjb2xvclZhbHVlcywgYm9vbCBwYXJz
ZUFscGhhKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sb3IoQ1NTUGFy
c2VyVmFsdWUqID0gbnVsbHB0cik7Ci0gICAgYm9vbCBwYXJzZUNvbG9yRnJvbVZhbHVlKENTU1Bh
cnNlclZhbHVlJiwgUkdCQTMyJik7Ci0gICAgdm9pZCBwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYsIENTU1NlbGVjdG9yTGlzdCYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZT4KLSAgICBzdGF0aWMgYm9vbCBmYXN0UGFyc2VDb2xvcihSR0JBMzImLCBjb25zdCBTdHJpbmdU
eXBlJiwgYm9vbCBzdHJpY3QpOwotCi0gICAgYm9vbCBwYXJzZUxpbmVIZWlnaHQoYm9vbCBpbXBv
cnRhbnQpOwotICAgIGJvb2wgcGFyc2VGb250U2l6ZShib29sIGltcG9ydGFudCk7Ci0gICAgYm9v
bCBwYXJzZUZvbnRXZWlnaHQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VGb250U3lu
dGhlc2lzKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlRm9udEZhY2VTcmMoKTsKLSAg
ICBib29sIHBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKTsKLQotICAgIGJvb2wgcGFyc2VTVkdW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIFJlZlB0cjxT
VkdQYWludD4gcGFyc2VTVkdQYWludCgpOwotICAgIFJlZlB0cjxTVkdDb2xvcj4gcGFyc2VTVkdD
b2xvcigpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5
KCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VQYWludE9yZGVyKCk7Ci0KLSAgICAv
LyBDU1MzIFBhcnNpbmcgUm91dGluZXMgKGZvciBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIENTUzMp
Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0
JiwgQ1NTUHJvcGVydHlJRCk7Ci0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlKENTU1Byb3BlcnR5
SUQsIFJlZlB0cjxDU1NWYWx1ZT4mLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKLSAgICBib29s
IHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIGJvb2wgcGFy
c2VCb3JkZXJJbWFnZVNsaWNlKENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlV2lkdGgoUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYpOwotICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZU91dHNldChSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9w
ZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlQXNwZWN0UmF0aW8oYm9v
bCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCwgYm9v
bCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBh
cmdzLCBib29sIGltcG9ydGFudCk7Ci0KLSAgICAvLyBJbWFnZSBnZW5lcmF0b3JzCi0gICAgYm9v
bCBwYXJzZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0g
ICAgYm9vbCBwYXJzZU5hbWVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1Zh
bHVlPiYpOwotCi0gICAgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZURlcHJlY2F0ZWRMaW5l
YXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgQ1NTR3Jh
ZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNlRGVwcmVjYXRlZFJhZGlhbEdy
YWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVu
dFJlcGVhdCByZXBlYXRpbmcpOwotICAgIGJvb2wgcGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJz
ZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0
aW5nKTsKLSAgICBib29sIHBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZyk7Ci0gICAgYm9v
bCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBDU1NHcmFkaWVu
dFZhbHVlJiwgYm9vbCBleHBlY3RDb21tYSk7Ci0KLSAgICBib29sIHBhcnNlQ3Jvc3NmYWRlKENT
U1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBib29sIHByZWZpeGVkKTsKLQot
I2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBwYXJzZUltYWdlUmVzb2x1dGlvbigpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8Q1NTSW1hZ2VT
ZXRWYWx1ZT4gcGFyc2VJbWFnZVNldCgpOwotCi0gICAgYm9vbCBwYXJzZUZpbHRlckltYWdlKENT
U1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKLQotICAgIGJvb2wgcGFyc2VG
aWx0ZXIoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlTGlzdD4mKTsKLSAgICBS
ZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhD
U1NQYXJzZXJWYWx1ZUxpc3QmLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9u
VHlwZSk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ2xpcFBhdGgoKTsKLQotICAgIHN0
YXRpYyBib29sIGlzQmxlbmRNb2RlKENTU1ZhbHVlSUQpOwotICAgIHN0YXRpYyBib29sIGlzQ29t
cG9zaXRlT3BlcmF0b3IoQ1NTVmFsdWVJRCk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBw
YXJzZVRyYW5zZm9ybSgpOwotICAgIFJlZlB0cjxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4gcGFy
c2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgcGFyc2VUcmFuc2Zv
cm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsIENT
U1Byb3BlcnR5SUQmIHByb3BJZDIsIENTU1Byb3BlcnR5SUQmIHByb3BJZDMsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENTU1Zh
bHVlPiYpOwotICAgIGJvb2wgcGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMiwgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0K
LSAgICBib29sIHBhcnNlVGV4dEVtcGhhc2lzU3R5bGUoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJv
b2wgcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihib29sIGltcG9ydGFudCk7Ci0KLSAgICB2b2lk
IGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVl
PiYmLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRleHREZWNvcmF0aW9uKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRleHREZWNv
cmF0aW9uU2tpcChib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRleHRVbmRlcmxpbmVQ
b3NpdGlvbihib29sIGltcG9ydGFudCk7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJz
ZVRleHRJbmRlbnQoKTsKLSAgICAKLSAgICBib29sIHBhcnNlSGFuZ2luZ1B1bmN0dWF0aW9uKGJv
b2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgcGFyc2VMaW5lQm94Q29udGFpbihib29sIGltcG9y
dGFudCk7Ci0gICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gcGFyc2VDYWxjdWxhdGlvbihDU1NQYXJz
ZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVSYW5nZSk7Ci0KLSAgICBib29sIHBh
cnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7Ci0gICAgYm9vbCBwYXJzZUZvbnRGZWF0
dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZUZsb3dUaHJlYWQo
Q1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VSZWdpb25UaHJl
YWQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotCi0gICAgYm9vbCBwYXJzZUZvbnRW
YXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJv
b2wgaW1wbGljaXQpOwotICAgIGJvb2wgcGFyc2VGb250VmFyaWFudE51bWVyaWMoYm9vbCBpbXBv
cnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNpdCk7Ci0gICAgYm9vbCBw
YXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0Zh
aWx1cmUsIGJvb2wgaW1wbGljaXQpOwotICAgIGJvb2wgcGFyc2VGb250VmFyaWFudChib29sIGlt
cG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlV2lsbENoYW5nZShib29sIGltcG9ydGFudCk7Ci0K
LSAgICAvLyBGYXN0ZXIgdGhhbiBkb2luZyBhIG5ldy9kZWxldGUgZWFjaCB0aW1lIHNpbmNlIGl0
IGtlZXBzIG9uZSB2ZWN0b3IuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gY3JlYXRlU2VsZWN0b3JWZWN0b3IoKTsKLSAgICB2
b2lkIHJlY3ljbGVTZWxlY3RvclZlY3RvcihzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+Pik7Ci0KLSAgICBSZWZQdHI8U3R5bGVSdWxlSW1w
b3J0PiBjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYsIFJlZlB0cjxNZWRp
YVF1ZXJ5U2V0PiYmKTsKLSAgICBSZWZQdHI8U3R5bGVLZXlmcmFtZT4gY3JlYXRlS2V5ZnJhbWUo
Q1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmPFN0eWxlUnVsZUtleWZyYW1lcz4gY3JlYXRl
S2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0
cjxTdHlsZUtleWZyYW1lPj4+KTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4gUnVsZUxpc3Q7Ci0gICAgUmVmPFN0eWxlUnVsZU1lZGlhPiBjcmVhdGVNZWRpYVJ1
bGUoUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYsIFJ1bGVMaXN0Kik7Ci0gICAgUmVmPFN0eWxlUnVs
ZU1lZGlhPiBjcmVhdGVFbXB0eU1lZGlhUnVsZShSdWxlTGlzdCopOwotICAgIFJlZlB0cjxTdHls
ZVJ1bGU+IGNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4qIHNlbGVjdG9ycyk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBjcmVh
dGVGb250RmFjZVJ1bGUoKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlUGFnZT4gY3JlYXRlUGFnZVJ1
bGUoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwotICAg
IFJlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1
bGVzKTsKLSAgICB2b2lkIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94
VHlwZSk7Ci0gICAgUmVmPFN0eWxlUnVsZVN1cHBvcnRzPiBjcmVhdGVTdXBwb3J0c1J1bGUoYm9v
bCBjb25kaXRpb25Jc1N1cHBvcnRlZCwgUnVsZUxpc3QqKTsKLSAgICB2b2lkIG1hcmtTdXBwb3J0
c1J1bGVIZWFkZXJTdGFydCgpOwotICAgIHZvaWQgbWFya1N1cHBvcnRzUnVsZUhlYWRlckVuZCgp
OwotICAgIFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcG9wU3VwcG9ydHNSdWxlRGF0YSgpOwotCi0g
ICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwotICAgIHZvaWQgZW5kRGVj
bGFyYXRpb25zRm9yTWFyZ2luQm94KCk7Ci0KLSAgICB2b2lkIGFkZE5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOwotICAgIFF1YWxp
ZmllZE5hbWUgZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7Ci0KLSAgICB2b2lkIHJld3JpdGVT
cGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlUHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1lLCBDU1NQYXJzZXJTZWxlY3RvciYp
OwotICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3ImLCBib29sIGlzTmFtZXNwYWNlUGxh
Y2Vob2xkZXIgPSBmYWxzZSk7Ci0gICAgdm9pZCByZXdyaXRlU3BlY2lmaWVyc1dpdGhOYW1lc3Bh
Y2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gcmV3cml0ZVNwZWNpZmllcnMoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPik7Ci0KLSAgICB2
b2lkIGludmFsaWRCbG9ja0hpdCgpOwotCi0gICAgdm9pZCB1cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKLSAgICB2b2lkIHVwZGF0ZUxhc3RNZWRpYUxpbmUoTWVkaWFRdWVyeVNl
dCYpOwotCi0gICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKTsKLQotICAgIFJlZjxJbW11dGFibGVT
dHlsZVByb3BlcnRpZXM+IGNyZWF0ZVN0eWxlUHJvcGVydGllcygpOwotCi0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGludmFsaWRQYXJzZWRQcm9wZXJ0aWVzQ291bnQ7Ci0KLSAgICBDU1NQYXJz
ZXJDb250ZXh0IG1fY29udGV4dDsKLQotICAgIGJvb2wgbV9pbXBvcnRhbnQgeyBmYWxzZSB9Owot
ICAgIENTU1Byb3BlcnR5SUQgbV9pZCB7IENTU1Byb3BlcnR5SW52YWxpZCB9OwotICAgIEF0b21p
Y1N0cmluZyBtX2N1c3RvbVByb3BlcnR5TmFtZTsKLSAgICBTdHlsZVNoZWV0Q29udGVudHMqIG1f
c3R5bGVTaGVldCB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbV9ydWxl
OwotICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tleWZyYW1lOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxTb3VyY2VTaXplPj4gbV9zb3VyY2VTaXplTGlzdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKLSAgICBib29sIG1fc3VwcG9ydHNDb25kaXRp
b24geyBmYWxzZSB9OwotCi0gICAgUGFyc2VkUHJvcGVydHlWZWN0b3IgbV9wYXJzZWRQcm9wZXJ0
aWVzOwotICAgIENTU1NlbGVjdG9yTGlzdCogbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9y
IHsgbnVsbHB0ciB9OwotCi0gICAgdW5zaWduZWQgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3Jl
TWFyZ2luQm94IHsgaW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3VudCB9OwotCi0gICAgaW50IG1f
aW5QYXJzZVNob3J0aGFuZCB7IDAgfTsKLSAgICBDU1NQcm9wZXJ0eUlEIG1fY3VycmVudFNob3J0
aGFuZCB7IENTU1Byb3BlcnR5SW52YWxpZCB9OwotICAgIGJvb2wgbV9pbXBsaWNpdFNob3J0aGFu
ZCB7IGZhbHNlIH07Ci0KLSAgICBib29sIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZSB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2xvZ0Vycm9ycyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ln
bm9yZUVycm9yc0luRGVjbGFyYXRpb24geyBmYWxzZSB9OwotCi0gICAgQXRvbWljU3RyaW5nIG1f
ZGVmYXVsdE5hbWVzcGFjZSB7IHN0YXJBdG9tIH07Ci0KLSAgICAvLyB0b2tlbml6ZXIgbWV0aG9k
cyBhbmQgZGF0YQotICAgIHNpemVfdCBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGggeyAwIH07Ci0g
ICAgdW5zaWduZWQgbV9uZXN0ZWRTZWxlY3RvckxldmVsIHsgMCB9OwotICAgIFNvdXJjZVJhbmdl
IG1fc2VsZWN0b3JSYW5nZTsKLSAgICBTb3VyY2VSYW5nZSBtX3Byb3BlcnR5UmFuZ2UgeyBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+
IG1fY3VycmVudFJ1bGVEYXRhU3RhY2s7Ci0gICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBt
X2N1cnJlbnRSdWxlRGF0YTsKLSAgICBSdWxlU291cmNlRGF0YUxpc3QqIG1fcnVsZVNvdXJjZURh
dGFSZXN1bHQgeyBudWxscHRyIH07Ci0KLSAgICB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5n
ZXMoQ1NTUnVsZVNvdXJjZURhdGEmKTsKLSAgICB2b2lkIG1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NT
UnVsZVNvdXJjZURhdGE6OlR5cGUpOwotICAgIHZvaWQgbWFya1J1bGVIZWFkZXJFbmQoKTsKLQot
ICAgIHZvaWQgc3RhcnROZXN0ZWRTZWxlY3Rvckxpc3QoKSB7ICsrbV9uZXN0ZWRTZWxlY3Rvckxl
dmVsOyB9Ci0gICAgdm9pZCBlbmROZXN0ZWRTZWxlY3Rvckxpc3QoKSB7IC0tbV9uZXN0ZWRTZWxl
Y3RvckxldmVsOyB9Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JTdGFydCgpOwotICAgIHZvaWQgbWFy
a1NlbGVjdG9yRW5kKCk7Ci0KLSAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7Ci0gICAgdm9p
ZCBtYXJrUnVsZUJvZHlFbmQoKTsKLSAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0YXJ0KCk7Ci0gICAg
dm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVy
dHlQYXJzZWQpOwotICAgIHZvaWQgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5l
ZWRlZCgpOwotICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShSZWY8Q1NTUnVsZVNvdXJj
ZURhdGE+JiYpOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcG9wUnVsZURhdGEoKTsK
LSAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0g
bV9wcm9wZXJ0eVJhbmdlLmVuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsgfQotICAgIGJvb2wgaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuICEh
bV9jdXJyZW50UnVsZURhdGFTdGFjazsgfQotICAgIHZvaWQgc3ludGF4RXJyb3IoY29uc3QgTG9j
YXRpb24mLCBTeW50YXhFcnJvclR5cGUgPSBHZW5lcmFsU3ludGF4RXJyb3IpOwotCi0gICAgaW5s
aW5lIGludCBsZXgodm9pZCogeXlsdmFsKSB7IHJldHVybiAodGhpcy0+Km1fbGV4RnVuYykoeXls
dmFsKTsgfQotCi0gICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90b2tlbjsgfQotCi0jaWYgRU5B
QkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLSAgICB2b2lkIG1hcmtWaWV3cG9ydFJ1bGVCb2R5
U3RhcnQoKSB7IG1faW5WaWV3cG9ydCA9IHRydWU7IH0KLSAgICB2b2lkIG1hcmtWaWV3cG9ydFJ1
bGVCb2R5RW5kKCkgeyBtX2luVmlld3BvcnQgPSBmYWxzZTsgfQotICAgIFJlZjxTdHlsZVJ1bGVW
aWV3cG9ydD4gY3JlYXRlVmlld3BvcnRSdWxlKCk7Ci0jZW5kaWYKLQotICAgIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKFZhbHVlV2l0aENhbGN1bGF0
aW9uJik7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVTdHJpbmdW
YWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotCi0gICAgc3RhdGljIFVSTCBjb21wbGV0ZVVSTChjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwpOwotCi0gICAgTG9jYXRpb24g
Y3VycmVudExvY2F0aW9uKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWxjdWxhdGlvbihDU1NQYXJz
ZXJWYWx1ZSYpOwotCi0gICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eU5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpIHsgbV9jdXN0b21Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5h
bWU7IH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYXJpYWJsZURlcGVuZGVudFZhbHVl
KENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUmLCBjb25zdCBD
dXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uLCBX
cml0aW5nTW9kZSk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpczhCaXRTb3VyY2UoKSB7IHJldHVy
biBtX2lzOEJpdFNvdXJjZTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZUNoYXJh
Y3RlclR5cGU+Ci0gICAgaW50IHJlYWxMZXgodm9pZCogeXlsdmFsKTsKLQotICAgIFVDaGFyKiYg
Y3VycmVudENoYXJhY3RlcjE2KCk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLSAgICBpbmxpbmUgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnRDaGFyYWN0ZXIoKTsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBDaGFyYWN0
ZXJUeXBlKiB0b2tlblN0YXJ0KCk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLSAgICBpbmxpbmUgdm9pZCBzZXRUb2tlblN0YXJ0KENoYXJhY3RlclR5cGUqKTsKLQot
ICAgIGlubGluZSB1bnNpZ25lZCB0b2tlblN0YXJ0T2Zmc2V0KCk7Ci0gICAgaW5saW5lIFVDaGFy
IHRva2VuU3RhcnRDaGFyKCk7Ci0KLSAgICBpbmxpbmUgdW5zaWduZWQgY3VycmVudENoYXJhY3Rl
ck9mZnNldCgpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAg
aW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotICAgIHVuc2lnbmVkIHBhcnNlRXNjYXBlKENoYXJhY3RlclR5cGUq
Jik7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERlc3RDaGFyYWN0ZXJUeXBlPgotICAgIGlubGlu
ZSB2b2lkIFVuaWNvZGVUb0NoYXJzKERlc3RDaGFyYWN0ZXJUeXBlKiYsIHVuc2lnbmVkKTsKLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJh
Y3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgcGFyc2VJZGVudGlmaWVySW50ZXJuYWwoU3JjQ2hh
cmFjdGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBib29sJik7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBwYXJzZUlkZW50aWZp
ZXIoQ2hhcmFjdGVyVHlwZSomLCBDU1NQYXJzZXJTdHJpbmcmLCBib29sJik7Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5
cGU+Ci0gICAgaW5saW5lIGJvb2wgcGFyc2VTdHJpbmdJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBl
KiYsIERlc3RDaGFyYWN0ZXJUeXBlKiYsIFVDaGFyKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNlU3RyaW5nKENoYXJhY3RlclR5
cGUqJiwgQ1NTUGFyc2VyU3RyaW5nJiByZXN1bHRTdHJpbmcsIFVDaGFyKTsKLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBib29sIGZpbmRVUkkoQ2hh
cmFjdGVyVHlwZSomIHN0YXJ0LCBDaGFyYWN0ZXJUeXBlKiYgZW5kLCBVQ2hhciYgcXVvdGUpOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNyY0NoYXJhY3RlclR5cGUsIHR5cGVuYW1lIERlc3RD
aGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBib29sIHBhcnNlVVJJSW50ZXJuYWwoU3JjQ2hhcmFj
dGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBVQ2hhciBxdW90ZSk7Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBwYXJzZVVSSShD
U1NQYXJzZXJTdHJpbmcmKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LSAgICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgpOwotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGJvb2wgcGFyc2VOdGhDaGlsZCgpOwotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGJvb2wgcGFyc2VOdGhDaGlsZEV4dHJh
KCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIGJv
b2wgZGV0ZWN0RnVuY3Rpb25UeXBlVG9rZW4oaW50KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50
KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9p
ZCBkZXRlY3ROdW1iZXJUb2tlbihDaGFyYWN0ZXJUeXBlKiwgaW50KTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBkZXRlY3REYXNoVG9rZW4o
aW50KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUg
dm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIHZvaWQgZGV0ZWN0U3VwcG9ydHNUb2tlbihpbnQpOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIHZvaWQg
c2V0UnVsZUhlYWRlckVuZChjb25zdCBDaGFyYWN0ZXJUeXBlKik7Ci0KLSAgICB2b2lkIHNldFN0
eWxlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVTaGVldCA9
IHN0eWxlU2hlZXQ7IH0KLQotICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1N0cmljdE1vZGUgfHwgbV9jb250ZXh0Lm1vZGUg
PT0gU1ZHQXR0cmlidXRlTW9kZTsgfQotICAgIGlubGluZSBib29sIGluUXVpcmtzTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGU7IH0KLSAgICAKLSAg
ICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwotCi0gICAgdm9pZCBy
ZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4pOwotCi0gICAgdGVtcGxh
dGU8dW5zaWduZWQgcHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBzdWZmaXhMZW5ndGg+Ci0gICAgdm9p
ZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyICgmcHJlZml4KVtwcmVmaXhMZW5ndGhdLCBTdHJpbmdW
aWV3IHN0cmluZywgY29uc3QgY2hhciAoJnN1ZmZpeClbc3VmZml4TGVuZ3RoXSkKLSAgICB7Ci0g
ICAgICAgIHNldHVwUGFyc2VyKHByZWZpeCwgcHJlZml4TGVuZ3RoIC0gMSwgc3RyaW5nLCBzdWZm
aXgsIHN1ZmZpeExlbmd0aCAtIDEpOwotICAgIH0KLSAgICB2b2lkIHNldHVwUGFyc2VyKGNvbnN0
IGNoYXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBTdHJpbmdWaWV3LCBjb25zdCBj
aGFyKiBzdWZmaXgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCk7Ci0gICAgYm9vbCBpblNob3J0aGFu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYXJzZVNob3J0aGFuZDsgfQotCi0gICAgYm9vbCBpc1Zh
bGlkU2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwotCi0gICAgYm9vbCBpc0dlbmVyYXRlZElt
YWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKLSAgICBib29sIHBhcnNlR2VuZXJhdGVk
SW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotCi0gICAgUGFy
c2VSZXN1bHQgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29u
dGV4dFN0eWxlU2hlZXQpOwotICAgIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNl
RGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCk7Ci0KLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBwYXJzZUluc2V0Um91
bmRlZENvcm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4mJiwgQ1NTUGFyc2VyVmFsdWVMaXN0
Jik7Ci0KLSAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKLSAgICAgICAgTm9uZSwKLSAgICAg
ICAgQXV0bywKLSAgICAgICAgTGVuZ3RoLAotICAgICAgICBQYWdlU2l6ZSwKLSAgICAgICAgT3Jp
ZW50YXRpb24sCi0gICAgfTsKLQotICAgIGJvb2wgcGFyc2VQYWdlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVNpemUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBTaXplUGFyYW1ldGVyVHlwZSBwYXJzZVNpemVQ
YXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBwYXJzZWRWYWx1ZXMsIENTU1BhcnNlclZhbHVlJiwgU2l6
ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotICAgIGJvb2wgcGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VTY3JvbGxTbmFwRGVzdGluYXRp
b24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNl
U2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhSZWZQdHI8Q1NTVmFsdWU+JiBj
c3NWYWx1ZVgsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWSk7Ci0jZW5kaWYKLQotICAgIGJv
b2wgcGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QmKTsKLSAgICBib29sIHBhcnNlRm9u
dEZhY2VTcmNMb2NhbChDU1NWYWx1ZUxpc3QmKTsKLQotICAgIGJvb2wgcGFyc2VDb2xvcihjb25z
dCBTdHJpbmcmKTsKLQotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgYm9vbCBwYXJz
ZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIGdyaWRMaW5l
TmFtZSk7Ci0jZW5kaWYKLQotICAgIGVudW0gUGFyc2luZ01vZGUgewotICAgICAgICBOb3JtYWxN
b2RlLAotICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKLSAgICAgICAgU3VwcG9ydHNNb2RlLAotICAg
ICAgICBOdGhDaGlsZE1vZGUKLSAgICB9OwotCi0gICAgUGFyc2luZ01vZGUgbV9wYXJzaW5nTW9k
ZSB7IE5vcm1hbE1vZGUgfTsKLSAgICBib29sIG1faXM4Qml0U291cmNlIHsgZmFsc2UgfTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TENoYXJbXT4gbV9kYXRhU3RhcnQ4OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxVQ2hhcltdPiBtX2RhdGFTdGFydDE2OwotICAgIExDaGFyKiBtX2N1cnJlbnRDaGFyYWN0
ZXI4IHsgbnVsbHB0ciB9OwotICAgIFVDaGFyKiBtX2N1cnJlbnRDaGFyYWN0ZXIxNiB7IG51bGxw
dHIgfTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIExDaGFyKiBwdHI4OwotICAgICAgICBVQ2hhciog
cHRyMTY7Ci0gICAgfSBtX3Rva2VuU3RhcnQgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9s
ZW5ndGggeyAwIH07Ci0gICAgaW50IG1fdG9rZW4geyAwIH07Ci0gICAgaW50IG1fbGluZU51bWJl
ciB7IDAgfTsKLSAgICBpbnQgbV90b2tlblN0YXJ0TGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQg
bV90b2tlblN0YXJ0Q29sdW1uTnVtYmVyIHsgMCB9OwotICAgIGludCBtX2xhc3RTZWxlY3Rvckxp
bmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IG1fY29sdW1uT2Zmc2V0Rm9yTGluZSB7IDAgfTsKLQot
ICAgIGludCBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBtX3NoZWV0U3Rh
cnRDb2x1bW5OdW1iZXIgeyAwIH07Ci0KLSAgICBib29sIG1fYWxsb3dJbXBvcnRSdWxlcyB7IHRy
dWUgfTsKLSAgICBib29sIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgeyB0cnVlIH07Ci0K
LSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGJvb2wgcGFyc2VWaWV3cG9y
dFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9v
bCBwYXJzZVZpZXdwb3J0U2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0
eUlEIGZpcnN0LCBDU1NQcm9wZXJ0eUlEIHNlY29uZCwgYm9vbCBpbXBvcnRhbnQpOwotCi0gICAg
Ym9vbCBpblZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pblZpZXdwb3J0OyB9Ci0gICAgYm9v
bCBtX2luVmlld3BvcnQgeyBmYWxzZSB9OwotI2VuZGlmCi0KLSAgICBib29sIHVzZUxlZ2FjeUJh
Y2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBjb25zdDsKLQotICAgIGludCAoQ1NTUGFy
c2VyOjoqbV9sZXhGdW5jKSh2b2lkKik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBtX3JlY3ljbGVkU2VsZWN0b3JWZWN0
b3I7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3N1cHBvcnRz
UnVsZURhdGFTdGFjazsKLQotICAgIC8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3IgYSBjZXJ0
YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdAotICAgIGVudW0gVW5pdHMgewotICAgICAg
ICBGVW5rbm93biA9IDB4MDAwMCwKLSAgICAgICAgRkludGVnZXIgPSAweDAwMDEsCi0gICAgICAg
IEZOdW1iZXIgPSAweDAwMDIsIC8vIFJlYWwgTnVtYmVycwotICAgICAgICBGUGVyY2VudCA9IDB4
MDAwNCwKLSAgICAgICAgRkxlbmd0aCA9IDB4MDAwOCwKLSAgICAgICAgRkFuZ2xlID0gMHgwMDEw
LAotICAgICAgICBGVGltZSA9IDB4MDAyMCwKLSAgICAgICAgRkZyZXF1ZW5jeSA9IDB4MDA0MCwK
LSAgICAgICAgRlBvc2l0aXZlSW50ZWdlciA9IDB4MDA4MCwKLSAgICAgICAgRlJlbGF0aXZlID0g
MHgwMTAwLAotI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikgfHwgRU5BQkxFKFJFU09M
VVRJT05fTUVESUFfUVVFUlkpCi0gICAgICAgIEZSZXNvbHV0aW9uID0gMHgwMjAwLAotI2VuZGlm
Ci0gICAgICAgIEZOb25OZWcgPSAweDA0MDAKLSAgICB9OwotCi0gICAgZnJpZW5kIGlubGluZSBV
bml0cyBvcGVyYXRvcnwoVW5pdHMgYSwgVW5pdHMgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxVbml0cz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGEpIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGIpKTsKLSAgICB9Ci0KLSAgICBlbnVtIFJlbGVhc2VQYXJzZWRDYWxjVmFsdWVD
b25kaXRpb24gewotICAgICAgICBSZWxlYXNlUGFyc2VkQ2FsY1ZhbHVlLAotICAgICAgICBEb05v
dFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUKLSAgICB9OwotCi0gICAgYm9vbCBpc0xvZ2dpbmdFcnJv
cnMoKTsKLSAgICB2b2lkIGxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotCi0gICAgYm9vbCB2YWxpZGF0ZUNhbGN1bGF0aW9u
VW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYsIFVuaXRzKTsKLQotICAgIGJvb2wgc2hvdWxkQWNj
ZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmLCBVbml0cywgQ1NTUGFyc2VyTW9kZSk7
Ci0KLSAgICBpbmxpbmUgYm9vbCB2YWxpZGF0ZVVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZh
bHVlLCBVbml0cyB1bml0RmxhZ3MpIHsgcmV0dXJuIHZhbGlkYXRlVW5pdCh2YWx1ZSwgdW5pdEZs
YWdzLCBtX2NvbnRleHQubW9kZSk7IH0KLSAgICBib29sIHZhbGlkYXRlVW5pdChWYWx1ZVdpdGhD
YWxjdWxhdGlvbiYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKLQotICAgIGJvb2wgcGFyc2VCb3Jk
ZXJJbWFnZVF1YWQoVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLSAgICBpbnQg
Y29sb3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKLSAgICBkb3VibGUgcGFy
c2VkRG91YmxlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNz
IFRyYW5zZm9ybU9wZXJhdGlvbkluZm87Ci0gICAgZnJpZW5kIGNsYXNzIEZpbHRlck9wZXJhdGlv
bkluZm87Ci19OwotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgQ1NTUGFyc2Vy
U3RyaW5nJik7Ci1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgU3RyaW5nJik7Ci1D
U1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENTU1BhcnNlclN0cmluZyYpOwotI2lm
IFBMQVRGT1JNKElPUykKLXZvaWQgY3NzUHJvcGVydHlOYW1lSU9TQWxpYXNpbmcoY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVydHlOYW1lQWxpYXMsIHVuc2lnbmVk
JiBuZXdMZW5ndGgpOwotI2VuZGlmCi0KLWNsYXNzIFNob3J0aGFuZFNjb3BlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTaG9ydGhhbmRTY29wZShDU1NQYXJz
ZXIqIHBhcnNlciwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpIDogbV9wYXJzZXIocGFyc2VyKQotICAg
IHsKLSAgICAgICAgaWYgKCEobV9wYXJzZXItPm1faW5QYXJzZVNob3J0aGFuZCsrKSkKLSAgICAg
ICAgICAgIG1fcGFyc2VyLT5tX2N1cnJlbnRTaG9ydGhhbmQgPSBwcm9wSWQ7Ci0gICAgfQotICAg
IH5TaG9ydGhhbmRTY29wZSgpCi0gICAgewotICAgICAgICBpZiAoISgtLW1fcGFyc2VyLT5tX2lu
UGFyc2VTaG9ydGhhbmQpKQotICAgICAgICAgICAgbV9wYXJzZXItPm1fY3VycmVudFNob3J0aGFu
ZCA9IENTU1Byb3BlcnR5SW52YWxpZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUGFyc2Vy
KiBtX3BhcnNlcjsKLX07Ci0KLXN0cnVjdCBDU1NQYXJzZXI6OkxvY2F0aW9uIHsKLSAgICBpbnQg
bGluZU51bWJlcjsKLSAgICBpbnQgY29sdW1uTnVtYmVyOwotICAgIENTU1BhcnNlclN0cmluZyB0
b2tlbjsKLX07Ci0KLVN0cmluZyBxdW90ZUNTU1N0cmluZyhjb25zdCBTdHJpbmcmKTsKLVN0cmlu
ZyBxdW90ZUNTU1N0cmluZ0lmTmVlZGVkKGNvbnN0IFN0cmluZyYpOwotU3RyaW5nIHF1b3RlQ1NT
VVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJik7Ci0KLWJvb2wgaXNWYWxpZE50aFRva2VuKGNvbnN0
IENTU1BhcnNlclN0cmluZyYpOwotCi10ZW1wbGF0ZSA8PgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpzZXRUb2tlblN0YXJ0PExDaGFyPihMQ2hhciogdG9rZW5TdGFydCkKLXsKLSAgICBtX3Rva2Vu
U3RhcnQucHRyOCA9IHRva2VuU3RhcnQ7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgdm9pZCBD
U1NQYXJzZXI6OnNldFRva2VuU3RhcnQ8VUNoYXI+KFVDaGFyKiB0b2tlblN0YXJ0KQotewotICAg
IG1fdG9rZW5TdGFydC5wdHIxNiA9IHRva2VuU3RhcnQ7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBD
U1NQYXJzZXI6OnRva2VuU3RhcnRPZmZzZXQoKQotewotICAgIGlmIChpczhCaXRTb3VyY2UoKSkK
LSAgICAgICAgcmV0dXJuIG1fdG9rZW5TdGFydC5wdHI4IC0gbV9kYXRhU3RhcnQ4LmdldCgpOwot
ICAgIHJldHVybiBtX3Rva2VuU3RhcnQucHRyMTYgLSBtX2RhdGFTdGFydDE2LmdldCgpOwotfQot
Ci11bnNpZ25lZCBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXJPZmZzZXQoKQotewotICAgIGlm
IChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjggLSBt
X2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjE2IC0gbV9k
YXRhU3RhcnQxNi5nZXQoKTsKLX0KLQotaW5saW5lIFVDaGFyIENTU1BhcnNlcjo6dG9rZW5TdGFy
dENoYXIoKQotewotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuICptX3Rv
a2VuU3RhcnQucHRyODsKLSAgICByZXR1cm4gKm1fdG9rZW5TdGFydC5wdHIxNjsKLX0KLQotaW5s
aW5lIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS5sZW5ndGgoKSA+IDIgJiYgcHJvcGVydHlOYW1l
LmNoYXJhY3RlckF0KDApID09ICctJyAmJiBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVyQXQoMSkgPT0g
Jy0nOwotfQotCi1pbmxpbmUgaW50IGNzc3l5bGV4KHZvaWQqIHl5bHZhbCwgQ1NTUGFyc2VyKiBw
YXJzZXIpCi17Ci0gICAgcmV0dXJuIHBhcnNlci0+bGV4KHl5bHZhbCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJNb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlck1vZGUuaAkocmV2aXNp
b24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlck1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBDU1NQYXJzZXJNb2RlX2gKLSNkZWZpbmUgQ1NTUGFyc2VyTW9kZV9oCi0KLSNpbmNs
dWRlICJVUkwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLQot
ZW51bSBDU1NQYXJzZXJNb2RlIHsKLSAgICBDU1NRdWlya3NNb2RlLAotICAgIENTU1N0cmljdE1v
ZGUsCi0gICAgLy8gU1ZHIHNob3VsZCBhbHdheXMgYmUgaW4gc3RyaWN0IG1vZGUuIEZvciBTVkcg
YXR0cmlidXRlcywgdGhlIHJ1bGVzIGRpZmZlciB0byBzdHJpY3Qgc29tZXRpbWVzLgotICAgIFNW
R0F0dHJpYnV0ZU1vZGUKLX07Ci0KLWlubGluZSBDU1NQYXJzZXJNb2RlIHN0cmljdFRvQ1NTUGFy
c2VyTW9kZShib29sIGluU3RyaWN0TW9kZSkKLXsKLSAgICByZXR1cm4gaW5TdHJpY3RNb2RlID8g
Q1NTU3RyaWN0TW9kZSA6IENTU1F1aXJrc01vZGU7Ci19Ci0KLWlubGluZSBib29sIGlzU3RyaWN0
UGFyc2VyTW9kZShDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCi17Ci0gICAgcmV0dXJuIGNz
c1BhcnNlck1vZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBjc3NQYXJzZXJNb2RlID09IFNWR0F0dHJp
YnV0ZU1vZGU7Ci19Ci0KLXN0cnVjdCBDU1NQYXJzZXJDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1v
ZGUsIGNvbnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDU1NQ
YXJzZXJDb250ZXh0KERvY3VtZW50JiwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nKCkpOwotCi0gICAgVVJMIGJhc2VVUkw7Ci0g
ICAgU3RyaW5nIGNoYXJzZXQ7Ci0gICAgQ1NTUGFyc2VyTW9kZSBtb2RlIHsgQ1NTU3RyaWN0TW9k
ZSB9OwotICAgIGJvb2wgaXNIVE1MRG9jdW1lbnQgeyBmYWxzZSB9OwotI2lmIEVOQUJMRShDU1Nf
R1JJRF9MQVlPVVQpCi0gICAgYm9vbCBjc3NHcmlkTGF5b3V0RW5hYmxlZCB7IGZhbHNlIH07Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRv
c2l6aW5nRW5hYmxlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIG5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSB7IHRydWUgfTsKLSAgICBib29sIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IgeyBmYWxzZSB9OwotICAgIGJvb2wgc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKSB7IHJl
dHVybiAhKGEgPT0gYik7IH0KLQotV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwotCi19OwotCi0jZW5kaWYgLy8gQ1NTUGFyc2Vy
TW9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkocmV2aXNp
b24gMjA0ODQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKLQotI2luY2x1ZGUgIkNT
U0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgot
I2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgotI2luY2x1ZGUgIkNTU1ZhcmlhYmxlVmFsdWUu
aCIKLSNpbmNsdWRlICJTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi12b2lkIGRlc3Ryb3koY29uc3QgQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbikKLSAgICAgICAgZGVsZXRlIHZhbHVlLmZ1bmN0aW9uOwotICAgIGVsc2UgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkKLSAgICAgICAgZGVsZXRl
IHZhbHVlLnZhbHVlTGlzdDsKLSAgICBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZh
bHVlOjpWYXJpYWJsZSkKLSAgICAgICAgZGVsZXRlIHZhbHVlLnZhcmlhYmxlOwotfQotCi1DU1NQ
YXJzZXJWYWx1ZUxpc3Q6On5DU1NQYXJzZXJWYWx1ZUxpc3QoKQotewotICAgIGZvciAoYXV0byYg
dmFsdWUgOiBtX3ZhbHVlcykKLSAgICAgICAgZGVzdHJveSh2YWx1ZSk7Ci19Ci0KLXZvaWQgQ1NT
UGFyc2VyVmFsdWVMaXN0OjphZGRWYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJWYWx1ZUxp
c3Q6Omluc2VydFZhbHVlQXQodW5zaWduZWQgaSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQotewotICAgIG1fdmFsdWVzLmluc2VydChpLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
VmFsdWVMaXN0OjpleHRlbmQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBvdGhlcikKLXsKLSAgICBmb3Ig
KGF1dG8mIHZhbHVlIDogb3RoZXIubV92YWx1ZXMpIHsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5k
KHZhbHVlKTsKLSAgICAgICAgdmFsdWUudW5pdCA9IDA7IC8vIFdlIG1vdmVkIHRoZSBDU1NQYXJz
ZXJWYWx1ZSBmcm9tIHRoZSBvdGhlciBsaXN0OyB0aGlzIGFjdHMgbGlrZSBzdGQ6Om1vdmUuCi0g
ICAgfQotfQotCi1ib29sIENTU1BhcnNlclZhbHVlTGlzdDo6Y29udGFpbnNWYXJpYWJsZXMoKSBj
b25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAg
ICAgICBhdXRvKiBwYXJzZXJWYWx1ZSA9ICZtX3ZhbHVlc1tpXTsKLSAgICAgICAgaWYgKHBhcnNl
clZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpWYXJpYWJsZSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAocGFyc2VyVmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OkZ1bmN0aW9uICYmIHBhcnNlclZhbHVlLT5mdW5jdGlvbi0+YXJncwotICAgICAgICAgICAg
JiYgcGFyc2VyVmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5jb250YWluc1ZhcmlhYmxlcygpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChwYXJzZXJWYWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0ICYmIHBhcnNlclZhbHVlLT52YWx1ZUxpc3QtPmNvbnRh
aW5zVmFyaWFibGVzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlclZhbHVlOjpjcmVhdGVD
U1NWYWx1ZSgpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICBpZiAo
aWQpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihp
ZCk7Ci0gICAgCi0gICAgaWYgKHVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0g
ICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlUGFy
c2VyT3BlcmF0b3IoaVZhbHVlKTsKLSAgICAgICAgcHJpbWl0aXZlVmFsdWUtPnNldFByaW1pdGl2
ZVR5cGUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfT1BFUkFUT1IpOwotICAgICAgICBy
ZXR1cm4gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgfQotICAgIGlmICh1bml0ID09IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIENTU0Z1bmN0aW9uVmFsdWU6
OmNyZWF0ZShmdW5jdGlvbik7Ci0gICAgaWYgKHVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhcmlh
YmxlKQotICAgICAgICByZXR1cm4gQ1NTVmFyaWFibGVWYWx1ZTo6Y3JlYXRlKHZhcmlhYmxlKTsK
LSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KCp2YWx1ZUxpc3QpOwot
Ci0gICAgaWYgKHVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsoZlZhbHVlLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzIHByaW1pdGl2ZVVuaXQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzPih1bml0KTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVVuaXQpIHsKLSAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BST1BFUlRZX0lEOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WQUxVRV9JRDoK
LSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RyaW5nLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JREVOVElGSUVSKTsKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSOgotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShmVmFsdWUsIGlzSW50ID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSU5URUdF
UiA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkk6
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUjoKLSAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VTklDT0RFX1JBTkdFOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQVJTRVJfV0hJVEVTUEFDRToKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUoc3RyaW5nLCBwcmltaXRpdmVVbml0KTsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1T
OgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DTToK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19NUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUzoKLSAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0tIWjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlc6Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19WTUlOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFM6Ci0gICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSOgotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShmVmFsdWUsIHByaW1pdGl2ZVVuaXQpOwotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19BVFRSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRUNUOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19SR0JDT0xPUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWDoK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19EUENNOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQUlS
OgotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QQVJTRVJfT1BFUkFUT1I6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BBUlNFUl9JTlRFR0VSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJT
RVJfSURFTlRJRklFUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUl9O
QU1FOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQRToKLSAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRk9OVF9GQU1JTFk6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1FVQUQ6Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTEVOR1RIX1JFUEVBVDoKLSNlbmRpZgotICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19DQUxDOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQYWdl
UHNldWRvU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKQot
ewotICAgIENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NUeXBlIHBzZXVkb1R5cGU7Ci0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBzZXVkb1R5cGVTdHJpbmcsICJmaXJz
dCIpKQotICAgICAgICBwc2V1ZG9UeXBlID0gQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc0Zp
cnN0OwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBzZXVkb1R5
cGVTdHJpbmcsICJsZWZ0IikpCi0gICAgICAgIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6UGFn
ZVBzZXVkb0NsYXNzTGVmdDsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShwc2V1ZG9UeXBlU3RyaW5nLCAicmlnaHQiKSkKLSAgICAgICAgcHNldWRvVHlwZSA9IENT
U1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NSaWdodDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFy
c2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1Nl
bGVjdG9yOjpQYWdlUHNldWRvQ2xhc3MpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQ
YWdlUHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKLSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgp
OwotfQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRv
RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZykKLXsKLSAg
ICBwc2V1ZG9UeXBlU3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotICAg
IEF0b21pY1N0cmluZyBuYW1lID0gcHNldWRvVHlwZVN0cmluZzsKLQotICAgIENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9UeXBlID0gQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRv
RWxlbWVudFR5cGUobmFtZSk7Ci0gICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnRVbmtub3duKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
c2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgIHNl
bGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7
Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVkb1R5
cGUpOwotICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50V2Vi
S2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShu
YW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgIi13ZWJraXQtaW5wdXQtcGxhY2Vo
b2xkZXIgaXMgdGhlIG9ubHkgTGVnYWN5UHJlZml4IHBzZXVkbyB0eXBlLiIpOwotICAgICAgICBp
ZiAobmFtZSA9PSAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciIpCi0gICAgICAgICAgICBuYW1l
ID0gQXRvbWljU3RyaW5nKCJwbGFjZWhvbGRlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIH0KLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0VmFsdWUobmFt
ZSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLX0KLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1
ZG9FbGVtZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0
aW9uSWRlbnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+
KiBwYXJzZWRTZWxlY3RvclZlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSWRl
bnRpZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gImN1ZSgiKTsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+
IHNlbGVjdG9yVmVjdG9yKHBhcnNlZFNlbGVjdG9yVmVjdG9yKTsKLQotICAgIGlmICghc2VsZWN0
b3JWZWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzZWxlY3RvciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0b3ItPm1f
c2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKLSAgICBzZWxl
Y3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUoQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRDdWUpOwotICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3Rv
clZlY3Rvcik7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi1D
U1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNs
b3R0ZWRGdW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25JZGVu
dGlmaWVyLCBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VkU2VsZWN0b3IpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChmdW5jdGlvbklkZW50aWZpZXIsIFN0cmluZyhmdW5jdGlvbklkZW50aWZpZXIpID09
ICJzbG90dGVkKCIpOwotCi0gICAgaWYgKCFwYXJzZWRTZWxlY3RvcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG93bmVk
UGFyc2VkU2VsZWN0b3IocGFyc2VkU2VsZWN0b3IpOwotCi0gICAgZm9yIChhdXRvKiBjb21wb25l
bnQgPSBwYXJzZWRTZWxlY3RvcjsgY29tcG9uZW50OyBjb21wb25lbnQgPSBjb21wb25lbnQtPnRh
Z0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoY29tcG9uZW50LT5tYXRjaGVzUHNldWRvRWxlbWVu
dCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byBzZWxl
Y3RvclZlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4+PigpOwotICAgIHNlbGVjdG9yVmVjdG9yLT5hcHBlbmQoV1RGTW92ZShv
d25lZFBhcnNlZFNlbGVjdG9yKSk7Ci0KLSAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3Vu
aXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0
TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVj
dG9yLT5zZXRQc2V1ZG9FbGVtZW50VHlwZShDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNsb3R0
ZWQpOwotICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvclZlY3Rvcik7
Ci0gICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLX0KLQotQ1NTUGFyc2VyU2VsZWN0b3Iq
IENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0NsYXNzSG9zdEZ1bmN0aW9uU2VsZWN0b3Io
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVj
dG9yKiBwYXJzZWRTZWxlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSWRlbnRp
ZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gImhvc3QoIik7Ci0KLSAgICBpZiAo
IXBhcnNlZFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gb3duZWRQYXJzZWRTZWxlY3RvcihwYXJzZWRTZWxl
Y3Rvcik7Ci0KLSAgICBmb3IgKGF1dG8qIGNvbXBvbmVudCA9IHBhcnNlZFNlbGVjdG9yOyBjb21w
b25lbnQ7IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGlm
IChjb21wb25lbnQtPm1hdGNoZXNQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIHNlbGVjdG9yVmVjdG9yID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+KCk7Ci0gICAg
c2VsZWN0b3JWZWN0b3ItPmFwcGVuZChXVEZNb3ZlKG93bmVkUGFyc2VkU2VsZWN0b3IpKTsKLQot
ICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigp
OwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3MpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9DbGFzc1R5cGUoQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9zdCk7Ci0gICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JW
ZWN0b3IoKnNlbGVjdG9yVmVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwot
fQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xh
c3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRv
VHlwZVN0cmluZykKLXsKLSAgICBpZiAocHNldWRvVHlwZVN0cmluZy5sZW5ndGgoKSAmJiBwc2V1
ZG9UeXBlU3RyaW5nW3BzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkgLSAxXSA9PSAnKCcpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1
ZG9FbGVtZW50IHBzZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVs
ZW1lbnRTdHJpbmcocHNldWRvVHlwZVN0cmluZyk7Ci0gICAgaWYgKHBzZXVkb1R5cGUucHNldWRv
Q2xhc3MgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93bikgewotICAgICAgICBhdXRv
IHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICAg
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7Ci0gICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9DbGFzc1R5cGUocHNl
dWRvVHlwZS5wc2V1ZG9DbGFzcyk7Ci0gICAgICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7
Ci0gICAgfQotICAgIGlmIChwc2V1ZG9UeXBlLmNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50ICE9
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikgewotICAgICAgICBhdXRvIHNlbGVj
dG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICAgICAgc2Vs
ZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsK
LSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVk
b1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQpOwotICAgICAgICBBdG9taWNTdHJpbmcg
bmFtZSA9IHBzZXVkb1R5cGVTdHJpbmc7Ci0gICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5z
ZXRWYWx1ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJT
ZWxlY3RvcigpCi0gICAgOiBtX3NlbGVjdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VsZWN0b3I+
KCkpCi17Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJTZWxlY3Rvcihjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdRTmFtZSkKLSAgICA6IG1fc2VsZWN0b3Ioc3RkOjptYWtlX3VuaXF1
ZTxDU1NTZWxlY3Rvcj4odGFnUU5hbWUpKQotewotfQotCi1DU1NQYXJzZXJTZWxlY3Rvcjo6fkNT
U1BhcnNlclNlbGVjdG9yKCkKLXsKLSAgICBpZiAoIW1fdGFnSGlzdG9yeSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCAxNj4g
dG9EZWxldGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3Rv
ciA9IFdURk1vdmUobV90YWdIaXN0b3J5KTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5leHQgPSBXVEZNb3ZlKHNlbGVjdG9y
LT5tX3RhZ0hpc3RvcnkpOwotICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoV1RGTW92ZShzZWxlY3Rv
cikpOwotICAgICAgICBpZiAoIW5leHQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc2Vs
ZWN0b3IgPSBXVEZNb3ZlKG5leHQpOwotICAgIH0KLX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rv
cjo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4mIHNlbGVjdG9yVmVjdG9yKQotewotICAgIGF1dG8gc2VsZWN0b3JMaXN0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvckxpc3Q+KCk7Ci0gICAgc2VsZWN0b3JMaXN0LT5hZG9w
dFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICBtX3NlbGVjdG9yLT5zZXRTZWxl
Y3Rvckxpc3QoV1RGTW92ZShzZWxlY3Rvckxpc3QpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJTZWxl
Y3Rvcjo6c2V0TGFuZ0FyZ3VtZW50TGlzdChjb25zdCBWZWN0b3I8Q1NTUGFyc2VyU3RyaW5nPiYg
c3RyaW5nVmVjdG9yKQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZ1ZlY3Rvci5p
c0VtcHR5KCksICJObyBDU1MgU2VsZWN0b3IgdGFrZXMgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4i
KTsKLSAgICBhdXRvIGFyZ3VtZW50TGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPEF0b21p
Y1N0cmluZz4+KCk7Ci0gICAgYXJndW1lbnRMaXN0LT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0
cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFn
ZUFyZ3VtZW50IDogc3RyaW5nVmVjdG9yKQotICAgICAgICBhcmd1bWVudExpc3QtPmFwcGVuZChs
YW5ndWFnZUFyZ3VtZW50KTsKLSAgICBtX3NlbGVjdG9yLT5zZXRMYW5nQXJndW1lbnRMaXN0KFdU
Rk1vdmUoYXJndW1lbnRMaXN0KSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnNldFBz
ZXVkb0NsYXNzVmFsdWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9DbGFzc1N0cmluZykK
LXsKLSAgICBBU1NFUlQobV9zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3MpOwotCi0gICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50IHBz
ZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmco
cHNldWRvQ2xhc3NTdHJpbmcpOwotICAgIG1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShw
c2V1ZG9UeXBlLnBzZXVkb0NsYXNzKTsKLX0KLQotc3RhdGljIGJvb2wgc2VsZWN0b3JMaXN0TWF0
Y2hlc1BzZXVkb0VsZW1lbnQoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QpCi17
Ci0gICAgaWYgKCFzZWxlY3Rvckxpc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZv
ciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgp
OyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2Vs
ZWN0b3IpKSB7Ci0gICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc3Vi
U2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsK
LSAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rv
ckxpc3QqIHN1YnNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3Rvckxpc3RNYXRjaGVzUHNldWRvRWxlbWVudChzdWJzZWxl
Y3Rvckxpc3QpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyU2VsZWN0b3I6Om1hdGNoZXNQc2V1ZG9FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zZWxlY3Rvci0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSB8fCBzZWxlY3Rvckxpc3RNYXRjaGVz
UHNldWRvRWxlbWVudChtX3NlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSk7Ci19Ci0KLXZvaWQgQ1NT
UGFyc2VyU2VsZWN0b3I6Omluc2VydFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGJl
Zm9yZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvciwgQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uIGFmdGVyKQotewotICAgIGlmIChtX3RhZ0hpc3RvcnkpCi0gICAgICAg
IHNlbGVjdG9yLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUobV90YWdIaXN0b3J5KSk7Ci0gICAgc2V0
UmVsYXRpb24oYmVmb3JlKTsKLSAgICBzZWxlY3Rvci0+c2V0UmVsYXRpb24oYWZ0ZXIpOwotICAg
IG1fdGFnSGlzdG9yeSA9IFdURk1vdmUoc2VsZWN0b3IpOwotfQotCi12b2lkIENTU1BhcnNlclNl
bGVjdG9yOjphcHBlbmRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvcikKLXsKLSAgICBDU1NQ
YXJzZXJTZWxlY3RvciogZW5kID0gdGhpczsKLSAgICB3aGlsZSAoZW5kLT50YWdIaXN0b3J5KCkp
Ci0gICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOwotCi0gICAgZW5kLT5zZXRSZWxhdGlv
bihyZWxhdGlvbik7Ci0gICAgZW5kLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsK
LX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YXBwZW5kVGFnSGlzdG9yeShDU1NQYXJzZXJT
ZWxlY3RvckNvbWJpbmF0b3IgcmVsYXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4gc2VsZWN0b3IpCi17Ci0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGVuZCA9IHRoaXM7Ci0g
ICAgd2hpbGUgKGVuZC0+dGFnSGlzdG9yeSgpKQotICAgICAgICBlbmQgPSBlbmQtPnRhZ0hpc3Rv
cnkoKTsKLQotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiBzZWxlY3RvclJlbGF0aW9uOwotICAg
IHN3aXRjaCAocmVsYXRpb24pIHsKLSAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRv
cjo6Q2hpbGQ6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6Q2hpbGQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpE
ZXNjZW5kYW50U3BhY2U6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6
RGVzY2VuZGFudDsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVW
RUw0KQotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpEZXNjZW5kYW50RG91
YmxlQ2hpbGQ6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudDsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9y
Q29tYmluYXRvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBD
U1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICBzZWxl
Y3RvclJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBlbmQtPnNldFJlbGF0aW9uKHNlbGVjdG9yUmVsYXRpb24pOwotCi0j
aWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgIGlmIChyZWxhdGlvbiA9PSBDU1NQ
YXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2NlbmRhbnREb3VibGVDaGlsZCkKLSAgICAgICAg
ZW5kLT5zZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgoKTsKLSNlbmRpZgotCi0gICAg
ZW5kLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ1FO
YW1lLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSkKLXsKLSAgICBhdXRvIHNlY29uZCA9IHN0
ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgc2Vjb25kLT5tX3NlbGVj
dG9yID0gV1RGTW92ZShtX3NlbGVjdG9yKTsKLSAgICBzZWNvbmQtPm1fdGFnSGlzdG9yeSA9IFdU
Rk1vdmUobV90YWdIaXN0b3J5KTsKLSAgICBtX3RhZ0hpc3RvcnkgPSBXVEZNb3ZlKHNlY29uZCk7
Ci0KLSAgICBtX3NlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4odGFnUU5h
bWUsIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSk7Ci0gICAgbV9zZWxlY3Rvci0+c2V0UmVsYXRpb24o
Q1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKLX0KLQotfQotCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlclZhbHVlcy5oCShyZXZpc2lvbiAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NT
U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1ZhbHVlOwotY2xhc3Mg
UXVhbGlmaWVkTmFtZTsKLQotLy8gVGhpcyBzaG91bGQgYmUgYSBTdHJpbmdWaWV3IGJ1dCBjdXJy
ZW50bHkgaXQgY2FuJ3QgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYW4gZWxlbWVudCBvZiBhIHVuaW9u
IGluIENTU1BhcnNlclZhbHVlLgotc3RydWN0IENTU1BhcnNlclN0cmluZyB7Ci0gICAgdm9pZCBp
bml0KExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBt
X2RhdGEuY2hhcmFjdGVyczggPSBjaGFyYWN0ZXJzOwotICAgICAgICBtX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgbV9pczhCaXQgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgaW5pdChVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgbV9kYXRhLmNo
YXJhY3RlcnMxNiA9IGNoYXJhY3RlcnM7Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAg
ICAgICBtX2lzOEJpdCA9IGZhbHNlOwotICAgIH0KLQotICAgIHZvaWQgaW5pdChjb25zdCBTdHJp
bmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwot
ICAgICAgICBpZiAoIW1fbGVuZ3RoIHx8IHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICAgICAg
bV9kYXRhLmNoYXJhY3RlcnM4ID0gY29uc3RfY2FzdDxMQ2hhcio+KHN0cmluZy5jaGFyYWN0ZXJz
OCgpKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBjb25zdF9jYXN0PFVDaGFyKj4oc3RyaW5n
LmNoYXJhY3RlcnMxNigpKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5jaGFy
YWN0ZXJzOCA9IDA7Ci0gICAgICAgIG1fbGVuZ3RoID0gMDsKLSAgICAgICAgbV9pczhCaXQgPSB0
cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7
IH0KLSAgICBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChpczhCaXQoKSk7IHJl
dHVybiBtX2RhdGEuY2hhcmFjdGVyczg7IH0KLSAgICBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29u
c3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzMTY7IH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQotICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCA9
IGxlbmd0aDsgfQotCi0gICAgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsK
LQotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7Ci0gICAgICAg
IGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczhbaV07
Ci0gICAgICAgIHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczE2W2ldOwotICAgIH0KLQotICAgIG9w
ZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGlzOEJpdCgpID8gU3RyaW5nKG1fZGF0YS5j
aGFyYWN0ZXJzOCwgbV9sZW5ndGgpIDogU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzMTYsIG1fbGVu
Z3RoKTsgfQotICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIGlzOEJp
dCgpID8gQXRvbWljU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzOCwgbV9sZW5ndGgpIDogQXRvbWlj
U3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzMTYsIG1fbGVuZ3RoKTsgfQotCi0gICAgdW5pb24gewot
ICAgICAgICBMQ2hhciogY2hhcmFjdGVyczg7Ci0gICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzMTY7
Ci0gICAgfSBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgYm9vbCBtX2lzOEJp
dDsKLX07Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmLCBjb25zdCBjaGFyICgmbG93ZXJj
YXNlTGV0dGVycylbbGVuZ3RoXSk7Ci0KLXN0cnVjdCBDU1NQYXJzZXJGdW5jdGlvbjsKLXN0cnVj
dCBDU1NQYXJzZXJWYXJpYWJsZTsKLQotc3RydWN0IENTU1BhcnNlclZhbHVlIHsKLSAgICBDU1NW
YWx1ZUlEIGlkOwotICAgIGJvb2wgaXNJbnQ7Ci0gICAgdW5pb24gewotICAgICAgICBkb3VibGUg
ZlZhbHVlOwotICAgICAgICBpbnQgaVZhbHVlOwotICAgICAgICBDU1NQYXJzZXJTdHJpbmcgc3Ry
aW5nOwotICAgICAgICBDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb247Ci0gICAgICAgIENTU1Bh
cnNlclZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1
ZUxpc3Q7Ci0gICAgfTsKLSAgICBlbnVtIHsKLSAgICAgICAgT3BlcmF0b3IgID0gMHgxMDAwMDAs
Ci0gICAgICAgIEZ1bmN0aW9uICA9IDB4MTAwMDAxLAotICAgICAgICBWYWx1ZUxpc3QgPSAweDEw
MDAwMiwKLSAgICAgICAgUV9FTVMgICAgID0gMHgxMDAwMDMsCi0gICAgICAgIFZhcmlhYmxlICA9
IDB4MTAwMDA0Ci0gICAgfTsKLSAgICBpbnQgdW5pdDsKLQotICAgIHZvaWQgc2V0RnJvbVZhbHVl
TGlzdChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0Pik7Ci0KLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IGNyZWF0ZUNTU1ZhbHVlKCk7Ci19OwotCi12b2lkIGRlc3Ryb3koY29uc3QgQ1NT
UGFyc2VyVmFsdWUmKTsKLQotY2xhc3MgQ1NTUGFyc2VyVmFsdWVMaXN0IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QoKQotICAg
ICAgICA6IG1fY3VycmVudCgwKQotICAgIHsKLSAgICB9Ci0gICAgfkNTU1BhcnNlclZhbHVlTGlz
dCgpOwotCi0gICAgdm9pZCBhZGRWYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwotICAgIHZv
aWQgaW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKLSAgICB2
b2lkIGV4dGVuZChDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLQotICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCBjdXJyZW50SW5k
ZXgoKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KLSAgICBDU1NQYXJzZXJWYWx1ZSogY3VycmVudCgp
IHsgcmV0dXJuIG1fY3VycmVudCA8IG1fdmFsdWVzLnNpemUoKSA/ICZtX3ZhbHVlc1ttX2N1cnJl
bnRdIDogMDsgfQotICAgIENTU1BhcnNlclZhbHVlKiBuZXh0KCkgeyArK21fY3VycmVudDsgcmV0
dXJuIGN1cnJlbnQoKTsgfQotICAgIENTU1BhcnNlclZhbHVlKiBwcmV2aW91cygpCi0gICAgewot
ICAgICAgICBpZiAoIW1fY3VycmVudCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAt
LW1fY3VycmVudDsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKLSAgICB9Ci0gICAgdm9pZCBz
ZXRDdXJyZW50SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaW5k
ZXggPCBtX3ZhbHVlcy5zaXplKCkpOwotICAgICAgICBpZiAoaW5kZXggPCBtX3ZhbHVlcy5zaXpl
KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnQgPSBpbmRleDsKLSAgICB9Ci0KLSAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92YWx1ZXMuc2l6ZSgp
ID8gJm1fdmFsdWVzW2ldIDogMDsgfQotCi0gICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZXMuY2xl
YXIoKTsgfQotICAgIAotICAgIFN0cmluZyB0b1N0cmluZygpOwotICAgIAotICAgIGJvb2wgY29u
dGFpbnNWYXJpYWJsZXMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2N1cnJl
bnQ7Ci0gICAgVmVjdG9yPENTU1BhcnNlclZhbHVlLCA0PiBtX3ZhbHVlczsKLX07Ci0KLXN0cnVj
dCBDU1NQYXJzZXJGdW5jdGlvbiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIG5hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1Bh
cnNlclZhbHVlTGlzdD4gYXJnczsKLX07Ci0KLXN0cnVjdCBDU1NQYXJzZXJWYXJpYWJsZSB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ1NTUGFyc2VyU3RyaW5n
IG5hbWU7IC8vIFRoZSBjdXN0b20gcHJvcGVydHkgbmFtZQotICAgIHN0ZDo6dW5pcXVlX3B0cjxD
U1NQYXJzZXJWYWx1ZUxpc3Q+IGFyZ3M7IC8vIFRoZSBmYWxsYmFjayBhcmdzCi19OwotCi1lbnVt
IGNsYXNzIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvciB7Ci0gICAgQ2hpbGQsCi0gICAgRGVz
Y2VuZGFudFNwYWNlLAotI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKLSAgICBEZXNj
ZW5kYW50RG91YmxlQ2hpbGQsCi0jZW5kaWYKLSAgICBEaXJlY3RBZGphY2VudCwKLSAgICBJbmRp
cmVjdEFkamFjZW50Ci19OwotCi1jbGFzcyBDU1NQYXJzZXJTZWxlY3RvciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9y
KiBwYXJzZVBhZ2VQc2V1ZG9TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5
cGVTdHJpbmcpOwotICAgIHN0YXRpYyBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VQc2V1ZG9FbGVt
ZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKTsKLSAgICBzdGF0
aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uU2VsZWN0
b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiopOwotICAgIHN0YXRpYyBDU1NQYXJzZXJT
ZWxlY3RvciogcGFyc2VQc2V1ZG9FbGVtZW50U2xvdHRlZEZ1bmN0aW9uU2VsZWN0b3IoY29uc3Qg
Q1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVjdG9yKik7
Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzSG9zdEZ1bmN0
aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENT
U1BhcnNlclNlbGVjdG9yKik7Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBz
ZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTZWxlY3RvcihDU1NQYXJzZXJTdHJpbmcm
IHBzZXVkb1R5cGVTdHJpbmcpOwotCi0gICAgQ1NTUGFyc2VyU2VsZWN0b3IoKTsKLSAgICBleHBs
aWNpdCBDU1NQYXJzZXJTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgfkNTU1Bh
cnNlclNlbGVjdG9yKCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IHJlbGVh
c2VTZWxlY3RvcigpIHsgcmV0dXJuIFdURk1vdmUobV9zZWxlY3Rvcik7IH0KLQotICAgIHZvaWQg
c2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1
ZSh2YWx1ZSk7IH0KLSAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2
YWx1ZSwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3NlbGVjdG9yLT5zZXRBdHRyaWJ1dGUo
dmFsdWUsIGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQotICAgIHZvaWQgc2V0QXJndW1lbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRBcmd1bWVudCh2YWx1ZSk7IH0K
LSAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShib29s
IGlzQ2FzZUluc2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hp
bmdJc0Nhc2VJbnNlbnNpdGl2ZShpc0Nhc2VJbnNlbnNpdGl2ZSk7IH0KLSAgICB2b2lkIHNldE1h
dGNoKENTU1NlbGVjdG9yOjpNYXRjaCB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRNYXRjaCh2YWx1
ZSk7IH0KLSAgICB2b2lkIHNldFJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiB2YWx1ZSkg
eyBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbih2YWx1ZSk7IH0KLSAgICB2b2lkIHNldEZvclBhZ2Uo
KSB7IG1fc2VsZWN0b3ItPnNldEZvclBhZ2UoKTsgfQotCi0gICAgdm9pZCBhZG9wdFNlbGVjdG9y
VmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiYgc2VsZWN0
b3JWZWN0b3IpOwotICAgIHZvaWQgc2V0TGFuZ0FyZ3VtZW50TGlzdChjb25zdCBWZWN0b3I8Q1NT
UGFyc2VyU3RyaW5nPiYgc3RyaW5nVmVjdG9yKTsKLQotICAgIHZvaWQgc2V0UHNldWRvQ2xhc3NW
YWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKTsKLSAgICBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0NsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpOyB9Ci0gICAgYm9vbCBpc0N1c3RvbVBzZXVk
b0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1l
bnQoKTsgfQotCi0gICAgYm9vbCBpc1BzZXVkb0VsZW1lbnRDdWVGdW5jdGlvbigpIGNvbnN0Ci0g
ICAgewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgbV9zZWxlY3Rvci0+cHNl
dWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZTsKLSNlbHNl
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIH0KLQotICAgIGJvb2wgaGFzU2hh
ZG93RGVzY2VuZGFudCgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBj
b25zdDsKLQotICAgIENTU1BhcnNlclNlbGVjdG9yKiB0YWdIaXN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV90YWdIaXN0b3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRUYWdIaXN0b3J5KHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IpIHsgbV90YWdIaXN0b3J5ID0gV1RG
TW92ZShzZWxlY3Rvcik7IH0KLSAgICB2b2lkIGNsZWFyVGFnSGlzdG9yeSgpIHsgbV90YWdIaXN0
b3J5LnJlc2V0KCk7IH0KLSAgICB2b2lkIGluc2VydFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJl
bGF0aW9uIGJlZm9yZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiwgQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uIGFmdGVyKTsKLSAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKLSAg
ICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yLCBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKLSAgICB2b2lkIHByZXBlbmRUYWdTZWxl
Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUgPSBm
YWxzZSk7Ci0KLXByaXZhdGU6Ci0jaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAg
IHZvaWQgc2V0RGVzY2VuZGFudFVzZURvdWJsZUNoaWxkU3ludGF4KCkgeyBtX3NlbGVjdG9yLT5z
ZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgoKTsgfQotI2VuZGlmCi0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IG1fc2VsZWN0b3I7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PENTU1BhcnNlclNlbGVjdG9yPiBtX3RhZ0hpc3Rvcnk7Ci19OwotCi1pbmxpbmUgYm9vbCBDU1NQ
YXJzZXJTZWxlY3Rvcjo6aGFzU2hhZG93RGVzY2VuZGFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ7
Ci19Ci0KLWlubGluZSB2b2lkIENTU1BhcnNlclZhbHVlOjpzZXRGcm9tVmFsdWVMaXN0KHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHZhbHVlTGlzdCkKLXsKLSAgICBpZCA9IENT
U1ZhbHVlSW52YWxpZDsKLSAgICB0aGlzLT52YWx1ZUxpc3QgPSB2YWx1ZUxpc3QucmVsZWFzZSgp
OwotICAgIHVuaXQgPSBWYWx1ZUxpc3Q7Ci19Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4g
aW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ1NTUGFyc2Vy
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQot
ewotICAgIHJldHVybiBXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9uKHN0
cmluZywgbG93ZXJjYXNlTGV0dGVycyk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MzIgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA3LCAyMDEwIFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIElu
Yy4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJDU1NJbmhlcml0ZWRWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU0luaXRpYWxWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKLSNpbmNsdWRlICJTVkdQYWludC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBib29sIGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JWYWx1ZShDU1NWYWx1ZUlEIGlkKQotewot
ICAgIHJldHVybiBpZCA+PSBDU1NWYWx1ZUFjdGl2ZWJvcmRlciAmJiBDU1NQYXJzZXI6OmlzVmFs
aWRTeXN0ZW1Db2xvclZhbHVlKGlkKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KTsKLQotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlk
OwotCi0gICAgYm9vbCB2YWxpZF9wcmltaXRpdmUgPSBmYWxzZTsKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlZFZhbHVlOwotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICAvKiBUaGUgY29t
bWVudCB0byB0aGUgcmlnaHQgZGVmaW5lcyBhbGwgdmFsaWQgdmFsdWUgb2YgdGhlc2UKLSAgICAg
KiBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gU1ZHIDEuMSwgQXBwZW5kaXggTi4gUHJvcGVydHkg
aW5kZXggKi8KLSAgICBjYXNlIENTU1Byb3BlcnR5QWxpZ25tZW50QmFzZWxpbmU6Ci0gICAgLy8g
YXV0byB8IGJhc2VsaW5lIHwgYmVmb3JlLWVkZ2UgfCB0ZXh0LWJlZm9yZS1lZGdlIHwgbWlkZGxl
IHwKLSAgICAvLyBjZW50cmFsIHwgYWZ0ZXItZWRnZSB8IHRleHQtYWZ0ZXItZWRnZSB8IGlkZW9n
cmFwaGljIHwgYWxwaGFiZXRpYyB8Ci0gICAgLy8gaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCB8IGlu
aGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZUJh
c2VsaW5lIHx8IGlkID09IENTU1ZhbHVlTWlkZGxlIHx8Ci0gICAgICAgICAgKGlkID49IENTU1Zh
bHVlQmVmb3JlRWRnZSAmJiBpZCA8PSBDU1NWYWx1ZU1hdGhlbWF0aWNhbCkpCi0gICAgICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYXNlbGluZVNoaWZ0OgotICAgIC8vIGJhc2VsaW5lIHwgc3VwZXIgfCBzdWIgfCA8
cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVTdWIgfHwKLSAgICAgICAgICAgaWQgPj0gQ1NT
VmFsdWVTdXBlcikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50LCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5RG9taW5hbnRCYXNlbGluZToKLSAg
ICAvLyBhdXRvIHwgdXNlLXNjcmlwdCB8IG5vLWNoYW5nZSB8IHJlc2V0LXNpemUgfCBpZGVvZ3Jh
cGhpYyB8Ci0gICAgLy8gYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwgfCBjZW50
cmFsIHwgbWlkZGxlIHwKLSAgICAvLyB0ZXh0LWFmdGVyLWVkZ2UgfCB0ZXh0LWJlZm9yZS1lZGdl
IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1Zh
bHVlTWlkZGxlIHx8Ci0gICAgICAgICAgKGlkID49IENTU1ZhbHVlVXNlU2NyaXB0ICYmIGlkIDw9
IENTU1ZhbHVlUmVzZXRTaXplKSB8fAotICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUNlbnRyYWwg
JiYgaWQgPD0gQ1NTVmFsdWVNYXRoZW1hdGljYWwpKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5RW5hYmxl
QmFja2dyb3VuZDoKLSAgICAvLyBhY2N1bXVsYXRlIHwgbmV3IFt4XSBbeV0gW3dpZHRoXSBbaGVp
Z2h0XSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQWNjdW11bGF0ZSkgLy8g
VE9ETyA6IG5ldwotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyU3RhcnQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmtlck1pZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlNYXNrOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKTsKLSAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNsaXBSdWxlOiAgICAgICAgICAgIC8vIG5vbnplcm8gfCBldmVub2RkIHwg
aW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsUnVsZToKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uemVybyB8fCBpZCA9PSBDU1NWYWx1ZUV2ZW5vZGQpCi0gICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VNaXRlcmxpbWl0OiAgIC8vIDxtaXRlcmxpbWl0PiB8IGluaGVyaXQKLSAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2luOiAgIC8vIG1pdGVyIHwgcm91bmQgfCBi
ZXZlbCB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTWl0ZXIgfHwgaWQgPT0g
Q1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZUJldmVsKQotICAgICAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlTGluZWNhcDogICAgLy8gYnV0dCB8IHJvdW5kIHwgc3F1YXJlIHwgaW5oZXJpdAotICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCdXR0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQg
PT0gQ1NTVmFsdWVTcXVhcmUpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VPcGFjaXR5OiAgIC8v
IDxvcGFjaXR5LXZhbHVlPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsbE9wYWNp
dHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BPcGFjaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbG9vZE9wYWNpdHk6Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRh
dGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQsIFNWR0F0dHJp
YnV0ZU1vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5U2hhcGVS
ZW5kZXJpbmc6Ci0gICAgLy8gYXV0byB8IG9wdGltaXplU3BlZWQgfCBjcmlzcEVkZ2VzIHwgZ2Vv
bWV0cmljUHJlY2lzaW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IGlkID09IENTU1ZhbHVlT3B0aW1pemVzcGVlZCB8fAotICAgICAgICAgICAgaWQgPT0gQ1NT
VmFsdWVDcmlzcGVkZ2VzIHx8IGlkID09IENTU1ZhbHVlR2VvbWV0cmljcHJlY2lzaW9uKQotICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sb3JSZW5kZXJpbmc6IC8vIGF1dG8gfCBvcHRpbWl6ZVNwZWVkIHwg
b3B0aW1pemVRdWFsaXR5IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRv
IHx8IGlkID09IENTU1ZhbHVlT3B0aW1pemVzcGVlZCB8fAotICAgICAgICAgICAgaWQgPT0gQ1NT
VmFsdWVPcHRpbWl6ZXF1YWxpdHkpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlCdWZmZXJlZFJlbmRlcmlu
ZzogLy8gYXV0byB8IGR5bmFtaWMgfCBzdGF0aWMKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
QXV0byB8fCBpZCA9PSBDU1NWYWx1ZUR5bmFtaWMgfHwgaWQgPT0gQ1NTVmFsdWVTdGF0aWMpCi0g
ICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2xvclByb2ZpbGU6IC8vIGF1dG8gfCBzUkdCIHwgPG5hbWU+IHwg
PHVyaT4gaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENT
U1ZhbHVlU3JnYikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbjogICAvLyBh
dXRvIHwgc1JHQiB8IGxpbmVhclJHQiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29s
b3JJbnRlcnBvbGF0aW9uRmlsdGVyczoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8
fCBpZCA9PSBDU1NWYWx1ZVNyZ2IgfHwgaWQgPT0gQ1NTVmFsdWVMaW5lYXJyZ2IpCi0gICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIC8qIFN0
YXJ0IG9mIHN1cHBvcnRlZCBDU1MgcHJvcGVydGllcyB3aXRoIHZhbGlkYXRpb24uIFRoaXMgaXMg
bmVlZGVkIGZvciBwYXJzZVNob3J0SGFuZCB0byB3b3JrCi0gICAgICogY29ycmVjdGx5IGFuZCBh
bGxvd3Mgb3B0aW1pemF0aW9uIGluIGFwcGx5UnVsZSguLikKLSAgICAgKi8KLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0QW5jaG9yOiAgICAvLyBzdGFydCB8IG1pZGRsZSB8IGVuZCB8IGluaGVy
aXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlU3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVNaWRk
bGUgfHwgaWQgPT0gQ1NTVmFsdWVFbmQpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0
cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0
aW9uVmVydGljYWw6IC8vIGF1dG8gfCA8YW5nbGU+IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IC8vIDxhbmdsZT4g
KHJlc3RyaWN0ZWQgdG8gX2RlZ18gcGVyIFNWRyAxLjEgc3BlYykgfCBpbmhlcml0Ci0gICAgICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19ERUcgfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKLQotICAgICAgICAgICAgaWYgKHBhcnNl
ZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhaW50T3JkZXI6Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VQYWlu
dE9yZGVyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOiAgICAg
ICAgICAgICAgICAgLy8gPHBhaW50PiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlOiAgICAgICAgICAgICAgIC8vIDxwYWludD4gfCBpbmhlcml0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBTVkdQYWludDo6Y3JlYXRlTm9uZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaWQgPT0g
Q1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQ
YWludDo6Y3JlYXRlQ3VycmVudENvbG9yKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbGlk
U3lzdGVtQ29udHJvbENvbG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKLSAgICAg
ICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDb2xvcihSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGlkKSk7Ci0gICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKLSAgICAgICAgICAgICAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVu
dDsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyc2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgYykpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50Ojpj
cmVhdGVVUklBbmRDb2xvcih2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgYyk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlk
ID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
U1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZE5vbmUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5z
dHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVV
UkkodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNWR1BhaW50KCk7Ci0KLSAg
ICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVN0b3BDb2xvcjogLy8gVE9ETyA6IGljY2NvbG9yCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29k
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6Ci0gICAgICAgIGlmIChD
U1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKQotICAgICAgICAgICAgfHwgKGlk
ID49IENTU1ZhbHVlQWxpY2VibHVlICYmIGlkIDw9IENTU1ZhbHVlWWVsbG93Z3JlZW4pKQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRlRnJvbVN0cmluZyh2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6
Y3JlYXRlQ3VycmVudENvbG9yKCk7Ci0gICAgICAgIGVsc2UgLy8gVE9ETyA6IHN2Z2NvbG9yIChp
Y2NDb2xvcikKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdDb2xvcigpOwotCi0g
ICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5VmVjdG9yRWZmZWN0OiAv
LyBub25lIHwgbm9uLXNjYWxpbmctc3Ryb2tlIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVOb25lIHx8IGlkID09IENTU1ZhbHVlTm9uU2NhbGluZ1N0cm9rZSkKLSAgICAgICAg
ICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgotICAgIC8vIGxyLXRiIHwgcmxfdGIgfCB0Yi1ybCB8IGxy
IHwgcmwgfCB0YiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTHJUYiB8fCBp
ZCA9PSBDU1NWYWx1ZVJsVGIgfHwgaWQgPT0gQ1NTVmFsdWVUYlJsIHx8IGlkID09IENTU1ZhbHVl
THIgfHwgaWQgPT0gQ1NTVmFsdWVSbCB8fCBpZCA9PSBDU1NWYWx1ZVRiKQotICAgICAgICAgICAg
dmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1By
b3BlcnR5U3Ryb2tlV2lkdGg6ICAgICAgICAgLy8gPGxlbmd0aD4gfCBpbmhlcml0Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hvZmZzZXQ6Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50LCBT
VkdBdHRyaWJ1dGVNb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0
cm9rZURhc2hhcnJheTogICAgIC8vIG5vbmUgfCA8ZGFzaGFycmF5PiB8IGluaGVyaXQKLSAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VTVkdT
dHJva2VEYXNoYXJyYXkoKTsKLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlLZXJuaW5nOiAgICAgICAgICAgICAgLy8gYXV0byB8IG5vcm1hbCB8IDxsZW5ndGg+IHwgaW5o
ZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlTm9y
bWFsKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoLCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6ICAgIC8vIDx1cmk+IHwgbm9uZSB8IGluaGVyaXQK
LSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBp
ZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpOwot
ICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFN2Z1NoYWRvdzoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAg
ICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgYXV0byBzaGFkb3dWYWx1ZUxpc3QgPSBwYXJzZVNoYWRvdygqbV92YWx1ZUxpc3QsIHByb3BJ
ZCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHNoYWRvd1ZhbHVlTGlzdCksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrVHlwZTog
Ly8gbHVtaW5hbmNlIHwgYWxwaGEgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZUx1bWluYW5jZSB8fCBpZCA9PSBDU1NWYWx1ZUFscGhhKQotICAgICAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvKiBzaG9ydGhhbmQgcHJvcGVy
dGllcyAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6Ci0gICAgewotICAgICAgICBTaG9y
dGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAgICAgICBtX2ltcGxpY2l0U2hvcnRo
YW5kID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFwYXJzZVZhbHVlKENTU1Byb3BlcnR5TWFya2VyU3Rh
cnQsIGltcG9ydGFudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICht
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICByb2xsYmFja0xhc3RQcm9wZXJ0
aWVzKDEpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIENT
U1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKLSAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJrZXJNaWQsIHZhbHVlLCBpbXBvcnRhbnQpOwot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlckVuZCwgdmFsdWUsIGltcG9ydGFu
dCk7Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlDeDoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Q3k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJ4Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKLSAgICBjYXNlIENTU1Byb3BlcnR5WDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5WToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBJZiB5b3UgY3Jhc2ggaGVyZSwgaXQn
cyBiZWNhdXNlIHlvdSBhZGRlZCBhIGNzcyBwcm9wZXJ0eSBhbmQgYXJlIG5vdCBoYW5kbGluZyBp
dAotICAgICAgICAvLyBpbiBlaXRoZXIgdGhpcyBzd2l0Y2ggc3RhdGVtZW50IG9yIHRoZSBvbmUg
aW4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoMCwg
InVuaW1wbGVtZW50ZWQgcHJvcGVydHlJRDogJWQiLCBwcm9wSWQpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbGlkX3ByaW1pdGl2ZSkgewotICAgICAgICBpZiAo
aWQgIT0gMCkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUlkZW50aWZpZXIoaWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpOwotICAgICAgICBlbHNlIGlmICh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlLCAoQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0
KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49
IENTU1BhcnNlclZhbHVlOjpRX0VNUykKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKLSAgICAgICAg
aWYgKGlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pKQotICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0aW9u
LmNhbGN1bGF0aW9uKCkpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLSAg
ICBpZiAoIXBhcnNlZFZhbHVlIHx8IChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpICYmICFpblNob3J0
aGFuZCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKHBhcnNlZFZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJh
eSgpCi17Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmV0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVDb21tYVNlcGFyYXRlZCgpOwotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgYm9vbCB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgIHdo
aWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqdmFsdWUpOwotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIFNWR0F0
dHJpYnV0ZU1vZGUpOwotICAgICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgaGFuZGxlIGNhbGN1
bGF0ZWQgdmFsdWVzLgotICAgICAgICBpZiAodmFsdWUtPmlkICE9IDApCi0gICAgICAgICAgICBy
ZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQp
KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0g
ICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5m
VmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCkpOwotICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9
PSAnLCcpCi0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQot
ICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gcmV0OwotfQotCi1SZWZQdHI8U1ZHUGFpbnQ+IENTU1BhcnNlcjo6cGFyc2VTVkdQYWlu
dCgpCi17Ci0gICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgaWYgKCFwYXJz
ZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNWR1BhaW50OjpjcmVhdGVDb2xvcihDb2xvcihjKSk7
Ci19Ci0KLVJlZlB0cjxTVkdDb2xvcj4gQ1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKCkKLXsKLSAg
ICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBpZiAoIXBhcnNlQ29sb3JGcm9t
VmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gU1ZHQ29sb3I6OmNyZWF0ZUZyb21Db2xvcihDb2xvcihjKSk7Ci19Ci0K
LVJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VQYWludE9yZGVyKCkKLXsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAg
VmVjdG9yPENTU1ZhbHVlSUQ+IHBhaW50VHlwZUxpc3Q7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBmaWxsOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3Ryb2tlOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbWFya2VyczsKLSAgICB3aGlsZSAodmFsdWUpIHsK
LSAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpbGwgJiYgIWZpbGwpCi0gICAgICAg
ICAgICBmaWxsID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlk
KTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlU3Ryb2tlICYmICFzdHJv
a2UpCi0gICAgICAgICAgICBzdHJva2UgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRp
Zmllcih2YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVN
YXJrZXJzICYmICFtYXJrZXJzKQotICAgICAgICAgICAgbWFya2VycyA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBwYWludFR5cGVMaXN0LmFwcGVuZCh2YWx1ZS0+
aWQpOwotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAg
Ly8gQWZ0ZXIgcGFyc2luZyB3ZSBzZXJpYWxpemUgdGhlIHBhaW50LW9yZGVyIGxpc3QuIFNpbmNl
IGl0IGlzIG5vdCBwb3NzaWJsZSB0bwotICAgIC8vIHBvcCBhIGxhc3QgbGlzdCBpdGVtcyBmcm9t
IENTU1ZhbHVlTGlzdCB3aXRob3V0IGJpZ2dlciBjb3N0LCB3ZSBjcmVhdGUgdGhlCi0gICAgLy8g
bGlzdCBhZnRlciBwYXJzaW5nLiAKLSAgICBDU1NWYWx1ZUlEIGZpcnN0UGFpbnRPcmRlclR5cGUg
PSBwYWludFR5cGVMaXN0LmF0KDApOwotICAgIGF1dG8gcGFpbnRPcmRlckxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgc3dpdGNoIChmaXJzdFBhaW50T3Jk
ZXJUeXBlKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUZpbGw6Ci0gICAgICAgIEZBTExUSFJPVUdIOwot
ICAgIGNhc2UgQ1NTVmFsdWVTdHJva2U6Ci0gICAgICAgIHBhaW50T3JkZXJMaXN0LT5hcHBlbmQo
Zmlyc3RQYWludE9yZGVyVHlwZSA9PSBDU1NWYWx1ZUZpbGwgPyBmaWxsLnJlbGVhc2VOb25OdWxs
KCkgOiBzdHJva2UucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGlmIChwYWludFR5cGVMaXN0
LnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIGlmIChwYWludFR5cGVMaXN0LmF0KDEpID09IENT
U1ZhbHVlTWFya2VycykKLSAgICAgICAgICAgICAgICBwYWludE9yZGVyTGlzdC0+YXBwZW5kKG1h
cmtlcnMucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZU1hcmtlcnM6Ci0gICAgICAgIHBhaW50T3JkZXJMaXN0LT5hcHBlbmQobWFy
a2Vycy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgaWYgKHBhaW50VHlwZUxpc3Quc2l6ZSgp
ID4gMSkgewotICAgICAgICAgICAgaWYgKHBhaW50VHlwZUxpc3QuYXQoMSkgPT0gQ1NTVmFsdWVT
dHJva2UpCi0gICAgICAgICAgICAgICAgcGFpbnRPcmRlckxpc3QtPmFwcGVuZChzdHJva2UucmVs
ZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBXVEZNb3Zl
KHBhaW50T3JkZXJMaXN0KTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0ODM5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcDoyMDQ4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzg1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorCisjaW5jbHVkZSAi
Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0
aW9WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiQ1NTQm9y
ZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NDYW52YXNWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmlidXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKKyNp
bmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRG
ZWF0dXJlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGb250VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NG
dW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTSW5oZXJpdGVkVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbml0aWFsVmFsdWUuaCIKKyNp
bmNsdWRlICJDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NLZXlmcmFtZXNSdWxlLmgi
CisjaW5jbHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU01lZGlh
UnVsZS5oIgorI2luY2x1ZGUgIkNTU05hbWVkSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Bh
Z2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRh
LmgiCisjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUmV2ZXJ0VmFs
dWUuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVl
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0
aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU1Vuc2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAi
Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkNvdW50ZXIuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUg
IkdyaWRBcmVhLmgiCisjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKKyNpbmNsdWRlICJN
ZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFpci5oIgorI2lu
Y2x1ZGUgIlJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNr
ZXJUZXN0RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHls
ZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCisjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxlU2hl
ZXRDb250ZW50cy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYktp
dENTU0ZpbHRlclZhbHVlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisjaW5jbHVkZSA8Yml0c2V0PgorI2lu
Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSW1wbC5oPgorCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyNpbmNsdWRlICJDU1NH
cmlkQXV0b1JlcGVhdFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2luY2x1ZGUgIkxlbmd0aFJlcGVhdC5oIgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisjaW5jbHVkZSAiRGFzaGJvYXJkUmVn
aW9uLmgiCisjZW5kaWYKKworI2RlZmluZSBZWURFQlVHIDAKKworI2lmIFlZREVCVUcgPiAwCitl
eHRlcm4gaW50IGNzc3l5ZGVidWc7CisjZW5kaWYKKworZXh0ZXJuIGludCBjc3N5eXBhcnNlKFdl
YkNvcmU6OkNTU1BhcnNlciopOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
eworCitlbnVtIFByb3BlcnR5VHlwZSB7CisgICAgUHJvcGVydHlFeHBsaWNpdCwKKyAgICBQcm9w
ZXJ0eUltcGxpY2l0Cit9OworCitjbGFzcyBJbXBsaWNpdFNjb3BlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbXBsaWNpdFNjb3BlKTsKK3B1YmxpYzoKKyAgICBJbXBsaWNpdFNjb3BlKFdl
YkNvcmU6OkNTU1BhcnNlciYgcGFyc2VyLCBQcm9wZXJ0eVR5cGUgcHJvcGVydHlUeXBlKQorICAg
ICAgICA6IG1fcGFyc2VyKHBhcnNlcikKKyAgICB7CisgICAgICAgIG1fcGFyc2VyLm1faW1wbGlj
aXRTaG9ydGhhbmQgPSBwcm9wZXJ0eVR5cGUgPT0gUHJvcGVydHlJbXBsaWNpdDsKKyAgICB9CisK
KyAgICB+SW1wbGljaXRTY29wZSgpCisgICAgeworICAgICAgICBtX3BhcnNlci5tX2ltcGxpY2l0
U2hvcnRoYW5kID0gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OkNTU1Bh
cnNlciYgbV9wYXJzZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NvbnN0IHVuc2lnbmVkIENTU1BhcnNlcjo6aW52YWxpZFBhcnNlZFByb3BlcnRpZXND
b3VudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKK3N0YXRpYyBjb25z
dCBkb3VibGUgTUFYX1NDQUxFID0gMTAwMDAwMDsKKwordGVtcGxhdGU8dW5zaWduZWQgbGVuZ3Ro
PiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENTU1BhcnNlclZhbHVl
JiB2YWx1ZSwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCit7CisgICAg
QVNTRVJUKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCB2YWx1
ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICByZXR1cm4gZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJz
KTsKK30KKworc3RhdGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBjaGFyKiBwcmVmaXgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghcHJlZml4W2ldKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChzdHJpbmdbaV0gIT0gcHJlZml4W2ldKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoQXJncyYmLi4uIGFyZ3MpCit7CisgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikpOworfQorCitjbGFzcyBBbmltYXRpb25QYXJzZUNvbnRleHQg
eworcHVibGljOgorICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCgpID0gZGVmYXVsdDsKKworICAg
IHZvaWQgY29tbWl0Rmlyc3RBbmltYXRpb24oKQorICAgIHsKKyAgICAgICAgbV9maXJzdEFuaW1h
dGlvbkNvbW1pdHRlZCA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBoYXNDb21taXR0ZWRGaXJz
dEFuaW1hdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9maXJzdEFuaW1hdGlv
bkNvbW1pdHRlZDsKKyAgICB9CisKKyAgICB2b2lkIGNvbW1pdEFuaW1hdGlvblByb3BlcnR5S2V5
d29yZCgpCisgICAgeworICAgICAgICBtX2FuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uUHJvcGVydHlLZXl3
b3JkQWxsb3dlZDsKKyAgICB9CisKKyAgICBib29sIGhhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtl
eXdvcmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGFzU2VlbkFuaW1hdGlvblBy
b3BlcnR5S2V5d29yZDsKKyAgICB9CisKKyAgICB2b2lkIHNhd0FuaW1hdGlvblByb3BlcnR5S2V5
d29yZCgpCisgICAgeworICAgICAgICBtX2hhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQg
PSB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fYW5pbWF0aW9uUHJvcGVydHlL
ZXl3b3JkQWxsb3dlZCB7IHRydWUgfTsKKyAgICBib29sIG1fZmlyc3RBbmltYXRpb25Db21taXR0
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNTZWVuQW5pbWF0aW9uUHJvcGVydHlLZXl3b3Jk
IHsgZmFsc2UgfTsKK307CisKK2NvbnN0IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENTU1BhcnNl
ckNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0
PiBzdHJpY3RDb250ZXh0KENTU1N0cmljdE1vZGUpOworICAgIHJldHVybiBzdHJpY3RDb250ZXh0
OworfQorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1vZGUg
bW9kZSwgY29uc3QgVVJMJiBiYXNlVVJMKQorICAgIDogYmFzZVVSTChiYXNlVVJMKQorICAgICwg
bW9kZShtb2RlKQorI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisgICAgLCBjc3NHcmlkTGF5
b3V0RW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSkKKyNlbmRpZgoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBGSVhNRTogRm9yY2UgdGhlIHNpdGUgc3BlY2lmaWMgcXVpcmsgYmVsb3cgdG8gd29yayBvbiBp
T1MuIEludmVzdGlnYXRpbmcgb3RoZXIgc2l0ZSBzcGVjaWZpYyBxdWlya3MKKyAgICAvLyB0byBz
ZWUgaWYgd2UgY2FuIGVuYWJsZSB0aGUgcHJlZmVyZW5jZSBhbGwgdG9nZXRoZXIgaXMgdG8gYmUg
aGFuZGxlZCBieToKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vODQ5MzMwOT4gSW52ZXN0aWdhdGUg
RW5hYmxpbmcgU2l0ZSBTcGVjaWZpYyBRdWlya3MgaW4gTW9iaWxlU2FmYXJpIGFuZCBVSVdlYlZp
ZXcKKyAgICBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IHRydWU7CisjZW5kaWYKK30KKworQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorICAgIDogYmFzZVVSTChiYXNl
VVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogYmFzZVVSTCkKKyAgICAsIGNoYXJz
ZXQoY2hhcnNldCkKKyAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkgPyBDU1NRdWly
a3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKKyAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50Lmlz
SFRNTERvY3VtZW50KCkpCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyAgICAsIGNzc0dy
aWRMYXlvdXRFbmFibGVkKGRvY3VtZW50LmlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKKyNlbmRp
ZgoreworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7
CisgICAgICAgIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gc2V0dGluZ3MtPm5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzKCk7CisgICAgICAgIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9k
ZSA9IHNldHRpbmdzLT5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSgpOworICAgICAg
ICB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID0gc2V0dGluZ3MtPnVz
ZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKTsKKyNpZiBFTkFCTEUoSU9T
X1RFWFRfQVVUT1NJWklORykKKyAgICAgICAgdGV4dEF1dG9zaXppbmdFbmFibGVkID0gc2V0dGlu
Z3MtPnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgIHNwcmluZ1RpbWlu
Z0Z1bmN0aW9uRW5hYmxlZCA9IHNldHRpbmdzLT5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQo
KTsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IEZvcmNlIHRoZSBz
aXRlIHNwZWNpZmljIHF1aXJrIGJlbG93IHRvIHdvcmsgb24gaU9TLiBJbnZlc3RpZ2F0aW5nIG90
aGVyIHNpdGUgc3BlY2lmaWMgcXVpcmtzCisgICAgLy8gdG8gc2VlIGlmIHdlIGNhbiBlbmFibGUg
dGhlIHByZWZlcmVuY2UgYWxsIHRvZ2V0aGVyIGlzIHRvIGJlIGhhbmRsZWQgYnk6CisgICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzg0OTMzMDk+IEludmVzdGlnYXRlIEVuYWJsaW5nIFNpdGUgU3BlY2lm
aWMgUXVpcmtzIGluIE1vYmlsZVNhZmFyaSBhbmQgVUlXZWJWaWV3CisgICAgbmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MgPSB0cnVlOworI2VuZGlmCit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBhLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBiKQoreworICAgIHJl
dHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCisgICAgICAgICYmIGEuY2hhcnNldCA9PSBiLmNo
YXJzZXQKKyAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmlzSFRNTERv
Y3VtZW50ID09IGIuaXNIVE1MRG9jdW1lbnQKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQor
ICAgICAgICAmJiBhLmNzc0dyaWRMYXlvdXRFbmFibGVkID09IGIuY3NzR3JpZExheW91dEVuYWJs
ZWQKKyNlbmRpZgorICAgICAgICAmJiBhLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID09IGIubmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MKKyAgICAgICAgJiYgYS5lbmZvcmNlc0NTU01JTUVUeXBlSW5O
b1F1aXJrc01vZGUgPT0gYi5lbmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUKKyAgICAg
ICAgJiYgYS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yID09IGIudXNl
TGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcgorICAgICAgICAmJiBhLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZDsK
K30KKworQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4
dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQoreworI2lmIFlZREVCVUcgPiAwCisgICAgY3Nz
eXlkZWJ1ZyA9IDE7CisjZW5kaWYKK30KKworQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBzdGF0aWMg
dm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRvQVNDSUlMb3dlcihjaGFyYWN0
ZXJzW2ldKTsKK30KKwordm9pZCBDU1NQYXJzZXJTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpCit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICBXZWJDb3JlOjpjb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOworICAg
IGVsc2UKKyAgICAgICAgV2ViQ29yZTo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKGNo
YXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNl
cihjb25zdCBjaGFyKiBwcmVmaXgsIHVuc2lnbmVkIHByZWZpeExlbmd0aCwgU3RyaW5nVmlldyBz
dHJpbmcsIGNvbnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWduZWQgc3VmZml4TGVuZ3RoKQoreworICAg
IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aDsKKyAgICB1bnNpZ25lZCBz
dHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nTGVuZ3RoICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3VmZml4TGVuZ3RoICsgMTsK
KyAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKworICAgIGlmICghc3RyaW5nTGVuZ3RoIHx8IHN0cmlu
Zy5pczhCaXQoKSkgeworICAgICAgICBtX2RhdGFTdGFydDggPSBzdGQ6Om1ha2VfdW5pcXVlPExD
aGFyW10+KGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcnNl
ZFRleHRQcmVmaXhMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fZGF0YVN0YXJ0OFtpXSA9IHBy
ZWZpeFtpXTsKKworICAgICAgICBpZiAoc3RyaW5nTGVuZ3RoKQorICAgICAgICAgICAgbWVtY3B5
KG1fZGF0YVN0YXJ0OC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNo
YXJhY3RlcnM4KCksIHN0cmluZ0xlbmd0aCAqIHNpemVvZihMQ2hhcikpOworCisgICAgICAgIHVu
c2lnbmVkIHN0YXJ0ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nTGVuZ3RoOwor
ICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKKyAgICAgICAgICAgIG1fZGF0YVN0
YXJ0OFtpXSA9IHN1ZmZpeFtpIC0gc3RhcnRdOworCisgICAgICAgIG1fZGF0YVN0YXJ0OFtsZW5n
dGggLSAxXSA9ICdcMCc7CisKKyAgICAgICAgbV9pczhCaXRTb3VyY2UgPSB0cnVlOworICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXI4ID0gbV9kYXRhU3RhcnQ4LmdldCgpOworICAgICAgICBtX2N1
cnJlbnRDaGFyYWN0ZXIxNiA9IG51bGxwdHI7CisgICAgICAgIHNldFRva2VuU3RhcnQ8TENoYXI+
KG1fY3VycmVudENoYXJhY3RlcjgpOworICAgICAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpy
ZWFsTGV4PExDaGFyPjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZGF0YVN0YXJ0
MTYgPSBzdGQ6Om1ha2VfdW5pcXVlPFVDaGFyW10+KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsgKytpKQorICAgICAgICBtX2Rh
dGFTdGFydDE2W2ldID0gcHJlZml4W2ldOworCisgICAgQVNTRVJUKHN0cmluZ0xlbmd0aCk7Cisg
ICAgbWVtY3B5KG1fZGF0YVN0YXJ0MTYuZ2V0KCkgKyBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGgs
IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisK
KyAgICB1bnNpZ25lZCBzdGFydCA9IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCArIHN0cmluZ0xl
bmd0aDsKKyAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIHN1ZmZpeExlbmd0aDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorICAgICAgICBtX2RhdGFTdGFydDE2
W2ldID0gc3VmZml4W2kgLSBzdGFydF07CisKKyAgICBtX2RhdGFTdGFydDE2W2xlbmd0aCAtIDFd
ID0gJ1wwJzsKKworICAgIG1faXM4Qml0U291cmNlID0gZmFsc2U7CisgICAgbV9jdXJyZW50Q2hh
cmFjdGVyOCA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50Q2hhcmFjdGVyMTYgPSBtX2RhdGFTdGFy
dDE2LmdldCgpOworICAgIHNldFRva2VuU3RhcnQ8VUNoYXI+KG1fY3VycmVudENoYXJhY3RlcjE2
KTsKKyAgICBtX2xleEZ1bmMgPSAmQ1NTUGFyc2VyOjpyZWFsTGV4PFVDaGFyPjsKK30KKwordm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRQb3NpdGlvbiYgdGV4dFBvc2l0aW9uLCBSdWxlU291
cmNlRGF0YUxpc3QqIHJ1bGVTb3VyY2VEYXRhUmVzdWx0LCBib29sIGxvZ0Vycm9ycykKK3sKKyAg
ICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKKyAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRv
bTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgorICAgIGlmIChydWxlU291cmNlRGF0
YVJlc3VsdCkKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IHN0ZDo6bWFrZV91bmlx
dWU8UnVsZVNvdXJjZURhdGFMaXN0PigpOworICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgPSBy
dWxlU291cmNlRGF0YVJlc3VsdDsKKworICAgIG1fbG9nRXJyb3JzID0gbG9nRXJyb3JzICYmIHNo
ZWV0LT5zaW5nbGVPd25lckRvY3VtZW50KCkgJiYgIXNoZWV0LT5iYXNlVVJMKCkuaXNFbXB0eSgp
ICYmIHNoZWV0LT5zaW5nbGVPd25lckRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBtX2lnbm9yZUVy
cm9yc0luRGVjbGFyYXRpb24gPSBmYWxzZTsKKyAgICBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyID0g
dGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICBtX3NoZWV0U3RhcnRDb2x1
bW5OdW1iZXIgPSB0ZXh0UG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CisgICAgbV9s
aW5lTnVtYmVyID0gbV9zaGVldFN0YXJ0TGluZU51bWJlcjsKKyAgICBtX2NvbHVtbk9mZnNldEZv
ckxpbmUgPSAwOworICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKKyAgICBjc3N5eXBh
cnNlKHRoaXMpOworICAgIHNoZWV0LT5zaHJpbmtUb0ZpdCgpOworICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2sucmVzZXQoKTsKKyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBtX3J1bGUgPSBudWxscHRyOworICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9
IGZhbHNlOworICAgIG1fbG9nRXJyb3JzID0gZmFsc2U7Cit9CisKK1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25z
dCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKKyAgICBtX2Fs
bG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgc2V0dXBQYXJzZXIoIkAtd2Vi
a2l0LXJ1bGV7Iiwgc3RyaW5nLCAifSAiKTsKKyAgICBjc3N5eXBhcnNlKHRoaXMpOworICAgIHJl
dHVybiBtX3J1bGU7Cit9CisKK1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJzZXI6OnBhcnNl
S2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOworICAgIHNldHVwUGFyc2VyKCJALXdl
YmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOworICAgIGNzc3l5cGFyc2UodGhp
cyk7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVN1
cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIG1fc3VwcG9ydHND
b25kaXRpb24gPSBmYWxzZTsKKyAgICAvLyBjYW4ndCB1c2UgeyBiZWNhdXNlIHRva2VuaXplciBz
dGF0ZSBzd2l0Y2hlcyBmcm9tIHN1cHBvcnRzIHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBzZWVz
IHsgdG9rZW4uCisgICAgLy8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJVEVT
UEFDRSBpbiBDU1NHcmFtbWFyLnkpCisgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXN1cHBvcnRz
LWNvbmRpdGlvbiAiLCBzdHJpbmcsICJ9ICIpOworICAgIGNzc3l5cGFyc2UodGhpcyk7CisgICAg
cmV0dXJuIG1fc3VwcG9ydHNDb25kaXRpb247Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Nv
bG9yUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCit7CisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3Zlcmxp
bmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlckNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyRW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dEVtcGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKENTU1ZhbHVlSUQg
dmFsdWVJRCkKK3sKKyAgICByZXR1cm4gdmFsdWVJRCA+PSBDU1NWYWx1ZUFxdWEgJiYgdmFsdWVJ
RCA8PSBDU1NWYWx1ZUFwcGxlU3lzdGVtWWVsbG93OworfQorCitzdGF0aWMgYm9vbCB2YWxpZFBy
aW1pdGl2ZVZhbHVlQ29sb3IoQ1NTVmFsdWVJRCB2YWx1ZUlELCBib29sIHN0cmljdCA9IGZhbHNl
KQoreworICAgIHJldHVybiAodmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWVudQorICAg
ICAgICB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKHZhbHVlSUQpIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVBbHBoYQorICAgICAgICB8fCAodmFsdWVJRCA+PSBDU1NWYWx1ZVdl
YmtpdEZvY3VzUmluZ0NvbG9yICYmIHZhbHVlSUQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgIXN0
cmljdCkpOworfQorCitzdGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZUNvbG9yVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKKyAg
ICBib29sIHN0cmljdCA9IGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKKyAgICBp
ZiAoIWlzQ29sb3JQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKQorICAgICAgICByZXR1cm4gQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7CisKKyAgICBDU1NQYXJzZXJTdHJpbmcgY3NzU3RyaW5n
OworICAgIGNzc1N0cmluZy5pbml0KHN0cmluZyk7CisgICAgQ1NTVmFsdWVJRCB2YWx1ZUlEID0g
Y3NzVmFsdWVLZXl3b3JkSUQoY3NzU3RyaW5nKTsKKyAgICBpZiAodmFsaWRQcmltaXRpdmVWYWx1
ZUNvbG9yKHZhbHVlSUQsIHN0cmljdCkpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOworICAgICAg
ICByZXR1cm4gZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVy
dHlJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKKyAgICB9Cisg
ICAgUkdCQTMyIGNvbG9yOworICAgIGlmICghQ1NTUGFyc2VyOjpmYXN0UGFyc2VDb2xvcihjb2xv
ciwgc3RyaW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCisgICAgICAgIHJldHVybiBD
U1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKKworICAgIGF1dG8gdmFsdWUgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOworICAgIHJldHVybiBk
ZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBXVEZN
b3ZlKHZhbHVlKSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2Vk
IDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwg
Ym9vbCYgYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKK3sKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUhl
aWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1p
bkhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVBhZGRpbmdCb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRp
bmdUb3A6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxXaWR0aDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWluTG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2Fs
SGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFBhZGRpbmdFbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoK
KyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29s
dW1uR2FwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93R2FwOgorI2VuZGlmCisjaWYgRU5B
QkxFKENTU19TSEFQRVMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgor
I2VuZGlmCisgICAgICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKKyAgICBjYXNlIENTU1By
b3BlcnR5Q3g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUN5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlM
ZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpbkxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlNYXJnaW5Ub3A6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVI6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJ4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlSeToKKyAgICBjYXNlIENTU1By
b3BlcnR5UmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJl
Zm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKKyAgICBjYXNlIENTU1Byb3BlcnR5WDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5WToKKyAgICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGlj
IGlubGluZSBib29sIHBhcnNlU2ltcGxlTGVuZ3RoKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkJiBsZW5ndGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIHVu
aXQsIGRvdWJsZSYgbnVtYmVyKQoreworICAgIGlmIChsZW5ndGggPiAyICYmIChjaGFyYWN0ZXJz
W2xlbmd0aCAtIDJdIHwgMHgyMCkgPT0gJ3AnICYmIChjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdIHwg
MHgyMCkgPT0gJ3gnKSB7CisgICAgICAgIGxlbmd0aCAtPSAyOworICAgICAgICB1bml0ID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEgJiYgY2hh
cmFjdGVyc1tsZW5ndGggLSAxXSA9PSAnJScpIHsKKyAgICAgICAgbGVuZ3RoIC09IDE7CisgICAg
ICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgfQorCisg
ICAgLy8gV2UgcmVseSBvbiBjaGFyYWN0ZXJzVG9Eb3VibGUgZm9yIHZhbGlkYXRpb24gYXMgd2Vs
bC4gVGhlIGZ1bmN0aW9uCisgICAgLy8gd2lsbCBzZXQgIm9rIiB0byAiZmFsc2UiIGlmIHRoZSBl
bnRpcmUgcGFzc2VkLWluIGNoYXJhY3RlciByYW5nZSBkb2VzCisgICAgLy8gbm90IHJlcHJlc2Vu
dCBhIGRvdWJsZS4KKyAgICBib29sIG9rOworICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJs
ZShjaGFyYWN0ZXJzLCBsZW5ndGgsICZvayk7CisgICAgcmV0dXJuIG9rOworfQorCitzdGF0aWMg
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CisgICAgYm9vbCBhY2NlcHRz
TmVnYXRpdmVOdW1iZXJzOworICAgIGlmICghaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKHByb3Bl
cnR5SWQsIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMpKQorICAgICAgICByZXR1cm4gQ1NTUGFyc2Vy
OjpQYXJzZVJlc3VsdDo6RXJyb3I7CisKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CisgICAgZG91YmxlIG51bWJlcjsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKKworICAgIGlmIChzdHJp
bmcuaXM4Qml0KCkpIHsKKyAgICAgICAgaWYgKCFwYXJzZVNpbXBsZUxlbmd0aChzdHJpbmcuY2hh
cmFjdGVyczgoKSwgbGVuZ3RoLCB1bml0LCBudW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgh
cGFyc2VTaW1wbGVMZW5ndGgoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgsIHVuaXQsIG51
bWJlcikpCisgICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7
CisgICAgfQorCisgICAgaWYgKHVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
IHsKKyAgICAgICAgaWYgKG51bWJlciAmJiBpc1N0cmljdFBhcnNlck1vZGUoY3NzUGFyc2VyTW9k
ZSkpCisgICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Cisg
ICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOworICAgIH0KKyAgICBpZiAo
bnVtYmVyIDwgMCAmJiAhYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKKyAgICAgICAgcmV0dXJuIENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOworICAgIGlmIChzdGQ6OmlzaW5mKG51bWJlcikp
CisgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKKworICAgIGF1
dG8gdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwg
dW5pdCk7CisgICAgcmV0dXJuIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3Bl
cnR5KHByb3BlcnR5SWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6
UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBpbnQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgcGFyc2VyQ29udGV4dCwgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0Q29udGVu
dHMpCit7CisgICAgaWYgKCF2YWx1ZUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2U6
IC8vIGNvbGxhcHNlIHwgc2VwYXJhdGUgfCBpbmhlcml0CisgICAgICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQ29sbGFwc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNlcGFyYXRlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJUb3BTdHlsZTogLy8gPGJvcmRlci1zdHlsZT4gfCBpbmhlcml0CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6IC8vIERlZmluZWQgYXM6IG5vbmUgfCBoaWRkZW4gfCBk
b3R0ZWQgfCBkYXNoZWQgfAorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZTog
Ly8gc29saWQgfCBkb3VibGUgfCBncm9vdmUgfCByaWRnZSB8IGluc2V0IHwgb3V0c2V0CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQWZ0ZXJTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVm
b3JlU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFN0eWxlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlDb2x1bW5SdWxlU3R5bGU6CisgICAgICAgIGlmICh2YWx1ZUlEID49IENTU1ZhbHVlTm9u
ZSAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlRG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6CisgICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
Q29udGVudEJveCkKKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZTogLy8gdG9wIHwgYm90dG9tIHwgbGVmdCB8
IHJpZ2h0IHwgaW5oZXJpdAorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUb3AgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUJvdHRvbSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6IC8vIG5vbmUgfCBsZWZ0IHwgcmln
aHQgfCBib3RoIHwgaW5oZXJpdAorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVCb3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246IC8vIGx0ciB8IHJ0bCB8
IGluaGVyaXQKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMdHIgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVJ0bCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKKyAgICAgICAgLy8gaW5saW5lIHwgYmxvY2sg
fCBsaXN0LWl0ZW0gfCBpbmxpbmUtYmxvY2sgfCB0YWJsZSB8CisgICAgICAgIC8vIGlubGluZS10
YWJsZSB8IHRhYmxlLXJvdy1ncm91cCB8IHRhYmxlLWhlYWRlci1ncm91cCB8IHRhYmxlLWZvb3Rl
ci1ncm91cCB8IHRhYmxlLXJvdyB8CisgICAgICAgIC8vIHRhYmxlLWNvbHVtbi1ncm91cCB8IHRh
YmxlLWNvbHVtbiB8IHRhYmxlLWNlbGwgfCB0YWJsZS1jYXB0aW9uIHwgLXdlYmtpdC1ib3ggfCAt
d2Via2l0LWlubGluZS1ib3ggfCBub25lIHwgaW5oZXJpdAorICAgICAgICAvLyBmbGV4IHwgLXdl
YmtpdC1mbGV4IHwgaW5saW5lLWZsZXggfCAtd2Via2l0LWlubGluZS1mbGV4IHwgZ3JpZCB8IGlu
bGluZS1ncmlkIHwgY29udGVudHMKKyAgICAgICAgaWYgKCh2YWx1ZUlEID49IENTU1ZhbHVlSW5s
aW5lICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVDb250ZW50cykgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQorICAgICAgICBpZiAocGFyc2VyQ29udGV4dC5jc3NHcmlkTGF5b3V0RW5hYmxlZCAmJiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZUdyaWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUlubGluZUdyaWQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIENTU1Byb3BlcnR5RW1wdHlDZWxsczogLy8gc2hvdyB8IGhpZGUgfCBpbmhlcml0Cisg
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlU2hvdyB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
SGlkZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1Byb3BlcnR5RmxvYXQ6IC8vIGxlZnQgfCByaWdodCB8IG5vbmUgfCBjZW50ZXIgKGZvciBi
dWdneSBDU1MsIG1hcHMgdG8gbm9uZSkKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVM
ZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9u
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ2VudGVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6IC8vIG5vcm1h
bCB8IGl0YWxpYyB8IG9ibGlxdWUgfCBpbmhlcml0CisgICAgICAgIGlmICh2YWx1ZUlEID09IENT
U1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJdGFsaWMgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU9ibGlxdWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOiAvLyBhdXRvIHwgb3B0aW1pemVT
cGVlZCB8IG9wdGltaXplUXVhbGl0eSB8IC13ZWJraXQtY3Jpc3AtZWRnZXMgfCAtd2Via2l0LW9w
dGltaXplLWNvbnRyYXN0IHwgY3Jpc3AtZWRnZXMgfCBwaXhlbGF0ZWQKKyAgICAgICAgLy8gb3B0
aW1pemVTcGVlZCBhbmQgb3B0aW1pemVRdWFsaXR5IGFyZSBkZXByZWNhdGVkOyBhIHVzZXIgYWdl
bnQgbXVzdCBhY2NlcHQgdGhlbSBhcyB2YWxpZCB2YWx1ZXMgYnV0IG11c3QgdHJlYXQgdGhlbSBh
cyBoYXZpbmcgdGhlIHNhbWUgYmVoYXZpb3IgYXMgcGl4ZWxhdGVkIGFuZCBhdXRvIHJlc3BlY3Rp
dmVseS4KKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXF1YWxp
dHkKKyAgICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRDcmlzcEVkZ2VzIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRPcHRpbWl6ZUNvbnRyYXN0IHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVDcmlzcEVkZ2VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQaXhlbGF0ZWQpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUxpc3RTdHlsZVBvc2l0aW9uOiAvLyBpbnNpZGUgfCBvdXRzaWRlIHwgaW5oZXJpdAorICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUluc2lkZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT3V0
c2lkZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKKyAgICAgICAgLy8gU2VlIHNlY3Rpb24gQ1NTX1BS
T1BfTElTVF9TVFlMRV9UWVBFIG9mIGZpbGUgQ1NTVmFsdWVLZXl3b3Jkcy5pbgorICAgICAgICAv
LyBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGxpc3Qtc3R5bGUtdHlwZXMuCisgICAgICAgIGlm
ICgodmFsdWVJRCA+PSBDU1NWYWx1ZURpc2MgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUthdGFrYW5h
SXJvaGEpIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlPYmplY3RGaXQ6CisgICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlRmlsbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29u
dGFpbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ292ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5v
bmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjYWxlRG93bikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOiAv
LyAoPGJvcmRlci1zdHlsZT4gZXhjZXB0IGhpZGRlbikgfCBhdXRvIHwgaW5oZXJpdAorICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUg
fHwgKHZhbHVlSUQgPj0gQ1NTVmFsdWVJbnNldCAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlRG91Ymxl
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3ZlcmZsb3dXcmFwOiAvLyBub3JtYWwgfCBicmVhay13b3JkCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdvcmRXcmFwOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1h
bCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQnJlYWtXb3JkKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRvdWNoQWN0aW9uOiAvLyBhdXRvIHwgbWFuaXB1bGF0aW9uCisgICAgICAgIGlm
ICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWFuaXB1bGF0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Ny
b2xsU25hcFR5cGU6IC8vIG5vbmUgfCBtYW5kYXRvcnkgfCBwcm94aW1pdHkKKyAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNYW5kYXRvcnkg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVByb3hpbWl0eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6
IC8vIHZpc2libGUgfCBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvICB8IG92ZXJsYXkgfCBpbmhlcml0
CisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlSGlkZGVuIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU92ZXJsYXkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93
WTogLy8gdmlzaWJsZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gfCBvdmVybGF5IHwgaW5oZXJp
dCB8IC13ZWJraXQtcGFnZWQteCB8IC13ZWJraXQtcGFnZWQteQorICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZVZpc2libGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUhpZGRlbiB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU2Nyb2xsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRQYWdlZFgg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQWZ0ZXI6
IC8vIGF1dG8gfCBhbHdheXMgfCBhdm9pZCB8IGxlZnQgfCByaWdodCB8IGluaGVyaXQKKyAgICBj
YXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5CcmVha0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVh
a0JlZm9yZToKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBbHdheXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodCkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJy
ZWFrSW5zaWRlOiAvLyBhdm9pZCB8IGF1dG8gfCBpbmhlcml0CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1
ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgor
ICAgICAgICAvLyBub25lIHwgdmlzaWJsZVBhaW50ZWQgfCB2aXNpYmxlRmlsbCB8IHZpc2libGVT
dHJva2UgfCB2aXNpYmxlIHwKKyAgICAgICAgLy8gcGFpbnRlZCB8IGZpbGwgfCBzdHJva2UgfCBh
dXRvIHwgYWxsIHwgaW5oZXJpdAorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVZpc2li
bGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFsbCB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCAodmFsdWVJRCA+PSBDU1NWYWx1ZVZpc2libGVw
YWludGVkICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVTdHJva2UpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlvbjogLy8g
c3RhdGljIHwgcmVsYXRpdmUgfCBhYnNvbHV0ZSB8IGZpeGVkIHwgc3RpY2t5IHwgaW5oZXJpdAor
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXRpYyB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlUmVsYXRpdmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFic29sdXRlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVGaXhlZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0U3RpY2t5KQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlS
ZXNpemU6IC8vIG5vbmUgfCBib3RoIHwgaG9yaXpvbnRhbCB8IHZlcnRpY2FsIHwgYXV0bworICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJv
dGggfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZVZlcnRpY2FsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlTcGVhazogLy8gbm9u
ZSB8IG5vcm1hbCB8IHNwZWxsLW91dCB8IGRpZ2l0cyB8IGxpdGVyYWwtcHVuY3R1YXRpb24gfCBu
by1wdW5jdHVhdGlvbiB8IGluaGVyaXQKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVO
b25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNw
ZWxsT3V0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEaWdpdHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUxpdGVyYWxQdW5jdHVhdGlvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9QdW5jdHVhdGlvbikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5VGFibGVMYXlvdXQ6IC8vIGF1dG8gfCBmaXhlZCB8IGluaGVyaXQKKyAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVGaXhlZCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5l
TW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6CisgICAgICAgIGlm
ICh2YWx1ZUlEID09IENTU1ZhbHVlQ29udGludW91cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU2tp
cFdoaXRlU3BhY2UpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGlu
ZVN0eWxlOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVNvbGlkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEb3VibGUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZURhc2hlZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRG90RGFzaCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlRG90RG90RGFzaCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2F2ZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dE92ZXJmbG93OiAvLyBjbGlwIHwgZWxsaXBzaXMKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0g
Q1NTVmFsdWVDbGlwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbGxpcHNpcykKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJl
bmRlcmluZzogLy8gYXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZUxlZ2liaWxpdHkgfCBn
ZW9tZXRyaWNQcmVjaXNpb24KKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVP
cHRpbWl6ZWxlZ2liaWxpdHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUdlb21ldHJpY3ByZWNpc2lv
bikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFRyYW5zZm9ybTogLy8gY2FwaXRhbGl6ZSB8IHVwcGVyY2FzZSB8IGxvd2Vy
Y2FzZSB8IG5vbmUgfCBpbmhlcml0CisgICAgICAgIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUNh
cGl0YWxpemUgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUxvd2VyY2FzZSkgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6IC8vIHZpc2libGUgfCBoaWRkZW4gfCBjb2xs
YXBzZSB8IGluaGVyaXQKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRkZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNvbGxhcHNl
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBcHBlYXJhbmNlOgorICAgICAgICBpZiAoKHZhbHVlSUQgPj0gQ1NTVmFs
dWVDaGVja2JveCAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlQ2Fwc0xvY2tJbmRpY2F0b3IpIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Cisg
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlSGlkZGVuKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2lm
IEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgY2FzZSBDU1NQcm9wZXJ0eU1peEJsZW5kTW9k
ZToKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU11bHRpcGx5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3JlZW4KKyAgICAgICAgICAg
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdmVybGF5IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEYXJr
ZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpZ2h0ZW4gfHwgIHZhbHVlSUQgPT0gQ1NTVmFsdWVD
b2xvckRvZGdlCisgICAgICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sb3JCdXJuIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVIYXJkTGlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNvZnRM
aWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlmZmVyZW5jZQorICAgICAgICAgICAgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUV4Y2x1c2lvbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUGx1c0Rhcmtl
ciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlvbjoKKyAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJ
c29sYXRlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2VuZGlm
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKKyAgICAgICAgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVCb3JkZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUxpbmVzKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hBbGlnbjoKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVTdHJldGNoIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdGFydCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRW5kIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVDZW50ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhc2VsaW5lKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShDU1Nf
Qk9YX0RFQ09SQVRJT05fQlJFQUspCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29y
YXRpb25CcmVhazoKKyAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQ2xvbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZVNsaWNlKQorICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9u
OgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlUmV2ZXJzZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6CisgICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlU2luZ2xlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNdWx0aXBsZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveE9yaWVudDoKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVIb3Jp
em9udGFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVWZXJ0aWNhbCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlSW5saW5lQXhpcyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmxvY2tBeGlzKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3hQYWNrOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0YXJ0IHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVFbmQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNlbnRlciB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlSnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKKyAgICAgICAgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCYWxhbmNlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlG
bGV4RGlyZWN0aW9uOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVJvdyB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlUm93UmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sdW1uIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW5SZXZlcnNlKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoKKyAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3dyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdy
YXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdyYXBSZXZlcnNlKQorICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtl
cm5pbmc6CisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRG
b250U21vb3RoaW5nOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFudGlhbGlhc2VkIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdWJwaXhlbEFudGlhbGlhc2VkKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBo
ZW5zOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU1hbnVhbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUFsaWduOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUVkZ2VzKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6IC8vIGF1dG8gfCBsb29zZSB8
IG5vcm1hbCB8IHN0cmljdCB8IGFmdGVyLXdoaXRlLXNwYWNlCisgICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTG9vc2UgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3RyaWN0IHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBZnRlcldoaXRlU3BhY2UpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgorICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhc2Vs
aW5lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250YWluKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRl
ckNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBz
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgorICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZUNvbGxhcHNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTZXBhcmF0ZSB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlzY2FyZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlv
bjoKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlQmFja3dhcmRzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBaGVhZCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUmV2ZXJzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURvd24KKyAgICAgICAgICAg
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVVcCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFycXVlZVN0eWxlOgorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5v
bmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNsaWRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTY3Jv
bGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6
IC8vIG5vcm1hbCB8IHNwYWNlCisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFs
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTcGFjZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5H
KQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKKyAgICAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUb3VjaCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgorICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUV4YWN0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFY29ub215KQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShDU1NfUkVHSU9O
UykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6CisgICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWx3YXlzIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlUmlnaHQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgorICAgICAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRSZWdpb25GcmFnbWVudDoKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCcmVhaykKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRS
dGxPcmRlcmluZzoKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMb2dpY2FsIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVWaXN1YWwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgorICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUJlZm9yZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
QWZ0ZXIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUludGVyQ2hhcmFjdGVyKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworCisjaWYgRU5BQkxFKENTUzNfVEVYVCkKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKKyAgICAgICAgLy8gYXV0byB8
IHN0YXJ0IHwgZW5kIHwgbGVmdCB8IHJpZ2h0IHwgY2VudGVyIHwganVzdGlmeQorICAgICAgICBp
ZiAoKHZhbHVlSUQgPj0gQ1NTVmFsdWVMZWZ0ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVKdXN0aWZ5
KSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVuZCB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBicmVhazsKKyNlbmRpZiAvLyBDU1MzX1RFWFQKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dENvbWJpbmU6CisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSG9yaXpvbnRhbCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoQ1NTM19URVhUKQorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0SnVzdGlmeToKKyAgICAgICAgLy8gYXV0byB8IG5vbmUgfCBpbnRlci13b3Jk
IHwgZGlzdHJpYnV0ZQorICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUludGVyV29yZCB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlRGlzdHJpYnV0ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0
byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBDU1MzX1RFWFQKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFNlY3VyaXR5OgorICAgICAgICAvLyBkaXNjIHwgY2lyY2xlIHwgc3F1YXJlIHwg
bm9uZSB8IGluaGVyaXQKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVEaXNjIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVDaXJjbGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNxdWFyZSB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBicmVhazsKKyNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6CisgICAgICAgIGlmICghcGFyc2VyQ29udGV4dC50
ZXh0QXV0b3NpemluZ0VuYWJsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25l
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1TdHlsZToKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVGbGF0IHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVzZXJ2ZTNkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzogLy8g
YXV0byB8IG5vbmUgfCBlbGVtZW50CisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0
byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRWxlbWVu
dCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeTogLy8gcmVhZC1vbmx5IHwgcmVhZC13cml0ZQorICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRPbmx5IHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVSZWFkV3JpdGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRXcml0ZVBsYWludGV4dE9ubHkp
IHsKKyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0Q29udGVudHMpCisgICAgICAgICAgICAgICAg
c3R5bGVTaGVldENvbnRlbnRzLT5wYXJzZXJTZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDogLy8gYXV0byB8IG5vbmUgfCB0ZXh0
IHwgYWxsCisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlVGV4dCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUFsbCkgeworICAgICAg
ICAgICAgaWYgKHN0eWxlU2hlZXRDb250ZW50cykKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
Q29udGVudHMtPnBhcnNlclNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRXcml0aW5nTW9kZToKKyAgICAgICAgaWYgKHZhbHVlSUQgPj0gQ1NTVmFs
dWVIb3Jpem9udGFsVGIgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUhvcml6b250YWxCdCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2hpdGVTcGFjZTogLy8gbm9ybWFsIHwgcHJlIHwgbm93cmFwIHwgaW5oZXJpdAorICAgICAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUHJlIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVXcmFwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmVMaW5l
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3dyYXApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazogLy8gbm9ybWFs
IHwgYnJlYWstYWxsIHwga2VlcC1hbGwgfCBicmVhay13b3JkICh0aGlzIGlzIGEgY3VzdG9tIGV4
dGVuc2lvbikKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUJyZWFrQWxsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVLZWVwQWxsIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVCcmVha1dvcmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19UUkFJTElOR19XT1JEKQorICAgIGNhc2UgQ1NT
UHJvcGVydHlBcHBsZVRyYWlsaW5nV29yZDogLy8gYXV0byB8IC1hcHBsZS1wYXJ0aWFsbHktYmFs
YW5jZWQKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVXZWJraXRQYXJ0aWFsbHlCYWxhbmNlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFu
dFBvc2l0aW9uOiAvLyBub3JtYWwgfCBzdWIgfCBzdXBlcgorICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3ViIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVTdXBlcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzOiAvLyBub3JtYWwgfCBzbWFsbC1j
YXBzIHwgYWxsLXNtYWxsLWNhcHMgfCBwZXRpdGUtY2FwcyB8IGFsbC1wZXRpdGUtY2FwcyB8IHVu
aWNhc2UgfCB0aXRsaW5nLWNhcHMKKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcyB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
QWxsU21hbGxDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQZXRpdGVDYXBzIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBbGxQZXRpdGVDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVVbmljYXNlIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVUaXRsaW5nQ2FwcykKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5h
dGVzOiAvLyBXZSBvbmx5IHN1cHBvcnQgdGhlIG5vcm1hbCBhbmQgaGlzdG9yaWNhbC1mb3JtcyB2
YWx1ZXMuCisgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVIaXN0b3JpY2FsRm9ybXMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtBZnRl
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtCZWZvcmU6CisgICAgICAgIC8vIGF1dG8gfCBh
dm9pZCB8IGxlZnQgfCByaWdodCB8IHJlY3RvIHwgdmVyc28gfCBjb2x1bW4gfCBwYWdlIHwgcmVn
aW9uIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiB8IGF2b2lkLXJlZ2lvbgorICAgICAgICBp
ZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF2b2lkIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSaWdodAorICAg
ICAgICAgICAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlY3RvIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVWZXJzbyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sdW1uIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVQYWdlCisgICAgICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVnaW9uIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVBdm9pZENvbHVtbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRQYWdl
IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFJlZ2lvbikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5QnJlYWtJbnNpZGU6Cisg
ICAgICAgIC8vIGF1dG8gfCBhdm9pZCB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4gfCBhdm9p
ZC1yZWdpb24KKyAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdm9pZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRDb2x1bW4gfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUF2b2lkUGFnZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWRSZWdp
b24pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisjaWYgIUVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisgICAgVU5VU0VEX1BBUkFNKHBh
cnNlckNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNLZXl3b3JkUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCit7
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm94U2l6aW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0FmdGVyOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QnJl
YWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlDbGVhcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlEaXNwbGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxzOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5
TGlzdFN0eWxlUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eU92ZXJmbG93WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJy
ZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9u
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFr
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdo
U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKKyAgICBjYXNlIENTU1By
b3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5l
U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRUcmFuc2Zvcm06CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVN
b2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVZpc2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFu
Y2U6CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBjYXNlIENTU1Byb3BlcnR5TWl4
QmxlbmRNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlJc29sYXRpb246CisjZW5kaWYKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJBZnRlclN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJCZWZvcmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5
bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94QWxpZ246CisjaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFrOgorI2VuZGlmCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveERpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94TGluZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtCZWZv
cmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxl
U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsZXhXcmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0SHlwaGVuczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWdu
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdExpbmVTbmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRl
ckNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBz
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJxdWVlU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgorI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFByaW50Q29sb3JBZGp1c3Q6CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRSZWdpb25CcmVha0JlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9u
QnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZyYWdtZW50Ogor
I2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246CisjaWYgRU5BQkxFKENTUzNfVEVYVCkKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKKyNlbmRpZiAvLyBDU1MzX1RF
WFQKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6CisjaWYgRU5BQkxFKENT
UzNfVEVYVCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6CisjZW5kaWYg
Ly8gQ1NTM19URVhUCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VXNlclNlbGVjdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01v
ZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdvcmRCcmVhazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6CisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKKyAgICBjYXNlIENTU1Byb3BlcnR5VG91Y2hBY3Rpb246CisjZW5kaWYKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3Jv
bGxTbmFwVHlwZToKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfVFJBSUxJTkdfV09SRCkKKyAgICBj
YXNlIENTU1Byb3BlcnR5QXBwbGVUcmFpbGluZ1dvcmQ6CisjZW5kaWYKKyAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFZhcmlhbnRQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlh
bnRDYXBzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIGlzVW5pdmVyc2FsS2V5d29yZChjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICAvLyBUaGVzZSBrZXl3b3JkcyBjYW4gYmUgdXNlZCBmb3IgYWxsIHByb3Bl
cnRpZXMuCisgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywg
ImluaXRpYWwiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmcsICJpbmhlcml0IikKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nLCAidW5zZXQiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcsICJyZXZlcnQiKTsKK30KKworc3RhdGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQg
cGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0
YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0LCBTdHlsZVNoZWV0Q29u
dGVudHMqIHN0eWxlU2hlZXRDb250ZW50cykKK3sKKyAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5
KCkpOworCisgICAgaWYgKCFpc0tleXdvcmRQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKSB7CisgICAg
ICAgIGlmICghaXNVbml2ZXJzYWxLZXl3b3JkKHN0cmluZykpCisgICAgICAgICAgICByZXR1cm4g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7CisKKyAgICAgICAgLy8gRG9uJ3QgdHJ5IHRv
IHBhcnNlIGluaXRpYWwvaW5oZXJpdC91bnNldC9yZXZlcnQgc2hvcnRoYW5kczsgcmV0dXJuIGFu
IGVycm9yIHNvIHRoZSBjYWxsZXIgd2lsbCB1c2UgdGhlIGZ1bGwgQ1NTIHBhcnNlci4KKyAgICAg
ICAgaWYgKHNob3J0aGFuZEZvclByb3BlcnR5KHByb3BlcnR5SWQpLmxlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOworICAgIH0KKworICAg
IENTU1BhcnNlclN0cmluZyBjc3NTdHJpbmc7CisgICAgY3NzU3RyaW5nLmluaXQoc3RyaW5nKTsK
KyAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NTdHJpbmcpOwor
CisgICAgaWYgKCF2YWx1ZUlEKQorICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6RXJyb3I7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlSW5oZXJpdCkKKyAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7CisgICAgZWxzZSBpZiAodmFsdWVJRCA9PSBD
U1NWYWx1ZUluaXRpYWwpCisgICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOworICAgIGVsc2UgaWYgKHZhbHVlSUQgPT0g
Q1NTVmFsdWVVbnNldCkKKyAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVVuc2V0VmFsdWUoKTsKKyAgICBlbHNlIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlUmV2
ZXJ0KQorICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlUmV2
ZXJ0VmFsdWUoKTsKKyAgICBlbHNlIGlmIChpc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUo
cHJvcGVydHlJZCwgdmFsdWVJRCwgcGFyc2VyQ29udGV4dCwgc3R5bGVTaGVldENvbnRlbnRzKSkK
KyAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBh
cnNlUmVzdWx0OjpFcnJvcjsKKworICAgIHJldHVybiBkZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBv
cnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJzZXI6OlBh
cnNlUmVzdWx0OjpVbmNoYW5nZWQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgorc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHMoV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVlLCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBleHBlY3RlZENv
dW50KQoreworICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCk7CisgICAgd2hpbGUgKGV4cGVjdGVkQ291bnQpIHsKKyAgICAgICAgc2l6ZV90IGVuZCA9IFdU
Rjo6ZmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGV4cGVjdGVkQ291bnQgPT0gMSA/ICcpJyA6ICcs
Jywgc3RhcnQpOworICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5kIHx8IChleHBlY3RlZENvdW50
ID09IDEgJiYgZW5kICE9IGxlbmd0aCAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudExlbmd0aCA9IGVuZCAtIHN0YXJ0OworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUjsKKyAgICAgICAgZG91YmxlIG51bWJlcjsKKyAgICAgICAgaWYgKCFwYXJzZVNpbXBs
ZUxlbmd0aChjaGFyYWN0ZXJzICsgc3RhcnQsIGFyZ3VtZW50TGVuZ3RoLCB1bml0LCBudW1iZXIp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYICYmIChudW1iZXIgfHwgdW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRyYW5z
Zm9ybVZhbHVlLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUobnVtYmVyLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CisgICAgICAgIHN0YXJ0ID0gZW5kICsgMTsKKyAgICAgICAg
LS1leHBlY3RlZENvdW50OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VUcmFuc2xhdGVUcmFuc2Zvcm1WYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBpZiAocHJvcGVydHlJ
RCAhPSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFy
c2VSZXN1bHQ6OkVycm9yOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0ZXN0VmFs
aWRUcmFuc2Zvcm1TdHJpbmdMZW5ndGggPSAxMjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bGlrZWx5TXVsdGlwYXJ0VHJhbnNmb3JtU3RyaW5nTGVuZ3RoQ3V0b2ZmID0gMzI7CisgICAgaWYg
KHN0cmluZy5sZW5ndGgoKSA8IHNob3J0ZXN0VmFsaWRUcmFuc2Zvcm1TdHJpbmdMZW5ndGggfHwg
c3RyaW5nLmxlbmd0aCgpID4gbGlrZWx5TXVsdGlwYXJ0VHJhbnNmb3JtU3RyaW5nTGVuZ3RoQ3V0
b2ZmKQorICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7CisKKyAg
ICBpZiAoIXN0cmluZy5zdGFydHNXaXRoKCJ0cmFuc2xhdGUiLCBmYWxzZSkpCisgICAgICAgIHJl
dHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKKworICAgIFVDaGFyIGM5ID0gdG9B
U0NJSUxvd2VyKHN0cmluZ1s5XSk7CisgICAgVUNoYXIgYzEwID0gdG9BU0NJSUxvd2VyKHN0cmlu
Z1sxMF0pOworCisgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlv
blR5cGUgdHJhbnNmb3JtVHlwZTsKKyAgICB1bnNpZ25lZCBleHBlY3RlZEFyZ3VtZW50Q291bnQg
PSAxOworICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhcnQgPSAxMTsKKyAgICBpZiAoYzkgPT0gJ3gn
ICYmIGMxMCA9PSAnKCcpCisgICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICBlbHNlIGlmIChjOSA9
PSAneScgJiYgYzEwID09ICcoJykKKyAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOworICAgIGVsc2UgaWYg
KGM5ID09ICd6JyAmJiBjMTAgPT0gJygnKQorICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgZWxz
ZSBpZiAoYzkgPT0gJygnKSB7CisgICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICBleHBlY3Rl
ZEFyZ3VtZW50Q291bnQgPSAyOworICAgICAgICBhcmd1bWVudFN0YXJ0ID0gMTA7CisgICAgfSBl
bHNlIGlmIChjOSA9PSAnMycgJiYgYzEwID09ICdkJyAmJiBzdHJpbmdbMTFdID09ICcoJykgewor
ICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSAz
OworICAgICAgICBhcmd1bWVudFN0YXJ0ID0gMTI7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVy
biBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKKworICAgIGF1dG8gdHJhbnNmb3JtVmFs
dWUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3JlYXRlKHRyYW5zZm9ybVR5cGUpOworICAg
IGJvb2wgc3VjY2VzczsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBzdWNjZXNz
ID0gcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1bWVudHModHJhbnNmb3JtVmFsdWUsIHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4cGVjdGVk
QXJndW1lbnRDb3VudCk7CisgICAgZWxzZQorICAgICAgICBzdWNjZXNzID0gcGFyc2VUcmFuc2Zv
cm1UcmFuc2xhdGVBcmd1bWVudHModHJhbnNmb3JtVmFsdWUsIHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nLmxlbmd0aCgpLCBhcmd1bWVudFN0YXJ0LCBleHBlY3RlZEFyZ3VtZW50Q291bnQp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1
bHQ6OkVycm9yOworCisgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7CisgICAgcmVzdWx0LT5hcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm1WYWx1ZSkp
OworICAgIHJldHVybiBwcm9wZXJ0aWVzLmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCkpID8gQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hh
bmdlZDsKK30KKworUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byB2YWx1ZUxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisKKyAgICBWZWN0b3I8U3RyaW5n
PiBmYW1pbHlOYW1lczsKKyAgICBzdHJpbmcuc3RyaW5nKCkuc3BsaXQoJywnLCB0cnVlLCBmYW1p
bHlOYW1lcyk7CisKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpOworICAgIGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5hbWVzKSB7CisgICAg
ICAgIFN0cmluZyBzdHJpcHBlZCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhm
YW1pbHlOYW1lKTsKKyAgICAgICAgaWYgKHN0cmlwcGVkLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAg
ICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogeyBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVNhbnNT
ZXJpZiwgQ1NTVmFsdWVDdXJzaXZlLCBDU1NWYWx1ZUZhbnRhc3ksIENTU1ZhbHVlTW9ub3NwYWNl
LCBDU1NWYWx1ZVdlYmtpdEJvZHkgfSkgeworICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaXBwZWQsIGdldFZhbHVlTmFtZShwcm9wZXJ0eUlEKSkpIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUocHJvcGVy
dHlJRCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNy
ZWF0ZUZvbnRGYW1pbHlWYWx1ZShzdHJpcHBlZCk7CisgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5k
KHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHZh
bHVlTGlzdCk7Cit9CisKK0NTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0
KQoreworICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CisgICAgQ1NTUGFyc2VyOjpQYXJz
ZVJlc3VsdCByZXN1bHQgPSBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKGRlY2xhcmF0aW9uLCBwcm9w
ZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSk7CisgICAgaWYgKHJlc3Vs
dCAhPSBQYXJzZVJlc3VsdDo6RXJyb3IpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBy
ZXN1bHQgPSBwYXJzZUNvbG9yVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywg
aW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKTsKKyAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0
OjpFcnJvcikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIENTU1BhcnNlckNvbnRleHQg
Y29udGV4dChjc3NQYXJzZXJNb2RlKTsKKyAgICBpZiAoY29udGV4dFN0eWxlU2hlZXQpIHsKKyAg
ICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250ZXh0KCk7CisgICAg
ICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7CisgICAgfQorCisgICAgcmVzdWx0ID0g
cGFyc2VLZXl3b3JkVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0
YW50LCBjb250ZXh0LCBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgaWYgKHJlc3VsdCAhPSBQYXJz
ZVJlc3VsdDo6RXJyb3IpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBw
YXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJp
bmcsIGltcG9ydGFudCk7CisgICAgaWYgKHJlc3VsdCAhPSBQYXJzZVJlc3VsdDo6RXJyb3IpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwor
ICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3Ry
aW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKK30KKworQ1NTUGFyc2VyOjpQYXJz
ZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAg
IENTU1BhcnNlckNvbnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKKyAgICBpZiAoY29udGV4
dFN0eWxlU2hlZXQpIHsKKyAgICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJz
ZXJDb250ZXh0KCk7CisgICAgICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7CisgICAg
fQorCisgICAgQ1NTUGFyc2VyIHBhcnNlcihjb250ZXh0KTsKKyAgICBwYXJzZXIuc2V0Q3VzdG9t
UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVl
KGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUN1c3RvbSwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRl
eHRTdHlsZVNoZWV0KTsKK30KKworQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHls
ZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAgIHNldFN0eWxlU2hlZXQo
Y29udGV4dFN0eWxlU2hlZXQpOworCisgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXZhbHVleyIs
IHN0cmluZywgIn0gIik7CisKKyAgICBtX2lkID0gcHJvcGVydHlJRDsKKyAgICBtX2ltcG9ydGFu
dCA9IGltcG9ydGFudDsKKworICAgIGNzc3l5cGFyc2UodGhpcyk7CisKKyAgICBtX3J1bGUgPSBu
dWxscHRyOworCisgICAgUGFyc2VSZXN1bHQgcmVzdWx0ID0gUGFyc2VSZXN1bHQ6OkVycm9yOwor
CisgICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3Vs
dCA9IGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKSA/
IFBhcnNlUmVzdWx0OjpDaGFuZ2VkIDogUGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKKyAgICAgICAg
Y2xlYXJQcm9wZXJ0aWVzKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8g
VGhlIGNvbG9yIHdpbGwgb25seSBiZSBjaGFuZ2VkIHdoZW4gc3RyaW5nIGNvbnRhaW5zIGEgdmFs
aWQgQ1NTIGNvbG9yLCBzbyBjYWxsZXJzCisvLyBjYW4gc2V0IGl0IHRvIGEgZGVmYXVsdCBjb2xv
ciBhbmQgaWdub3JlIHRoZSBib29sZWFuIHJlc3VsdC4KK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUNv
bG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKK3sK
KyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gRmlyc3QgdHJ5IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUsIHJnYmEoKSwg
cmdiKCkgb3IgIiMiIHN5bnRheC4KKyAgICBpZiAoZmFzdFBhcnNlQ29sb3IoY29sb3IsIHN0cmlu
Zywgc3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDU1NQYXJzZXIgcGFyc2Vy
KENTU1N0cmljdE1vZGUpOworCisgICAgLy8gSW4gY2FzZSB0aGUgZmFzdC1wYXRoIHBhcnNlciBk
aWRuJ3QgdW5kZXJzdGFuZCB0aGUgY29sb3IsIHRyeSB0aGUgZnVsbCBwYXJzZXIuCisgICAgaWYg
KCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBDU1NWYWx1ZSYgdmFsdWUgPSAqcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZh
bHVlKCk7CisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworICAgIGlmICghcHJpbWl0aXZlVmFs
dWUuaXNSR0JDb2xvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb2xvciA9IHBy
aW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3tjb2xvcjoiLCBzdHJpbmcsICJ9ICIpOworICAgIGNz
c3l5cGFyc2UodGhpcyk7CisgICAgbV9ydWxlID0gbnVsbHB0cjsKKworICAgIHJldHVybiAhbV9w
YXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMuZmlyc3QoKS5p
ZCgpID09IENTU1Byb3BlcnR5Q29sb3I7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVN5c3Rl
bUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUGFyc2VyU3RyaW5nIGNzc0NvbG9yOworICAgIGNz
c0NvbG9yLmluaXQoc3RyaW5nKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gY3NzVmFsdWVLZXl3b3Jk
SUQoY3NzQ29sb3IpOworICAgIGlmICghdmFsaWRQcmltaXRpdmVWYWx1ZUNvbG9yKGlkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgcGFyc2VkQ29sb3IgPSBkb2N1bWVudC0+
cGFnZSgpLT50aGVtZSgpLnN5c3RlbUNvbG9yKGlkKTsKKyAgICBpZiAoIXBhcnNlZENvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29sb3IgPSBwYXJzZWRDb2xv
ci5yZ2IoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0
KQoreworICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rvckxpc3Q7
CisKKyAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2VsZWN0b3J7Iiwgc3RyaW5nLCAifSIpOwor
CisgICAgY3NzeXlwYXJzZSh0aGlzKTsKKworICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxl
Y3RvciA9IG51bGxwdHI7Cit9CisKK1JlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1Bh
cnNlcjo6cGFyc2VJbmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9IGVsZW1l
bnQtPmRvY3VtZW50KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKS5wYXJzZXJDb250ZXh0KCk7
CisgICAgY29udGV4dC5tb2RlID0gc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CisgICAg
cmV0dXJuIENTU1BhcnNlcihjb250ZXh0KS5wYXJzZURlY2xhcmF0aW9uKHN0cmluZywgJmVsZW1l
bnQtPmRvY3VtZW50KCkuZWxlbWVudFNoZWV0KCkuY29udGVudHMoKSk7Cit9CisKK1JlZjxJbW11
dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmIHN0cmluZywgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKK3sK
KyAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKKworICAgIHNldHVwUGFyc2Vy
KCJALXdlYmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOworICAgIGNzc3l5cGFyc2UodGhpcyk7
CisgICAgbV9ydWxlID0gbnVsbHB0cjsKKworICAgIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRp
ZXM+IHN0eWxlID0gY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCk7CisgICAgY2xlYXJQcm9wZXJ0aWVz
KCk7CisgICAgcmV0dXJuIHN0eWxlOworfQorCisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xh
cmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGVTb3VyY2VEYXRhLCBTdHls
ZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAgIC8vIExlbmd0aCBvZiB0
aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBw
cmVmaXhMZW5ndGggPSAxNTsKKworICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQp
OworCisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhKSB7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRh
U3RhY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bGVTb3VyY2VEYXRhTGlzdD4oKTsKKyAgICAgICAg
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKCpydWxlU291cmNlRGF0YSk7CisgICAgfQor
CisgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWRlY2xzeyIsIHN0cmluZywgIn0gIik7CisgICAg
Y3NzeXlwYXJzZSh0aGlzKTsKKyAgICBtX3J1bGUgPSBudWxscHRyOworCisgICAgYm9vbCBvayA9
IGZhbHNlOworICAgIGlmICghbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworICAgICAg
ICBvayA9IHRydWU7CisgICAgICAgIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnRpZXMobV9w
YXJzZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CisgICAgfQorCisg
ICAgaWYgKHJ1bGVTb3VyY2VEYXRhKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5zaXplKCkgPT0gMSk7CisgICAgICAgIHJ1bGVTb3VyY2VEYXRhLT5ydWxlQm9keVJh
bmdlLnN0YXJ0ID0gMDsKKyAgICAgICAgcnVsZVNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5k
ID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJ1
bGVTb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5zaXplKCk7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlE
YXRhID0gcnVsZVNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmF0KGkp
OworICAgICAgICAgICAgcHJvcGVydHlEYXRhLnJhbmdlLnN0YXJ0IC09IHByZWZpeExlbmd0aDsK
KyAgICAgICAgICAgIHByb3BlcnR5RGF0YS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOworICAg
ICAgICB9CisKKyAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcygqcnVsZVNvdXJjZURh
dGEpOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlc2V0KCk7CisgICAgfQorCisg
ICAgcmV0dXJuIG9rOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gQ1NTUGFyc2Vy
OjpwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmlu
Zy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCFtX21l
ZGlhUXVlcnkpOworCisgICAgLy8gY2FuJ3QgdXNlIHsgYmVjYXVzZSB0b2tlbml6ZXIgc3RhdGUg
c3dpdGNoZXMgZnJvbSBtZWRpYXF1ZXJ5IHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBzZWVzIHsg
dG9rZW4uCisgICAgLy8gaW5zdGVhZCBpbnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJVEVTUEFD
RSBpbiBDU1NHcmFtbWFyLnkpCisgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LW1lZGlhcXVlcnkg
Iiwgc3RyaW5nLCAifSAiKTsKKyAgICBjc3N5eXBhcnNlKHRoaXMpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUobV9tZWRpYVF1ZXJ5KTsKK30KKworVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4g
Q1NTUGFyc2VyOjpwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAg
IFZlY3RvcjxTb3VyY2VTaXplPiByZXN1bHQ7CisKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEFTU0VSVCghbV9zb3VyY2VTaXplTGlzdCk7
CisKKyAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2l6ZXNhdHRyICIsIHN0cmluZywgIn0iKTsK
KyAgICBjc3N5eXBhcnNlKHRoaXMpOworCisgICAgaWYgKCFtX3NvdXJjZVNpemVMaXN0KQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmVzdWx0ID0gV1RGTW92ZSgqbV9zb3VyY2VTaXpl
TGlzdCk7CisgICAgbV9zb3VyY2VTaXplTGlzdCA9IG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLy8gRklYTUUoMTQxMjg5KTogVGhlIGZvbGxvd2luZyB0d28gY29uc3RydWN0b3Jz
IGFyZSBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGEgYnVnIGluIE1TVkMgMjAxMyAoYW5kIHByaW9y
KS4KKy8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBjb2RlIGFzIHNvb24gYXMgYSBWaXN1YWwgU3R1
ZGlvIHVwZGF0ZSB0aGF0IGZpeGVzIHRoaXMgcHJvYmxlbSBpcyByZWxlYXNlZC4KKworQ1NTUGFy
c2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKENTU1BhcnNlcjo6U291cmNlU2l6ZSYmIG9yaWdp
bmFsKQorICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbmFsLmV4cHJlc3Npb24pKQorICAg
ICwgbGVuZ3RoKFdURk1vdmUob3JpZ2luYWwubGVuZ3RoKSkKK3sKK30KKworQ1NTUGFyc2VyOjpT
b3VyY2VTaXplOjpTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVzc2lvbiwg
UmVmPENTU1ZhbHVlPiYmIHZhbHVlKQorICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Np
b24pKQorICAgICwgbGVuZ3RoKFdURk1vdmUodmFsdWUpKQoreworfQorCitPcHRpb25hbDxDU1NQ
YXJzZXI6OlNvdXJjZVNpemU+IENTU1BhcnNlcjo6c291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVz
c2lvbiYmIGV4cHJlc3Npb24sIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSkKK3sKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGlmIChpc0NhbGN1bGF0aW9uKHBhcnNlclZhbHVl
KSkgeworICAgICAgICBhdXRvKiBhcmdzID0gcGFyc2VyVmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0
KCk7CisgICAgICAgIGlmIChhcmdzICYmIGFyZ3MtPnNpemUoKSkKKyAgICAgICAgICAgIHZhbHVl
ID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICphcmdz
LCBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUpOworICAgIH0KKyAgICBpZiAoIXZhbHVlKQor
ICAgICAgICB2YWx1ZSA9IHBhcnNlclZhbHVlLmNyZWF0ZUNTU1ZhbHVlKCk7CisgICAgZGVzdHJv
eShwYXJzZXJWYWx1ZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7
CisgICAgLy8gRklYTUU6IENhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgaGVyZSB0
byB3b3JrIGFyb3VuZCBhbiBNU1ZDIGJ1Zy4KKyAgICAvLyBGb3Igb3RoZXIgY29tcGlsZXJzLCB3
ZSBkaWQgbm90IG5lZWQgdG8gZGVmaW5lIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIHdlIGNvdWxkIHVz
ZSBhZ2dyZWdhdGUgaW5pdGlhbGl6YXRpb24gc3ludGF4LgorICAgIHJldHVybiBTb3VyY2VTaXpl
KFdURk1vdmUoZXhwcmVzc2lvbiksIHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFudCwgY29uc3QgUGFy
c2VkUHJvcGVydHlWZWN0b3ImIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1
dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzPiYg
c2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlbkN1c3RvbVByb3BlcnRp
ZXMpCit7CisgICAgLy8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGhp
Z2hlc3QgcHJpb3JpdHkgZGVmaW5pdGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxpY2F0ZSBk
ZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQuCisgICAgZm9yIChpbnQg
aSA9IGlucHV0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IENTU1By
b3BlcnR5JiBwcm9wZXJ0eSA9IGlucHV0W2ldOworICAgICAgICBpZiAocHJvcGVydHkuaXNJbXBv
cnRhbnQoKSAhPSBpbXBvcnRhbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CisgICAgICAg
ICAgICBpZiAocHJvcGVydHkudmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIG5hbWUg
PSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSkubmFt
ZSgpOworICAgICAgICAgICAgICAgIGlmICghc2VlbkN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUp
LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIG91dHB1dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHByb3BlcnR5SURJbmRleCA9IHByb3BlcnR5LmlkKCkgLSBmaXJzdENTU1Byb3BlcnR5OworICAg
ICAgICBBU1NFUlQocHJvcGVydHlJREluZGV4IDwgc2VlblByb3BlcnRpZXMuc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKHNlZW5Qcm9wZXJ0aWVzW3Byb3BlcnR5SURJbmRleF0pCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgc2VlblByb3BlcnRpZXMuc2V0KHByb3BlcnR5SURJbmRleCk7Cisg
ICAgICAgIG91dHB1dFstLXVudXNlZEVudHJpZXNdID0gcHJvcGVydHk7CisgICAgfQorfQorCitS
ZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUHJvcGVy
dGllcygpCit7CisgICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4gc2VlblByb3BlcnRp
ZXM7CisgICAgc2l6ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgp
OworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiByZXN1bHRzKHVudXNlZEVudHJpZXMpOwor
CisgICAgLy8gSW1wb3J0YW50IHByb3BlcnRpZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHksIHNvIGFk
ZCB0aGVtIGZpcnN0LiBEdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2FuIHRoZW4gYmUgaWdub3JlZCB3
aGVuIGZvdW5kLgorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZWVuQ3VzdG9tUHJvcGVydGll
czsKKyAgICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0
cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKTsK
KyAgICBmaWx0ZXJQcm9wZXJ0aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMsIHJlc3VsdHMs
IHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuQ3VzdG9tUHJvcGVydGllcyk7Cisg
ICAgaWYgKHVudXNlZEVudHJpZXMpCisgICAgICAgIHJlc3VsdHMucmVtb3ZlKDAsIHVudXNlZEVu
dHJpZXMpOworCisgICAgcmV0dXJuIEltbXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKHJl
c3VsdHMuZGF0YSgpLCByZXN1bHRzLnNpemUoKSwgbV9jb250ZXh0Lm1vZGUpOworfQorCit2b2lk
IENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NW
YWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCit7CisgICAgLy8g
VGhpcyBwcm9wZXJ0eSBkb2Vzbid0IGJlbG9uZyB0byBhIHNob3J0aGFuZCBvciBpcyBhIENTUyB2
YXJpYWJsZSAod2hpY2ggd2lsbCBiZSByZXNvbHZlZCBsYXRlcikuCisgICAgaWYgKCFtX2N1cnJl
bnRTaG9ydGhhbmQpIHsKKyAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQcm9wZXJ0
eUludmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gc2hvcnRoYW5kcyA9IG1hdGNoaW5nU2hvcnRoYW5kc0Zv
ckxvbmdoYW5kKHByb3BJZCk7CisgICAgaWYgKHNob3J0aGFuZHMuc2l6ZSgpID09IDEpCisgICAg
ICAgIG1fcGFyc2VkUHJvcGVydGllcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcElkLCBXVEZNb3Zl
KHZhbHVlKSwgaW1wb3J0YW50LCB0cnVlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRT
aG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFyc2VkUHJvcGVy
dGllcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50
LCB0cnVlLCBpbmRleE9mU2hvcnRoYW5kRm9yTG9uZ2hhbmQobV9jdXJyZW50U2hvcnRoYW5kLCBz
aG9ydGhhbmRzKSwgbV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOworfQorCit2b2lk
IENTU1BhcnNlcjo6cm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKQoreworICAgIEFTU0VS
VChudW0gPj0gMCk7CisgICAgQVNTRVJUKG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgPj0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG51bSkpOworICAgIG1fcGFyc2VkUHJvcGVydGllcy5zaHJpbmso
bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG51bSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpj
bGVhclByb3BlcnRpZXMoKQoreworICAgIG1fcGFyc2VkUHJvcGVydGllcy5jbGVhcigpOworICAg
IG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IGludmFsaWRQYXJzZWRQcm9w
ZXJ0aWVzQ291bnQ7Cit9CisKK1VSTCBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmICh1cmwu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBVUkwoKTsKKyAgICBpZiAoY29udGV4dC5jaGFyc2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFVSTChjb250ZXh0LmJhc2VVUkwsIHVybCk7Cisg
ICAgcmV0dXJuIFVSTChjb250ZXh0LmJhc2VVUkwsIHVybCwgY29udGV4dC5jaGFyc2V0KTsKK30K
KworVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbXBsZXRlVVJMKG1fY29udGV4dCwgdXJsKTsKK30KKworYm9vbCBDU1NQ
YXJzZXI6OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgVW5pdHMgdW5pdEZsYWdzKQoreworICAgIGJvb2wgbXVzdEJlTm9u
TmVnYXRpdmUgPSB1bml0RmxhZ3MgJiBGTm9uTmVnOworCisgICAgUmVmUHRyPENTU0NhbGNWYWx1
ZT4gY2FsY3VsYXRpb247CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9u
KCkpIHsKKyAgICAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIHZhbHVlIHdhcyBhbHJlYWR5IHBhcnNl
ZCBzbyB3ZSByZXVzZSBpdC4gSG93ZXZlciwgd2UgbWF5IG5lZWQgdG8gdXBkYXRlIGl0cyByYW5n
ZS4KKyAgICAgICAgY2FsY3VsYXRpb24gPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpOworICAgICAgICBjYWxjdWxhdGlvbi0+c2V0UGVybWl0dGVkVmFsdWVSYW5nZShtdXN0QmVO
b25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFuZ2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFu
Z2VBbGwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9uLnNldENh
bGN1bGF0aW9uKHBhcnNlQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24sIG11c3RCZU5v
bk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5n
ZUFsbCkpOworICAgICAgICBjYWxjdWxhdGlvbiA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1
bGF0aW9uKCk7CisgICAgICAgIGlmICghY2FsY3VsYXRpb24pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7CisgICAgc3dpdGNoIChj
YWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSkgeworICAgIGNhc2UgQ2FsY051bWJlcjoKKyAgICAgICAg
aXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGTnVtYmVyKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkICYm
ICh1bml0RmxhZ3MgJiBGSW50ZWdlcikgJiYgY2FsY3VsYXRpb24tPmlzSW50KCkpCisgICAgICAg
ICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkICYmICh1bml0RmxhZ3Mg
JiBGUG9zaXRpdmVJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSAmJiBjYWxjdWxhdGlv
bi0+aXNQb3NpdGl2ZSgpKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ2FsY0xlbmd0aDoKKyAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3Mg
JiBGTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxjUGVyY2VudDoKKyAgICAg
ICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGUGVyY2VudCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2FsY1BlcmNlbnRMZW5ndGg6CisgICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYg
RlBlcmNlbnQpICYmICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDYWxjUGVyY2VudE51bWJlcjoKKyAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBG
UGVyY2VudCkgJiYgKHVuaXRGbGFncyAmIEZOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENhbGNBbmdsZToKKyAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGQW5nbGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGNUaW1lOgorICAgICAgICBpc1ZhbGlkID0gKHVu
aXRGbGFncyAmIEZUaW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxjRnJlcXVlbmN5
OgorICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZGcmVxdWVuY3kpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENhbGNPdGhlcjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGlzVmFsaWQ7Cit9CisKK2lubGluZSBib29sIENTU1BhcnNlcjo6c2hvdWxkQWNjZXB0
VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBVbml0cyB1bml0RmxhZ3MsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICAvLyBRaXJrcyBtb2RlIGFuZCBzdmcg
cHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgYWNjZXB0IHVuaXQgbGVzcyB2YWx1ZXMuCisgICAgcmV0
dXJuICh1bml0RmxhZ3MgJiAoRkxlbmd0aCB8IEZBbmdsZSB8IEZUaW1lKSkgJiYgKCF2YWx1ZS5m
VmFsdWUgfHwgY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUg
PT0gU1ZHQXR0cmlidXRlTW9kZSk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0ZVVuaXQo
VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0Rmxh
Z3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBpZiAoaXNDYWxjdWxhdGlv
bih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCisgICAgICAgIHJldHVybiB2YWxpZGF0ZUNhbGN1bGF0
aW9uVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzKTsKKyAgICAgICAgCisgICAg
Ym9vbCBiID0gZmFsc2U7CisgICAgc3dpdGNoICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnVuaXQpIHsKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgorICAgICAg
ICBiID0gKHVuaXRGbGFncyAmIEZOdW1iZXIpOworICAgICAgICBpZiAoIWIgJiYgc2hvdWxkQWNj
ZXB0VW5pdExlc3NWYWx1ZXModmFsdWVXaXRoQ2FsY3VsYXRpb24sIHVuaXRGbGFncywgY3NzUGFy
c2VyTW9kZSkpIHsKKyAgICAgICAgICAgIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5p
dCA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFggOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuaXRGbGFncyAmIEZBbmdsZSkgPyBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RFRyA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpOworICAgICAg
ICAgICAgYiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiICYmICh1bml0RmxhZ3Mg
JiBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCkKKyAgICAg
ICAgICAgIGIgPSB0cnVlOworICAgICAgICBpZiAoIWIgJiYgKHVuaXRGbGFncyAmIEZQb3NpdGl2
ZUludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaXNJbnQgJiYgdmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUgPiAwKQorICAgICAgICAgICAgYiA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFOgorICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzoKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DTToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTU06CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXOgorICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WSDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVk1JTjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWDoKKyAgICAgICAg
YiA9ICh1bml0RmxhZ3MgJiBGTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
OgorICAgICAgICBiID0gKHVuaXRGbGFncyAmIEZUaW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgorICAgICAgICBiID0gKHVuaXRGbGFn
cyAmIEZBbmdsZSk7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xV
VElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCisgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RQUFg6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQ
SToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToKKyAgICAgICAgYiA9ICh1
bml0RmxhZ3MgJiBGUmVzb2x1dGlvbik7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19LSFo6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTjoKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGIgJiYgdW5pdEZsYWdz
ICYgRk5vbk5lZyAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSA8IDApCisg
ICAgICAgIGIgPSBmYWxzZTsKKyAgICBpZiAoYiAmJiBzdGQ6OmlzaW5mKHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSkKKyAgICAgICAgYiA9IGZhbHNlOworICAgIHJldHVybiBi
OworfQorCitpbmxpbmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3Vs
YXRpb24pCit7CisgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkpCisg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlV2l0aENhbGN1bGF0
aW9uLmNhbGN1bGF0aW9uKCkpOworCisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gdmFsdWVX
aXRoQ2FsY3VsYXRpb247CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFC
TEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKKyAgICBBU1NFUlQoKHZhbHVlLnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0tIWikKKyAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFMp
CisgICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYg
dmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpCisgICAgICAgIHx8ICh2
YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZS51bml0IDw9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTSkpOworI2Vsc2UKKyAgICBBU1NFUlQoKHZhbHVl
LnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUudW5pdCA8PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKKyAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19DSFMpCisgICAgICAgIHx8ICh2YWx1ZS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVlcgJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVgpKTsK
KyNlbmRpZgorICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4o
dmFsdWUudW5pdCkpOworfQorCitpbmxpbmUgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6OmNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8
fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOworICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLnN0cmluZywgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXND
b21tYShDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCit7IAorICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAn
LCc7IAorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAnLyc7Cit9CisKK2Jvb2wgQ1NTUGFy
c2VyOjppc1ZhbGlkU2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRp
b24pCit7CisgICAgaW50IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKKyAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVJbnRyaW5zaWMgfHwgaWQgPT0gQ1NTVmFsdWVNaW5JbnRyaW5z
aWMgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IGlkID09IENTU1ZhbHVlV2Vi
a2l0TWF4Q29udGVudCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUgfHwgaWQg
PT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZyk7Cit9CisKK2lubGluZSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50aWZpZXIs
IFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKK3sKKyAgICBpZiAo
aWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpOworCisgICAgaWYgKHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWikKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgaWYgKHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1RVUk4gJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfQ0hTKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcgJiYgdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxh
dGlvbik7CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xV
VElPTl9NRURJQV9RVUVSWSkKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51
bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsK
KyNlbmRpZgorICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NT
UGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3Vs
YXRpb24uY2FsY3VsYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGltcG9y
dGFudCkKK3sKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBz
aG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wSWQpOworICAgIHVuc2lnbmVkIHNob3J0aGFuZExlbmd0
aCA9IHNob3J0aGFuZC5sZW5ndGgoKTsKKyAgICBpZiAoIXNob3J0aGFuZExlbmd0aCkgeworICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJv
cElkKTsKKyAgICBjb25zdCBDU1NQcm9wZXJ0eUlEKiBsb25naGFuZHMgPSBzaG9ydGhhbmQucHJv
cGVydGllcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmRMZW5ndGg7
ICsraSkKKyAgICAgICAgYWRkUHJvcGVydHkobG9uZ2hhbmRzW2ldLCB2YWx1ZS5jb3B5UmVmKCks
IGltcG9ydGFudCk7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhcmlh
YmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWUmIGRlcGVuZGVudFZhbHVlLCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVl
TWFwJiBjdXN0b21Qcm9wZXJ0aWVzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUpCit7CisgICAgbV92YWx1ZUxpc3QucmVzZXQobmV3IENTU1BhcnNlclZh
bHVlTGlzdCgpKTsKKyAgICBpZiAoIWRlcGVuZGVudFZhbHVlLnZhbHVlTGlzdCgpLmJ1aWxkUGFy
c2VyVmFsdWVMaXN0U3Vic3RpdHV0aW5nVmFyaWFibGVzKG1fdmFsdWVMaXN0LmdldCgpLCBjdXN0
b21Qcm9wZXJ0aWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDU1NQcm9wZXJ0
eUlEIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IGRlcGVuZGVudFZhbHVlLnByb3BlcnR5SUQo
KTsKKyAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRl
bnRWYWx1ZVByb3BlcnR5SUQpKQorICAgICAgICBkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQgPSBD
U1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoZGVwZW5kZW50VmFsdWVQ
cm9wZXJ0eUlELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKworICAgIGlmICghcGFyc2VWYWx1
ZShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Cisg
ICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IHByb3BJRCkKKyAgICAgICAgICAgIHJldHVybiBw
cm9wZXJ0eS52YWx1ZSgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGlj
IGJvb2wgaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAm
JiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJp
bWFnZS1zZXQoIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rp
b24tPm5hbWUsICItd2Via2l0LWltYWdlLXNldCgiKSk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBp
ZiAoIW1fdmFsdWVMaXN0IHx8ICFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOworICAgIAorICAgIGlmIChwcm9wSWQgPT0gQ1NT
UHJvcGVydHlDdXN0b20pCisgICAgICAgIHJldHVybiBwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFy
YXRpb24oaW1wb3J0YW50LCBpZCk7CisKKyAgICBpZiAobV92YWx1ZUxpc3QtPmNvbnRhaW5zVmFy
aWFibGVzKCkpIHsKKyAgICAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKm1fdmFsdWVMaXN0KTsKKyAgICAgICAgYWRkRXhwYW5kZWRQ
cm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6Y3JlYXRl
KFdURk1vdmUodmFsdWVMaXN0KSwgcHJvcElkKSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKTsKKyAgICB1bnNpZ25lZCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFs
dWVMaXN0LT5zaXplKCk7CisKKyAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KSB7CisgICAg
ICAgIGlmIChudW0gIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYWRk
RXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZUluaGVy
aXRlZFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUluaXRpYWwpIHsKKyAgICAgICAgaWYgKG51bSAhPSAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5
Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJbml0aWFsVmFsdWUo
KSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChpZCA9
PSBDU1NWYWx1ZVVuc2V0KSB7CisgICAgICAgIGlmIChudW0gIT0gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKHByb3BJZCwg
Y3NzVmFsdWVQb29sLmNyZWF0ZVVuc2V0VmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJldmVydCkgeworICAgICAg
ICBpZiAobnVtICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFkZEV4
cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShwcm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVSZXZlcnRW
YWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUFsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyAiYWxsIiBkb2Vzbid0IGFsbG93IHlvdSB0byBzcGVjaWZ5IGFueXRoaW5nIG90aGVyIHRoYW4g
aW5oZXJpdC9pbml0aWFsL3Vuc2V0LgorCisgICAgaWYgKGlzS2V5d29yZFByb3BlcnR5SUQocHJv
cElkKSkgeworICAgICAgICBpZiAoIWlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShwcm9w
SWQsIGlkLCBtX2NvbnRleHQsIG1fc3R5bGVTaGVldCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpICYmICFpblNob3J0aGFuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpLCBpbXBvcnRhbnQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9O
KQorICAgIGlmIChpblZpZXdwb3J0KCkpCisgICAgICAgIHJldHVybiBwYXJzZVZpZXdwb3J0UHJv
cGVydHkocHJvcElkLCBpbXBvcnRhbnQpOworI2VuZGlmCisKKyAgICBib29sIHZhbGlkUHJpbWl0
aXZlID0gZmFsc2U7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKworICAgIHN3
aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNpemU6ICAgICAgICAgICAgICAg
ICAvLyA8bGVuZ3RoPnsxLDJ9IHwgYXV0byB8IFsgPHBhZ2Utc2l6ZT4gfHwgWyBwb3J0cmFpdCB8
IGxhbmRzY2FwZV0gXQorICAgICAgICByZXR1cm4gcGFyc2VTaXplKHByb3BJZCwgaW1wb3J0YW50
KTsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6ICAgICAgICAgICAgICAgLy8gWzxzdHJp
bmc+IDxzdHJpbmc+XSsgfCBub25lIHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVOb25lKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gcGFyc2VRdW90ZXMocHJvcElkLCBpbXBvcnRhbnQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6IC8vIG5vcm1hbCB8
IGVtYmVkIHwgYmlkaS1vdmVycmlkZSB8IGlzb2xhdGUgfCBpc29sYXRlLW92ZXJyaWRlIHwgcGxh
aW50ZXh0IHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwKKyAgICAg
ICAgICAgIHx8IGlkID09IENTU1ZhbHVlRW1iZWQKKyAgICAgICAgICAgIHx8IGlkID09IENTU1Zh
bHVlQmlkaU92ZXJyaWRlCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdElzb2xh
dGUKKyAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlV2Via2l0SXNvbGF0ZU92ZXJyaWRlCisg
ICAgICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dCkKKyAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1By
b3BlcnR5Q29udGVudDogICAgICAgICAgICAgIC8vIFsgPHN0cmluZz4gfCA8dXJpPiB8IDxjb3Vu
dGVyPiB8IGF0dHIoWCkgfCBvcGVuLXF1b3RlIHwKKyAgICAgICAgLy8gY2xvc2UtcXVvdGUgfCBu
by1vcGVuLXF1b3RlIHwgbm8tY2xvc2UtcXVvdGUgXSsgfCBpbmhlcml0CisgICAgICAgIHJldHVy
biBwYXJzZUNvbnRlbnQocHJvcElkLCBpbXBvcnRhbnQpOworCisgICAgY2FzZSBDU1NQcm9wZXJ0
eUFsdDogLy8gWyA8c3RyaW5nPiB8IGF0dHIoWCkgXQorICAgICAgICByZXR1cm4gcGFyc2VBbHQo
cHJvcElkLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgCisgICAgY2FzZSBDU1NQcm9wZXJ0eUNs
aXA6ICAgICAgICAgICAgICAgICAvLyA8c2hhcGU+IHwgYXV0byB8IGluaGVyaXQKKyAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNsaXBT
aGFwZShwcm9wSWQsIGltcG9ydGFudCk7CisgICAgICAgIGJyZWFrOworCisgICAgLyogU3RhcnQg
b2Ygc3VwcG9ydGVkIENTUyBwcm9wZXJ0aWVzIHdpdGggdmFsaWRhdGlvbi4gVGhpcyBpcyBuZWVk
ZWQgZm9yIHBhcnNlU2hvcnRoYW5kIHRvIHdvcmsKKyAgICAgKiBjb3JyZWN0bHkgYW5kIGFsbG93
cyBvcHRpbWl6YXRpb24gaW4gV2ViQ29yZTo6YXBwbHlSdWxlKC4uKQorICAgICAqLworICAgIGNh
c2UgQ1NTUHJvcGVydHlPdmVyZmxvdzogeworICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0
aGlzLCBwcm9wSWQpOworICAgICAgICBpZiAobnVtICE9IDEgfHwgIXBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlPdmVyZmxvd1ksIGltcG9ydGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBvdmVyZmxvd1hWYWx1ZTsKKworICAgICAgICAvLyBG
SVhNRTogLXdlYmtpdC1wYWdlZC14IG9yIC13ZWJraXQtcGFnZWQteSBvbmx5IGFwcGx5IHRvIG92
ZXJmbG93LXkuIElmIHRoaXMgdmFsdWUgaGFzIGJlZW4KKyAgICAgICAgLy8gc2V0IHVzaW5nIHRo
ZSBzaG9ydGhhbmQsIHRoZW4gZm9yIG5vdyBvdmVyZmxvdy14IHdpbGwgZGVmYXVsdCB0byBhdXRv
LCBidXQgb25jZSB3ZSBpbXBsZW1lbnQKKyAgICAgICAgLy8gcGFnaW5hdGlvbiBjb250cm9scywg
aXQgc2hvdWxkIGRlZmF1bHQgdG8gaGlkZGVuLiBJZiB0aGUgb3ZlcmZsb3cteSB2YWx1ZSBpcyBh
bnl0aGluZyBidXQKKyAgICAgICAgLy8gcGFnZWQteCBvciBwYWdlZC15LCB0aGVuIG92ZXJmbG93
LXggYW5kIG92ZXJmbG93LXkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUuCisgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2Vk
WSkKKyAgICAgICAgICAgIG92ZXJmbG93WFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVy
Zmxvd1hWYWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlPdmVyZmxvd1gsIFdURk1vdmUob3ZlcmZsb3dYVmFsdWUp
LCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dEFsaWduOgorICAgICAgICAvLyBsZWZ0IHwgcmlnaHQgfCBjZW50ZXIgfCBq
dXN0aWZ5IHwgLXdlYmtpdC1sZWZ0IHwgLXdlYmtpdC1yaWdodCB8IC13ZWJraXQtY2VudGVyIHwg
LXdlYmtpdC1tYXRjaC1wYXJlbnQKKyAgICAgICAgLy8gfCBzdGFydCB8IGVuZCB8IGluaGVyaXQg
fCAtd2Via2l0LWF1dG8gKGNvbnZlcnRlZCB0byBzdGFydCkKKyAgICAgICAgLy8gTk9URTogPHN0
cmluZz4gaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgaWYgKChpZCA+PSBDU1NWYWx1ZVdlYmtp
dEF1dG8gJiYgaWQgPD0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkgfHwgaWQgPT0gQ1NTVmFs
dWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdo
dDogIHsgLy8gbm9ybWFsIHwgYm9sZCB8IGJvbGRlciB8IGxpZ2h0ZXIgfCAxMDAgfCAyMDAgfCAz
MDAgfCA0MDAgfCA1MDAgfCA2MDAgfCA3MDAgfCA4MDAgfCA5MDAgfCBpbmhlcml0CisgICAgICAg
IGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBwYXJzZUZvbnRXZWlnaHQoaW1wb3J0YW50KTsKKyAgICB9CisKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpczogLy8gbm9uZSB8IFsgd2VpZ2h0IHx8IHN0
eWxlIF0KKyAgICAgICAgcmV0dXJuIHBhcnNlRm9udFN5bnRoZXNpcyhpbXBvcnRhbnQpOworCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsKKyAgICAgICAgaWYgKG51bSA9PSAx
KSB7CisgICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUJv
cmRlclNwYWNpbmcpOworICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGltcG9ydGFudCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9w
ZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZhbHVlLCBpbXBvcnRhbnQpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobnVtID09IDIp
IHsKKyAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Qm9y
ZGVyU3BhY2luZyk7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgaW1wb3J0YW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyVmVydGljYWxTcGFjaW5nOgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOiAgICAgICAgLy8gPGNvbG9yPiB8
IGludmVydCB8IGluaGVyaXQKKyAgICAgICAgLy8gT3V0bGluZSBjb2xvciBoYXMgImludmVydCIg
YXMgYWRkaXRpb25hbCBrZXl3b3JkLgorICAgICAgICAvLyBBbHNvLCB3ZSB3YW50IHRvIGFsbG93
IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gc3RyaWN0IHBhcnNpbmcgbW9kZS4KKyAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW52ZXJ0IHx8IGlkID09IENTU1ZhbHVlV2Via2l0Rm9j
dXNSaW5nQ29sb3IpIHsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJpdAorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJFbmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyQmVmb3JlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29s
b3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOiAvLyA8Y29sb3I+IHwgaW5oZXJpdAorICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjogLy8gQ1NTMyB0ZXh0IGRlY29y
YXRpb24gY29sb3JzCisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbHVtblJ1bGVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Vi
a2l0VGV4dCkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsgLy8gQWx3YXlzIGFs
bG93IHRoaXMsIGV2ZW4gd2hlbiBzdHJpY3QgcGFyc2luZyBpcyBvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHVzZSB0aGlzIGluIG91ciBVQSBzaGVl
dHMuCisgICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQorICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChpc1ZhbGlkU3lz
dGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51CisgICAgICAgICAgICB8fCAo
aWQgPj0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiBpZCA8IENTU1ZhbHVlV2Via2l0
VGV4dCAmJiBpblF1aXJrc01vZGUoKSkpIHsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VD
b2xvcigpOworICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQorICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IENTU1Byb3BlcnR5Q3Vyc29yOiB7CisgICAgICAgIC8vIEdyYW1tYXIgZGVmaW5lZCBieSBDU1Mz
IFVJIGFuZCBtb2RpZmllZCBieSBDU1M0IGltYWdlczoKKyAgICAgICAgLy8gWyBbPGltYWdlPiBb
PHg+IDx5Pl0/LF0qCisgICAgICAgIC8vIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1bHQgfCBw
b2ludGVyIHwgcHJvZ3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAorICAgICAg
ICAvLyBudy1yZXNpemUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6ZSB8IHMtcmVz
aXplIHwgdy1yZXNpemUgfCBldy1yZXNpemUgfAorICAgICAgICAvLyBucy1yZXNpemUgfCBuZXN3
LXJlc2l6ZSB8IG53c2UtcmVzaXplIHwgY29sLXJlc2l6ZSB8IHJvdy1yZXNpemUgfCB0ZXh0IHwg
d2FpdCB8IGhlbHAgfAorICAgICAgICAvLyB2ZXJ0aWNhbC10ZXh0IHwgY2VsbCB8IGNvbnRleHQt
bWVudSB8IGFsaWFzIHwgY29weSB8IG5vLWRyb3AgfCBub3QtYWxsb3dlZCB8CisgICAgICAgIC8v
IHpvb20taW4gfCB6b29tLW91dCB8IGFsbC1zY3JvbGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0
LWdyYWJiaW5nIHwgLXdlYmtpdC16b29tLWluIHwKKyAgICAgICAgLy8gLXdlYmtpdC16b29tLW91
dCBdIF0gfCBpbmhlcml0CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9ICZ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
OworICAgICAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2U7CisgICAgICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gdmFsdWUtPnN0cmluZzsK
KyAgICAgICAgICAgICAgICBpZiAoIXVyaS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2UgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodXJpKSk7CisjaWYgRU5B
QkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNl
dEZ1bmN0aW9uVmFsdWUoKnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGltYWdlID0gcGFyc2VJ
bWFnZVNldCgpOworICAgICAgICAgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgVmVjdG9yPGludD4gY29vcmRzOworICAgICAgICAgICAgdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgd2hpbGUgKHZhbHVlICYmIHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7CisgICAgICAgICAg
ICAgICAgY29vcmRzLmFwcGVuZChpbnQodmFsdWUtPmZWYWx1ZSkpOworICAgICAgICAgICAgICAg
IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJvb2wgaGFzSG90U3BvdCA9IGZhbHNlOworICAgICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgt
MSwgLTEpOworICAgICAgICAgICAgaW50IG5yY29vcmRzID0gY29vcmRzLnNpemUoKTsKKyAgICAg
ICAgICAgIGlmIChucmNvb3JkcyA+IDAgJiYgbnJjb29yZHMgIT0gMikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAobnJjb29yZHMgPT0gMikgeworICAgICAg
ICAgICAgICAgIGhhc0hvdFNwb3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGhvdFNwb3QgPSBJ
bnRQb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbGlzdCkKKyAgICAgICAgICAgICAgICBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVDb21tYVNlcGFyYXRlZCgpOworCisgICAgICAgICAgICBpZiAoaW1hZ2UpCisgICAgICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU0N1cnNvckltYWdlVmFsdWU6OmNyZWF0ZShpbWFnZS5yZWxl
YXNlTm9uTnVsbCgpLCBoYXNIb3RTcG90LCBob3RTcG90KSk7CisKKyAgICAgICAgICAgIGlmICgo
aW5TdHJpY3RNb2RlKCkgJiYgIXZhbHVlKSB8fCAodmFsdWUgJiYgISh2YWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5uZXh0KCk7IC8vIGNvbW1hCisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpc3QpIHsKKyAgICAg
ICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSBhZnRlciB1
cmwgbGlzdCAoTVNJRSA1IGNvbXBhdGliaWxpdHkpCisgICAgICAgICAgICAgICAgaWYgKGxpc3Qt
Pmxlbmd0aCgpICE9IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVl
SGFuZCkgLy8gTVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KKyAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBvaW50ZXIp
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZh
bHVlLT5pZCA8PSBDU1NWYWx1ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZUNvcHkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsK
KyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IFdURk1vdmUobGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWQgPSB2YWx1ZS0+aWQ7CisgICAgICAgICAgICBpZiAo
aW5RdWlya3NNb2RlKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgeworICAgICAgICAg
ICAgICAgIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCisgICAgICAgICAgICAgICAgaWQgPSBD
U1NWYWx1ZVBvaW50ZXI7CisgICAgICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICgodmFsdWUtPmlkID49IENTU1ZhbHVlQXV0byAmJiB2YWx1
ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRab29tT3V0KSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVD
b3B5IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisjaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDdXJzb3JWaXNpYmlsaXR5OgorICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlQXV0b0hpZGUpCisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRCbGVuZE1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZEltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kU2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza0ltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3Jp
Z2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tQb3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU291cmNlVHlwZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1JlcGVhdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVh
dFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgorICAgIHsKKyAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwxOworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7
CisgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElkMSwgcHJvcElkMjsKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHBhcnNlRmlsbFByb3BlcnR5KHByb3BJZCwgcHJv
cElkMSwgcHJvcElkMiwgdmFsMSwgdmFsMikpIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaG9ydGhhbmRTY29wZT4gc2hvcnRoYW5kU2NvcGU7CisgICAgICAgICAgICBpZiAocHJvcElk
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8CisgICAgICAgICAgICAgICAgcHJv
cElkID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fAorICAgICAgICAgICAgICAgIHBy
b3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiB8fAorICAgICAgICAgICAgICAg
IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpIHsKKyAgICAgICAgICAgICAg
ICBzaG9ydGhhbmRTY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hvcnRoYW5kU2NvcGU+KHRoaXMs
IHByb3BJZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQx
LCB2YWwxLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7CisgICAgICAgICAgICBpZiAodmFs
MikKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCB2YWwyLnJlbGVhc2VOb25O
dWxsKCksIGltcG9ydGFudCk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiAgICAgLy8g
PHVyaT4gfCBub25lIHwgaW5oZXJpdAorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNv
dXJjZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgorICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWVXaXRo
Q2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7
CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0
ZVVSTCh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZykpOworICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdl
VmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7CisgICAgICAgICAgICBpZiAocGFyc2VHZW5l
cmF0ZWRJbWFnZSgqbV92YWx1ZUxpc3QsIHBhcnNlZFZhbHVlKSkKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpKSkgeworICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZUltYWdlU2V0KCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6ICAgICAg
ICAvLyA8Ym9yZGVyLXdpZHRoPiB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wV2lkdGg6ICAgICAvLy8vIDxib3JkZXItd2lkdGg+IHwgaW5oZXJpdAorICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOiAgIC8vICAgV2hpY2ggaXMgZGVmaW5lZCBhcworICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDogIC8vICAgdGhpbiB8IG1lZGl1bSB8
IHRoaWNrIHwgPGxlbmd0aD4KKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFdpZHRoOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJFbmRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyQmVmb3JlV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVy
V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aDoKKyAgICAgICAgaWYg
KGlkID09IENTU1ZhbHVlVGhpbiB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBpZCA9PSBDU1NW
YWx1ZVRoaWNrKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOiAgICAgICAvLyBub3JtYWwgfCA8bGVuZ3RoPiB8
IGluaGVyaXQKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOiAgICAgICAg
IC8vIG5vcm1hbCB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAorICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OgorICAgICAgICBwYXJzZWRW
YWx1ZSA9IHBhcnNlVGV4dEluZGVudCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NT
UHJvcGVydHlQYWRkaW5nVG9wOiAgICAgICAgICAvLy8vIDxwYWRkaW5nLXdpZHRoPiB8IGluaGVy
aXQKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OiAgICAgICAgLy8gICBXaGljaCBp
cyBkZWZpbmVkIGFzCisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206ICAgICAgIC8v
ICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4KKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xl
ZnQ6ICAgICAgICAgLy8vLworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBhZGRpbmdCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRp
bmdBZnRlcjoKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhI
ZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09IENTU1ZhbHVlTm9uZSB8fCBpc1ZhbGlkU2l6ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJv
cGVydHlNaW5XaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRo
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1pbkxvZ2ljYWxIZWlnaHQ6CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IGlzVmFsaWRTaXplKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExvZ2ljYWxXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgorICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaXNWYWxpZFNpemUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Cisg
ICAgICAgIHJldHVybiBwYXJzZUZvbnRTaXplKGltcG9ydGFudCk7CisKKyAgICBjYXNlIENTU1By
b3BlcnR5VmVydGljYWxBbGlnbjoKKyAgICAgICAgLy8gYmFzZWxpbmUgfCBzdWIgfCBzdXBlciB8
IHRvcCB8IHRleHQtdG9wIHwgbWlkZGxlIHwgYm90dG9tIHwgdGV4dC1ib3R0b20gfAorICAgICAg
ICAvLyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiB8IGluaGVyaXQKKworICAgICAgICBpZiAoaWQg
Pj0gQ1NTVmFsdWVCYXNlbGluZSAmJiBpZCA8PSBDU1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxl
KQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm90dG9tOiAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNl
bnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDogICAgICAg
ICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKKyAg
ICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6ICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBl
cmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9wOiAgICAg
ICAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byB8IGluaGVyaXQK
KyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOiAgICAgICAgICAgLy8vLyA8bWFyZ2luLXdp
ZHRoPiB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6ICAgICAgICAg
Ly8gICBXaGljaCBpcyBkZWZpbmVkIGFzCisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRv
bTogICAgICAgIC8vICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAor
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OiAgICAgICAgICAvLy8vCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hcmdpblN0YXJ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5FbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6CisgICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZUF1dG8pCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6ICAgICAgICAgICAgICAvLyBhdXRvIHwgPGlu
dGVnZXI+IHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUg
YWRkZWQgc3VwcG9ydCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdpZG93czogLy8gPGludGVnZXI+IHwgaW5oZXJpdCB8IGF1dG8gKERp
dHRvKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJ
bnRlZ2VyLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQ6CisgICAgICAgIHJldHVybiBwYXJzZUxpbmVIZWlnaHQoaW1wb3J0
YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDogICAgLy8gWyA8aWRl
bnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0CisgICAgICAgIGlmIChpZCAh
PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHByb3BJZCwg
MSwgaW1wb3J0YW50KTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OiAgICAgICAgLy8gWyA8aWRl
bnRpZmllcj4gPGludGVnZXI+PyBdKyB8IG5vbmUgfCBpbmhlcml0CisgICAgICAgIGlmIChpZCAh
PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VDb3VudGVyKHByb3BJZCwg
MCwgaW1wb3J0YW50KTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICAgICAgLy8gW1sgPGZh
bWlseS1uYW1lPiB8IDxnZW5lcmljLWZhbWlseT4gXSxdKiBbPGZhbWlseS1uYW1lPiB8IDxnZW5l
cmljLWZhbWlseT5dIHwgaW5oZXJpdAorICAgIHsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUZvbnRGYW1pbHkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uOgorICAgICAgICAvLyBbIDx0ZXh0LWRlY29yYXRpb24t
bGluZT4gfHwgPHRleHQtZGVjb3JhdGlvbi1zdHlsZT4gfHwgPHRleHQtZGVjb3JhdGlvbi1jb2xv
cj4gXSB8IGluaGVyaXQKKyAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKENTU1Byb3BlcnR5
V2Via2l0VGV4dERlY29yYXRpb24sIHdlYmtpdFRleHREZWNvcmF0aW9uU2hvcnRoYW5kKCksIGlt
cG9ydGFudCk7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkxpbmU6CisgICAgICAgIC8vIG5vbmUgfCBbIHVu
ZGVybGluZSB8fCBvdmVybGluZSB8fCBsaW5lLXRocm91Z2ggfHwgYmxpbmsgXSB8IGluaGVyaXQK
KyAgICAgICAgcmV0dXJuIHBhcnNlVGV4dERlY29yYXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwor
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGU6CisgICAgICAg
IC8vIHNvbGlkIHwgZG91YmxlIHwgZG90dGVkIHwgZGFzaGVkIHwgd2F2eQorICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVTb2xpZCB8fCBpZCA9PSBDU1NWYWx1ZURvdWJsZSB8fCBpZCA9PSBDU1NW
YWx1ZURvdHRlZCB8fCBpZCA9PSBDU1NWYWx1ZURhc2hlZCB8fCBpZCA9PSBDU1NWYWx1ZVdhdnkp
CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcDoKKyAgICAgICAgLy8g
bm9uZSB8IFsgb2JqZWN0cyB8fCBzcGFjZXMgfHwgaW5rIHx8IGVkZ2VzIHx8IGJveC1kZWNvcmF0
aW9uIF0KKyAgICAgICAgcmV0dXJuIHBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGltcG9ydGFudCk7
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uOgorICAg
ICAgICAvLyBhdXRvIHwgYWxwaGFiZXRpYyB8IHVuZGVyCisgICAgICAgIHJldHVybiBwYXJzZVRl
eHRVbmRlcmxpbmVQb3NpdGlvbihpbXBvcnRhbnQpOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVpv
b206CisgICAgICAgIC8vIG5vcm1hbCB8IHJlc2V0IHwgZG9jdW1lbnQgfCA8bnVtYmVyPiB8IDxw
ZXJjZW50YWdlPiB8IGluaGVyaXQKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8
IGlkID09IENTU1ZhbHVlUmVzZXQgfHwgaWQgPT0gQ1NTVmFsdWVEb2N1bWVudCkKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
Rk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICBi
cmVhazsKKyAgICAKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFpvb206CisgICAgICAg
IC8vIG5vcm1hbCB8IHJlc2V0CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBp
ZCA9PSBDU1NWYWx1ZVJlc2V0KQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCB3
aXRoaW4gQGZvbnQtZmFjZSBhbmQgQC13ZWJraXQtZmlsdGVyLCBzbyBjYW5ub3QgdXNlIGluaGVy
aXQgfCBpbml0aWFsIG9yIGJlICFpbXBvcnRhbnQuIFRoaXMgaXMgYSBsaXN0IG9mIHVybHMgb3Ig
bG9jYWwgcmVmZXJlbmNlcy4KKyAgICAgICAgcmV0dXJuIHBhcnNlRm9udEZhY2VTcmMoKTsKKwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6CisgICAgICAgIHJldHVybiBwYXJzZUZv
bnRGYWNlVW5pY29kZVJhbmdlKCk7CisKKyAgICAvKiBDU1MzIHByb3BlcnRpZXMgKi8KKworICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZTogeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCByZXN1bHQs
IGltcG9ydGFudCk7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFn
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOiB7CisgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcmVzdWx0OworICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZShwcm9w
SWQsIHJlc3VsdCkpIHsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShy
ZXN1bHQpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91
dHNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0OiB7Cisg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OworICAgICAgICBpZiAocGFy
c2VCb3JkZXJJbWFnZU91dHNldChyZXN1bHQpKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJ
bWFnZVJlcGVhdDogeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKKyAgICAgICAg
aWYgKHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQocmVzdWx0KSkgeworICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVNsaWNlOiB7CisgICAgICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+IHJlc3VsdDsKKyAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9wSWQsIHJl
c3VsdCkpIHsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQp
LCBpbXBvcnRhbnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDogeworICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKKyAgICAgICAgaWYgKHBhcnNlQm9yZGVy
SW1hZ2VXaWR0aChyZXN1bHQpKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdU
Rk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wUmlnaHRSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7CisgICAgICAgIGlmIChudW0gIT0g
MSAmJiBudW0gIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOworICAgICAgICBpZiAobnVtID09IDIp
IHsKKyAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxh
dGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkYXRlVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCB8IEZOb25OZWcpOworICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTEucHRyKCk7CisK
KyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RG
TW92ZShwYXJzZWRWYWx1ZTEpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZU5vbk51bGwoKSksIGltcG9y
dGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5
VGFiU2l6ZToKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbzoKKyAgICAgICAgcmV0dXJuIHBhcnNlQXNw
ZWN0UmF0aW8oaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6CisgICAgICAgIHJldHVybiBw
YXJzZUJvcmRlclJhZGl1cyhwcm9wSWQsIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eU91dGxpbmVPZmZzZXQ6CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6CisgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2hhZG93
VmFsdWVMaXN0ID0gcGFyc2VTaGFkb3coKm1fdmFsdWVMaXN0LCBwcm9wSWQpOworICAgICAgICAg
ICAgaWYgKHNoYWRvd1ZhbHVlTGlzdCkgeworICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgc2hhZG93VmFsdWVMaXN0LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SW5pdGlhbExldHRl
cjogeworICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG51bSAh
PSAxICYmIG51bSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
UG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb3NpdGlvbjsKKyAgICAgICAgICAgIGlmIChu
dW0gPT0gMikgeworICAgICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIG5leHRWYWx1
ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPm5leHQoKSk7CisgICAgICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
UG9zaXRpdmVJbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcG9zaXRp
b24gPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gaGVpZ2h0
LnB0cigpOworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVW
YWx1ZVBhaXIocG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShoZWlnaHQpKSwgaW1w
b3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDoKKyAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVmbGVjdChwcm9w
SWQsIGltcG9ydGFudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFj
aXR5OgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRk51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hGbGV4OgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0
cmljdE1vZGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
T3JkaW5hbEdyb3VwOgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKKyNlbmRpZgorICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGN1cnJW
YWx1ZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGaWx0ZXIoKm1fdmFsdWVMaXN0LCBjdXJyVmFs
dWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgV1RGTW92ZShjdXJyVmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19D
T01QT1NJVElORykKKyAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgorICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlJc29sYXRpb246CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5RmxleDogeworICAgICAgICBTaG9ydGhh
bmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOworICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93LCBjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBp
bXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4U2hyaW5r
LCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4
QmFzaXMsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwg
aW1wb3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBwYXJzZUZsZXgoKm1fdmFsdWVMaXN0LCBpbXBvcnRhbnQpOworICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5RmxleEJhc2lzOgorICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBpbnRy
aW5zaWMgZGltZW5zaW9ucyB0b28uCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhHcm93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4U2hy
aW5rOgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3JkZXI6CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICAgICAgLy8gV2UgcmVz
dHJpY3QgdGhlIHNtYWxsZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGlu
dCBtaW4gYW5kIGludCBtaW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCisg
ICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1pbigpICsgMiwgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShy
ZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9w
SWQsIHdlYmtpdE1hcnF1ZWVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDoKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
U21hbGwgfHwgaWQgPT0gQ1NTVmFsdWVMYXJnZSB8fCBpZCA9PSBDU1NWYWx1ZU1lZGl1bSkKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGUGVyY2VudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5maW5p
dGUpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlciB8IEZOb25OZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgaWQgPT0gQ1NTVmFsdWVTbG93IHx8IGlkID09IENTU1ZhbHVlRmFzdCkKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwg
RkludGVnZXIgfCBGTm9uTmVnKTsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19SRUdJ
T05TKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKKyAgICAgICAgcmV0dXJu
IHBhcnNlRmxvd1RocmVhZChwcm9wSWQsIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsb3dGcm9tOgorICAgICAgICByZXR1cm4gcGFyc2VSZWdpb25UaHJlYWQocHJvcElk
LCBpbXBvcnRhbnQpOworI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybToKKyAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiB0cmFuc2Zvcm1WYWx1ZSA9IHBhcnNlVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQsIHRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9y
dGFudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWToKKyAgICBj
YXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWjogeworICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhbDE7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFs
MjsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwzOworICAgICAgICBDU1NQcm9wZXJ0eUlE
IHByb3BJZDEsIHByb3BJZDIsIHByb3BJZDM7CisgICAgICAgIGlmIChwYXJzZVRyYW5zZm9ybU9y
aWdpbihwcm9wSWQsIHByb3BJZDEsIHByb3BJZDIsIHByb3BJZDMsIHZhbDEsIHZhbDIsIHZhbDMp
KSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQxLCBXVEZNb3ZlKHZhbDEpLCBpbXBv
cnRhbnQpOworICAgICAgICAgICAgaWYgKHZhbDIpCisgICAgICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkMiwgV1RGTW92ZSh2YWwyKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGlmICh2
YWwzKQorICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDMsIFdURk1vdmUodmFsMyks
IGltcG9ydGFudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZToK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBY2NlcHRpbmcgdmFs
dWVsZXNzIG51bWJlcnMgaXMgYSBxdWlyayBvZiB0aGUgLXdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9u
IG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZykpIHsKKyAgICAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZU9yaWdpblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWTogewor
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7CisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gdmFsMjsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wSWQxLCBw
cm9wSWQyOworICAgICAgICBpZiAocGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihwcm9wSWQsIHByb3BJ
ZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIpKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQxLCBXVEZNb3ZlKHZhbDEpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgaWYgKHZhbDIpCisg
ICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMiwgV1RGTW92ZSh2YWwyKSwgaW1wb3J0
YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkRlbGF5OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25EaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25GaWxsTW9k
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5QW5pbWF0aW9uUGxheVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25JdGVy
YXRpb25Db3VudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25GaWxsTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CisjaWYgRU5BQkxFKENTU19BTklNQVRJ
T05TX0xFVkVMXzIpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRyaWdnZXI6
CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkRlbGF5OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3Bl
cnR5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6IHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7
CisgICAgICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCBjb250ZXh0OworICAgICAgICBpZiAocGFy
c2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wSWQsIHZhbCwgY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWwpLCBpbXBvcnRhbnQpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBjYXNlIENTU1Byb3BlcnR5SnVzdGlmeUNvbnRlbnQ6CisgICAgICAgIHBhcnNlZFZhbHVl
ID0gcGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5SnVzdGlmeVNlbGY6CisgICAgICAgIHJldHVybiBw
YXJzZUl0ZW1Qb3NpdGlvbk92ZXJmbG93UG9zaXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOworICAg
IGNhc2UgQ1NTUHJvcGVydHlKdXN0aWZ5SXRlbXM6CisgICAgICAgIGlmIChwYXJzZUxlZ2FjeVBv
c2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOworICAgICAgICByZXR1cm4gcGFy
c2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKKyNpZiBF
TkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXV0b0NvbHVt
bnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvUm93czoKKyAgICAgICAgaWYgKCFpc0NT
U0dyaWRMYXlvdXRFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHBhcnNlZFZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRBdXRvKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1uczoKKyAgICBjYXNl
IENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlUm93czoKKyAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHBhcnNlZFZh
bHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRUZW1wbGF0ZSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5R3JpZENvbHVtbkVuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFJvd1N0YXJ0OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93RW5kOgorICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91
dEVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcGFyc2VkVmFs
dWUgPSBwYXJzZUdyaWRQb3NpdGlvbigpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NT
UHJvcGVydHlHcmlkQ29sdW1uR2FwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93R2FwOgor
ICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIENTU1Byb3BlcnR5R3JpZEdhcDoKKyAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFi
bGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBwYXJzZUdy
aWRHYXBTaG9ydGhhbmQoaW1wb3J0YW50KTsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29s
dW1uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93OgorICAgICAgICBpZiAoIWlzQ1NTR3Jp
ZExheW91dEVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlR3JpZEl0ZW1Qb3NpdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7CisK
KyAgICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlOgorICAgICAgICBpZiAoIWlzQ1NTR3Jp
ZExheW91dEVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGltcG9ydGFudCk7CisKKyAgICBjYXNlIENT
U1Byb3BlcnR5R3JpZDoKKyAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBwYXJzZUdyaWRTaG9ydGhh
bmQoaW1wb3J0YW50KTsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQXJlYToKKyAgICAgICAg
aWYgKCFpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGltcG9ydGFudCk7CisKKyAg
ICBjYXNlIENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQXJlYXM6CisgICAgICAgIGlmICghaXNDU1NH
cmlkTGF5b3V0RW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXMoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvRmxvdzoKKyAgICAgICAgaWYgKCFpc0NTU0dyaWRM
YXlvdXRFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHBhcnNl
ZFZhbHVlID0gcGFyc2VHcmlkQXV0b0Zsb3coKm1fdmFsdWVMaXN0KTsKKyAgICAgICAgYnJlYWs7
CisjZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luQ29sbGFwc2U6IHsKKyAgICAgICAgaWYgKG51bSA9PSAxKSB7CisgICAg
ICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdp
bkNvbGxhcHNlKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZSh3ZWJraXRNYXJnaW5Db2xs
YXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVswXSwgaW1wb3J0YW50KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNl
ZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eSh3ZWJr
aXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVsxXSwgdmFsdWUsIGltcG9y
dGFudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChudW0gPT0gMikgeworICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywg
Q1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZSk7CisgICAgICAgICAgICBpZiAoIXBhcnNl
VmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClbMF0sIGlt
cG9ydGFudCkgfHwgIXBhcnNlVmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5w
cm9wZXJ0aWVzKClbMV0sIGltcG9ydGFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoV2lkdGg6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0VW5kZXJsaW5lV2lkdGg6CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwg
aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVUaGluIHx8CisgICAgICAgICAg
ICBpZCA9PSBDU1NWYWx1ZU1lZGl1bSB8fCBpZCA9PSBDU1NWYWx1ZVRoaWNrKQorICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZO
dW1iZXIgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENT
U1Byb3BlcnR5Q29sdW1uQ291bnQ6CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2x1bW5D
b3VudCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uR2FwOiAv
LyBub3JtYWwgfCA8bGVuZ3RoPgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRk5vbk5lZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5BeGlzOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVIb3Jpem9udGFsIHx8
IGlkID09IENTU1ZhbHVlVmVydGljYWwgfHwgaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5Q29sdW1uUHJvZ3Jlc3Npb246CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1h
bCB8fCBpZCA9PSBDU1NWYWx1ZVJldmVyc2UpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5TcGFuOiAv
LyBub25lIHwgYWxsIHwgMSAod2lsbCBiZSBkcm9wcGVkIGluIHRoZSB1bnByZWZpeGVkIHByb3Bl
cnR5KQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25l
KQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBw
YXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pID09IDEpIHsKKyAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uU3BhbiwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2x1bW5XaWR0aDogLy8gYXV0byB8IDxsZW5ndGg+CisgICAgICAgIHBhcnNlZFZh
bHVlID0gcGFyc2VDb2x1bW5XaWR0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5T2JqZWN0UG9zaXRpb246IHsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWwxOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDI7CisgICAgICAg
IHBhcnNlRmlsbFBvc2l0aW9uKCptX3ZhbHVlTGlzdCwgdmFsMSwgdmFsMik7CisgICAgICAgIGlm
ICh2YWwxKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU9iamVjdFBvc2l0
aW9uLCBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIodmFsMS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKHZhbDIpKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIC8vIEVuZCBvZiBDU1Mz
IHByb3BlcnRpZXMKKworICAgIGNhc2UgQ1NTUHJvcGVydHlXaWxsQ2hhbmdlOiAvLyBhdXRvIHwg
W3Njcm9sbC1wb3NpdGlvbiB8IGNvbnRlbnRzIHwgPGN1c3RvbS1pZGVudD5dIworICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VXaWxsQ2hhbmdlKGltcG9y
dGFudCk7CisgICAgICAgIGJyZWFrOworCisgICAgLy8gQXBwbGUgc3BlY2lmaWMgcHJvcGVydGll
cy4gIFRoZXNlIHdpbGwgbmV2ZXIgYmUgc3RhbmRhcmRpemVkIGFuZCBhcmUgcHVyZWx5IHRvCisg
ICAgLy8gc3VwcG9ydCBjdXN0b20gV2ViS2l0LWJhc2VkIEFwcGxlIGFwcGxpY2F0aW9ucy4KKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wOgorICAgICAgICAvLyBXaGVuIHNwZWNp
ZnlpbmcgbnVtYmVyIG9mIGxpbmVzLCBkb24ndCBhbGxvdyAwIGFzIGEgdmFsaWQgdmFsdWUKKyAg
ICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIGVpdGhlciB0eXBlIG9mIHVuaXQsIHJlcXVpcmUgbm9u
LW5lZ2F0aXZlIGludGVnZXJzCisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgJiYgdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50IHwgRk5v
bk5lZywgQ1NTUXVpcmtzTW9kZSkpOworICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoSU9TX1RF
WFRfQVVUT1NJWklORykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6
CisgICAgICAgIGlmICghaXNUZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENT
U1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpbGVuZ3RoIGNhc2Ugd2hl
cmUgd2UgYWxsb3cgcmVsYXRpdmUgdW5pdHMuCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZO
b25OZWcsIENTU1N0cmljdE1vZGUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRp
ZgorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAgICAgICAv
LyA8bGVuZ3RoPgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKKyAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0byB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxp
bWl0QmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVy
OgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoKKyAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9MaW1pdCB8fCB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJ
bnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExpbmVHcmlkOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAg
ICAgICAgICAgU3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWVXaXRoQ2FsY3VsYXRp
b24udmFsdWUoKS5zdHJpbmcpOworICAgICAgICAgICAgaWYgKCFsaW5lR3JpZFZhbHVlLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKGxpbmVHcmlkVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TG9jYWxlOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyNpZiBF
TkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hi
b2FyZFJlZ2lvbjogLy8gPGRhc2hib2FyZC1yZWdpb24+IHwgPGRhc2hib2FyZC1yZWdpb24+Cisg
ICAgICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHJldHVy
biBwYXJzZURhc2hib2FyZFJlZ2lvbnMocHJvcElkLCBpbXBvcnRhbnQpOworICAgICAgICBicmVh
azsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUb3VjaENhbGxvdXQ6CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZURlZmF1bHQgfHwgaWQg
PT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOgorICAgICAgICBpZiAoaXNWYWxpZFN5
c3RlbUNvbG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudQorICAgICAgICAgICAgfHwg
KGlkID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IgJiYgaWQgPCBDU1NWYWx1ZVdlYmtp
dFRleHQgJiYgaW5RdWlya3NNb2RlKCkpKSB7CisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
Q29sb3IoKTsKKyAgICAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgLy8gRW5kIEFwcGxlLXNwZWNpZmljIHByb3BlcnRpZXMKKworICAgICAgICAvKiBzaG9ydGhh
bmQgcHJvcGVydGllcyAqLworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7CisgICAg
ICAgIC8vIFBvc2l0aW9uIG11c3QgY29tZSBiZWZvcmUgY29sb3IgaW4gdGhpcyBhcnJheSBiZWNh
dXNlIGEgcGxhaW4gb2xkICIwIiBpcyBhIGxlZ2FsIGNvbG9yCisgICAgICAgIC8vIGluIHF1aXJr
cyBtb2RlIGJ1dCBpdCdzIHVzdWFsbHkgdGhlIFggY29vcmRpbmF0ZSBvZiBhIHBvc2l0aW9uLgor
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kSW1hZ2UsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwg
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ2xpcCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFNpemUgfTsKKyAgICAgICAgcmV0dXJuIHBhcnNlRmlsbFNob3J0aGFuZChwcm9wSWQsIHByb3Bl
cnRpZXMsIFdURl9BUlJBWV9MRU5HVEgocHJvcGVydGllcyksIGltcG9ydGFudCk7CisgICAgfQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOiB7CisgICAgICAgIGNvbnN0IENTU1Byb3Bl
cnR5SUQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJv
cGVydHlXZWJraXRNYXNrU291cmNlVHlwZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LAor
ICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIENTU1Byb3BlcnR5V2Vi
a2l0TWFza09yaWdpbiwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrU2l6ZSB9OworICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwg
cHJvcGVydGllcywgV1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKSwgaW1wb3J0YW50KTsKKyAg
ICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKKyAgICAgICAgLy8gWyAnYm9yZGVyLXdp
ZHRoJyB8fCAnYm9yZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0CisgICAgeworICAg
ICAgICBpZiAocGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJBYnJpZGdlZFNob3J0aGFuZCgp
LCBpbXBvcnRhbnQpKSB7CisgICAgICAgICAgICAvLyBUaGUgQ1NTMyBCb3JkZXJzIGFuZCBCYWNr
Z3JvdW5kcyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBib3JkZXIgYWxzbyByZXNldHMgYm9yZGVy
LWltYWdlLiBJdCdzIGFzCisgICAgICAgICAgICAvLyB0aG91Z2ggYSB2YWx1ZSBvZiBub25lIHdh
cyBzcGVjaWZpZWQgZm9yIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIGFkZEV4cGFuZGVkUHJvcGVy
dHlGb3JWYWx1ZShDU1NQcm9wZXJ0eUJvcmRlckltYWdlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcDoKKyAgICAgICAgLy8gWyAnYm9yZGVyLXRvcC13aWR0aCcgfHwgJ2Jv
cmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAorICAgICAgICByZXR1cm4gcGFyc2VT
aG9ydGhhbmQocHJvcElkLCBib3JkZXJUb3BTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6CisgICAgICAgIC8vIFsgJ2JvcmRlci1yaWdodC13
aWR0aCcgfHwgJ2JvcmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAorICAgICAgICBy
ZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJSaWdodFNob3J0aGFuZCgpLCBpbXBv
cnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206CisgICAgICAgIC8vIFsg
J2JvcmRlci1ib3R0b20td2lkdGgnIHx8ICdib3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8IGlu
aGVyaXQKKyAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgYm9yZGVyQm90dG9t
U2hvcnRoYW5kKCksIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6
CisgICAgICAgIC8vIFsgJ2JvcmRlci1sZWZ0LXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxlJyB8fCA8
Y29sb3I+IF0gfCBpbmhlcml0CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQs
IGJvcmRlckxlZnRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyU3RhcnQ6CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQs
IHdlYmtpdEJvcmRlclN0YXJ0U2hvcnRoYW5kKCksIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKKyAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHBy
b3BJZCwgd2Via2l0Qm9yZGVyRW5kU2hvcnRoYW5kKCksIGltcG9ydGFudCk7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZToKKyAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRo
YW5kKHByb3BJZCwgd2Via2l0Qm9yZGVyQmVmb3JlU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyOgorICAgICAgICByZXR1cm4gcGFy
c2VTaG9ydGhhbmQocHJvcElkLCB3ZWJraXRCb3JkZXJBZnRlclNob3J0aGFuZCgpLCBpbXBvcnRh
bnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgICAgICAvLyBbICdvdXRsaW5l
LWNvbG9yJyB8fCAnb3V0bGluZS1zdHlsZScgfHwgJ291dGxpbmUtd2lkdGgnIF0gfCBpbmhlcml0
CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIG91dGxpbmVTaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6CisgICAgICAg
IC8vIDxjb2xvcj57MSw0fSB8IGluaGVyaXQKKyAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhw
cm9wSWQsIGJvcmRlckNvbG9yU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDoKKyAgICAgICAgLy8gPGJvcmRlci13aWR0
aD57MSw0fSB8IGluaGVyaXQKKyAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJv
cmRlcldpZHRoU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJTdHlsZToKKyAgICAgICAgLy8gPGJvcmRlci1zdHlsZT57MSw0fSB8
IGluaGVyaXQKKyAgICAgICAgcmV0dXJuIHBhcnNlNFZhbHVlcyhwcm9wSWQsIGJvcmRlclN0eWxl
U2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJnaW46CisgICAgICAgIC8vIDxtYXJnaW4td2lkdGg+ezEsNH0gfCBpbmhlcml0CisgICAg
ICAgIHJldHVybiBwYXJzZTRWYWx1ZXMocHJvcElkLCBtYXJnaW5TaG9ydGhhbmQoKS5wcm9wZXJ0
aWVzKCksIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6CisgICAgICAg
IC8vIDxwYWRkaW5nLXdpZHRoPnsxLDR9IHwgaW5oZXJpdAorICAgICAgICByZXR1cm4gcGFyc2U0
VmFsdWVzKHByb3BJZCwgcGFkZGluZ1Nob3J0aGFuZCgpLnByb3BlcnRpZXMoKSwgaW1wb3J0YW50
KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5RmxleEZsb3c6CisgICAgICAgIHJldHVybiBwYXJzZVNo
b3J0aGFuZChwcm9wSWQsIGZsZXhGbG93U2hvcnRoYW5kKCksIGltcG9ydGFudCk7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnQ6CisgICAgICAgIC8vIFsgWyAnZm9udC1zdHlsZScgfHwgJ2ZvbnQt
dmFyaWFudCcgfHwgJ2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXplJyBbIC8gJ2xpbmUtaGVpZ2h0
JyBdPworICAgICAgICAvLyAnZm9udC1mYW1pbHknIF0gfCBjYXB0aW9uIHwgaWNvbiB8IG1lbnUg
fCBtZXNzYWdlLWJveCB8IHNtYWxsLWNhcHRpb24gfCBzdGF0dXMtYmFyIHwgaW5oZXJpdAorICAg
ICAgICBpZiAobnVtID09IDEgJiYgaWQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIGlkIDw9IENTU1Zh
bHVlU3RhdHVzQmFyKSB7CisgICAgICAgICAgICBwYXJzZVN5c3RlbUZvbnQoaW1wb3J0YW50KTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXJz
ZUZvbnQoaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlOgorICAgICAg
ICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBsaXN0U3R5bGVTaG9ydGhhbmQoKSwgaW1w
b3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uczoKKyAgICAgICAgcmV0dXJuIHBh
cnNlQ29sdW1uc1Nob3J0aGFuZChpbXBvcnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5SdWxlOgorICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBjb2x1bW5SdWxl
U2hvcnRoYW5kKCksIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2U6CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdFRleHRT
dHJva2VTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0
aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAgIHJldHVy
biBwYXJzZUFuaW1hdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRyYW5zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b246CisgICAgICAgIHJldHVybiBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQocHJvcElkLCBpbXBv
cnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CisgICAgICAgIHJldHVybiBwYXJzZVBhZ2Uo
cHJvcElkLCBpbXBvcnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0T3ZlcmxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVsIDM6IFZl
cnRpY2FsIHdyaXRpbmcgc3VwcG9ydAorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1w
aGFzaXM6CisgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIHdlYmtpdFRleHRF
bXBoYXNpc1Nob3J0aGFuZCgpLCBpbXBvcnRhbnQpOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlOgorICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1waGFzaXNT
dHlsZShpbXBvcnRhbnQpOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNp
c1Bvc2l0aW9uOgorICAgICAgICByZXR1cm4gcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihpbXBv
cnRhbnQpOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlvbjoKKyAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlU2lkZXdheXMgfHwgaWQgPT0gQ1NTVmFsdWVTaWRld2F5
c1JpZ2h0IHx8IGlkID09IENTU1ZhbHVlVmVydGljYWxSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZU1p
eGVkIHx8IGlkID09IENTU1ZhbHVlVXByaWdodCkKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5SGFuZ2luZ1B1
bmN0dWF0aW9uOgorICAgICAgICByZXR1cm4gcGFyc2VIYW5naW5nUHVuY3R1YXRpb24oaW1wb3J0
YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46CisgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRy
dWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUxpbmVCb3hDb250YWlu
KGltcG9ydGFudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVh
dHVyZVNldHRpbmdzOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoaW1wb3J0YW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOgorICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
cGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyhpbXBvcnRhbnQsIHRydWUsIGZhbHNlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVtZXJpYzoKKyAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFu
dE51bWVyaWMoaW1wb3J0YW50LCB0cnVlLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEVhc3RBc2lhbjoKKyAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9ybWFsKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudEVhc3RBc2lhbihpbXBv
cnRhbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50OgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAg
ICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQp
OworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7Cisg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
LCBpbXBvcnRhbnQsIHRydWUpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlG
b250VmFyaWFudE51bWVyaWMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICAgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGlt
cG9ydGFudCwgdHJ1ZSk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50RWFzdEFzaWFuLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7
CisgICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFyc2VGb250VmFyaWFudChpbXBvcnRhbnQp
OworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOgorICAgICAgICBwYXJzZWRW
YWx1ZSA9IHBhcnNlQ2xpcFBhdGgoKTsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19T
SEFQRVMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKKyAgICAgICAg
cGFyc2VkVmFsdWUgPSBwYXJzZVNoYXBlUHJvcGVydHkocHJvcElkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgorICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0U2hhcGVJbWFnZVRocmVzaG9sZDoKKyAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAhaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyKTsKKyAg
ICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgorICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9ICFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSk7
CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9O
KQorICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlc29sdXRpb246CisgICAgICAgIHBhcnNlZFZh
bHVlID0gcGFyc2VJbWFnZVJlc29sdXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAg
ICBjYXNlIENTU1Byb3BlcnR5QWxpZ25Db250ZW50OgorICAgICAgICBwYXJzZWRWYWx1ZSA9IHBh
cnNlQ29udGVudERpc3RyaWJ1dGlvbk92ZXJmbG93UG9zaXRpb24oKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUFsaWduU2VsZjoKKyAgICAgICAgcmV0dXJuIHBhcnNlSXRl
bVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7CisKKyAgICBjYXNl
IENTU1Byb3BlcnR5QWxpZ25JdGVtczoKKyAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBvc2l0aW9u
T3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJSaWdodFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVh
a0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKKyAgICBjYXNlIENTU1By
b3BlcnR5QnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNl
bGxzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKKyAgICBjYXNlIENT
U1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHls
ZVR5cGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5T3V0bGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZ
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5UGFnZUJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVNwZWFrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExp
bmVUaHJvdWdoU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKKyAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dE92ZXJsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRV
bmRlcmxpbmVNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFwcGVhcmFuY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0
eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckVuZFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJG
aXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgorI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJ
T05fQlJFQUspCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25CcmVhazoK
KyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hPcmllbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5C
cmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uRmlsbDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5Q29sdW1uUnVsZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4RGlyZWN0
aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4V3JhcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Rm9udEtlcm5pbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhp
bmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdExpbmVBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFr
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFyZ2luQmVmb3JlQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJv
dHRvbUNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBz
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXROYnNwTW9kZToKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVyZmxvd1Njcm9sbGluZzoKKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgorI2lmIEVOQUJMRShDU1Nf
UkVHSU9OUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRSZWdpb25GcmFnbWVudDoKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxP
cmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgorI2lmIEVO
QUJMRShDU1MzX1RFWFQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRBbGlnbkxhc3Q6
CisjZW5kaWYgLy8gQ1NTM19URVhUCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21i
aW5lOgorI2lmIEVOQUJMRShDU1MzX1RFWFQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRKdXN0aWZ5OgorI2VuZGlmIC8vIENTUzNfVEVYVAorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U2VjdXJpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VXNlckRyYWc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFdyaXRpbmdNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRX
cmFwOgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVRvdWNo
QWN0aW9uOgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcFR5cGU6CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1RS
QUlMSU5HX1dPUkQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eUFwcGxlVHJhaWxpbmdXb3JkOgorI2Vu
ZGlmCisgICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3Jl
IGluIGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZSgpLgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShDU1NfREVWSUNF
X0FEQVBUQVRJT04pCisgICAgLy8gUHJvcGVydGllcyBiZWxsb3cgYXJlIHZhbGlkYXRlZCBpbnNp
ZGUgcGFyc2VWaWV3cG9ydFByb3BlcnR5LCBiZWNhdXNlIHdlCisgICAgLy8gY2hlY2sgZm9yIHBh
cnNlciBzdGF0ZSBpblZpZXdwb3J0U2NvcGUuIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSBpZiBzb21l
b25lCisgICAgLy8gYWRkcyB0aGVtIG91dHNpZGUgYSBAdmlld3BvcnQgcnVsZS4KKyAgICBjYXNl
IENTU1Byb3BlcnR5TWF4Wm9vbToKKyAgICBjYXNlIENTU1Byb3BlcnR5TWluWm9vbToKKyAgICBj
YXNlIENTU1Byb3BlcnR5T3JpZW50YXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29t
OgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyNlbmRp
ZgorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFNjcm9sbFNuYXBQb2ludHNYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFw
UG9pbnRzWToKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBwYXJzZU5vbkVsZW1lbnRTbmFwUG9pbnRzKHByb3BJZCwgaW1wb3J0
YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcERlc3RpbmF0aW9uOiAv
LyA8bGVuZ3RoPnsyfQorICAgICAgICByZXR1cm4gcGFyc2VTY3JvbGxTbmFwRGVzdGluYXRpb24o
cHJvcElkLCBpbXBvcnRhbnQpOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFw
Q29vcmRpbmF0ZToKKyAgICAgICAgcmV0dXJuIHBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUocHJv
cElkLCBpbXBvcnRhbnQpOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
cGFyc2VTVkdWYWx1ZShwcm9wSWQsIGltcG9ydGFudCk7CisgICAgfQorCisgICAgaWYgKHZhbGlk
UHJpbWl0aXZlKSB7CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShp
ZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwor
ICAgIH0KKworICAgIGlmIChwYXJzZWRWYWx1ZSAmJiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkg
fHwgaW5TaG9ydGhhbmQoKSkpIHsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJzZWRW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENTU1BhcnNlcjo6YWRkRmlsbFZh
bHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFsKQoreworICAg
IGlmICghbHZhbCkgeworICAgICAgICBsdmFsID0gV1RGTW92ZShydmFsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChsdmFsLT5pc0Jhc2VWYWx1ZUxpc3QoKSkgeworICAgICAg
ICBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGTW92ZShydmFsKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgbGlzdC5nZXQoKS5hcHBlbmQobHZhbC5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBsaXN0LmdldCgpLmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsKKyAgICBs
dmFsID0gV1RGTW92ZShsaXN0KTsKK30KKworc3RhdGljIGJvb2wgaXNDb250ZW50RGlzdHJpYnV0
aW9uS2V5d29yZChDU1NWYWx1ZUlEIGlkKQoreworICAgIHJldHVybiBpZCA9PSBDU1NWYWx1ZVNw
YWNlQmV0d2VlbiB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlQXJvdW5kCisgICAgICAgIHx8IGlkID09
IENTU1ZhbHVlU3BhY2VFdmVubHkgfHwgaWQgPT0gQ1NTVmFsdWVTdHJldGNoOworfQorCitzdGF0
aWMgYm9vbCBpc0NvbnRlbnRQb3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKK3sKKyAgICBy
ZXR1cm4gaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBD
U1NWYWx1ZUNlbnRlcgorICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUZsZXhTdGFydCB8fCBpZCA9
PSBDU1NWYWx1ZUZsZXhFbmQKKyAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09
IENTU1ZhbHVlUmlnaHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Jhc2VsaW5lUG9zaXRp
b25LZXl3b3JkKENTU1ZhbHVlSUQgaWQpCit7CisgICAgcmV0dXJuIGlkID09IENTU1ZhbHVlQmFz
ZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVMYXN0QmFzZWxpbmU7Cit9CisKK3N0YXRpYyBib29sIGlz
QWxpZ25tZW50T3ZlcmZsb3dLZXl3b3JkKENTU1ZhbHVlSUQgaWQpCit7CisgICAgcmV0dXJuIGlk
ID09IENTU1ZhbHVlVW5zYWZlIHx8IGlkID09IENTU1ZhbHVlU2FmZTsKK30KKworc3RhdGljIGJv
b2wgaXNJdGVtUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgaWQpCit7CisgICAgcmV0dXJuIGlk
ID09IENTU1ZhbHVlU3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVFbmQgfHwgaWQgPT0gQ1NTVmFsdWVD
ZW50ZXIKKyAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVTZWxmU3RhcnQgfHwgaWQgPT0gQ1NTVmFs
dWVTZWxmRW5kIHx8IGlkID09IENTU1ZhbHVlRmxleFN0YXJ0CisgICAgICAgIHx8IGlkID09IENT
U1ZhbHVlRmxleEVuZCB8fCBpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdo
dDsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGVnYWN5UG9zaXRpb24oQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQoreworICAgIC8vIFsgbGVnYWN5ICYmIFsgbGVmdCB8
IHJpZ2h0IHwgY2VudGVyIF0KKworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxlZ2FjeSkgeworICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVDZW50ZXIgJiYg
dmFsdWUtPmlkICE9IENTU1ZhbHVlTGVmdCAmJiB2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVSaWdodCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUNlbnRlciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVJpZ2h0KSB7CisgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCAhPSBDU1NWYWx1ZUxlZ2FjeSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKKyAgICBhZGRQ
cm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGVnYWN5KSwgY3NzVmFsdWVQb29sLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gIW1fdmFs
dWVMaXN0LT5uZXh0KCk7Cit9CisKK1JlZlB0cjxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpCit7
CisgICAgLy8gbm9ybWFsIHwgPGJhc2VsaW5lLXBvc2l0aW9uPiB8IDxjb250ZW50LWRpc3RyaWJ1
dGlvbj4gfHwgWyA8b3ZlcmZsb3ctcG9zaXRpb24+PyAmJiA8Y29udGVudC1wb3NpdGlvbj4gXQor
ICAgIC8vIDxiYXNlbGluZS1wb3NpdGlvbj4gPSBiYXNlbGluZSB8IGxhc3QtYmFzZWxpbmU7Cisg
ICAgLy8gPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiA9IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91
bmQgfCBzcGFjZS1ldmVubHkgfCBzdHJldGNoOworICAgIC8vIDxjb250ZW50LXBvc2l0aW9uPiA9
IGNlbnRlciB8IHN0YXJ0IHwgZW5kIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgbGVmdCB8IHJp
Z2h0OworICAgIC8vIDxvdmVyZmxvdy1wb3NpdGlvbj4gPSB1bnNhZmUgfCBzYWZlCisKKyAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gYXV0byB8IDxiYXNlbGlu
ZS1wb3NpdGlvbj4KKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlzQmFz
ZWxpbmVQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkgeworICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgICAgICByZXR1cm4gQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVJbnZhbGlkLCB2YWx1ZS0+aWQsIENTU1ZhbHVlSW52YWxpZCk7CisgICAgfQor
CisgICAgQ1NTVmFsdWVJRCBkaXN0cmlidXRpb24gPSBDU1NWYWx1ZUludmFsaWQ7CisgICAgQ1NT
VmFsdWVJRCBwb3NpdGlvbiA9IENTU1ZhbHVlSW52YWxpZDsKKyAgICBDU1NWYWx1ZUlEIG92ZXJm
bG93ID0gQ1NTVmFsdWVJbnZhbGlkOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICBpZiAo
aXNDb250ZW50RGlzdHJpYnV0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7CisgICAgICAgICAgICBp
ZiAoZGlzdHJpYnV0aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiA9IHZhbHVlLT5pZDsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0NvbnRlbnRQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkgeworICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uICE9IENTU1ZhbHVlSW52YWxpZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdmFsdWUtPmlkOworICAg
ICAgICB9IGVsc2UgaWYgKGlzQWxpZ25tZW50T3ZlcmZsb3dLZXl3b3JkKHZhbHVlLT5pZCkpIHsK
KyAgICAgICAgICAgIGlmIChvdmVyZmxvdyAhPSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBvdmVyZmxvdyA9IHZhbHVlLT5pZDsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKworICAgIC8vIFRoZSBncmFtbWFyIHN0
YXRlcyB0aGF0IHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IDxjb250ZW50LWRpc3RyaWJ1dGlvbj4g
b3IKKyAgICAvLyA8Y29udGVudC1wb3NpdGlvbj4gKCA8Y29udGVudC1kaXN0cmlidXRpb24+IHx8
IDxjb250ZW50LXBvc2l0aW9uPiApLgorICAgIGlmIChwb3NpdGlvbiA9PSBDU1NWYWx1ZUludmFs
aWQgJiYgZGlzdHJpYnV0aW9uID09IENTU1ZhbHVlSW52YWxpZCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAvLyBUaGUgZ3JhbW1hciBzdGF0ZXMgdGhhdCA8b3ZlcmZsb3ctcG9zaXRp
b24+IG11c3QgYmUgYXNzb2NpYXRlZCB0byA8Y29udGVudC1wb3NpdGlvbj4uCisgICAgaWYgKG92
ZXJmbG93ICE9IENTU1ZhbHVlSW52YWxpZCAmJiBwb3NpdGlvbiA9PSBDU1NWYWx1ZUludmFsaWQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIENTU0NvbnRlbnREaXN0cmli
dXRpb25WYWx1ZTo6Y3JlYXRlKGRpc3RyaWJ1dGlvbiwgcG9zaXRpb24sIG92ZXJmbG93KTsKK30K
KworYm9vbCBDU1NQYXJzZXI6OnBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgLy8gYXV0byB8IG5vcm1h
bCB8IHN0cmV0Y2ggfCA8YmFzZWxpbmUtcG9zaXRpb24+IHwgWzxpdGVtLXBvc2l0aW9uPiAmJiA8
b3ZlcmZsb3ctcG9zaXRpb24+PyBdCisgICAgLy8gPGJhc2VsaW5lLXBvc2l0aW9uPiA9IGJhc2Vs
aW5lIHwgbGFzdC1iYXNlbGluZTsKKyAgICAvLyA8aXRlbS1wb3NpdGlvbj4gPSBjZW50ZXIgfCBz
dGFydCB8IGVuZCB8IHNlbGYtc3RhcnQgfCBzZWxmLWVuZCB8IGZsZXgtc3RhcnQgfCBmbGV4LWVu
ZCB8IGxlZnQgfCByaWdodDsKKyAgICAvLyA8b3ZlcmZsb3ctcG9zaXRpb24+ID0gdW5zYWZlIHwg
c2FmZQorCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwg
dmFsdWUtPmlkID09IENTU1ZhbHVlU3RyZXRjaCB8fCBpc0Jhc2VsaW5lUG9zaXRpb25LZXl3b3Jk
KHZhbHVlLT5pZCkpIHsKKyAgICAgICAgLy8gYWxpZ24taXRlbXMgcHJvcGVydHkgZG9lcyBub3Qg
YWxsb3cgdGhlICdhdXRvJyB2YWx1ZS4KKyAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZUF1dG8gJiYgcHJvcElkID09IENTU1Byb3BlcnR5QWxpZ25JdGVtcykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRh
bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHBvc2l0aW9uOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb3ZlcmZs
b3dBbGlnbm1lbnRLZXl3b3JkOworICAgIGlmIChpc0l0ZW1Qb3NpdGlvbktleXdvcmQodmFsdWUt
PmlkKSkgeworICAgICAgICBwb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUt
PmlkICE9IENTU1ZhbHVlVW5zYWZlICYmIHZhbHVlLT5pZCAhPSBDU1NWYWx1ZVNhZmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3ZlcmZsb3dBbGlnbm1lbnRL
ZXl3b3JkID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUtPmlkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXNBbGlnbm1lbnRPdmVyZmxv
d0tleXdvcmQodmFsdWUtPmlkKSkgeworICAgICAgICBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpOworICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGlmICh2
YWx1ZSAmJiBpc0l0ZW1Qb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkKKyAgICAgICAgICAgIHBv
c2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUtPmlkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV92YWx1ZUxpc3QtPm5l
eHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHBvc2l0aW9uKTsKKyAg
ICBpZiAob3ZlcmZsb3dBbGlnbm1lbnRLZXl3b3JkKQorICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihwb3NpdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBv
dmVyZmxvd0FsaWdubWVudEtleXdvcmQucmVsZWFzZU5vbk51bGwoKSksIGltcG9ydGFudCk7Cisg
ICAgZWxzZQorICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBvc2l0aW9uLnJlbGVhc2VOb25O
dWxsKCksIGltcG9ydGFudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
cGFyc2VCYWNrZ3JvdW5kQ2xpcChDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUsIFJlZlB0cjxD
U1NWYWx1ZT4mIGNzc1ZhbHVlKQoreworICAgIGlmIChwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1
ZUJvcmRlckJveCB8fCBwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKKyAgICAg
ICAgfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94IHx8IHBhcnNlclZhbHVl
LmlkID09IENTU1ZhbHVlV2Via2l0VGV4dCkgeworICAgICAgICBjc3NWYWx1ZSA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBhcnNlclZhbHVlLmlkKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBDU1NQYXJzZXI6OnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9y
dGhhbmRCZWhhdmlvcjsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitib29sIENT
U1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCit7CisgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFs
dWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKKyAgICAgICAgICAgIHZhbHVl
cy0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bikpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24KKyAgICAgICAgICAgICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncworICAgICAgICAgICAg
JiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0
KCIpKSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbigqdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpLT5jdXJyZW50KCkpOworICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8
IEZQZXJjZW50IHwgRk5vbk5lZykpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKExlbmd0aFJlcGVhdDo6Y3JlYXRl
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSk7
CisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKKyAgICB9CisgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlcyksIGltcG9ydGFudCk7CisgICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9sbFNuYXBQb3NpdGlvbnMoUmVmUHRy
PENTU1ZhbHVlPiYgY3NzVmFsdWVYLCBSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZVkpCit7Cisg
ICAgY3NzVmFsdWVYID0gcGFyc2VQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKKyAgICBpZiAoIWNz
c1ZhbHVlWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG9uJ3QgYWNjZXB0IG9k
ZC1sZW5ndGggbGlzdHMgb2YgcG9zaXRpb25zIChtdXN0IGFsd2F5cyBoYXZlIGFuIFggYW5kIGEg
WSk6CisgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjc3NWYWx1ZVkgPSBwYXJzZVBvc2l0aW9uWSgqbV92YWx1ZUxpc3QpOworICAgIGlm
ICghY3NzVmFsdWVZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcERlc3RpbmF0aW9uKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBhdXRvIHBvc2l0aW9uID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIGlmIChtX3ZhbHVlTGlzdC0+
c2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY3NzVmFsdWVYLCBjc3NWYWx1ZVk7CisgICAgaWYgKCFwYXJzZVNjcm9sbFNuYXBQb3NpdGlv
bnMoY3NzVmFsdWVYLCBjc3NWYWx1ZVkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBw
b3NpdGlvbi0+YXBwZW5kKGNzc1ZhbHVlWC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBwb3NpdGlv
bi0+YXBwZW5kKGNzc1ZhbHVlWS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIFdURk1vdmUocG9zaXRpb24pLCBpbXBvcnRhbnQpOworICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVNjcm9s
bFNuYXBDb29yZGluYXRlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sK
KyAgICBhdXRvIHBvc2l0aW9ucyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQo
KTsKKyAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IGNzc1ZhbHVlWCwgY3NzVmFsdWVZOworICAgICAgICBpZiAoIXBhcnNlU2Nyb2xs
U25hcFBvc2l0aW9ucyhjc3NWYWx1ZVgsIGNzc1ZhbHVlWSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcG9zaXRpb25zLT5hcHBlbmQoY3NzVmFsdWVYLnJlbGVhc2VOb25O
dWxsKCkpOworICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjc3NWYWx1ZVkucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgfQorCisgICAgaWYgKHBv
c2l0aW9ucy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3Zl
KHBvc2l0aW9ucyksIGltcG9ydGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworY29uc3QgaW50IGNNYXhGaWxsUHJvcGVydGll
cyA9IDk7CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0
aWVzLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBBU1NFUlQobnVtUHJvcGVydGllcyA8PSBjTWF4
RmlsbFByb3BlcnRpZXMpOworICAgIGlmIChudW1Qcm9wZXJ0aWVzID4gY01heEZpbGxQcm9wZXJ0
aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0
aGlzLCBwcm9wSWQpOworCisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtjTWF4RmlsbFByb3BlcnRp
ZXNdID0geyBmYWxzZSB9OworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW2NNYXhGaWxsUHJv
cGVydGllc107CisgICAgUmVmUHRyPENTU1ZhbHVlPiBjbGlwVmFsdWU7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiBwb3NpdGlvbllWYWx1ZTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdFlWYWx1
ZTsKKyAgICBib29sIGZvdW5kQ2xpcCA9IGZhbHNlOworICAgIGludCBpOworICAgIGJvb2wgZm91
bmRQb3NpdGlvbkNTU1Byb3BlcnR5ID0gZmFsc2U7CisKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOworICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFsdWUgPSAqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiBjdXJyZW50VmFsdWUuaVZhbHVlID09ICcsJykgeworICAg
ICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQuICBGaWxsIGluIGFsbCByZW1haW5pbmcgdmFsdWVz
IHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCisgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yICYmIHBhcnNlZFByb3BlcnR5W2ldKQorICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBp
cyBub3QgYWxsb3dlZCBleGNlcHQgYXMgdGhlIGxhc3QgaXRlbSBpbiBhIGxpc3QgZm9yIGJhY2tn
cm91bmRzLgorICAgICAgICAgICAgICAgICAgICAvLyBSZWplY3QgdGhlIGVudGlyZSBwcm9wZXJ0
eS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAg
aWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNb
aV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9z
aXRpb24gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3Nz
VmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQgfHwg
cHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCBjc3NWYWx1ZVBvb2wuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgocHJv
cGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4pICYmICFwYXJzZWRQcm9wZXJ0eVtpXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0
IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2l6ZUNTU1Byb3Bl
cnR5RXhwZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3Io
Y3VycmVudFZhbHVlKSAmJiBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkpIHsKKyAgICAgICAgICAg
IHNpemVDU1NQcm9wZXJ0eUV4cGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkg
PSBmYWxzZTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGkgPSAw
OyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworCisgICAgICAgICAgICBpZiAo
c2l6ZUNTU1Byb3BlcnR5RXhwZWN0ZWQgJiYgKHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kU2l6ZSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5V2Via2l0TWFza1Np
emUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFzaXplQ1NT
UHJvcGVydHlFeHBlY3RlZCAmJiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRTaXplIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVy
dHlbaV0pIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDE7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwyOworICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5SUQgcHJvcElkMSwgcHJvcElkMjsKKyAgICAgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSYg
cGFyc2VyVmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKworICAgICAgICAgICAgICAg
IGlmIChwYXJzZUZpbGxQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBwcm9wSWQxLCBwcm9wSWQyLCB2
YWwxLCB2YWwyKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwg
dmFsMS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRp
ZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwgcHJvcGVydGllc1tpXSA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgdmFsMi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
KQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwgdmFs
Mi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNb
aV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlXZWJraXRNYXNrT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZXBhcnNlIHRoZSB2YWx1ZSBhcyBhIGNsaXAsIGFuZCBzZWUgaWYgd2Ugc3VjY2VlZC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKHBhcnNlclZhbHVlLCB2
YWwxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVl
LCB2YWwxLnJlbGVhc2VOb25OdWxsKCkpOyAvLyBUaGUgcHJvcGVydHkgcGFyc2VkIHN1Y2Nlc3Nm
dWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSk7IC8vIFNvbWUgdmFsdWUgd2FzIHVzZWQgZm9yIG9yaWdpbiB0aGF0
IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY2xpcC4gSnVzdCByZXNldCBjbGlwIGluc3RlYWQuCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0g
PT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3Bl
cnR5V2Via2l0TWFza0NsaXApCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZENsaXAgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRQb3NpdGlvbkNTU1By
b3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRo
aXMgaXMgYW4KKyAgICAgICAgLy8gaW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdu
b3JlIGl0CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCisg
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAvLyBGaWxs
IGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgorICAg
ICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CisgICAgICAgICAgICBhZGRGaWxsVmFsdWUo
dmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Cisg
ICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQor
ICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29s
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgaWYgKHByb3BlcnRp
ZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0g
Q1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KQorICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1
ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgp
KTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbikg
eworICAgICAgICAgICAgICAgIC8vIElmIGJhY2tncm91bmQtb3JpZ2luIHdhc24ndCBwcmVzZW50
LCB0aGVuIHJlc2V0IGJhY2tncm91bmQtY2xpcCBhbHNvLgorICAgICAgICAgICAgICAgIGFkZEZp
bGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikgeworICAgICAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBXVEZNb3ZlKHZhbHVlc1tpXSks
IGltcG9ydGFudCk7CisgICAgICAgICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShwb3Np
dGlvbllWYWx1ZSkgc2luY2Ugd2Ugb25seSBzZWUgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b24gb25jZQorICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9z
aXRpb25ZLCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVlKSwgaW1wb3J0YW50KTsKKyAgICAgICAgfSBl
bHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKSB7
CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgs
IFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIC8vIGl0J3MgT0sg
dG8gY2FsbCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVlKSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiBvbmNlCisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIFdURk1vdmUocG9zaXRpb25ZVmFsdWUpLCBpbXBv
cnRhbnQpOworICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0KSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRYLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7CisgICAgICAg
ICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShyZXBlYXRZVmFsdWUpIHNpbmNlIHdlIG9u
bHkgc2VlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIG9uY2UKKyAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIFdURk1vdmUocmVwZWF0WVZh
bHVlKSwgaW1wb3J0YW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkgeworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgV1RGTW92ZSh2YWx1ZXNbaV0pLCBpbXBvcnRhbnQp
OworICAgICAgICAgICAgLy8gaXQncyBPSyB0byBjYWxsIFdURk1vdmUocmVwZWF0WVZhbHVlKSBz
aW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiBvbmNlCisgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZLCBXVEZNb3Zl
KHJlcGVhdFlWYWx1ZSksIGltcG9ydGFudCk7CisgICAgICAgIH0gZWxzZSBpZiAoKHByb3BlcnRp
ZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5V2Via2l0TWFza0NsaXApICYmICFmb3VuZENsaXApCisgICAgICAgICAgICAvLyBW
YWx1ZSBpcyBhbHJlYWR5IHNldCB3aGlsZSB1cGRhdGluZyBvcmlnaW4KKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFNpemUgJiYgIXBhcnNlZFByb3BlcnR5W2ldICYmIHVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCBXVEZNb3ZlKHZhbHVl
c1tpXSksIGltcG9ydGFudCk7CisKKyAgICAgICAgLy8gQWRkIGluIGNsaXAgdmFsdWVzIHdoZW4g
d2UgaGl0IHRoZSBjb3JyZXNwb25kaW5nIG9yaWdpbiBwcm9wZXJ0eS4KKyAgICAgICAgaWYgKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luICYmICFmb3VuZENsaXAp
CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBXVEZN
b3ZlKGNsaXBWYWx1ZSksIGltcG9ydGFudCk7CisgICAgICAgIGVsc2UgaWYgKHByb3BlcnRpZXNb
aV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luICYmICFmb3VuZENsaXApCisgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLCBXVEZNb3ZlKGNsaXBW
YWx1ZSksIGltcG9ydGFudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBSZWY8
Q1NTVmFsdWU+JiYgcnZhbCkKK3sKKyAgICBpZiAoIWx2YWwpIHsKKyAgICAgICAgbHZhbCA9IFdU
Rk1vdmUocnZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTVmFs
dWVMaXN0PigqbHZhbCkpIHsKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqbHZhbCku
YXBwZW5kKFdURk1vdmUocnZhbCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgIGxpc3Qt
PmFwcGVuZChsdmFsLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGxpc3QtPmFwcGVuZChXVEZNb3Zl
KHJ2YWwpKTsKKyAgICBsdmFsID0gV1RGTW92ZShsaXN0KTsKK30KKworYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKK3sKKyAgICBBU1NFUlQocHJvcElkID09IENTU1Byb3BlcnR5QW5pbWF0aW9uIHx8IHBy
b3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbik7CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBudW1Qcm9wZXJ0aWVzID0gODsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBz
aG9ydGhhbmQgPSBhbmltYXRpb25TaG9ydGhhbmRGb3JQYXJzaW5nKHByb3BJZCk7CisKKyAgICAv
LyBUaGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGluIHRoZSBzaG9ydGhhbmQgc2hvdWxkIGJlIHRoZSBz
YW1lCisgICAgLy8gbGVuZ3RoIGFzIHRoZSBsaXN0IHdpdGggYW5pbWF0aW9uIG5hbWUgaW4gbGFz
dCBwb3NpdGlvbiwgZXZlbiB0aG91Z2ggdGhleSBhcmUKKyAgICAvLyBpbiBhIGRpZmZlcmVudCBv
cmRlci4KKyAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpOwor
ICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IGFuaW1hdGlvblNob3J0aGFuZCgpLmxlbmd0aCgp
KTsKKyAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSB3ZWJraXRBbmltYXRpb25TaG9ydGhhbmQo
KS5sZW5ndGgoKSk7CisKKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwor
CisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsKKyAg
ICBBbmltYXRpb25QYXJzZUNvbnRleHQgY29udGV4dDsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlc1tudW1Qcm9wZXJ0aWVzXTsKKworICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCk7CisgICAgdW5zaWduZWQgaTsKKyAgICB3aGlsZSAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6
T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7CisgICAgICAgICAgICAvLyBXZSBoaXQg
dGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5pdGlhbCB2
YWx1ZS4KKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFw
YXJzZWRQcm9wZXJ0eVtpXSkKKyAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUo
dmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9w
ZXJ0eVtpXSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOworICAgICAg
ICAgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVz
KClbaV0sIHZhbCwgY29udGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVy
dHlbaV0gPSBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZh
bHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFRoZXJlIGFyZSBtb3JlIHZhbHVlcyB0byBwcm9jZXNzIGJ1dCAnbm9uZScgb3IgJ2FsbCcg
d2VyZSBhbHJlYWR5IGRlZmluZWQgYXMgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSwgdGhlIGRlY2xh
cmF0aW9uIGJlY29tZXMgaW52YWxpZC4KKyAgICAgICAgICAgIGlmICghY29udGV4dC5hbmltYXRp
b25Qcm9wZXJ0eUtleXdvcmRBbGxvd2VkKCkgJiYgY29udGV4dC5oYXNDb21taXR0ZWRGaXJzdEFu
aW1hdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBh
bgorICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQK
KyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFs
IHZhbHVlLgorICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKKyAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVl
KHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwor
ICAgIH0KKworICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgor
ICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYW50
IGZvcm0gYXMgd2VsbCwKKyAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFuZCBjbGVh
cnMgYWxsIGV4aXN0aW5nIHByZWZpeGVkIGFuZAorICAgIC8vIHVucHJlZml4ZWQgdmFsdWVzLgor
ICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIGFkZFByb3Bl
cnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgV1RGTW92
ZSh2YWx1ZXNbaV0pLCBpbXBvcnRhbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjphZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQg
cHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIGlt
cGxpY2l0KQoreworICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsdWUuY29weVJlZigpLCBpbXBv
cnRhbnQsIGltcGxpY2l0KTsKKworICAgIENTU1Byb3BlcnR5SUQgcHJlZml4aW5nVmFyaWFudCA9
IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKHByb3BJZCk7CisgICAgaWYgKHByZWZpeGlu
Z1ZhcmlhbnQgPT0gcHJvcElkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jdXJyZW50
U2hvcnRoYW5kKSB7CisgICAgICAgIC8vIFdlIGNhbid0IHVzZSBTaG9ydGhhbmRTY29wZSBoZXJl
IGFzIHdlIGNhbiBhbHJlYWR5IGJlIGluc2lkZSBvbmUgKGUuZyB3ZSBhcmUgcGFyc2luZyBDU1NU
cmFuc2l0aW9uKS4KKyAgICAgICAgbV9jdXJyZW50U2hvcnRoYW5kID0gcHJlZml4aW5nVmFyaWFu
dEZvclByb3BlcnR5SWQobV9jdXJyZW50U2hvcnRoYW5kKTsKKyAgICAgICAgYWRkUHJvcGVydHko
cHJlZml4aW5nVmFyaWFudCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgaW1wbGljaXQpOwor
ICAgICAgICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVydHlJ
ZChtX2N1cnJlbnRTaG9ydGhhbmQpOworICAgIH0gZWxzZQorICAgICAgICBhZGRQcm9wZXJ0eShw
cmVmaXhpbmdWYXJpYW50LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Cit9
CisKKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uV2lk
dGgoKQoreworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCpt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKyAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5pZDsKKyAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBp
biBzdHJpY3QgbW9kZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVu
IHVzZWQgaW4gdGhlICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCisgICAgaWYgKGlkICE9
IENTU1ZhbHVlQXV0byAmJiAhKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbikpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFyc2Vk
VmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Cisg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbHVtbkNvdW50KCkKK3sK
KyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuaWQ7CisKKyAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYmICF2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBwYXJz
ZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUNvbHVtbnNTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCit7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiBjb2x1bW5XaWR0aDsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbHVtbkNvdW50Owor
ICAgIGJvb2wgaGFzUGVuZGluZ0V4cGxpY2l0QXV0byA9IGZhbHNlOworCisgICAgZm9yICh1bnNp
Z25lZCBwcm9wZXJ0aWVzUGFyc2VkID0gMDsgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsgKytwcm9wZXJ0aWVzUGFyc2VkKSB7CisgICAgICAgIGlmIChwcm9w
ZXJ0aWVzUGFyc2VkID49IDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRvbyBtYW55
IHZhbHVlcyBmb3IgdGhpcyBzaG9ydGhhbmQuIEludmFsaWQgZGVjbGFyYXRpb24uCisgICAgICAg
IGlmICghcHJvcGVydGllc1BhcnNlZCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Cisg
ICAgICAgICAgICAvLyAnYXV0bycgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYW55IG9mIHRoZSB0d28g
bG9uZ2hhbmRzLCBhbmQgYXQgdGhpcyBwb2ludAorICAgICAgICAgICAgLy8gd2UgZG9uJ3Qga25v
dyB3aGljaCBvbmUocykgaXQgaXMgbWVhbnQgZm9yLiBXZSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBh
cmUgb3RoZXIgdmFsdWVzIGZpcnN0LgorICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICAgICAgICAgIGhhc1BlbmRpbmdFeHBsaWNpdEF1dG8gPSB0cnVlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCFjb2x1bW5XaWR0aCkgeworICAgICAgICAgICAgICAgIGlm
ICgoY29sdW1uV2lkdGggPSBwYXJzZUNvbHVtbldpZHRoKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29sdW1uQ291bnQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoKGNvbHVtbkNvdW50ID0gcGFyc2VDb2x1bW5Db3VudCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4g
aW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0LgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55IHVuYXNzaWduZWQg
cHJvcGVydHkgYXQgdGhpcyBwb2ludCB3aWxsIGJlY29tZSBpbXBsaWNpdCAnYXV0bycuCisgICAg
aWYgKGNvbHVtbldpZHRoKQorICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldp
ZHRoLCBXVEZNb3ZlKGNvbHVtbldpZHRoKSwgaW1wb3J0YW50KTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAh
aGFzUGVuZGluZ0V4cGxpY2l0QXV0byAvKiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGhhc1BlbmRp
bmdFeHBsaWNpdEF1dG8gPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29sdW1uQ291bnQpCisg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIFdURk1vdmUoY29sdW1u
Q291bnQpLCBpbXBvcnRhbnQpOworICAgIGVsc2UKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlDb2x1bW5Db3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0QXV0
byAvKiBpbXBsaWNpdCAqLyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCit7CisgICAgY29uc3QgdW5zaWduZWQgbnVtUHJvcGVydGllcyA9IDQ7CisgICAg
Y29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJv
cGVydHkocHJvcElkKTsKKyAgICBBU1NFUlQobnVtUHJvcGVydGllcyA9PSBzaG9ydGhhbmQubGVu
Z3RoKCkpOworCisgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKKworICAg
IGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07CisgICAgQW5p
bWF0aW9uUGFyc2VDb250ZXh0IGNvbnRleHQ7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNb
bnVtUHJvcGVydGllc107CisKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpOworICAgIHVuc2lnbmVkIGk7CisgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7CisgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIHZhbC0+aVZhbHVlID09ICcsJykgeworICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBl
bmQuIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4K
KyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQ
cm9wZXJ0eVtpXSkKKyAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVz
W2ldLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Rmlyc3RBbmltYXRpb24oKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpID0gMDsgIWZv
dW5kICYmIGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2Vk
UHJvcGVydHlbaV0pIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVy
dGllcygpW2ldLCB2YWwsIGNvbnRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBy
b3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRp
b25WYWx1ZSh2YWx1ZXNbaV0sIHZhbC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbW9yZSB2YWx1ZXMgdG8gcHJvY2Vz
cyBidXQgJ25vbmUnIG9yICdhbGwnIHdlcmUgYWxyZWFkeSBkZWZpbmVkIGFzIHRoZSBhbmltYXRp
b24gcHJvcGVydHksIHRoZSBkZWNsYXJhdGlvbiBiZWNvbWVzIGludmFsaWQuCisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LmFuaW1hdGlvblByb3BlcnR5S2V5d29yZEFsbG93ZWQoKSAmJiBj
b250ZXh0Lmhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGlm
IHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgorICAgICAgICAv
LyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKKyAgICAgICAgaWYg
KCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGaWxs
IGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgorICAg
IGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKKyAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkKKyAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwg
Y3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgIH0KKworICAg
IC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgorICAgIC8vIEluIHRo
aXMgY2FzZSB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYW50IGZvcm0gYXMgd2Vs
bCwKKyAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCBhIHNob3J0aGFuZCBjbGVhcnMgYWxsIGV4aXN0
aW5nIHByZWZpeGVkIGFuZAorICAgIC8vIHVucHJlZml4ZWQgdmFsdWVzLgorICAgIGZvciAoaSA9
IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIGFkZFByb3BlcnR5V2l0aFByZWZp
eGluZ1ZhcmlhbnQoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgV1RGTW92ZSh2YWx1ZXNbaV0p
LCBpbXBvcnRhbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNo
b3J0aGFuZCYgc2hvcnRoYW5kLCBib29sIGltcG9ydGFudCkKK3sKKyAgICAvLyBXZSB0cnkgdG8g
bWF0Y2ggYXMgbWFueSBwcm9wZXJ0aWVzIGFzIHBvc3NpYmxlCisgICAgLy8gV2Ugc2V0IHVwIGFu
IGFycmF5IG9mIGJvb2xlYW5zIHRvIG1hcmsgd2hpY2ggcHJvcGVydHkgaGFzIGJlZW4gZm91bmQs
CisgICAgLy8gYW5kIHdlIHRyeSB0byBzZWFyY2ggZm9yIHByb3BlcnRpZXMgdW50aWwgaXQgbWFr
ZXMgbm8gbG9uZ2VyIGFueSBzZW5zZS4KKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBw
cm9wSWQpOworCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIHByb3BlcnRp
ZXNQYXJzZWQgPSAwOworICAgIGJvb2wgcHJvcGVydHlGb3VuZFs2XT0geyBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH07IC8vIDYgaXMgZW5vdWdoIHNpemUuCisKKyAg
ICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAgICBmb3VuZCA9IGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BJbmRleCA9IDA7ICFmb3VuZCAmJiBwcm9wSW5k
ZXggPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsrcHJvcEluZGV4KSB7CisgICAgICAgICAgICBpZiAo
IXByb3BlcnR5Rm91bmRbcHJvcEluZGV4XSAmJiBwYXJzZVZhbHVlKHNob3J0aGFuZC5wcm9wZXJ0
aWVzKClbcHJvcEluZGV4XSwgaW1wb3J0YW50KSkgeworICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUZvdW5kW3Byb3BJbmRleF0gPSBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnRpZXNQYXJzZWQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgorICAg
ICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKKyAgICAg
ICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAocHJvcGVydGllc1BhcnNlZCA9PSBzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMgd2l0aCB0
aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpOworICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJv
cGVydHlJbXBsaWNpdCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCogcHJvcGVy
dGllc0ZvckluaXRpYWxpemF0aW9uID0gc2hvcnRoYW5kLnByb3BlcnRpZXNGb3JJbml0aWFsaXph
dGlvbigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBpZiAocHJvcGVydHlGb3VuZFtpXSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzRm9ySW5pdGlhbGl6YXRpb24pIHsKKyAgICAg
ICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIGluaXRQcm9wZXJ0aWVzID0gcHJv
cGVydGllc0ZvckluaXRpYWxpemF0aW9uW2ldOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBw
cm9wSW5kZXggPSAwOyBwcm9wSW5kZXggPCBpbml0UHJvcGVydGllcy5sZW5ndGgoKTsgKytwcm9w
SW5kZXgpCisgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkoaW5pdFByb3BlcnRpZXMucHJvcGVy
dGllcygpW3Byb3BJbmRleF0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFkZFByb3BlcnR5
KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdElu
aXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25z
dCBDU1NQcm9wZXJ0eUlEICpwcm9wZXJ0aWVzLCAgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgLyog
RnJvbSB0aGUgQ1NTIDIgc3BlY3MsIDguMworICAgICAqIElmIHRoZXJlIGlzIG9ubHkgb25lIHZh
bHVlLCBpdCBhcHBsaWVzIHRvIGFsbCBzaWRlcy4gSWYgdGhlcmUgYXJlIHR3byB2YWx1ZXMsIHRo
ZSB0b3AgYW5kCisgICAgICogYm90dG9tIG1hcmdpbnMgYXJlIHNldCB0byB0aGUgZmlyc3QgdmFs
dWUgYW5kIHRoZSByaWdodCBhbmQgbGVmdCBtYXJnaW5zIGFyZSBzZXQgdG8gdGhlIHNlY29uZC4K
KyAgICAgKiBJZiB0aGVyZSBhcmUgdGhyZWUgdmFsdWVzLCB0aGUgdG9wIGlzIHNldCB0byB0aGUg
Zmlyc3QgdmFsdWUsIHRoZSBsZWZ0IGFuZCByaWdodCBhcmUgc2V0IHRvIHRoZQorICAgICAqIHNl
Y29uZCwgYW5kIHRoZSBib3R0b20gaXMgc2V0IHRvIHRoZSB0aGlyZC4gSWYgdGhlcmUgYXJlIGZv
dXIgdmFsdWVzLCB0aGV5IGFwcGx5IHRvIHRoZSB0b3AsCisgICAgICogcmlnaHQsIGJvdHRvbSwg
YW5kIGxlZnQsIHJlc3BlY3RpdmVseS4KKyAgICAgKi8KKworICAgIHVuc2lnbmVkIG51bSA9IGlu
U2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3QtPnNpemUoKTsKKworICAgIFNob3J0aGFuZFNj
b3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7CisKKyAgICAvLyB0aGUgb3JkZXIgaXMgdG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0CisgICAgc3dpdGNoIChudW0pIHsKKyAgICAgICAgY2FzZSAxOiB7Cisg
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUg
PSBtX3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAgICAgICAgICBJbXBsaWNp
dFNjb3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOworICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcGVydGllc1sxXSwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbM10sIHZhbHVlLCBpbXBvcnRhbnQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAg
ICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1
ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3Bh
cnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAgICAgICAgIEltcGxpY2l0
U2NvcGUgaW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7CisgICAgICAgICAg
ICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICAgICAg
ICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5zaXplKCkg
LSAyXS52YWx1ZSgpOworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1szXSwgdmFs
dWUsIGltcG9ydGFudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIDM6IHsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBv
cnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMV0sIGltcG9ydGFudCkgfHwgIXBhcnNl
VmFsdWUocHJvcGVydGllc1syXSwgaW1wb3J0YW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXNb
bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDJdLnZhbHVlKCk7CisgICAgICAgICAgICBJbXBs
aWNpdFNjb3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOworICAgICAg
ICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDQ6IHsKKyAgICAgICAgICAg
IGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVl
KHByb3BlcnRpZXNbMV0sIGltcG9ydGFudCkgfHwKKyAgICAgICAgICAgICAgICAhcGFyc2VWYWx1
ZShwcm9wZXJ0aWVzWzJdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNbM10s
IGltcG9ydGFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIGF1
dG8gfCA8aWRlbnRpZmllcj4KK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVBhZ2UoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQoreworICAgIEFTU0VSVChwcm9wSWQgPT0gQ1NTUHJv
cGVydHlQYWdlKTsKKworICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pIHsKKyAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2Ug
aWYgKHZhbHVlLT5pZCA9PSAwICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQpIHsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVT
dHJpbmdWYWx1ZSgqdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyA8bGVuZ3RoPnsxLDJ9IHwgYXV0byB8IFsg
PHBhZ2Utc2l6ZT4gfHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0gXQorYm9vbCBDU1NQYXJzZXI6
OnBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAg
QVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVNpemUpOworCisgICAgaWYgKG1fdmFsdWVMaXN0
LT5zaXplKCkgPiAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcGFyc2VkVmFsdWVzID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworCisgICAgLy8gRmlyc3QgcGFyYW1ldGVyLgorICAg
IFNpemVQYXJhbWV0ZXJUeXBlIHBhcmFtVHlwZSA9IHBhcnNlU2l6ZVBhcmFtZXRlcihwYXJzZWRW
YWx1ZXMsICp2YWx1ZSwgTm9uZSk7CisgICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnkuCisgICAg
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIGlmICh2YWx1ZSkgeworICAgICAgICBw
YXJhbVR5cGUgPSBwYXJzZVNpemVQYXJhbWV0ZXIocGFyc2VkVmFsdWVzLCAqdmFsdWUsIHBhcmFt
VHlwZSk7CisgICAgICAgIGlmIChwYXJhbVR5cGUgPT0gTm9uZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocGFyc2Vk
VmFsdWVzKSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ1NTUGFyc2VyOjpT
aXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxp
c3QmIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBTaXplUGFyYW1ldGVyVHlw
ZSBwcmV2UGFyYW1UeXBlKQoreworICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKKyAgICBjYXNlIENT
U1ZhbHVlQXV0bzoKKyAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSkgeworICAgICAg
ICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCkpOworICAgICAgICAgICAgcmV0dXJuIEF1dG87Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2Fw
ZToKKyAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6CisgICAgICAgIGlmIChwcmV2UGFyYW1UeXBl
ID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBQYWdlU2l6ZSkgeworICAgICAgICAgICAgcGFy
c2VkVmFsdWVzLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS5pZCkpOworICAgICAgICAgICAgcmV0dXJuIE9yaWVudGF0aW9uOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBOb25lOworICAgIGNhc2UgQ1NTVmFsdWVBMzoKKyAgICBj
YXNlIENTU1ZhbHVlQTQ6CisgICAgY2FzZSBDU1NWYWx1ZUE1OgorICAgIGNhc2UgQ1NTVmFsdWVC
NDoKKyAgICBjYXNlIENTU1ZhbHVlQjU6CisgICAgY2FzZSBDU1NWYWx1ZUxlZGdlcjoKKyAgICBj
YXNlIENTU1ZhbHVlTGVnYWw6CisgICAgY2FzZSBDU1NWYWx1ZUxldHRlcjoKKyAgICAgICAgaWYg
KHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IE9yaWVudGF0aW9uKSB7
CisgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gUGFnZSBTaXplIHRoZW4gT3JpZW50YXRpb24g
b3JkZXIgYnkgcHJlcGVuZGluZy4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHNwZWNpZmll
ZCBieSB0aGUgQ1NTMyBQYWdlZCBNZWRpYSBzcGVjaWZpY2F0aW9uLCBidXQgZm9yIHNpbXBsZXIg
cHJvY2Vzc2luZyBsYXRlciAoU3R5bGVSZXNvbHZlcjo6YXBwbHlQYWdlU2l6ZVByb3BlcnR5KS4K
KyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5wcmVwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7CisgICAgICAgICAgICByZXR1cm4g
UGFnZVNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAgY2FzZSBDU1NW
YWx1ZUludmFsaWQ6IHsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24odmFsdWUpOworICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZykgJiYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBw
cmV2UGFyYW1UeXBlID09IExlbmd0aCkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5hcHBl
bmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Cisg
ICAgICAgICAgICByZXR1cm4gTGVuZ3RoOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb25l
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTm9uZTsKKyAgICB9Cit9CisK
Ky8vIFsgPHN0cmluZz4gPHN0cmluZz4gXSsgfCBpbmhlcml0IHwgbm9uZQorLy8gaW5oZXJpdCBh
bmQgbm9uZSBhcmUgaGFuZGxlZCBpbiBwYXJzZVZhbHVlLgorYm9vbCBDU1NQYXJzZXI6OnBhcnNl
UXVvdGVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBhdXRv
IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICB3aGls
ZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAg
ICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykp
OworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKyAgICBpZiAodmFsdWVzLT5s
ZW5ndGgoKSkgeworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWVzKSwg
aW1wb3J0YW50KTsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQWx0KENTU1Byb3BlcnR5SUQgcHJvcElELCBib29sIGltcG9ydGFudCkKK3sKKyAgICBDU1NQ
YXJzZXJWYWx1ZSYgY3VycmVudFZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKworICAgIGlmIChjdXJyZW50VmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgcGFyc2VkVmFsdWUg
PSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShjdXJyZW50VmFsdWUpOworICAgIGVsc2UgaWYg
KGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgeworICAgICAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBjdXJyZW50VmFsdWUuZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7CisgICAgICAgIGlmICghYXJncykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGN1cnJlbnRWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgImF0dHIoIikpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlQXR0
cigqYXJncyk7CisgICAgfQorICAgIAorICAgIGlmIChwYXJzZWRWYWx1ZSkgeworICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSUQsIHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFu
dCk7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3Vz
dG9tUHJvcGVydHlEZWNsYXJhdGlvbihib29sIGltcG9ydGFudCwgQ1NTVmFsdWVJRCBpZCkKK3sK
KyAgICBpZiAobV9jdXN0b21Qcm9wZXJ0eU5hbWUuaXNFbXB0eSgpIHx8ICFtX3ZhbHVlTGlzdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KQorICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9v
bC5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOworICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlSW5p
dGlhbCkKKyAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlRXhwbGljaXRJbml0aWFs
VmFsdWUoKTsKKyAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVVuc2V0KQorICAgICAgICB2YWx1
ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVVbnNldFZhbHVlKCk7CisgICAgZWxzZSBpZiAoaWQgPT0g
Q1NTVmFsdWVSZXZlcnQpCisgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVJldmVy
dFZhbHVlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KCptX3ZhbHVlTGlzdCk7CisgICAgICAgIGlm
IChtX3ZhbHVlTGlzdC0+Y29udGFpbnNWYXJpYWJsZXMoKSkKKyAgICAgICAgICAgIHZhbHVlID0g
Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodmFsdWVMaXN0KSwgQ1NT
UHJvcGVydHlDdXN0b20pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IFdURk1v
dmUodmFsdWVMaXN0KTsKKyAgICB9CisKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3Rv
bSwgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKG1fY3VzdG9tUHJvcGVydHlOYW1lLCB2
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50LCBmYWxzZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIFsgPHN0cmluZz4gfCA8dXJpPiB8IDxjb3VudGVyPiB8IGF0dHIoWCkgfCBv
cGVuLXF1b3RlIHwgY2xvc2UtcXVvdGUgfCBuby1vcGVuLXF1b3RlIHwgbm8tY2xvc2UtcXVvdGUg
XSsgfCBpbmhlcml0CisvLyBpbiBDU1MgMi4xIHRoaXMgZ290IHNvbWV3aGF0IHJlZHVjZWQ6Cisv
LyBbIDxzdHJpbmc+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUgfCBjbG9zZS1xdW90ZSB8IG5vLW9w
ZW4tcXVvdGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbnRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQoreworICAg
IGF1dG8gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworCisg
ICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
IHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKyAgICAgICAgaWYgKHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CisgICAgICAgICAgICAv
LyB1cmwKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKHZhbHVlLT5zdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIC8vIGF0dHIoWCkg
fCBjb3VudGVyKFggWyxZXSkgfCBjb3VudGVycyhYLCBZLCBbLFpdKSB8IC13ZWJraXQtZ3JhZGll
bnQoLi4uKQorICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOworICAgICAgICAgICAgaWYgKCFhcmdzKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJhdHRyKCIpKSB7CisgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBwYXJzZUF0dHIoKmFyZ3MpOworICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAiY291bnRlcigiKSkgeworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
cGFyc2VDb3VudGVyQ29udGVudCgqYXJncywgZmFsc2UpOworICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAiY291bnRlcnMoIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlQ291bnRlckNvbnRlbnQoKmFyZ3MsIHRydWUpOworICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNldEZ1bmN0aW9uVmFsdWUoKnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VJbWFnZVNldCgpOworICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXBhcnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0LCBwYXJz
ZWRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAg
ICAgICAvLyBvcGVuLXF1b3RlCisgICAgICAgICAgICAvLyBjbG9zZS1xdW90ZQorICAgICAgICAg
ICAgLy8gbm8tb3Blbi1xdW90ZQorICAgICAgICAgICAgLy8gbm8tY2xvc2UtcXVvdGUKKyAgICAg
ICAgICAgIC8vIGluaGVyaXQKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgbm90IHll
dCBpbXBsZW1lbnRlZCAoaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUw
MykuCisgICAgICAgICAgICAvLyBub25lCisgICAgICAgICAgICAvLyBub3JtYWwKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1
b3RlOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6CisgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9DbG9z
ZVF1b3RlOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CisgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXBhcnNlZFZhbHVlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHZhbHVlcy0+
YXBwZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOworICAgIH0KKworICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7CisgICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQpOworICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNp
emUoKSAhPSAxKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENTU1BhcnNlclZhbHVl
JiBhcmd1bWVudCA9ICphcmdzLmN1cnJlbnQoKTsKKworICAgIGlmIChhcmd1bWVudC51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVNTRVJUKGFyZ3VtZW50LnN0cmluZy5sZW5ndGgoKSk7CisKKyAgICAvLyBDU1MgYWxs
b3dzIGlkZW50aWZpZXJzIHdpdGggIi0iIGF0IHRoZSBzdGFydCwgbGlrZSAiLXdlYmtpdC1tYXNr
LWltYWdlIi4KKyAgICAvLyBCdXQgSFRNTCBhdHRyaWJ1dGUgbmFtZXMgY2FuJ3QgaGF2ZSB0aG9z
ZSBjaGFyYWN0ZXJzLCBhbmQgd2Ugc2hvdWxkIG5vdAorICAgIC8vIGV2ZW4gcGFyc2UgdGhlbSBp
bnNpZGUgYXR0cigpLgorICAgIGlmIChhcmd1bWVudC5zdHJpbmdbMF0gPT0gJy0nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCisg
ICAgICAgIGFyZ3VtZW50LnN0cmluZy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsK
KworICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBzb21lIHNtYWxsIGJlbmVmaXQgdG8gY3JlYXRpbmcg
YW4gQXRvbWljU3RyaW5nIGhlcmUgaW5zdGVhZCBvZiBhIFN0cmluZz8KKyAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShTdHJpbmcoYXJndW1lbnQuc3RyaW5n
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKCkKK3sKKyAgICBDU1NWYWx1
ZUlEIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CisgICAgaWYgKGlkID09IENTU1Zh
bHVlV2Via2l0VGV4dCB8fCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NT
VmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yCisgICAgICAgIHx8IChpZCA+
PSBDU1NWYWx1ZUdyZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgaW5RdWlya3NNb2Rl
KCkpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoaWQpOworICAgIHJldHVybiBwYXJzZUNvbG9yKCk7Cit9CisKK2Jvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVm
UHRyPENTU1ZhbHVlPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlTGlzdC5jdXJyZW50KCktPmlk
ID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAodmFsdWVMaXN0LmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICB2YWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZUxpc3QuY3VycmVudCgpLT5zdHJpbmcpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSgq
dmFsdWVMaXN0LmN1cnJlbnQoKSkpCisgICAgICAgIHJldHVybiBwYXJzZUdlbmVyYXRlZEltYWdl
KHZhbHVlTGlzdCwgdmFsdWUpOworICAgIAorICAgIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1
ZSgqdmFsdWVMaXN0LmN1cnJlbnQoKSkpIHsKKyAgICAgICAgdmFsdWUgPSBwYXJzZUltYWdlU2V0
KCk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlUG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0KQorewor
ICAgIGludCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOworICAgIGlmIChpZCA9PSBDU1NW
YWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcikg
eworICAgICAgICBpbnQgcGVyY2VudCA9IDA7CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJp
Z2h0KQorICAgICAgICAgICAgcGVyY2VudCA9IDEwMDsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
Q1NTVmFsdWVDZW50ZXIpCisgICAgICAgICAgICBwZXJjZW50ID0gNTA7CisgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgfQorICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKKyAgICBpZiAo
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQor
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVM
aXN0KQoreworICAgIGludCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOworICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZVRvcCB8fCBpZCA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZCA9PSBDU1NWYWx1
ZUNlbnRlcikgeworICAgICAgICBpbnQgcGVyY2VudCA9IDA7CisgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUJvdHRvbSkKKyAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7CisgICAgICAgIGVsc2Ug
aWYgKGlkID09IENTU1ZhbHVlQ2VudGVyKQorICAgICAgICAgICAgcGVyY2VudCA9IDUwOworICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIH0KKyAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7
CisgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBG
TGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQ
YXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgdW5zaWduZWQmIGN1bXVsYXRpdmVGbGFncywgRmls
bFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlIHBh
cnNpbmdNb2RlKQoreworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5p
ZDsKKyAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlVG9wIHx8IGlk
ID09IENTU1ZhbHVlUmlnaHQgfHwgaWQgPT0gQ1NTVmFsdWVCb3R0b20gfHwgaWQgPT0gQ1NTVmFs
dWVDZW50ZXIpIHsKKyAgICAgICAgaW50IHBlcmNlbnQgPSAwOworICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVMZWZ0IHx8IGlkID09IENTU1ZhbHVlUmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChj
dW11bGF0aXZlRmxhZ3MgJiBYRmlsbFBvc2l0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFhGaWxsUG9zaXRpb247Cisg
ICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9zaXRpb247CisgICAgICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVSaWdodCkKKyAgICAgICAgICAgICAgICBwZXJjZW50ID0gMTAwOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlVG9wIHx8IGlkID09IENT
U1ZhbHVlQm90dG9tKSB7CisgICAgICAgICAgICBpZiAoY3VtdWxhdGl2ZUZsYWdzICYgWUZpbGxQ
b3NpdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGN1
bXVsYXRpdmVGbGFncyB8PSBZRmlsbFBvc2l0aW9uOworICAgICAgICAgICAgaW5kaXZpZHVhbEZs
YWcgPSBZRmlsbFBvc2l0aW9uOworICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQm90dG9t
KQorICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7CisgICAgICAgIH0gZWxzZSBpZiAoaWQg
PT0gQ1NTVmFsdWVDZW50ZXIpIHsKKyAgICAgICAgICAgIC8vIENlbnRlciBpcyBhbWJpZ3VvdXMs
IHNvIHdlJ3JlIG5vdCBzdXJlIHdoaWNoIHBvc2l0aW9uIHdlJ3ZlIGZvdW5kIHlldCwgYW4geCBv
ciBhIHkuCisgICAgICAgICAgICBwZXJjZW50ID0gNTA7CisgICAgICAgICAgICBjdW11bGF0aXZl
RmxhZ3MgfD0gQW1iaWd1b3VzRmlsbFBvc2l0aW9uOworICAgICAgICAgICAgaW5kaXZpZHVhbEZs
YWcgPSBBbWJpZ3VvdXNGaWxsUG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFy
c2luZ01vZGUgPT0gUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCkKKyAgICAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisKKyAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2Vu
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICB9CisgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkp
OworICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8
IEZMZW5ndGgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghY3VtdWxhdGl2
ZUZsYWdzKSB7CisgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBYRmlsbFBvc2l0aW9uOworICAg
ICAgICBpbmRpdmlkdWFsRmxhZyA9IFhGaWxsUG9zaXRpb247CisgICAgfSBlbHNlIGlmIChjdW11
bGF0aXZlRmxhZ3MgJiAoWEZpbGxQb3NpdGlvbiB8IEFtYmlndW91c0ZpbGxQb3NpdGlvbikpIHsK
KyAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFlGaWxsUG9zaXRpb247CisgICAgICAgIGluZGl2
aWR1YWxGbGFnID0gWUZpbGxQb3NpdGlvbjsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbik7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsdWVDb25mbGljdGluZ1dpdGhDdXJy
ZW50RWRnZShpbnQgdmFsdWUxLCBpbnQgdmFsdWUyKQoreworICAgIGlmICgodmFsdWUxID09IENT
U1ZhbHVlTGVmdCB8fCB2YWx1ZTEgPT0gQ1NTVmFsdWVSaWdodCkgJiYgKHZhbHVlMiA9PSBDU1NW
YWx1ZUxlZnQgfHwgdmFsdWUyID09IENTU1ZhbHVlUmlnaHQpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICgodmFsdWUxID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlMSA9PSBDU1NWYWx1
ZUJvdHRvbSkgJiYgKHZhbHVlMiA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZTIgPT0gQ1NTVmFsdWVC
b3R0b20pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgaXNGaWxsUG9zaXRpb25LZXl3b3JkKENTU1ZhbHVlSUQgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHZhbHVlID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVRvcCB8
fCB2YWx1ZSA9PSBDU1NWYWx1ZUJvdHRvbSB8fCB2YWx1ZSA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZh
bHVlID09IENTU1ZhbHVlQ2VudGVyOworfQorCit2b2lkIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVz
RmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMiwg
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiYmIHBhcnNlZFZhbHVlMikKK3sKKyAgICAvLyBbIGxlZnQgfCByaWdodCBdIFsgPHBlcmNl
bnRhZ2VdIHwgPGxlbmd0aD4gXSAmJiBbIHRvcCB8IGJvdHRvbSBdIFsgPHBlcmNlbnRhZ2U+IHwg
PGxlbmd0aD4gXQorICAgIC8vIEluIHRoZSBjYXNlIG9mIDQgdmFsdWVzIDxwb3NpdGlvbj4gcmVx
dWlyZXMgdGhlIHNlY29uZCB2YWx1ZSB0byBiZSBhIGxlbmd0aCBvciBhIHBlcmNlbnRhZ2UuCisg
ICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZChwYXJzZWRWYWx1ZTItPmdldFZhbHVlSUQoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Cisg
ICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTNGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKKyAg
ICBhdXRvIHZhbHVlMyA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3Vt
dWxhdGl2ZUZsYWdzLCB2YWx1ZTNGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKTsKKyAgICBp
ZiAoIXZhbHVlMykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVJRCBpZGVudDEgPSBw
YXJzZWRWYWx1ZTEtPmdldFZhbHVlSUQoKTsKKyAgICBDU1NWYWx1ZUlEIGlkZW50MyA9IHZhbHVl
My0+Z2V0VmFsdWVJRCgpOworCisgICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNlbnRlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSB8
fCBpZGVudDMgPT0gQ1NTVmFsdWVDZW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIHZhbHVlcyBhcmUgbm90IGNvbmZsaWN0aW5nLCBlLmcuIHRo
ZXkgYXJlIG5vdCBvbiB0aGUgc2FtZSBlZGdlLiBJdCBpcworICAgIC8vIG5lZWRlZCBhcyB0aGUg
c2Vjb25kIGNhbGwgdG8gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQgd2FzIG9uIHB1cnBvc2Ug
bm90IGNoZWNraW5nIGl0LiBJbiB0aGUKKyAgICAvLyBjYXNlIG9mIHR3byB2YWx1ZXMgdG9wIDIw
cHggaXMgaW52YWxpZCBidXQgaW4gdGhlIGNhc2Ugb2YgNCB2YWx1ZXMgaXQgYmVjb21lcyB2YWxp
ZC4KKyAgICBpZiAoaXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlkZW50MSwgaWRl
bnQzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFsdWVMaXN0Lm5leHQoKTsKKworICAgIGN1
bXVsYXRpdmVGbGFncyA9IDA7CisgICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTRGbGFnID0gSW52
YWxpZEZpbGxQb3NpdGlvbjsKKyAgICBhdXRvIHZhbHVlNCA9IHBhcnNlRmlsbFBvc2l0aW9uQ29t
cG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTRGbGFnLCBSZXNvbHZlVmFs
dWVzQXNLZXl3b3JkKTsKKyAgICBpZiAoIXZhbHVlNCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gNHRoIHZhbHVlIG11c3QgYmUgYSBsZW5ndGggb3IgYSBwZXJjZW50YWdlLgorICAgIGlmIChp
c0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWU0LT5nZXRWYWx1ZUlEKCkpKQorICAgICAgICByZXR1
cm47CisKKyAgICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJz
ZWRWYWx1ZTEpLCBXVEZNb3ZlKHBhcnNlZFZhbHVlMikpOworICAgIHZhbHVlMiA9IGNyZWF0ZVBy
aW1pdGl2ZVZhbHVlUGFpcih2YWx1ZTMucmVsZWFzZU5vbk51bGwoKSwgdmFsdWU0LnJlbGVhc2VO
b25OdWxsKCkpOworCisgICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0g
Q1NTVmFsdWVCb3R0b20pCisgICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7CisKKyAgICB2YWx1
ZUxpc3QubmV4dCgpOworfQorCit2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0
aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMiwgUmVmPENTU1By
aW1pdGl2ZVZhbHVlPiYmIHBhcnNlZFZhbHVlMSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHBh
cnNlZFZhbHVlMikKK3sKKyAgICB1bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOworICAgIEZp
bGxQb3NpdGlvbkZsYWcgdmFsdWUzRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247CisgICAgYXV0
byB2YWx1ZTMgPSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRp
dmVGbGFncywgdmFsdWUzRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7CisKKyAgICAvLyB2
YWx1ZTMgaXMgbm90IGFuIGV4cGVjdGVkIHZhbHVlLCB3ZSByZXR1cm4uCisgICAgaWYgKCF2YWx1
ZTMpCisgICAgICAgIHJldHVybjsKKworICAgIHZhbHVlTGlzdC5uZXh0KCk7CisKKyAgICBib29s
IHN3YXBOZWVkZWQgPSBmYWxzZTsKKyAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNlZFZhbHVl
MS0+Z2V0VmFsdWVJRCgpOworICAgIENTU1ZhbHVlSUQgaWRlbnQyID0gcGFyc2VkVmFsdWUyLT5n
ZXRWYWx1ZUlEKCk7CisgICAgQ1NTVmFsdWVJRCBpZGVudDMgPSB2YWx1ZTMtPmdldFZhbHVlSUQo
KTsKKworICAgIENTU1ZhbHVlSUQgZmlyc3RQb3NpdGlvbktleXdvcmQ7CisgICAgQ1NTVmFsdWVJ
RCBzZWNvbmRQb3NpdGlvbktleXdvcmQ7CisKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpOworICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVDZW50ZXIp
IHsKKyAgICAgICAgLy8gPHBvc2l0aW9uPiByZXF1aXJlcyB0aGUgZmlyc3QgJ2NlbnRlcicgdG8g
YmUgZm9sbG93ZWQgYnkgYSBrZXl3b3JkLgorICAgICAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5
d29yZChpZGVudDIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmICdjZW50
ZXInIGlzIHRoZSBmaXJzdCBrZXl3b3JkIHRoZW4gdGhlIGxhc3Qgb25lIG5lZWRzIHRvIGJlIGEg
bGVuZ3RoLgorICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MykpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmlyc3RQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1
ZUxlZnQ7CisgICAgICAgIGlmIChpZGVudDIgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MiA9PSBD
U1NWYWx1ZVJpZ2h0KSB7CisgICAgICAgICAgICBmaXJzdFBvc2l0aW9uS2V5d29yZCA9IENTU1Zh
bHVlVG9wOworICAgICAgICAgICAgc3dhcE5lZWRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgdmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoZmlyc3RQb3NpdGlvbktleXdvcmQpLCBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOworICAgICAgICB2
YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTIpLCB2
YWx1ZTMuY29weVJlZigpKTsKKyAgICB9IGVsc2UgaWYgKGlkZW50MyA9PSBDU1NWYWx1ZUNlbnRl
cikgeworICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MikpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gQ1NTVmFsdWVU
b3A7CisgICAgICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09IENTU1Zh
bHVlQm90dG9tKSB7CisgICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1
ZUxlZnQ7CisgICAgICAgICAgICBzd2FwTmVlZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEp
LCBwYXJzZWRWYWx1ZTIuY29weVJlZigpKTsKKyAgICAgICAgdmFsdWUyID0gY3JlYXRlUHJpbWl0
aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc2Vjb25kUG9z
aXRpb25LZXl3b3JkKSwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDUwLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGZpcnN0UG9zaXRpb25WYWx1ZTsKKyAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBzZWNvbmRQb3NpdGlvblZhbHVlOworCisgICAgICAgIGlmIChpc0ZpbGxQ
b3NpdGlvbktleXdvcmQoaWRlbnQyKSkgeworICAgICAgICAgICAgLy8gVG8gbWF0Y2ggQ1NTIGdy
YW1tYXIsIHdlIHNob3VsZCBvbmx5IGFjY2VwdDogWyBjZW50ZXIgfCBsZWZ0IHwgcmlnaHQgfCBi
b3R0b20gfCB0b3AgXSBbIGxlZnQgfCByaWdodCB8IHRvcCB8IGJvdHRvbSBdIFsgPHBlcmNlbnRh
Z2U+IHwgPGxlbmd0aD4gXS4KKyAgICAgICAgICAgIEFTU0VSVChpZGVudDIgIT0gQ1NTVmFsdWVD
ZW50ZXIpOworCisgICAgICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50Mykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBzZWNvbmRQb3NpdGlvblZh
bHVlID0gdmFsdWUzOworICAgICAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gaWRlbnQy
OworICAgICAgICAgICAgZmlyc3RQb3NpdGlvblZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZh
bHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBQZXIgQ1NTLCB3ZSBzaG91bGQgb25seSBhY2NlcHQ6IFsgcmln
aHQgfCBsZWZ0IHwgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdIFsg
Y2VudGVyIHwgbGVmdCB8IHJpZ2h0IHwgYm90dG9tIHwgdG9wIF0uCisgICAgICAgICAgICBpZiAo
IWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDMpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgZmlyc3RQb3NpdGlvblZhbHVlID0gcGFyc2VkVmFsdWUyLnB0cigpOwor
ICAgICAgICAgICAgc2Vjb25kUG9zaXRpb25LZXl3b3JkID0gaWRlbnQzOworICAgICAgICAgICAg
c2Vjb25kUG9zaXRpb25WYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
VmFsdWVDb25mbGljdGluZ1dpdGhDdXJyZW50RWRnZShpZGVudDEsIHNlY29uZFBvc2l0aW9uS2V5
d29yZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFsdWUxID0gY3JlYXRlUHJp
bWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocGFyc2VkVmFsdWUxKSwgZmlyc3RQb3NpdGlvblZhbHVl
LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1
ZVBhaXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktl
eXdvcmQpLCBzZWNvbmRQb3NpdGlvblZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKwor
ICAgIGlmIChpZGVudDEgPT0gQ1NTVmFsdWVUb3AgfHwgaWRlbnQxID09IENTU1ZhbHVlQm90dG9t
IHx8IHN3YXBOZWVkZWQpCisgICAgICAgIHZhbHVlMS5zd2FwKHZhbHVlMik7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gKnZhbHVlMTsKKyAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgc2Vjb25kID0gKnZhbHVlMjsKKyAgICBpZGVudDEgPSBmaXJzdC5nZXRQ
YWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOworICAgIGlkZW50MiA9IHNlY29uZC5n
ZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOworICAgIEFTU0VSVChpZGVudDEg
PT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MSA9PSBDU1NWYWx1ZVJpZ2h0KTsKKyAgICBBU1NFUlQo
aWRlbnQyID09IENTU1ZhbHVlQm90dG9tIHx8IGlkZW50MiA9PSBDU1NWYWx1ZVRvcCk7CisjZW5k
aWYKK30KKworaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjppc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUo
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQo
dmFsdWUuaWQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTGVuZ3RoKTsKK30KKwordm9pZCBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlMikKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gdmFsdWVMaXN0LmN1cnJlbnRJbmRleCgpOyBpIDwgdmFsdWVMaXN0LnNp
emUoKTsgKytpLCArK251bWJlck9mVmFsdWVzKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBj
dXJyZW50ID0gdmFsdWVMaXN0LnZhbHVlQXQoaSk7CisgICAgICAgIGlmICghY3VycmVudCB8fCBp
c0NvbW1hKGN1cnJlbnQpIHx8IGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKmN1cnJlbnQpIHx8ICFp
c1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoKmN1cnJlbnQpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKG51bWJlck9mVmFsdWVzID4gNCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgd2UgYXJlIHBhcnNpbmcgdHdvIHZhbHVlcywgd2UgY2FuIHNhZmVseSBjYWxsIHRo
ZSBDU1MgMi4xIHBhcnNpbmcgZnVuY3Rpb24gYW5kIHJldHVybi4KKyAgICBpZiAobnVtYmVyT2ZW
YWx1ZXMgPD0gMikgeworICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24odmFsdWVMaXN0
LCB2YWx1ZTEsIHZhbHVlMik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQo
bnVtYmVyT2ZWYWx1ZXMgPiAyICYmIG51bWJlck9mVmFsdWVzIDw9IDQpOworCisgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsKKworICAgIC8vIDxwb3NpdGlv
bj4gcmVxdWlyZXMgdGhlIGZpcnN0IHZhbHVlIHRvIGJlIGEgYmFja2dyb3VuZCBrZXl3b3JkLgor
ICAgIGlmICghaXNGaWxsUG9zaXRpb25LZXl3b3JkKHZhbHVlLT5pZCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gV2UncmUganVzdCBtYWtpbmcgc3Vy
ZSB0aGF0IGl0IGlzIG9uZSBvZiB0aGUgdmFsaWQga2V5d29yZHMgb3IgYSBwZXJjZW50YWdlL2xl
bmd0aC4KKyAgICB1bnNpZ25lZCBjdW11bGF0aXZlRmxhZ3MgPSAwOworICAgIEZpbGxQb3NpdGlv
bkZsYWcgdmFsdWUxRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247CisgICAgRmlsbFBvc2l0aW9u
RmxhZyB2YWx1ZTJGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKKyAgICB2YWx1ZTEgPSBwYXJz
ZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxpc3QsIGN1bXVsYXRpdmVGbGFncywgdmFsdWUx
RmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7CisgICAgaWYgKCF2YWx1ZTEpCisgICAgICAg
IHJldHVybjsKKworICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKworICAgIC8vIEluIGNh
c2Ugd2UgYXJlIHBhcnNpbmcgbW9yZSB0aGFuIHR3byB2YWx1ZXMsIHJlbGF4IHRoZSBjaGVjayBp
bnNpZGUgb2YgcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQuIHRvcCAyMHB4IGlzCisgICAgLy8g
YSB2YWxpZCBzdGFydCBmb3IgPHBvc2l0aW9uPi4KKyAgICBjdW11bGF0aXZlRmxhZ3MgPSBBbWJp
Z3VvdXNGaWxsUG9zaXRpb247CisgICAgdmFsdWUyID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25l
bnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlMkZsYWcsIFJlc29sdmVWYWx1ZXNB
c0tleXdvcmQpOworICAgIGlmICh2YWx1ZTIpCisgICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIHZhbHVlMSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvIHBhcnNlZFZhbHVlMSA9IHZhbHVlMS5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgIGF1dG8gcGFyc2VkVmFsdWUyID0gdmFsdWUyLnJlbGVhc2VOb25OdWxsKCk7CisKKyAgICAv
LyBQZXIgQ1NTMyBzeW50YXgsIDxwb3NpdGlvbj4gY2FuJ3QgaGF2ZSAnY2VudGVyJyBhcyBpdHMg
c2Vjb25kIGtleXdvcmQgYXMgd2UgaGF2ZSBtb3JlIGFyZ3VtZW50cyB0byBmb2xsb3cuCisgICAg
aWYgKHBhcnNlZFZhbHVlMi0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ2VudGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobnVtYmVyT2ZWYWx1ZXMgPT0gMykKKyAgICAgICAgcGFyc2Uz
VmFsdWVzRmlsbFBvc2l0aW9uKHZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIsIFdURk1vdmUocGFy
c2VkVmFsdWUxKSwgV1RGTW92ZShwYXJzZWRWYWx1ZTIpKTsKKyAgICBlbHNlCisgICAgICAgIHBh
cnNlNFZhbHVlc0ZpbGxQb3NpdGlvbih2YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyLCBXVEZNb3Zl
KHBhcnNlZFZhbHVlMSksIFdURk1vdmUocGFyc2VkVmFsdWUyKSk7Cit9CisKK3ZvaWQgQ1NTUGFy
c2VyOjpwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYgdmFsdWUyKQoreworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlz
dC5jdXJyZW50KCk7CisKKyAgICAvLyBQYXJzZSB0aGUgZmlyc3QgdmFsdWUuICBXZSdyZSBqdXN0
IG1ha2luZyBzdXJlIHRoYXQgaXQgaXMgb25lIG9mIHRoZSB2YWxpZCBrZXl3b3JkcyBvciBhIHBl
cmNlbnRhZ2UvbGVuZ3RoLgorICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7CisgICAg
RmlsbFBvc2l0aW9uRmxhZyB2YWx1ZTFGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKKyAgICBG
aWxsUG9zaXRpb25GbGFnIHZhbHVlMkZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOworICAgIHZh
bHVlMSA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZs
YWdzLCB2YWx1ZTFGbGFnKTsKKyAgICBpZiAoIXZhbHVlMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSXQgb25seSB0YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRpb24gdG8g
YmUgY29ycmVjdGx5IHBhcnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRoYW5kIChz
aW5jZSB3ZQorICAgIC8vIGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJlbG9uZyB0
byB0aGUgcmVzdCBvZiB0aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hv
cnRoYW5kLCB0aG91Z2gsIHRoZQorICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNwZWNpZmll
ZCBmb3Igb3VyIHByb3BlcnR5LgorICAgIHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKworICAg
IC8vIEZpcnN0IGNoZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJlIGZpbmlzaGVkIHBh
cnNpbmcgdGhpcyB2YWx1ZSBvciB2YWx1ZSBwYWlyLgorICAgIGlmIChpc0NvbW1hKHZhbHVlKSkK
KyAgICAgICAgdmFsdWUgPSBudWxscHRyOworCisgICAgaWYgKHZhbHVlKSB7CisgICAgICAgIHZh
bHVlMiA9IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZs
YWdzLCB2YWx1ZTJGbGFnKTsKKyAgICAgICAgaWYgKHZhbHVlMikKKyAgICAgICAgICAgIHZhbHVl
TGlzdC5uZXh0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFpblNob3J0aGFu
ZCgpKSB7CisgICAgICAgICAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXZh
bHVlMikKKyAgICAgICAgLy8gT25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZC4gSWYgdGhhdCB2
YWx1ZSB3YXMgbm90IGEga2V5d29yZCwgdGhlbiBpdCBzZXRzIHRoZSB4IHBvc2l0aW9uLCBhbmQg
dGhlIHkgcG9zaXRpb24KKyAgICAgICAgLy8gaXMgc2ltcGx5IDUwJS4gVGhpcyBpcyBvdXIgZGVm
YXVsdC4KKyAgICAgICAgLy8gRm9yIGtleXdvcmRzLCB0aGUga2V5d29yZCB3YXMgZWl0aGVyIGFu
IHgta2V5d29yZCAobGVmdC9yaWdodCksIGEgeS1rZXl3b3JkICh0b3AvYm90dG9tKSwgb3IgYW4g
YW1iaWd1b3VzIGtleXdvcmQgKGNlbnRlcikuCisgICAgICAgIC8vIEZvciBsZWZ0L3JpZ2h0L2Nl
bnRlciwgdGhlIGRlZmF1bHQgb2YgNTAlIGluIHRoZSB5IGlzIHN0aWxsIGNvcnJlY3QuCisgICAg
ICAgIHZhbHVlMiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisKKyAgICBpZiAodmFsdWUxRmxhZyA9
PSBZRmlsbFBvc2l0aW9uIHx8IHZhbHVlMkZsYWcgPT0gWEZpbGxQb3NpdGlvbikKKyAgICAgICAg
dmFsdWUxLnN3YXAodmFsdWUyKTsKK30KKwordm9pZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFJlcGVh
dChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKK3sK
KyAgICBDU1NWYWx1ZUlEIGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CisgICAgaWYg
KGlkID09IENTU1ZhbHVlUmVwZWF0WCkgeworICAgICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0g
dHJ1ZTsKKyAgICAgICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXQpOworICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0
KTsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRZKSB7CisgICAgICAgIG1faW1wbGljaXRTaG9y
dGhhbmQgPSB0cnVlOworICAgICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0KTsKKyAgICAgICAgdmFsdWUy
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVSZXBlYXQpOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5v
UmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFjZSkKKyAg
ICAgICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWQpOworICAgIGVsc2UgeworICAgICAgICB2YWx1ZTEgPSBudWxscHRyOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKTsKKworICAgIC8vIFBhcnNlIHRoZSBzZWNvbmQgdmFsdWUgaWYgb25lIGlzIGF2
YWlsYWJsZQorICAgIGlmICh2YWx1ZSAmJiAhaXNDb21tYSh2YWx1ZSkpIHsKKyAgICAgICAgaWQg
PSB2YWx1ZS0+aWQ7CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBD
U1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVT
cGFjZSkgeworICAgICAgICAgICAgdmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIG9u
bHkgb25lIHZhbHVlIHdhcyBzcGVjaWZpZWQsIHZhbHVlMiBpcyB0aGUgc2FtZSBhcyB2YWx1ZTEu
CisgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7CisgICAgdmFsdWUyID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZTEpLmdldFZhbHVlSUQoKSk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sJiBhbGxvd0NvbW1hKQoreworICAgIGFsbG93Q29tbWEgPSB0cnVlOworICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisKKyAgICBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlQ29udGFpbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3ZlcikKKyAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLT5pZCk7CisKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZh
bHVlMTsKKworICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBwYXJz
ZWRWYWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUF1dG8pOworICAgIGVsc2UgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgIH0KKworICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOworICAgIGlmICgodmFsdWUgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpKSkgeworICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQorICAgICAgICAgICAgYWxsb3dD
b21tYSA9IGZhbHNlOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVBdXRv
KSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bigqdmFsdWUpOworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWluU2hv
cnRoYW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4g
aXQgaXMgYWR2YW5jZWQgd2UnbGwgZW5kIHVwIGJhY2sgYXQgdGhpcyB2YWx1ZS4KKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwYXJzZWRW
YWx1ZTIgJiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUpIHsKKyAg
ICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHNldCB0aGUgc2Vjb25kIHZh
bHVlIHRvIHRoZSBmaXJzdCBpZiBpdCBpcyBvbWl0dGVkLgorICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdG8gZG8gdGhpcyBmb3IgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUuIEl0IHNob3VsZCBiZSBz
YWZlIHRvIGxldCBtYXNrcyBtYXRjaAorICAgICAgICAvLyB0aGUgcmVhbCBwcm9wZXJ0eS4KKyAg
ICAgICAgcGFyc2VkVmFsdWUyID0gcGFyc2VkVmFsdWUxOworICAgIH0KKworICAgIGlmICghcGFy
c2VkVmFsdWUyKQorICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWUxOworICAgIHJldHVybiBjcmVh
dGVQcmltaXRpdmVWYWx1ZVBhaXIocGFyc2VkVmFsdWUxLnJlbGVhc2VOb25OdWxsKCksIHBhcnNl
ZFZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpLCBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZSA/IFBhaXI6OklkZW50aWNhbFZhbHVlRW5jb2Rpbmc6OkNvYWxlc2NlIDogUGFp
cjo6SWRlbnRpY2FsVmFsdWVFbmNvZGluZzo6RG9Ob3RDb2FsZXNjZSk7Cit9CisKK2Jvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVy
dHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+JiByZXRWYWx1ZTEsIFJlZlB0cjxDU1NW
YWx1ZT4mIHJldFZhbHVlMikKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7Cisg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzMjsKKyAgICBDU1NQYXJzZXJWYWx1ZSogY3Vy
cmVudFZhbHVlOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZTI7CisKKyAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKKworICAgIHJldFZh
bHVlMSA9IHJldFZhbHVlMiA9IG51bGxwdHI7CisgICAgcHJvcElkMSA9IHByb3BJZDsKKyAgICBw
cm9wSWQyID0gcHJvcElkOworICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb24pIHsKKyAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWDsKKyAgICAgICAgcHJvcElkMiA9IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWTsK
KyAgICB9IGVsc2UgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikg
eworICAgICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOworICAg
ICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOworICAgIH0gZWxz
ZSBpZiAocHJvcElkID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCkgeworICAgICAgICBw
cm9wSWQxID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDsKKyAgICAgICAgcHJvcElkMiA9
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk7CisgICAgfSBlbHNlIGlmIChwcm9wSWQgPT0g
Q1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KSB7CisgICAgICAgIHByb3BJZDEgPSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOworICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUmVwZWF0WTsKKyAgICB9CisKKyAgICB3aGlsZSAoKGN1cnJlbnRWYWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVl
OworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTI7CisKKyAgICAgICAgaWYgKGFs
bG93Q29tbWEpIHsKKyAgICAgICAgICAgIGlmICghaXNDb21tYShjdXJyZW50VmFsdWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7CisgICAgICAgICAgICBhbGxvd0NvbW1hID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKKyAgICAgICAgICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAg
ICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VCYWNrZ3JvdW5kQ29sb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgY3Vy
cmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpeGVkIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5p
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cnNlRmlsbEltYWdlKCptX3ZhbHVlTGlzdCwgY3VyclZhbHVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbjoKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSBmaXJzdCB0aHJlZSB2YWx1ZXMgaGVyZSBhcmUgZGVwcmVjYXRlZCBhbmQgZG8g
bm90IGFwcGx5IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcworICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgLXdlYmtpdC0gcHJlZml4IHJlbW92ZWQuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQm9yZGVyIHx8IGN1cnJl
bnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50VmFsdWUtPmlk
ID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYWRk
aW5nQm94IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94CisgICAgICAg
ICAgICAgICAgICAgICAgICB8fCAoKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91
bmRDbGlwIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVUZXh0IHx8IGN1
cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENsaXA6CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKCpjdXJy
ZW50VmFsdWUsIGN1cnJWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNv
bnRlbnRCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZTE7CisgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUyOworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUZpbGxQb3NpdGlvbigqbV92YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyKTsKKyAgICAgICAgICAg
ICAgICAgICAgY3VyclZhbHVlID0gV1RGTW92ZSh2YWx1ZTEpOworICAgICAgICAgICAgICAgICAg
ICBjdXJyVmFsdWUyID0gV1RGTW92ZSh2YWx1ZTIpOworICAgICAgICAgICAgICAgICAgICAvLyBw
YXJzZUZpbGxQb3NpdGlvbiBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlci4KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgorICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOiB7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJWYWx1ZSA9IHBhcnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Cisg
ICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6IHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVMaXN0
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZENvbXBvc2l0ZToKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0NvbXBvc2l0ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+
aWQgPj0gQ1NTVmFsdWVDbGVhciAmJiBjdXJyZW50VmFsdWUtPmlkIDw9IENTU1ZhbHVlUGx1c0xp
Z2h0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEJsZW5kTW9kZToKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU11bHRpcGx5CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50
VmFsdWUtPmlkID09IENTU1ZhbHVlU2NyZWVuIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVPdmVybGF5IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVEYXJrZW4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaWdodGVuIHx8
ICBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29sb3JEb2RnZSB8fCBjdXJyZW50VmFsdWUt
PmlkID09IENTU1ZhbHVlQ29sb3JCdXJuCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJy
ZW50VmFsdWUtPmlkID09IENTU1ZhbHVlSGFyZExpZ2h0IHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0g
Q1NTVmFsdWVTb2Z0TGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURpZmZlcmVu
Y2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFeGNsdXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+
aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VGaWxsUmVwZWF0KGN1cnJWYWx1ZSwgY3VyclZhbHVlMik7CisgICAgICAgICAgICAgICAgICAg
IC8vIHBhcnNlRmlsbFJlcGVhdCBhZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlcgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZFNpemU6CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRTaXplOgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
U2l6ZTogeworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUZpbGxTaXplKHBy
b3BJZCwgYWxsb3dDb21tYSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tTb3VyY2VUeXBlOiB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byB8fCBjdXJyZW50VmFsdWUtPmlkID09
IENTU1ZhbHVlQWxwaGEgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUx1bWluYW5jZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAg
ICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZTIgJiYgIXZhbHVlczIpIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZXMyID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwor
ICAgICAgICAgICAgICAgIHZhbHVlczItPmFwcGVuZCh2YWx1ZTIucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICAg
ICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZShjdXJyVmFsdWUpOworICAg
ICAgICAgICAgaWYgKGN1cnJWYWx1ZTIpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVzMikK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKGN1cnJWYWx1ZTIucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZTIgPSBXVEZNb3ZlKGN1cnJWYWx1ZTIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2hlbiBwYXJzaW5nIGFueSBmaWxsIHNob3J0aGFuZCBwcm9wZXJ0eSwgd2UgbGV0
IGl0IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAorICAgICAgICAvLyBwcm9w
ZXJ0aWVzLgorICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgeworICAgICAgICBy
ZXRWYWx1ZTEgPSBXVEZNb3ZlKHZhbHVlcyk7CisgICAgICAgIGlmICh2YWx1ZXMyICYmIHZhbHVl
czItPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0VmFsdWUyID0gV1RGTW92ZSh2YWx1ZXMyKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh2YWx1ZSkgeworICAgICAgICBy
ZXRWYWx1ZTEgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgcmV0VmFsdWUyID0gV1RGTW92ZSh2
YWx1ZTIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25E
ZWxheSgpCit7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
Km1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZUaW1lKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVj
dGlvbigpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUFsdGVybmF0ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXZlcnNlIHx8IHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZVJldmVyc2UpCisgICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCit7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIGlm
ICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZUaW1lIHwgRk5vbk5lZykpCisg
ICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3Vs
YXRpb24pOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25GaWxsTW9kZSgpCit7CisgICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb3J3YXJkcyB8fCB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVCYWNrd2FyZHMgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQm90aCkK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLT5pZCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkK
K3sKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
KyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsK
KyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Cisg
ICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25O
ZWcpKQorICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCit7CisgICAgQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVl
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgIGlmICh2YWx1ZS5pZCA9PSBD
U1NWYWx1ZU5vbmUgfHwgKHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJub25lIikpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
UGxheVN0YXRlKCkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVl
LmlkID09IENTU1ZhbHVlUGF1c2VkKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCisjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCitSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25UcmlnZ2VyKCkKK3sKKyAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKworICAgIGlmICh2YWx1
ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5h
cmdzLmdldCgpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LT5mdW5jdGlvbi0+bmFtZSwgImNvbnRhaW5lci1zY3JvbGwoIikpIHsKKyAgICAgICAgaWYgKCFh
cmdzIHx8IChhcmdzLT5zaXplKCkgIT0gMSAmJiBhcmdzLT5zaXplKCkgIT0gMykpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQg
PSBhcmdzLT5jdXJyZW50KCk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIHN0YXJ0VmFsdWUgPSBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CisKKyAgICAgICAg
YXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAg
ICAgICAgIHJldHVybiBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmNyZWF0ZShXVEZN
b3ZlKHN0YXJ0VmFsdWUpKTsKKworICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHNlY29uZEFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHNlY29uZEFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIGF1dG8gZW5kVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
c2Vjb25kQXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOworCisgICAgICAgIHJldHVybiBDU1NBbmlt
YXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKHN0YXJ0VmFsdWUpLCBXVEZN
b3ZlKGVuZFZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYK
KworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJv
cGVydHkoQW5pbWF0aW9uUGFyc2VDb250ZXh0JiBjb250ZXh0KQoreworICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIENTU1Byb3BlcnR5SUQgcmVzdWx0ID0gY3NzUHJvcGVydHlJRCh2YWx1ZS5zdHJpbmcp
OworICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IENTU1Byb3BlcnR5QWxsKSAvLyAiYWxsIiB2
YWx1ZSBpbiBhbmltYXRpb24gaXMgbm90IGVxdWl2YWxlbnQgdG8gdGhlIGFsbCBwcm9wZXJ0eS4K
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHJlc3VsdCk7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLCAiYWxsIikpIHsKKyAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0eUtleXdv
cmQoKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKTsKKyAgICB9CisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm9uZSIpKSB7CisgICAgICAgIGNvbnRleHQuY29tbWl0
QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCk7CisgICAgICAgIGNvbnRleHQuc2F3QW5pbWF0aW9u
UHJvcGVydHlLZXl3b3JkKCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgIH0KKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworLyogc3RhdGljICovCitWZWN0b3I8ZG91YmxlPiBDU1NQYXJzZXI6
OnBhcnNlS2V5ZnJhbWVTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKSB7CisgICAgVmVj
dG9yPGRvdWJsZT4ga2V5czsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgIHNlbGVj
dG9yLnNwbGl0KCcsJywgc3RyaW5ncyk7CisKKyAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc3RyaW5ncy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5ncy5z
aXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUga2V5ID0gLTE7CisgICAgICAgIFN0cmluZyBj
dXIgPSBzdHJpbmdzW2ldLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgICAgIC8vIEZvciBub3cg
dGhlIHN5bnRheCBNVVNUIGJlICd4eHglJyBvciAnZnJvbScgb3IgJ3RvJywgd2hlcmUgeHh4IGlz
IGEgbGVnYWwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCisgICAgICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShjdXIsICJmcm9tIikpCisgICAgICAgICAgICBrZXkgPSAwOworICAg
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXIsICJ0byIpKQor
ICAgICAgICAgICAga2V5ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoY3VyLmVuZHNXaXRoKCclJykp
IHsKKyAgICAgICAgICAgIGRvdWJsZSBrID0gY3VyLnN1YnN0cmluZygwLCBjdXIubGVuZ3RoKCkg
LSAxKS50b0RvdWJsZSgpOworICAgICAgICAgICAgaWYgKGsgPj0gMCAmJiBrIDw9IDEwMCkKKyAg
ICAgICAgICAgICAgICBrZXkgPSBrIC8gMTAwOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkg
PCAwKSB7CisgICAgICAgICAgICBrZXlzLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChrZXkpOworICAgIH0KKworICAg
IHJldHVybiBrZXlzOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW5T
aG9ydGhhbmQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+JiB2YWx1ZTIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMykKK3sKKyAgICBw
YXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWx1ZTEsIHZhbHVlMik7CisK
KyAgICAvLyBub3cgZ2V0IHoKKyAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7CisgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGgpKSB7CisgICAgICAgICAgICB2YWx1ZTMgPSBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFsdWUzID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENTU1BhcnNlcjo6aXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbnRleHQuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkOworfQor
CitPcHRpb25hbDxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQoreworICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7CisgICAgaWYg
KCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpKQorICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICBPcHRpb25hbDxkb3VibGU+IHJlc3VsdCA9IHBhcnNlZERv
dWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CisgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRW
YWx1ZSA9IGFyZ3MubmV4dCgpOworICAgIGlmICghbmV4dFZhbHVlKSB7CisgICAgICAgIC8vIFRo
ZSBsYXN0IG51bWJlciBpbiB0aGUgZnVuY3Rpb24gaGFzIG5vIGNvbW1hIGFmdGVyIGl0LCBzbyB3
ZSdyZSBkb25lLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBpZiAoIWlzQ29t
bWEobmV4dFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgYXJncy5uZXh0KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8ZG91YmxlPiBDU1NQYXJzZXI6OnBh
cnNlU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCit7
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Mu
Y3VycmVudCgpKTsKKyAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlv
biwgRk51bWJlcikpCisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIE9wdGlvbmFsPGRvdWJs
ZT4gcmVzdWx0ID0gcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKKyAgICBh
cmdzLm5leHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCit7CisgICAgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLmlk
ID09IENTU1ZhbHVlRWFzZSB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS5p
ZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQKKyAgICAg
ICAgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFs
dWVTdGVwU3RhcnQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVTdGVwRW5kKQorICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUu
aWQpOworCisgICAgLy8gV2UgbXVzdCBiZSBhIGZ1bmN0aW9uLgorICAgIGlmICh2YWx1ZS51bml0
ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQo
KTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgInN0ZXBzKCIpKSB7CisgICAgICAgIC8vIEZvciBzdGVwcywgMSBvciAyIHBhcmFt
cyBtdXN0IGJlIHNwZWNpZmllZCAoY29tbWEtc2VwYXJhdGVkKQorICAgICAgICBpZiAoIWFyZ3Mg
fHwgKGFyZ3MtPnNpemUoKSAhPSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gdmFsdWVzLgorICAg
ICAgICBpbnQgbnVtU3RlcHM7CisgICAgICAgIGJvb2wgc3RlcEF0U3RhcnQgPSBmYWxzZTsKKwor
ICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisgICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
SW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgbnVtU3RlcHMg
PSBjbGFtcFRvSW50ZWdlcihwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsK
KyAgICAgICAgaWYgKG51bVN0ZXBzIDwgMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKworICAgICAgICBpZiAoYXJndW1lbnQp
IHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgY29tbWEgc28gd2UgbmVlZCB0byBwYXJzZSB0
aGUgc2Vjb25kIHZhbHVlCisgICAgICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdz
LT5uZXh0KCk7CisgICAgICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlU3RhcnQg
JiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlRW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgc3RlcEF0U3RhcnQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFs
dWVTdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1bmN0
aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOworICAgIH0KKworICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImN1
YmljLWJlemllcigiKSkgeworICAgICAgICAvLyBGb3IgY3ViaWMgYmV6aWVyLCA0IHZhbHVlcyBt
dXN0IGJlIHNwZWNpZmllZCAoY29tbWEtc2VwYXJhdGVkKS4KKyAgICAgICAgaWYgKCFhcmdzIHx8
IGFyZ3MtPnNpemUoKSAhPSA3KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgLy8gVGhlcmUgYXJlIHR3byBwb2ludHMgc3BlY2lmaWVkLiBUaGUgeCB2YWx1ZXMgbXVzdCBi
ZSBiZXR3ZWVuIDAgYW5kIDEgYnV0IHRoZSB5IHZhbHVlcyBjYW4gZXhjZWVkIHRoaXMgcmFuZ2Uu
CisKKyAgICAgICAgYXV0byB4MSA9IHBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVl
KCphcmdzKTsKKyAgICAgICAgaWYgKCF4MSB8fCB4MS52YWx1ZSgpIDwgMCB8fCB4MS52YWx1ZSgp
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8geTEgPSBw
YXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7CisgICAgICAgIGlmICgh
eTEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIHgyID0gcGFy
c2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOworICAgICAgICBpZiAoIXgy
IHx8IHgyLnZhbHVlKCkgPCAwIHx8IHgyLnZhbHVlKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgYXV0byB5MiA9IHBhcnNlQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvblZhbHVlKCphcmdzKTsKKyAgICAgICAgaWYgKCF5MikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHJldHVybiBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWU6OmNyZWF0ZSh4MS52YWx1ZSgpLCB5MS52YWx1ZSgpLCB4Mi52YWx1ZSgpLCB5Mi52YWx1ZSgp
KTsKKyAgICB9CisKKyAgICBpZiAoaXNTcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQoKSAmJiBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInNwcmlu
ZygiKSkgeworICAgICAgICAvLyBGb3IgYSBzcHJpbmcsIDQgdmFsdWVzIG11c3QgYmUgc3BlY2lm
aWVkIChzcGFjZS1zZXBhcmF0ZWQpLgorICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGUgYXJndW1l
bnRzIGFsbCBvcHRpb25hbC4KKyAgICAgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSA0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICAvLyBNYXNz
IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIGF1dG8gbWFzcyA9IHBhcnNlU3ByaW5n
VGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7CisgICAgICAgIGlmICghbWFzcyB8fCBtYXNzLnZh
bHVlKCkgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFN0
aWZmbmVzcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICBhdXRvIHN0aWZmbmVzcyA9
IHBhcnNlU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7CisgICAgICAgIGlmICghc3Rp
ZmZuZXNzIHx8IHN0aWZmbmVzcy52YWx1ZSgpIDw9IDApCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICAvLyBEYW1waW5nIGNvZWZmaWNpZW50IG11c3QgYmUgZ3JlYXRlciB0
aGFuIG9yIGVxdWFsIHRvIDAuCisgICAgICAgIGF1dG8gZGFtcGluZyA9IHBhcnNlU3ByaW5nVGlt
aW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7CisgICAgICAgIGlmICghZGFtcGluZyB8fCBkYW1waW5n
LnZhbHVlKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8g
SW5pdGlhbCB2ZWxvY2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCisgICAgICAgIGF1dG8gaW5pdGlh
bFZlbG9jaXR5ID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKKyAgICAg
ICAgaWYgKCFpbml0aWFsVmVsb2NpdHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICByZXR1cm4gQ1NTU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKG1hc3Mu
dmFsdWUoKSwgc3RpZmZuZXNzLnZhbHVlKCksIGRhbXBpbmcudmFsdWUoKSwgaW5pdGlhbFZlbG9j
aXR5LnZhbHVlKCkpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIENT
U1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVm
UHRyPENTU1ZhbHVlPiYgcmVzdWx0LCBBbmltYXRpb25QYXJzZUNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOworICAgIENTU1BhcnNlclZhbHVlKiB2
YWw7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAgICBib29sIGFsbG93Q29tbWEgPSBm
YWxzZTsKKworICAgIHJlc3VsdCA9IG51bGxwdHI7CisKKyAgICB3aGlsZSAoKHZhbCA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVl
OworICAgICAgICBpZiAoYWxsb3dDb21tYSkgeworICAgICAgICAgICAgaWYgKCFpc0NvbW1hKHZh
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uRGVsYXk6CisgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNpdGlvbkRlbGF5OgorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EZWxheToKKyAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRl
bGF5KCk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25EaXJlY3Rpb246CisgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgICAgICAgICAgICAgIGN1
cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRp
b25EdXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25E
dXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246
CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgor
ICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbkZpbGxNb2RlOgorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgorICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBh
cnNlQW5pbWF0aW9uRmlsbE1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkl0ZXJhdGlvbkNv
dW50OgorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50OgorICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uSXRlcmF0
aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbk5hbWU6CisgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICAgICAgICAgICAgICBjdXJyVmFs
dWUgPSBwYXJzZUFuaW1hdGlvbk5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVl
KQorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblBsYXlTdGF0
ZToKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6
CisgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25QbGF5U3RhdGUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgICAgICAgICAgICAgY3VyclZhbHVl
ID0gcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAo
dmFsdWUgJiYgIWNvbnRleHQuYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJW
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25UaW1p
bmdGdW5jdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25U
aW1pbmdGdW5jdGlvbjoKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb246CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blRpbWluZ0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQorICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRyaWdnZXI6CisgICAgICAgICAgICAgICAgY3Vy
clZhbHVlID0gcGFyc2VBbmltYXRpb25UcmlnZ2VyKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1
cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1
ZXMpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7CisgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZXMpCisg
ICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZShjdXJy
VmFsdWUpOworCisgICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFdoZW4gcGFyc2luZyB0aGUgJ3RyYW5zaXRpb24nIHNob3J0aGFuZCBwcm9wZXJ0
eSwgd2UgbGV0IGl0IGhhbmRsZSBidWlsZGluZyB1cCB0aGUgbGlzdHMgZm9yIGFsbAorICAgICAg
ICAvLyBwcm9wZXJ0aWVzLgorICAgICAgICBpZiAoaW5TaG9ydGhhbmQoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgewor
ICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHZhbHVlcyk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZSh2YWx1ZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNp
ZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRHcmlk
UG9zaXRpb25DdXN0b21JZGVudChjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAg
cmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiB2YWx1
ZS5pZCAhPSBDU1NWYWx1ZVNwYW4gJiYgdmFsdWUuaWQgIT0gQ1NTVmFsdWVBdXRvOworfQorCisv
LyBUaGUgZnVuY3Rpb24gcGFyc2VzIFsgPGludGVnZXI+IHx8IDxjdXN0b20taWRlbnQ+IF0gaW4g
PGdyaWQtbGluZT4gKHdoaWNoIGNhbiBiZSBzdGFuZCBhbG9uZSBvciB3aXRoICdzcGFuJykuCiti
b29sIENTU1BhcnNlcjo6cGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZyb21HcmlkUG9zaXRpb24o
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgbnVtZXJpY1ZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiBncmlkTGluZU5hbWUpCit7CisgICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVu
YWJsZWQoKSk7CisKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlv
bigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkludGVnZXIpICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
ZlZhbHVlKSB7CisgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0
VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICBpZiAobmV4dFZhbHVlICYmIGlz
VmFsaWRHcmlkUG9zaXRpb25DdXN0b21JZGVudCgqbmV4dFZhbHVlKSkgeworICAgICAgICAgICAg
Z3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKm5leHRWYWx1ZSk7Cisg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChpc1ZhbGlkR3JpZFBvc2l0aW9uQ3VzdG9tSWRlbnQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24pKSB7CisgICAgICAgIGdyaWRMaW5lTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgaWYgKENT
U1BhcnNlclZhbHVlKiBuZXh0VmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CisgICAgICAg
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKm5leHRW
YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KG5leHRWYWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkludGVnZXIpICYmIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1
ZSkgeworICAgICAgICAgICAgICAgIG51bWVyaWNWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VHcmlkUG9zaXRpb24oKQoreworICAgIEFTU0VSVChpc0NTU0dyaWRM
YXlvdXRFbmFibGVkKCkpOworCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykgeworICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICB9CisK
KyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG51bWVyaWNWYWx1ZTsKKyAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGdyaWRMaW5lTmFtZTsKKyAgICBib29sIGhhc1NlZW5TcGFuS2V5
d29yZCA9IGZhbHNlOworCisgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNwYW4pIHsKKyAg
ICAgICAgaGFzU2VlblNwYW5LZXl3b3JkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGF1dG8qIG5leHRW
YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNGb3J3YXJk
U2xhc2hPcGVyYXRvcigqbmV4dFZhbHVlKSAmJiAhcGFyc2VJbnRlZ2VyT3JDdXN0b21JZGVudEZy
b21HcmlkUG9zaXRpb24obnVtZXJpY1ZhbHVlLCBncmlkTGluZU5hbWUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwYXJzZUludGVn
ZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihudW1lcmljVmFsdWUsIGdyaWRMaW5lTmFt
ZSkpIHsKKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgICAgICBp
ZiAodmFsdWUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU3BhbikgeworICAgICAgICAgICAgaGFz
U2VlblNwYW5LZXl3b3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgY29uc3VtZWQg
YWxsIHRoZSB2YWx1ZSBsaXN0LiBGb3Igc2hvcnRoYW5kcywgdGhlIHBhcnNlciB3aWxsIHBhc3MK
KyAgICAvLyB0aGUgd2hvbGUgdmFsdWUgbGlzdCAoaW5jbHVkaW5nIHRoZSBvcHBvc2l0ZSBwb3Np
dGlvbikuCisgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9yd2FyZFNsYXNo
T3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIElmIHdlIGRpZG4ndCBwYXJzZSBhbnl0aGluZywgdGhpcyBpcyBub3QgYSB2
YWxpZCBncmlkIHBvc2l0aW9uLgorICAgIGlmICghaGFzU2VlblNwYW5LZXl3b3JkICYmICFncmlk
TGluZU5hbWUgJiYgIW51bWVyaWNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBJZiB3ZSBoYXZlICJzcGFuIiBrZXl3b3JkIGFsb25lIGlzIGludmFsaWQuCisgICAgaWYg
KGhhc1NlZW5TcGFuS2V5d29yZCAmJiAhZ3JpZExpbmVOYW1lICYmICFudW1lcmljVmFsdWUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gTmVnYXRpdmUgbnVtYmVycyBhcmUgbm90
IGFsbG93ZWQgZm9yIHNwYW4gKGJ1dCBhcmUgZm9yIDxpbnRlZ2VyPikuCisgICAgaWYgKGhhc1Nl
ZW5TcGFuS2V5d29yZCAmJiBudW1lcmljVmFsdWUgJiYgbnVtZXJpY1ZhbHVlLT5nZXRJbnRWYWx1
ZSgpIDwgMCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBGb3IgdGhlIDxjdXN0
b20taWRlbnQ+IGNhc2UuCisgICAgaWYgKGdyaWRMaW5lTmFtZSAmJiAhbnVtZXJpY1ZhbHVlICYm
ICFoYXNTZWVuU3BhbktleXdvcmQpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKGdyaWRMaW5lTmFtZS0+Z2V0U3RyaW5nVmFsdWUoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworCisgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgaWYgKGhhc1NlZW5TcGFuS2V5d29yZCkK
KyAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTcGFuKSk7CisgICAgaWYgKG51bWVyaWNWYWx1ZSkKKyAg
ICAgICAgdmFsdWVzLT5hcHBlbmQobnVtZXJpY1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IGlmIChncmlkTGluZU5hbWUpCisgICAgICAgIHZhbHVlcy0+YXBwZW5kKGdyaWRMaW5lTmFtZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIFdURk1vdmUodmFsdWVzKTsKK30KKworc3RhdGljIFJlZjxDU1NWYWx1ZT4gZ3JpZE1pc3Np
bmdHcmlkUG9zaXRpb25WYWx1ZShDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsK
K30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEl0ZW1Qb3NpdGlvblNob3J0aGFuZChDU1NQ
cm9wZXJ0eUlEIHNob3J0aGFuZElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKKworICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IHNob3J0aGFuZElkKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhh
bmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShzaG9ydGhhbmRJZCk7CisgICAgQVNTRVJUKHNob3J0
aGFuZC5sZW5ndGgoKSA9PSAyKTsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3RhcnRWYWx1ZSA9
IHBhcnNlR3JpZFBvc2l0aW9uKCk7CisgICAgaWYgKCFzdGFydFZhbHVlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGVuZFZhbHVlOworICAgIGlmIChtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIGlmICghaXNGb3J3YXJkU2xhc2hPcGVyYXRv
cigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGVuZFZhbHVlID0gcGFyc2VHcmlkUG9zaXRpb24oKTsKKyAgICAgICAg
aWYgKCFlbmRWYWx1ZSB8fCBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBlbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3Jp
ZFBvc2l0aW9uVmFsdWUoKnN0YXJ0VmFsdWUpOworCisgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVswXSwgc3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQp
OworICAgIGFkZFByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMV0sIGVuZFZhbHVlLnJl
bGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Q1NTUGFyc2VyOjpwYXJzZUdyaWRHYXBTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCit7CisgICAg
QVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7CisKKyAgICBTaG9ydGhhbmRTY29wZSBz
Y29wZSh0aGlzLCBDU1NQcm9wZXJ0eUdyaWRHYXApOworICAgIEFTU0VSVChzaG9ydGhhbmRGb3JQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRHYXApLmxlbmd0aCgpID09IDIpOworCisgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiByb3dW
YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgIGlmICghdmFsaWRhdGVVbml0KHJvd1Zh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gcm93R2FwID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHJv
d1ZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKworICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3Jp
ZENvbHVtbkdhcCwgcm93R2FwLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlHcmlkUm93R2FwLCBXVEZNb3ZlKHJvd0dhcCksIGltcG9ydGFudCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IGNvbHVtblZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoY29sdW1uVmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29sdW1uR2FwID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGNvbHVtblZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKworICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5R3JpZFJvd0dhcCwgV1RGTW92ZShyb3dHYXApLCBpbXBvcnRhbnQpOworICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgV1RGTW92ZShjb2x1bW5HYXAp
LCBpbXBvcnRhbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZUNvbHVtbnMoVHJhY2tMaXN0VHlwZSB0cmFja0xp
c3RUeXBlKQoreworICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOworCisgICAg
aWYgKCEobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCpt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKSAmJiBtX3ZhbHVlTGlzdC0+bmV4dCgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8gY29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVHJh
Y2tMaXN0KHRyYWNrTGlzdFR5cGUpKSB7CisgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBjb2x1bW5z
VmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoYm9vbCBpbXBvcnRhbnQp
Cit7CisgICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7CisKKyAgICAvLyBBdCBs
ZWFzdCB0ZW1wbGF0ZS1hcmVhcyBzdHJpbmdzIG11c3QgYmUgZGVmaW5lZC4KKyAgICBpZiAoIW1f
dmFsdWVMaXN0LT5jdXJyZW50KCkgfHwgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5hbWVkR3JpZEFy
ZWFNYXAgZ3JpZEFyZWFNYXA7CisgICAgdW5zaWduZWQgcm93Q291bnQgPSAwOworICAgIHVuc2ln
bmVkIGNvbHVtbkNvdW50ID0gMDsKKyAgICBib29sIHRyYWlsaW5nSWRlbnRXYXNBZGRlZCA9IGZh
bHNlOworICAgIGF1dG8gdGVtcGxhdGVSb3dzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNl
cGFyYXRlZCgpOworCisgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWlzRm9y
d2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIC8v
IEhhbmRsZSBsZWFkaW5nIDxjdXN0b20taWRlbnQ+Ki4KKyAgICAgICAgaWYgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgeworICAgICAg
ICAgICAgaWYgKHRyYWlsaW5nSWRlbnRXYXNBZGRlZCkgeworICAgICAgICAgICAgICAgIC8vIEEg
cm93J3MgdHJhaWxpbmcgaWRlbnQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCBy
b3cncyBsZWFkaW5nIG9uZS4KKyAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1f
dmFsdWVMaXN0LCB0ZW1wbGF0ZVJvd3MsIGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4o
dGVtcGxhdGVSb3dzLT5pdGVtKHRlbXBsYXRlUm93cy0+bGVuZ3RoKCkgLSAxKSkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCptX3ZhbHVl
TGlzdCwgdGVtcGxhdGVSb3dzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBhIHRl
bXBsYXRlLWFyZWEncyByb3cuCisgICAgICAgIGlmICghcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1Jv
dyhncmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgKytyb3dDb3VudDsKKworICAgICAgICAvLyBIYW5kbGUgdGVtcGxh
dGUtcm93cydzIHRyYWNrLXNpemUuCisgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
ICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OlZh
bHVlTGlzdCAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
cGFyc2VHcmlkVHJhY2tTaXplKCptX3ZhbHVlTGlzdCk7CisgICAgICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRlbXBsYXRlUm93
cy0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykpOworCisgICAgICAgIC8vIFRoaXMgd2ls
bCBoYW5kbGUgdGhlIHRyYWlsaW5nL2xlYWRpbmcgPGN1c3RvbS1pZGVudD4qIGluIHRoZSBncmFt
bWFyLgorICAgICAgICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBmYWxzZTsKKyAgICAgICAgaWYg
KG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQorICAgICAgICAgICAgdHJhaWxpbmdJZGVudFdh
c0FkZGVkID0gcGFyc2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdGVtcGxhdGVSb3dzKTsK
KyAgICB9CisKKyAgICAvLyBbLyA8ZXhwbGljaXQtdHJhY2stbGlzdD4gXT8KKyAgICBSZWZQdHI8
Q1NTVmFsdWU+IHRlbXBsYXRlQ29sdW1uczsKKyAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkgeworICAgICAgICBBU1NFUlQoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkpOworICAgICAgICB0ZW1wbGF0ZUNvbHVtbnMgPSBwYXJzZUdyaWRUZW1wbGF0
ZUNvbHVtbnMoR3JpZFRlbXBsYXRlTm9SZXBlYXQpOworICAgICAgICBpZiAoIXRlbXBsYXRlQ29s
dW1ucykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhlIHRlbXBsYXRl
LWNvbHVtbnMgPHRyYWNrLWxpc3Q+IGNhbid0IGJlICdub25lJy4KKyAgICAgICAgaWYgKHRlbXBs
YXRlQ29sdW1ucy0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdGVtcGxhdGVDb2x1bW5zKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZFRlbXBsYXRlUm93cywgV1RGTW92ZSh0ZW1wbGF0ZVJvd3MpLCBpbXBvcnRhbnQpOwor
ICAgIGlmICh0ZW1wbGF0ZUNvbHVtbnMpCisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
R3JpZFRlbXBsYXRlQ29sdW1ucywgdGVtcGxhdGVDb2x1bW5zLnJlbGVhc2VOb25OdWxsKCksIGlt
cG9ydGFudCk7CisgICAgZWxzZQorICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRU
ZW1wbGF0ZUNvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkVGVtcGxhdGVBcmVhcywgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZTo6Y3JlYXRl
KGdyaWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQpLCBpbXBvcnRhbnQpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVNob3J0
aGFuZChib29sIGltcG9ydGFudCkKK3sKKyAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxl
ZCgpKTsKKworICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5R3JpZFRl
bXBsYXRlKTsKKyAgICBBU1NFUlQoc2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlk
VGVtcGxhdGUpLmxlbmd0aCgpID09IDMpOworCisgICAgLy8gQXQgbGVhc3QgIm5vbmUiIG11c3Qg
YmUgZGVmaW5lZC4KKyAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGJvb2wgZmlyc3RWYWx1ZUlzTm9uZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9uZTsKKworICAgIC8vIDEtICdub25lJyBjYXNlLgor
ICAgIGlmIChmaXJzdFZhbHVlSXNOb25lICYmICFtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CisgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29sdW1ucywgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1w
b3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVSb3dz
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRU
ZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyAyLSA8Z3JpZC10ZW1wbGF0ZS1yb3dzPiAvIDxncmlkLXRlbXBsYXRlLWNv
bHVtbnM+IHN5bnRheC4KKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd3NWYWx1ZTsKKyAgICBpZiAo
Zmlyc3RWYWx1ZUlzTm9uZSkKKyAgICAgICAgcm93c1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICBlbHNlCisg
ICAgICAgIHJvd3NWYWx1ZSA9IHBhcnNlR3JpZFRyYWNrTGlzdChHcmlkVGVtcGxhdGUpOworCisg
ICAgaWYgKHJvd3NWYWx1ZSkgeworICAgICAgICBhdXRvIGNvbHVtbnNWYWx1ZSA9IHBhcnNlR3Jp
ZFRlbXBsYXRlQ29sdW1ucygpOworICAgICAgICBpZiAoIWNvbHVtbnNWYWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRU
ZW1wbGF0ZUNvbHVtbnMsIGNvbHVtbnNWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQp
OworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIHJvd3NW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIC8vIDMtIFs8bGluZS1uYW1lcz4/IDxzdHJpbmc+
IDx0cmFjay1zaXplPj8gPGxpbmUtbmFtZXM+PyBdKyBzeW50YXguCisgICAgLy8gSXQgcmVxdWly
ZXMgdG8gcmV3aW5kIHBhcnNpbmcgZHVlIHRvIHByZXZpb3VzIHN5bnRheCBmYWlsdXJlcy4KKyAg
ICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOworICAgIHJldHVybiBwYXJzZUdyaWRU
ZW1wbGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoaW1wb3J0YW50KTsKK30KKworYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlR3JpZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKK3sKKyAgICBBU1NFUlQo
aXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKKworICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRo
aXMsIENTU1Byb3BlcnR5R3JpZCk7CisgICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZCkubGVuZ3RoKCkgPT0gOCk7CisKKyAgICAvLyAxLSA8Z3JpZC10ZW1wbGF0
ZT4KKyAgICBpZiAocGFyc2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoaW1wb3J0YW50KSkgeworICAg
ICAgICAvLyBJdCBjYW4gb25seSBiZSBzcGVjaWZpZWQgdGhlIGV4cGxpY2l0IG9yIHRoZSBpbXBs
aWNpdCBncmlkIHByb3BlcnRpZXMgaW4gYSBzaW5nbGUgZ3JpZCBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgLy8gVGhlIHN1Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQgYXJlIHNldCB0byB0aGVpciBp
bml0aWFsIHZhbHVlLCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMuCisgICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5R3JpZEF1dG9GbG93LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5R3JpZEF1dG9Db2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5R3JpZEF1dG9Sb3dzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRSb3dHYXAsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gTmVlZCB0byByZXdpbmQgcGFyc2luZyB0byBleHBsb3Jl
IHRoZSBhbHRlcm5hdGl2ZSBzeW50YXggb2YgdGhpcyBzaG9ydGhhbmQuCisgICAgbV92YWx1ZUxp
c3QtPnNldEN1cnJlbnRJbmRleCgwKTsKKworICAgIC8vIDItIDxncmlkLWF1dG8tZmxvdz4gWyA8
Z3JpZC1hdXRvLWNvbHVtbnM+IFsgLyA8Z3JpZC1hdXRvLXJvd3M+IF0/IF0KKyAgICBpZiAoIXBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlHcmlkQXV0b0Zsb3csIGltcG9ydGFudCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gYXV0b0NvbHVtbnNWYWx1ZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGF1dG9Sb3dzVmFsdWU7CisKKyAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgeworICAgICAgICBhdXRvUm93c1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0
KEdyaWRBdXRvKTsKKyAgICAgICAgaWYgKCFhdXRvUm93c1ZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAg
ICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSB8fCAhbV92YWx1ZUxpc3QtPm5leHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBhdXRvQ29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRB
dXRvKTsKKyAgICAgICAgICAgIGlmICghYXV0b0NvbHVtbnNWYWx1ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gT3RoZXIgb21pdHRlZCB2YWx1ZXMgYXJlIHNldCB0byB0aGVpciBpbml0aWFsIHZhbHVlcy4K
KyAgICAgICAgYXV0b0NvbHVtbnNWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsKKyAgICAgICAgYXV0b1Jvd3NWYWx1ZSA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsKKyAgICB9
CisKKyAgICAvLyBpZiA8Z3JpZC1hdXRvLXJvd3M+IHZhbHVlIGlzIG9taXR0ZWQsIGl0IGlzIHNl
dCB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciBncmlkLWF1dG8tY29sdW1ucy4KKyAgICBpZiAo
IWF1dG9Db2x1bW5zVmFsdWUpCisgICAgICAgIGF1dG9Db2x1bW5zVmFsdWUgPSBhdXRvUm93c1Zh
bHVlOworCisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQXV0b0NvbHVtbnMsIGF1dG9D
b2x1bW5zVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUdyaWRBdXRvUm93cywgYXV0b1Jvd3NWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
LCBpbXBvcnRhbnQpOworCisgICAgLy8gSXQgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHRoZSBleHBs
aWNpdCBvciB0aGUgaW1wbGljaXQgZ3JpZCBwcm9wZXJ0aWVzIGluIGEgc2luZ2xlIGdyaWQgZGVj
bGFyYXRpb24uCisgICAgLy8gVGhlIHN1Yi1wcm9wZXJ0aWVzIG5vdCBzcGVjaWZpZWQgYXJlIHNl
dCB0byB0aGVpciBpbml0aWFsIHZhbHVlLCBhcyBub3JtYWwgZm9yIHNob3J0aGFuZHMuCisgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Cisg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVSb3dzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Cisg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhcywgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwor
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkdhcCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFJvd0dhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGJv
b2wgaW1wb3J0YW50KQoreworICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwor
CisgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlHcmlkQXJlYSk7Cisg
ICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENTU1Byb3BlcnR5R3JpZEFyZWEpLmxlbmd0
aCgpID09IDQpOworCisgICAgUmVmUHRyPENTU1ZhbHVlPiByb3dTdGFydFZhbHVlID0gcGFyc2VH
cmlkUG9zaXRpb24oKTsKKyAgICBpZiAoIXJvd1N0YXJ0VmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uU3RhcnRWYWx1ZTsKKyAgICBpZiAo
IXBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChjb2x1bW5TdGFydFZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1ZhbHVlPiByb3dFbmRWYWx1ZTsKKyAgICBp
ZiAoIXBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChyb3dFbmRWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uRW5kVmFsdWU7CisgICAg
aWYgKCFwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoY29sdW1uRW5kVmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbHVtblN0YXJ0VmFsdWUpCisgICAgICAgIGNv
bHVtblN0YXJ0VmFsdWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKCpyb3dTdGFydFZh
bHVlKTsKKworICAgIGlmICghcm93RW5kVmFsdWUpCisgICAgICAgIHJvd0VuZFZhbHVlID0gZ3Jp
ZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZSgqcm93U3RhcnRWYWx1ZSk7CisKKyAgICBpZiAoIWNv
bHVtbkVuZFZhbHVlKQorICAgICAgICBjb2x1bW5FbmRWYWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBv
c2l0aW9uVmFsdWUoKmNvbHVtblN0YXJ0VmFsdWUpOworCisgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkUm93U3RhcnQsIHJvd1N0YXJ0VmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0
YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5TdGFydCwgY29sdW1u
U3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5R3JpZFJvd0VuZCwgcm93RW5kVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRDb2x1bW5FbmQsIGNvbHVt
bkVuZFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoUmVmUHRy
PENTU1ZhbHVlPiYgcHJvcGVydHkpCit7CisgICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSk7CisKKyAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3ZhbHVlTGlz
dC0+bmV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcm9wZXJ0eSA9IHBhcnNl
R3JpZFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZUdyaWRMaW5lTmFtZXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QsIENTU1ZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBDU1NHcmlkTGluZU5hbWVzVmFsdWUqIHByZXZpb3VzTmFtZWRBcmVh
VHJhaWxpbmdMaW5lTmFtZXMpCit7CisgICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQo
KSk7CisgICAgQVNTRVJUKGlucHV0TGlzdC5jdXJyZW50KCkgJiYgaW5wdXRMaXN0LmN1cnJlbnQo
KS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KTsKKworICAgIENTU1BhcnNlclZh
bHVlTGlzdCYgaWRlbnRMaXN0ID0gKmlucHV0TGlzdC5jdXJyZW50KCktPnZhbHVlTGlzdDsKKyAg
ICBpZiAoIWlkZW50TGlzdC5zaXplKCkpIHsKKyAgICAgICAgaW5wdXRMaXN0Lm5leHQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoZSBp
ZGVudExpc3QgaXMgYXQgdGhlIGhlYWRpbmcgaW5kZXgsIHNpbmNlIHRoZSBwYXJzZXJMaXN0IG1p
Z2h0IGhhdmUgYmVlbiByZXdvdW5kLgorICAgIGlkZW50TGlzdC5zZXRDdXJyZW50SW5kZXgoMCk7
CisgICAgUmVmPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4gbGluZU5hbWVzID0gcHJldmlvdXNOYW1l
ZEFyZWFUcmFpbGluZ0xpbmVOYW1lcyA/IFJlZjxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpwcmV2
aW91c05hbWVkQXJlYVRyYWlsaW5nTGluZU5hbWVzKSA6IENTU0dyaWRMaW5lTmFtZXNWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBpZGVudFZhbHVlID0gaWRlbnRM
aXN0LmN1cnJlbnQoKSkgeworICAgICAgICBBU1NFUlQoaWRlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKTsKKyAgICAgICAgbGluZU5hbWVzLT5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmlkZW50VmFsdWUpKTsKKyAgICAgICAgaWRlbnRMaXN0
Lm5leHQoKTsKKyAgICB9CisgICAgaWYgKCFwcmV2aW91c05hbWVkQXJlYVRyYWlsaW5nTGluZU5h
bWVzKQorICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUobGluZU5hbWVzKSk7CisKKyAg
ICBpbnB1dExpc3QubmV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBp
c0dyaWRUcmFja0ZpeGVkU2l6ZWQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQorewor
ICAgIENTU1ZhbHVlSUQgdmFsdWVJRCA9IHZhbHVlLmdldFZhbHVlSUQoKTsKKyAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdl
YmtpdE1heENvbnRlbnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUuaXNGbGV4
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVCh2YWx1ZS5pc0xlbmd0aCgp
IHx8IHZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHZhbHVlLmlzQ2FsY3VsYXRlZCgpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNHcmlkVHJhY2tGaXhlZFNpemVkKGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpOworCisgICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb25WYWx1ZSgpKTsK
KyAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygp
KTsKKyAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50
cygpLT5sZW5ndGgoKSA9PSAyKTsKKworICAgIGF1dG8mIG1pbiA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygp
LT5pdGVtKDApKTsKKyAgICBhdXRvJiBtYXggPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KmRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KHZhbHVlKS5hcmd1bWVudHMoKS0+aXRlbSgxKSk7
CisgICAgcmV0dXJuIGlzR3JpZFRyYWNrRml4ZWRTaXplZChtaW4pIHx8IGlzR3JpZFRyYWNrRml4
ZWRTaXplZChtYXgpOworfQorCitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlk
VHJhY2tMaXN0KFRyYWNrTGlzdFR5cGUgdHJhY2tMaXN0VHlwZSkKK3sKKyAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKKworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUp
IHsKKyAgICAgICAgaWYgKHRyYWNrTGlzdFR5cGUgPT0gR3JpZEF1dG8pCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7CisgICAgfQorCisgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgLy8gSGFuZGxlIGxlYWRpbmcgIDxjdXN0b20taWRlbnQ+
Ki4KKyAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgYm9vbCBhbGxvd0dy
aWRMaW5lTmFtZXMgPSB0cmFja0xpc3RUeXBlICE9IEdyaWRBdXRvOworICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KSB7CisgICAgICAgIGlm
ICghYWxsb3dHcmlkTGluZU5hbWVzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3QsIHZhbHVlcyk7CisgICAgfQorCisg
ICAgYm9vbCBzZWVuVHJhY2tTaXplT3JSZXBlYXRGdW5jdGlvbiA9IGZhbHNlOworICAgIGJvb2wg
c2VlbkF1dG9SZXBlYXQgPSBmYWxzZTsKKyAgICBib29sIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQg
PSB0cnVlOworICAgIGJvb2wgcmVwZWF0QWxsb3dlZCA9IHRyYWNrTGlzdFR5cGUgPT0gR3JpZFRl
bXBsYXRlOworICAgIHdoaWxlIChDU1NQYXJzZXJWYWx1ZSogY3VycmVudFZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkgeworICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigq
Y3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY3VycmVudFZh
bHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShjdXJyZW50VmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0KCIpKSB7
CisgICAgICAgICAgICBpZiAoIXJlcGVhdEFsbG93ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICBib29sIGlzQXV0b1JlcGVhdDsKKyAgICAgICAgICAgIGlm
ICghcGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbih2YWx1ZXMsIGlzQXV0b1JlcGVhdCwgYWxs
VHJhY2tzQXJlRml4ZWRTaXplZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICBpZiAoaXNBdXRvUmVwZWF0ICYmIHNlZW5BdXRvUmVwZWF0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgc2VlbkF1dG9SZXBlYXQgPSBzZWVu
QXV0b1JlcGVhdCB8fCBpc0F1dG9SZXBlYXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VHcmlkVHJhY2tTaXplKCptX3ZhbHVlTGlz
dCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgICAgICBhbGxUcmFja3NBcmVGaXhlZFNpemVkID0gYWxsVHJhY2tzQXJl
Rml4ZWRTaXplZCAmJiBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoKnZhbHVlKTsKKyAgICAgICAgICAg
IHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB9CisgICAg
ICAgIHNlZW5UcmFja1NpemVPclJlcGVhdEZ1bmN0aW9uID0gdHJ1ZTsKKworICAgICAgICBpZiAo
c2VlbkF1dG9SZXBlYXQgJiYgIWFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBUaGlzIHdpbGwgaGFuZGxlIHRoZSB0cmFpbGlu
ZyA8Y3VzdG9tLWlkZW50PiogaW4gdGhlIGdyYW1tYXIuCisgICAgICAgIHZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpIHsKKyAgICAgICAgICAgIGlmICghYWxsb3dHcmlkTGlu
ZU5hbWVzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcGFy
c2VHcmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghc2VlblRyYWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24pCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUodmFsdWVzKTsKK30KKworYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlR3JpZFRyYWNrUmVwZWF0RnVuY3Rpb24oQ1NTVmFsdWVMaXN0JiBsaXN0LCBi
b29sJiBpc0F1dG9SZXBlYXQsIGJvb2wmIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpCit7CisgICAg
QVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7CisKKyAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3VtZW50cyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOworICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+c2l6ZSgpIDwgMyB8fCAhaXND
b21tYShhcmd1bWVudHMtPnZhbHVlQXQoMSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dHMtPnZhbHVlQXQoMCkpOworICAgIENTU1ZhbHVlSUQgZmlyc3RWYWx1ZUlEID0gZmlyc3RWYWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOworICAgIGlzQXV0b1JlcGVhdCA9IGZpcnN0VmFs
dWVJRCA9PSBDU1NWYWx1ZUF1dG9GaWxsIHx8IGZpcnN0VmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG9G
aXQ7CisgICAgaWYgKCFpc0F1dG9SZXBlYXQgJiYgIXZhbGlkYXRlVW5pdChmaXJzdFZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSWYgYXJndW1lbnRzLT52YWx1ZUF0KDApLT5mVmFsdWUgPiBTSVpFX01BWCB0aGVu
IHJlcGV0aXRpb25zIGJlY29tZXMgMCBkdXJpbmcgdGhlIHR5cGUgY2FzdGluZywgdGhhdCdzIHdo
eSB3ZQorICAgIC8vIGNsYW1wIGl0IGRvd24gdG8ga0dyaWRNYXhUcmFja3MgYmVmb3JlIHRoZSB0
eXBlIGNhc3RpbmcuCisgICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyBmb3IgPGF1dG8t
cmVwZWF0PiBpcyBub3QgaW1wb3J0YW50IGF0IHBhcnNpbmcgbGV2ZWwKKyAgICAvLyBiZWNhdXNl
IGl0IHdpbGwgYmUgY29tcHV0ZWQgbGF0ZXIsIGxldCdzIHNldCBpdCB0byAxLgorICAgIHVuc2ln
bmVkIHJlcGV0aXRpb25zID0gaXNBdXRvUmVwZWF0ID8gMSA6IGNsYW1wVG88dW5zaWduZWQ+KHBh
cnNlZERvdWJsZShmaXJzdFZhbHVlV2l0aENhbGN1bGF0aW9uKSwgMCwga0dyaWRNYXhUcmFja3Mp
OworCisgICAgUmVmPENTU1ZhbHVlTGlzdD4gcmVwZWF0ZWRWYWx1ZXMgPSBpc0F1dG9SZXBlYXQg
PyBSZWY8Q1NTVmFsdWVMaXN0PihDU1NHcmlkQXV0b1JlcGVhdFZhbHVlOjpjcmVhdGUoZmlyc3RW
YWx1ZUlEKSkgOiBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgYXJn
dW1lbnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIHJlcGV0aXRpb24gY291bnQuCisgICAgYXJndW1l
bnRzLT5uZXh0KCk7IC8vIFNraXAgdGhlIGNvbW1hLgorCisgICAgLy8gSGFuZGxlIGxlYWRpbmcg
PGN1c3RvbS1pZGVudD4qLgorICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBhcmd1
bWVudHMtPmN1cnJlbnQoKTsKKyAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS0+
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQorICAgICAgICBwYXJzZUdyaWRMaW5l
TmFtZXMoKmFyZ3VtZW50cywgcmVwZWF0ZWRWYWx1ZXMpOworCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZUcmFja3MgPSAwOworICAgIHdoaWxlIChhcmd1bWVudHMtPmN1cnJlbnQoKSkgeworICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHRyYWNrU2l6ZSA9IHBhcnNlR3JpZFRyYWNrU2l6ZSgqYXJndW1l
bnRzKTsKKyAgICAgICAgaWYgKCF0cmFja1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCA9IGFsbFRyYWNrc0FyZUZpeGVkU2l6
ZWQgJiYgaXNHcmlkVHJhY2tGaXhlZFNpemVkKCp0cmFja1NpemUpOworICAgICAgICByZXBlYXRl
ZFZhbHVlcy0+YXBwZW5kKHRyYWNrU2l6ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgKytu
dW1iZXJPZlRyYWNrczsKKworICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUgb2YgYW55IHRyYWls
aW5nIDxjdXN0b20taWRlbnQ+KiBpbiB0aGUgZ3JhbW1hci4KKyAgICAgICAgY3VycmVudFZhbHVl
ID0gYXJndW1lbnRzLT5jdXJyZW50KCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3Vy
cmVudFZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCisgICAgICAgICAg
ICBwYXJzZUdyaWRMaW5lTmFtZXMoKmFyZ3VtZW50cywgcmVwZWF0ZWRWYWx1ZXMpOworICAgIH0K
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIGZvdW5kIGF0IGxlYXN0IG9uZSA8dHJhY2stc2l6ZT4s
IG90aGVyd2lzZSB0aGUgZGVjbGFyYXRpb24gaXMgaW52YWxpZC4KKyAgICBpZiAoIW51bWJlck9m
VHJhY2tzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBjbGFtcCB0aGUgbnVt
YmVyIG9mIHJlcGV0aXRpb25zIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHJlcGVhdCgpIHRyYWNrIGxp
c3QncyBzaXplLCB3aGlsZSBzdGF5aW5nIGJlbG93IHRoZSBtYXgKKyAgICAvLyBncmlkIHNpemUu
CisgICAgcmVwZXRpdGlvbnMgPSBzdGQ6Om1pbihyZXBldGl0aW9ucywga0dyaWRNYXhUcmFja3Mg
LyBudW1iZXJPZlRyYWNrcyk7CisKKyAgICBpZiAoaXNBdXRvUmVwZWF0KQorICAgICAgICBsaXN0
LmFwcGVuZChXVEZNb3ZlKHJlcGVhdGVkVmFsdWVzKSk7CisgICAgZWxzZSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXBldGl0aW9uczsgKytpKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVwZWF0ZWRWYWx1ZXMtPmxlbmd0aCgpOyArK2opCisg
ICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoKnJlcGVhdGVkVmFsdWVzLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGopKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUdyaWRUcmFja1NpemUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QpCit7CisgICAg
QVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSYg
Y3VycmVudFZhbHVlID0gKmlucHV0TGlzdC5jdXJyZW50KCk7CisgICAgaW5wdXRMaXN0Lm5leHQo
KTsKKworICAgIGlmIChjdXJyZW50VmFsdWUuaWQgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKTsKKworICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAibWlubWF4KCIpKSB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRlZmlu
ZXMgdGhlIGZvbGxvd2luZyBncmFtbWFyOiBtaW5tYXgoIDx0cmFjay1icmVhZHRoPiAsIDx0cmFj
ay1icmVhZHRoPiApCisgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1lbnRzID0gY3Vy
cmVudFZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOworICAgICAgICBpZiAoIWFyZ3VtZW50cyB8
fCBhcmd1bWVudHMtPnNpemUoKSAhPSAzIHx8ICFpc0NvbW1hKGFyZ3VtZW50cy0+dmFsdWVBdCgx
KSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IG1pblRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJyZWFkdGgoKmFyZ3VtZW50
cy0+dmFsdWVBdCgwKSk7CisgICAgICAgIGlmICghbWluVHJhY2tCcmVhZHRoIHx8IG1pblRyYWNr
QnJlYWR0aC0+aXNGbGV4KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1heFRyYWNrQnJlYWR0aCA9IHBhcnNlR3JpZEJy
ZWFkdGgoKmFyZ3VtZW50cy0+dmFsdWVBdCgyKSk7CisgICAgICAgIGlmICghbWF4VHJhY2tCcmVh
ZHRoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXV0byBwYXJzZWRB
cmd1bWVudHMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAg
IHBhcnNlZEFyZ3VtZW50cy0+YXBwZW5kKG1pblRyYWNrQnJlYWR0aC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICAgICAgcGFyc2VkQXJndW1lbnRzLT5hcHBlbmQobWF4VHJhY2tCcmVhZHRoLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICByZXR1cm4gQ1NTRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCJt
aW5tYXgoIiwgV1RGTW92ZShwYXJzZWRBcmd1bWVudHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGFyc2VHcmlkQnJlYWR0aChjdXJyZW50VmFsdWUpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUp
Cit7CisgICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7CisKKyAgICBpZiAodmFs
dWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVl
V2Via2l0TWF4Q29udGVudCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCk7CisKKyAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZS
KSB7CisgICAgICAgIGRvdWJsZSBmbGV4VmFsdWUgPSB2YWx1ZS5mVmFsdWU7CisKKyAgICAgICAg
Ly8gRnJhY3Rpb25hbCB1bml0IGlzIGEgbm9uLW5lZ2F0aXZlIGRpbWVuc2lvbi4KKyAgICAgICAg
aWYgKGZsZXhWYWx1ZSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoZmxleFZhbHVl
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKKyAgICB9CisKKyAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7CisgICAgaWYgKCF2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOb25OZWcgfCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNWYWxpZEdyaWRBdXRvRmxvd0lkKENTU1ZhbHVlSUQgaWQpCit7CisgICAgcmV0dXJuIChpZCA9
PSBDU1NWYWx1ZVJvdyB8fCBpZCA9PSBDU1NWYWx1ZUNvbHVtbiB8fCBpZCA9PSBDU1NWYWx1ZURl
bnNlKTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEF1dG9GbG93
KENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KQoreworICAgIEFTU0VSVChpc0NTU0dyaWRM
YXlvdXRFbmFibGVkKCkpOworCisgICAgLy8gWyByb3cgfCBjb2x1bW4gXSB8fCBkZW5zZQorICAg
IENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGlucHV0TGlzdC5jdXJyZW50KCk7CisgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHBhcnNlZFZhbHVlcyA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKworICAgIC8vIEZpcnN0IHBh
cmFtZXRlci4KKyAgICBDU1NWYWx1ZUlEIGZpcnN0SWQgPSB2YWx1ZS0+aWQ7CisgICAgaWYgKCFp
c1ZhbGlkR3JpZEF1dG9GbG93SWQoZmlyc3RJZCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgLy8gU2Vjb25kIHBhcmFtZXRlciwgaWYgYW55LgorICAgIC8vIElmIHNlY29uZCBwYXJh
bWV0ZXIgaXMgbm90IHZhbGlkIHdlIHNob3VsZCBwcm9jZXNzIGFueXdheSB0aGUgZmlyc3Qgb25l
IGFzIHdlIGNhbiBiZSBpbnNpZGUgdGhlICJncmlkIiBzaG9ydGhhbmQuCisgICAgdmFsdWUgPSBp
bnB1dExpc3QubmV4dCgpOworICAgIGlmICghdmFsdWUgfHwgIWlzVmFsaWRHcmlkQXV0b0Zsb3dJ
ZCh2YWx1ZS0+aWQpKSB7CisgICAgICAgIGlmIChmaXJzdElkID09IENTU1ZhbHVlRGVuc2UpCisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJvdykpOworCisgICAgICAgIHBhcnNlZFZh
bHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKGZpcnN0SWQpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyc2VkVmFsdWVzKTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKGZpcnN0SWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlUm93OgorICAg
IGNhc2UgQ1NTVmFsdWVDb2x1bW46CisgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQpKTsKKyAg
ICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZURlbnNlKSB7CisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIGlucHV0TGlzdC5uZXh0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZURlbnNlOgorICAgICAgICBp
ZiAodmFsdWUtPmlkID09IENTU1ZhbHVlUm93IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbHVt
bikgeworICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICBp
bnB1dExpc3QubmV4dCgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHBhcnNl
ZFZhbHVlcyk7Cit9CisjZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KKworI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKworc3RhdGljIGNvbnN0IGludCBkYXNoYm9hcmRS
ZWdpb25QYXJhbWV0ZXJDb3VudCA9IDY7CitzdGF0aWMgY29uc3QgaW50IGRhc2hib2FyZFJlZ2lv
blNob3J0UGFyYW1ldGVyQ291bnQgPSAyOworCitzdGF0aWMgQ1NTUGFyc2VyVmFsdWUqIHNraXBD
b21tYUluRGFzaGJvYXJkUmVnaW9uKENTU1BhcnNlclZhbHVlTGlzdCAqYXJncykKK3sKKyAgICBp
ZiAoYXJncy0+c2l6ZSgpID09IChkYXNoYm9hcmRSZWdpb25QYXJhbWV0ZXJDb3VudCAqIDIgLSAx
KSB8fCBhcmdzLT5zaXplKCkgPT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQg
KiAyIC0gMSkpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnQgPSAqYXJncy0+Y3Vy
cmVudCgpOworICAgICAgICBpZiAoY3VycmVudC51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiBjdXJyZW50LmlWYWx1ZSA9PSAnLCcpCisgICAgICAgICAgICByZXR1cm4gYXJncy0+
bmV4dCgpOworICAgIH0KKyAgICByZXR1cm4gYXJncy0+Y3VycmVudCgpOworfQorCitib29sIENT
U1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKK3sKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKworICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisKKyAgICBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBp
bXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdmFsaWQ7CisgICAgfQorCisgICAgYXV0byBmaXJz
dFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lvbjo6Y3JlYXRlKCk7CisgICAgRGFzaGJvYXJkUmVnaW9u
KiByZWdpb24gPSBudWxscHRyOworCisgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIGlmICgh
cmVnaW9uKSB7CisgICAgICAgICAgICByZWdpb24gPSBmaXJzdFJlZ2lvbi5wdHIoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gbmV4dFJlZ2lvbiA9IERhc2hib2FyZFJlZ2lv
bjo6Y3JlYXRlKCk7CisgICAgICAgICAgICByZWdpb24tPm1fbmV4dCA9IG5leHRSZWdpb24uY29w
eVJlZigpOworICAgICAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbi5wdHIoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24p
IHsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENvbW1hcyBjb3VudCBhcyB2YWx1ZXMsIHNvIGFsbG93IChmdW5j
dGlvbiBuYW1lIGlzIGRhc2hib2FyZC1yZWdpb24gZm9yIERBU0hCT0FSRF9TVVBQT1JUIGZlYXR1
cmUpOgorICAgICAgICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlLCB0LCByLCBiLCBs
KSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUgdCByIGIgbCkKKyAgICAgICAgLy8gZGFz
aGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlwZSwgdCwgciwgYiwgbCkgb3IgZGFzaGJvYXJkLXJlZ2lv
bihsYWJlbCB0eXBlIHQgciBiIGwpCisgICAgICAgIC8vIGFsc28gYWxsb3cKKyAgICAgICAgLy8g
ZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlwZSkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0
eXBlKQorICAgICAgICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9h
cmQtcmVnaW9uKGxhYmVsIHR5cGUpCisgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9
IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJkYXNoYm9hcmQtcmVnaW9u
KCIpIHx8ICFhcmdzKSB7CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbnVtQXJncyA9IGFyZ3MtPnNpemUoKTsK
KyAgICAgICAgaWYgKChudW1BcmdzICE9IGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50ICYm
IG51bUFyZ3MgIT0gKGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50KjItMSkpCisgICAgICAg
ICAgICAmJiAobnVtQXJncyAhPSBkYXNoYm9hcmRSZWdpb25TaG9ydFBhcmFtZXRlckNvdW50ICYm
IG51bUFyZ3MgIT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQqMi0xKSkpIHsK
KyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZpcnN0IGFyZyBpcyBhIGxhYmVsLgorICAgICAgICBDU1NQYXJzZXJW
YWx1ZSogYXJnID0gYXJncy0+Y3VycmVudCgpOworICAgICAgICBpZiAoYXJnLT51bml0ICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlZ2lvbi0+bV9sYWJl
bCA9IGFyZy0+c3RyaW5nOworCisgICAgICAgIC8vIFNlY29uZCBhcmcgaXMgYSB0eXBlLgorICAg
ICAgICBhcmcgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGFyZyA9IHNraXBDb21tYUluRGFzaGJv
YXJkUmVnaW9uKGFyZ3MpOworICAgICAgICBpZiAoYXJnLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSgqYXJnLCAiY2lyY2xlIikpCisgICAgICAgICAgICByZWdpb24tPm1faXNDaXJjbGUg
PSB0cnVlOworICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgq
YXJnLCAicmVjdGFuZ2xlIikpCisgICAgICAgICAgICByZWdpb24tPm1faXNSZWN0YW5nbGUgPSB0
cnVlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlZ2lvbi0+bV9nZW9tZXRyeVR5cGUg
PSBhcmctPnN0cmluZzsKKworICAgICAgICBpZiAobnVtQXJncyA9PSBkYXNoYm9hcmRSZWdpb25T
aG9ydFBhcmFtZXRlckNvdW50IHx8IG51bUFyZ3MgPT0gKGRhc2hib2FyZFJlZ2lvblNob3J0UGFy
YW1ldGVyQ291bnQqMi0xKSkgeworICAgICAgICAgICAgLy8gVGhpcyBvcmlnaW5hbGx5IHVzZWQg
Q1NTVmFsdWVJbnZhbGlkIGJ5IGFjY2lkZW50LiBJdCBtaWdodCBiZSBtb3JlIGxvZ2ljYWwgdG8g
dXNlIHNvbWV0aGluZyBlbHNlLgorICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBhbW91bnQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUludmFsaWQpOworCisgICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQu
Y29weVJlZigpKTsKKyAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmlnaHQoYW1vdW50LmNvcHlSZWYo
KSk7CisgICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbShhbW91bnQuY29weVJlZigpKTsKKyAg
ICAgICAgICAgIHJlZ2lvbi0+c2V0TGVmdChXVEZNb3ZlKGFtb3VudCkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gTmV4dCBmb3VyIGFyZ3VtZW50cyBtdXN0IGJlIG9mZnNldCBu
dW1iZXJzCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGFyZyA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAgICAgICBhcmcgPSBza2lw
Q29tbWFJbkRhc2hib2FyZFJlZ2lvbihhcmdzKTsKKworICAgICAgICAgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ1dpdGhDYWxjdWxhdGlvbigqYXJnKTsKKyAgICAgICAgICAgICAgICB2
YWxpZCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmdXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgpOworICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJnV2l0aENhbGN1bGF0aW9uKTsKKworICAgICAgICAgICAg
ICAgIGlmIChpID09IDApCisgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKFdURk1v
dmUoYW1vdW50KSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQorICAgICAgICAg
ICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0KFdURk1vdmUoYW1vdW50KSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNldEJv
dHRvbShXVEZNb3ZlKGFtb3VudCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgcmVnaW9uLT5zZXRMZWZ0KFdURk1vdmUoYW1vdW50KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJncy0+bmV4dCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICB9
CisKKyAgICBpZiAodmFsaWQpCisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPihXVEZN
b3ZlKGZpcnN0UmVnaW9uKSkpLCBpbXBvcnRhbnQpOworCisgICAgcmV0dXJuIHZhbGlkOworfQor
CisjZW5kaWYgLyogRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKSAqLworCisjaWYgRU5BQkxFKENT
U19HUklEX0xBWU9VVCkKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZUdyaWRUZW1wbGF0ZUFy
ZWFzQ29sdW1uTmFtZXMoY29uc3QgU3RyaW5nJiBncmlkUm93TmFtZXMpCit7CisgICAgQVNTRVJU
KCFncmlkUm93TmFtZXMuaXNFbXB0eSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5OYW1l
czsKKyAgICAvLyBVc2luZyBTdHJpbmdJbXBsIHRvIGF2b2lkIGNoZWNrcyBhbmQgaW5kaXJlY3Rp
b24gaW4gZXZlcnkgY2FsbCB0byBTdHJpbmc6Om9wZXJhdG9yW10uCisgICAgU3RyaW5nSW1wbCYg
dGV4dCA9ICpncmlkUm93TmFtZXMuaW1wbCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQu
bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICBpZiAodGV4dFtpbmRleF0gIT0gJyAnICYmIHRleHRbaW5kZXhdICE9
ICcuJykgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JpZEFyZWFTdGFydCA9IGluZGV4OworICAg
ICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHRleHRbaW5kZXhdICE9ICcgJyAmJiB0
ZXh0W2luZGV4XSAhPSAnLicpCisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IGNvbHVtbk5hbWVzLmFwcGVuZCh0ZXh0LnN1YnN0cmluZyhncmlkQXJlYVN0YXJ0LCBpbmRleCAt
IGdyaWRBcmVhU3RhcnQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRleHRbaW5kZXhdID09ICcuJykgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoICYmIHRleHRbaW5kZXhdID09ICcuJykKKyAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgY29sdW1uTmFtZXMuYXBwZW5kKCIuIik7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICsraW5kZXg7CisgICAgfQorCisgICAgcmV0dXJu
IGNvbHVtbk5hbWVzOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVh
c1JvdyhOYW1lZEdyaWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgY29uc3QgdW5zaWduZWQgcm93Q291
bnQsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKK3sKKyAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKTsKKworICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOworICAgIGlmICghY3VycmVudFZhbHVlIHx8IGN1cnJlbnRWYWx1ZS0+
dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU3RyaW5nIGdyaWRSb3dOYW1lcyA9IGN1cnJlbnRWYWx1ZS0+c3RyaW5nOwor
ICAgIGlmIChncmlkUm93TmFtZXMuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5OYW1lcyA9IHBhcnNlR3Jp
ZFRlbXBsYXRlQXJlYXNDb2x1bW5OYW1lcyhncmlkUm93TmFtZXMpOworICAgIGlmICghY29sdW1u
Q291bnQpIHsKKyAgICAgICAgY29sdW1uQ291bnQgPSBjb2x1bW5OYW1lcy5zaXplKCk7CisgICAg
ICAgIEFTU0VSVChjb2x1bW5Db3VudCk7CisgICAgfSBlbHNlIGlmIChjb2x1bW5Db3VudCAhPSBj
b2x1bW5OYW1lcy5zaXplKCkpIHsKKyAgICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGlzIGludmFs
aWQgaXMgYWxsIHRoZSByb3dzIGRvbid0IGhhdmUgdGhlIG51bWJlciBvZiBjb2x1bW5zLgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50Q29s
dW1uID0gMDsgY3VycmVudENvbHVtbiA8IGNvbHVtbkNvdW50OyArK2N1cnJlbnRDb2x1bW4pIHsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBncmlkQXJlYU5hbWUgPSBjb2x1bW5OYW1lc1tjdXJyZW50
Q29sdW1uXTsKKworICAgICAgICAvLyBVbmFtZWQgYXJlYXMgYXJlIGFsd2F5cyB2YWxpZCAod2Ug
Y29uc2lkZXIgdGhlbSB0byBiZSAxeDEpLgorICAgICAgICBpZiAoZ3JpZEFyZWFOYW1lID09ICIu
IikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIGhhbmRsZSBzZXZlcmFs
IGdyaWQgYXJlYXMgd2l0aCB0aGUgc2FtZSBuYW1lIGF0IG9uY2UgdG8gc2ltcGxpZnkgdGhlIHZh
bGlkYXRpb24gY29kZS4KKyAgICAgICAgdW5zaWduZWQgbG9va0FoZWFkQ29sdW1uOworICAgICAg
ICBmb3IgKGxvb2tBaGVhZENvbHVtbiA9IGN1cnJlbnRDb2x1bW4gKyAxOyBsb29rQWhlYWRDb2x1
bW4gPCBjb2x1bW5Db3VudDsgKytsb29rQWhlYWRDb2x1bW4pIHsKKyAgICAgICAgICAgIGlmIChj
b2x1bW5OYW1lc1tsb29rQWhlYWRDb2x1bW5dICE9IGdyaWRBcmVhTmFtZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZ3JpZEFyZWFJdGVyYXRvciA9
IGdyaWRBcmVhTWFwLmZpbmQoZ3JpZEFyZWFOYW1lKTsKKyAgICAgICAgaWYgKGdyaWRBcmVhSXRl
cmF0b3IgPT0gZ3JpZEFyZWFNYXAuZW5kKCkpCisgICAgICAgICAgICBncmlkQXJlYU1hcC5hZGQo
Z3JpZEFyZWFOYW1lLCBHcmlkQXJlYShHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3JpZFNw
YW4ocm93Q291bnQsIHJvd0NvdW50ICsgMSksIEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVH
cmlkU3BhbihjdXJyZW50Q29sdW1uLCBsb29rQWhlYWRDb2x1bW4pKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgR3JpZEFyZWEmIGdyaWRBcmVhID0gZ3JpZEFyZWFJdGVyYXRvci0+dmFs
dWU7CisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2tzIHRlc3QgdGhhdCB0aGUg
Z3JpZCBhcmVhIGlzIGEgc2luZ2xlIGZpbGxlZC1pbiByZWN0YW5nbGUuCisgICAgICAgICAgICAv
LyAxLiBUaGUgbmV3IHJvdyBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXNseSBwYXJzZWQgcm93
LgorICAgICAgICAgICAgaWYgKHJvd0NvdW50ICE9IGdyaWRBcmVhLnJvd3MuZW5kTGluZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gMi4gVGhlIG5l
dyBhcmVhIHN0YXJ0cyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNseSBwYXJz
ZWQgYXJlYS4KKyAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRBcmVhLmNvbHVt
bnMuc3RhcnRMaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICAvLyAzLiBUaGUgbmV3IGFyZWEgZW5kcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUg
cHJldmlvdXNseSBwYXJzZWQgYXJlYS4KKyAgICAgICAgICAgIGlmIChsb29rQWhlYWRDb2x1bW4g
IT0gZ3JpZEFyZWEuY29sdW1ucy5lbmRMaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBncmlkQXJlYS5yb3dzID0gR3JpZFNwYW46OnRyYW5zbGF0ZWRE
ZWZpbml0ZUdyaWRTcGFuKGdyaWRBcmVhLnJvd3Muc3RhcnRMaW5lKCksIGdyaWRBcmVhLnJvd3Mu
ZW5kTGluZSgpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudENvbHVtbiA9IGxvb2tB
aGVhZENvbHVtbiAtIDE7CisgICAgfQorCisgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZFRl
bXBsYXRlQXJlYXMoKQoreworICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwor
CisgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Cisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOworICAgIH0KKworICAgIE5hbWVkR3JpZEFyZWFNYXAgZ3JpZEFy
ZWFNYXA7CisgICAgdW5zaWduZWQgcm93Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGNvbHVtbkNv
dW50ID0gMDsKKworICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAg
IGlmICghcGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhncmlkQXJlYU1hcCwgcm93Q291bnQsIGNv
bHVtbkNvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICArK3Jvd0Nv
dW50OworICAgIH0KKworICAgIGlmICghcm93Q291bnQgfHwgIWNvbHVtbkNvdW50KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVl
OjpjcmVhdGUoZ3JpZEFyZWFNYXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCk7Cit9CisjZW5kaWYg
LyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdz
LCBib29sIGNvdW50ZXJzKQoreworICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBhcmdzLnNpemUoKTsK
KyAgICBpZiAoY291bnRlcnMgJiYgbnVtQXJncyAhPSAzICYmIG51bUFyZ3MgIT0gNSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFjb3VudGVycyAmJiBudW1BcmdzICE9IDEgJiYg
bnVtQXJncyAhPSAzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOworICAgIGlmIChhcmd1bWVudC0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBhdXRvIGlkZW50aWZpZXIgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqYXJndW1l
bnQpOworCisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZXBhcmF0b3I7CisgICAgaWYg
KCFjb3VudGVycykKKyAgICAgICAgc2VwYXJhdG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZShTdHJpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwor
ICAgIGVsc2UgeworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgICAgICBpZiAo
YXJndW1lbnQtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5p
VmFsdWUgIT0gJywnKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXJn
dW1lbnQgPSBhcmdzLm5leHQoKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgc2VwYXJhdG9yID0gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKmFyZ3VtZW50
KTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RTdHlsZTsKKyAg
ICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgIGlmICghYXJndW1lbnQpIC8vIE1ha2UgdGhl
IGxpc3Qgc3R5bGUgZGVmYXVsdCBkZWNpbWFsCisgICAgICAgIGxpc3RTdHlsZSA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGVjaW1hbCk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgICAgICBp
ZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIENTU1ZhbHVlSUQgbGlzdFN0eWxlSUQg
PSBDU1NWYWx1ZUludmFsaWQ7CisgICAgICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVO
b25lIHx8IChhcmd1bWVudC0+aWQgPj0gQ1NTVmFsdWVEaXNjICYmIGFyZ3VtZW50LT5pZCA8PSBD
U1NWYWx1ZUthdGFrYW5hSXJvaGEpKQorICAgICAgICAgICAgbGlzdFN0eWxlSUQgPSBhcmd1bWVu
dC0+aWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGxpc3RTdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGxpc3RTdHlsZUlEKTsKKyAgICB9CisKKyAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoV1RGTW92ZShpZGVudGlmaWVy
KSwgbGlzdFN0eWxlLnJlbGVhc2VOb25OdWxsKCksIHNlcGFyYXRvci5yZWxlYXNlTm9uTnVsbCgp
KSk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisKKyAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gcmVjdCh0LCByLCBiLCBsKSB8fCByZWN0KHQgciBi
IGwpCisgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSA0ICYmIGFyZ3MtPnNpemUoKSAhPSA3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7CisgICAg
Ym9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGkgPSAwOworICAgIENTU1BhcnNlclZhbHVlKiBh
cmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICB3aGlsZSAoYXJndW1lbnQpIHsKKyAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50
KTsKKyAgICAgICAgdmFsaWQgPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlk
YXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCk7CisgICAgICAgIGlmICgh
dmFsaWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsZW5ndGggPSBhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIGlm
IChpID09IDApCisgICAgICAgICAgICByZWN0LT5zZXRUb3AoV1RGTW92ZShsZW5ndGgpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaSA9PSAxKQorICAgICAgICAgICAgcmVjdC0+c2V0UmlnaHQoV1RGTW92
ZShsZW5ndGgpKTsKKyAgICAgICAgZWxzZSBpZiAoaSA9PSAyKQorICAgICAgICAgICAgcmVjdC0+
c2V0Qm90dG9tKFdURk1vdmUobGVuZ3RoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
Y3QtPnNldExlZnQoV1RGTW92ZShsZW5ndGgpKTsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7CisgICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmdzLT5zaXplKCkgPT0gNykgeworICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiBhcmd1bWVudC0+aVZhbHVlID09ICcsJykgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgaWYgKHZhbGlkKSB7CisgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZN
b3ZlKHJlY3QpKSwgaW1wb3J0YW50KTsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IHZvaWQgY29tcGxldGVCb3JkZXJSYWRpaShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGlp
WzRdKQoreworICAgIGlmIChyYWRpaVszXSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcmFk
aWlbMl0pIHsKKyAgICAgICAgaWYgKCFyYWRpaVsxXSkKKyAgICAgICAgICAgIHJhZGlpWzFdID0g
cmFkaWlbMF07CisgICAgICAgIHJhZGlpWzJdID0gcmFkaWlbMF07CisgICAgfQorICAgIHJhZGlp
WzNdID0gcmFkaWlbMV07Cit9CisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVk
IHdpdGggQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cy4KKy8vIENTU1BhcnNlcjo6cGFyc2VC
b3JkZXJSYWRpdXMgY29udGFpbnMgc3VwcG9ydCBmb3Igc29tZSBsZWdhY3kgcmFkaXVzIGNvbnN0
cnVjdGlvbi4KK1JlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IENTU1BhcnNlcjo6cGFyc2VJbnNl
dFJvdW5kZWRDb3JuZXJzKFJlZjxDU1NCYXNpY1NoYXBlSW5zZXQ+JiYgc2hhcGUsIENTU1BhcnNl
clZhbHVlTGlzdCYgYXJncykKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdz
Lm5leHQoKTsKKworICAgIGlmICghYXJndW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgVmVjdG9yPENTU1BhcnNlclZhbHVlKj4gcmFkaXVzQXJndW1lbnRzOworICAgIHdoaWxl
IChhcmd1bWVudCkgeworICAgICAgICByYWRpdXNBcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsK
KyAgICAgICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBu
dW0gPSByYWRpdXNBcmd1bWVudHMuc2l6ZSgpOworICAgIGlmICghbnVtIHx8IG51bSA+IDkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBy
YWRpaVsyXVs0XTsKKworICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJTbGFzaCA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bTsgKytpKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVl
JiB2YWx1ZSA9ICpyYWRpdXNBcmd1bWVudHMuYXQoaSk7CisgICAgICAgIGlmICh2YWx1ZS51bml0
ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcikgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlW
YWx1ZSAhPSAnLycpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
ICAgIGlmICghaSB8fCBpbmRleEFmdGVyU2xhc2ggfHwgaSArIDEgPT0gbnVtIHx8IG51bSA+IGkg
KyA1KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBpbmRl
eEFmdGVyU2xhc2ggPSBpICsgMTsKKyAgICAgICAgICAgIGNvbXBsZXRlQm9yZGVyUmFkaWkocmFk
aWlbMF0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUp
OworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBhdXRvIHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbik7CisKKyAgICAgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpCisgICAgICAg
ICAgICByYWRpaVswXVtpXSA9IFdURk1vdmUocmFkaXVzKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmFkaWlbMV1baSAtIGluZGV4QWZ0ZXJTbGFzaF0gPSBXVEZNb3ZlKHJhZGl1cyk7Cisg
ICAgfQorCisgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpIHsKKyAgICAgICAgY29tcGxldGVCb3Jk
ZXJSYWRpaShyYWRpaVswXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyAr
K2kpCisgICAgICAgICAgICByYWRpaVsxXVtpXSA9IHJhZGlpWzBdW2ldOworICAgIH0gZWxzZQor
ICAgICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzFdKTsKKworICAgIHNoYXBlLT5zZXRU
b3BMZWZ0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzBd
KSwgV1RGTW92ZShyYWRpaVsxXVswXSkpKTsKKyAgICBzaGFwZS0+c2V0VG9wUmlnaHRSYWRpdXMo
Y3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMV0pLCBXVEZNb3ZlKHJh
ZGlpWzFdWzFdKSkpOworICAgIHNoYXBlLT5zZXRCb3R0b21SaWdodFJhZGl1cyhjcmVhdGVQcmlt
aXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShyYWRpaVswXVsyXSksIFdURk1vdmUocmFkaWlbMV1bMl0p
KSk7CisgICAgc2hhcGUtPnNldEJvdHRvbUxlZnRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURk1vdmUocmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlpWzFdWzNdKSkpOworCisgICAg
cmV0dXJuIFdURk1vdmUoc2hhcGUpOworfQorCitSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykK
K3sKKyAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNTaGFwZUluc2V0OjpjcmVhdGUoKTsKKworICAg
IENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOworICAgIFZlY3RvcjxS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+ID4gd2lkdGhBcmd1bWVudHM7CisgICAgYm9vbCBoYXNSb3Vu
ZGVkSW5zZXQgPSBmYWxzZTsKKyAgICB3aGlsZSAoYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKGFy
Z3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoYXJndW1lbnQtPnN0cmluZywgInJvdW5kIikpIHsKKyAgICAg
ICAgICAgIGhhc1JvdW5kZWRJbnNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIFVuaXRzIHVuaXRGbGFncyA9IEZMZW5ndGggfCBGUGVyY2VudDsKKyAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Vt
ZW50KTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IHVuaXRGbGFncykgfHwgd2lkdGhBcmd1bWVudHMuc2l6ZSgpID4gNCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIHdpZHRoQXJndW1lbnRzLmFwcGVuZChjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKKyAgICAgICAgYXJn
dW1lbnQgPSBhcmdzLm5leHQoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHdpZHRoQXJndW1lbnRz
LnNpemUoKSkgeworICAgIGNhc2UgMTogeworICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXpl
MVZhbHVlKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgMjogeworICAgICAgICBzaGFwZS0+dXBkYXRlU2hhcGVTaXplMlZhbHVlcyhX
VEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1sxXSkpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGNhc2UgMzogeworICAgICAgICBzaGFwZS0+
dXBkYXRlU2hhcGVTaXplM1ZhbHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92
ZSh3aWR0aEFyZ3VtZW50c1sxXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgNDogeworICAgICAgICBzaGFwZS0+dXBkYXRlU2hh
cGVTaXplNFZhbHVlcyhXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzBdKSwgV1RGTW92ZSh3aWR0aEFy
Z3VtZW50c1sxXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbMl0pLCBXVEZNb3ZlKHdpZHRoQXJn
dW1lbnRzWzNdKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoaGFzUm91bmRlZEluc2V0KQorICAg
ICAgICByZXR1cm4gcGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFdURk1vdmUoc2hhcGUpLCBhcmdz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShzaGFwZSk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNoYXBlUmFkaXVzKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVDbG9zZXN0U2lkZSB8fCB2YWx1ZS5pZCA9
PSBDU1NWYWx1ZUZhcnRoZXN0U2lkZSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKworICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKKyAgICBpZiAoIXZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5l
ZykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Cit9CisKK1JlZlB0cjxDU1NCYXNp
Y1NoYXBlQ2lyY2xlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJW
YWx1ZUxpc3QmIGFyZ3MpCit7CisgICAgLy8gY2lyY2xlKHJhZGl1cykKKyAgICAvLyBjaXJjbGUo
cmFkaXVzIGF0IDxwb3NpdGlvbj4pCisgICAgLy8gY2lyY2xlKGF0IDxwb3NpdGlvbj4pCisgICAg
Ly8gd2hlcmUgcG9zaXRpb24gZGVmaW5lcyBjZW50ZXJYIGFuZCBjZW50ZXJZIHVzaW5nIGEgQ1NT
IDxwb3NpdGlvbj4gZGF0YSB0eXBlLgorICAgIGF1dG8gc2hhcGUgPSBDU1NCYXNpY1NoYXBlQ2ly
Y2xlOjpjcmVhdGUoKTsKKworICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJn
cy5jdXJyZW50KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7CisgICAgICAg
IC8vIFRoZSBjYWxsIHRvIHBhcnNlRmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25zdW1lIGFs
bCBvZiB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdHdvLiBUaHVz
LCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQorICAgICAgICAvLyBpbmRpY2F0ZXMgYW4gaW52
YWxpZCBwcm9kdWN0aW9uLgorICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoIWFyZ3MuY3VycmVudElu
ZGV4KCkgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKKyAgICAgICAgICAgIGlmIChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoKmFyZ3Vt
ZW50KSkgeworICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXMocmFkaXVzLnJlbGVhc2VO
b25OdWxsKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmd1
bWVudC0+aWQgPT0gQ1NTVmFsdWVBdCAmJiBhcmdzLm5leHQoKSkgeworICAgICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOworICAgICAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjZW50ZXJZOworICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJn
cywgY2VudGVyWCwgY2VudGVyWSk7CisgICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBjZW50ZXJZ
ICYmICFhcmdzLmN1cnJlbnQoKSkgeworICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJY
KGNlbnRlclgucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgc2hhcGUtPnNldENl
bnRlclkoY2VudGVyWS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHNoYXBlKTsKK30K
KworUmVmUHRyPENTU0Jhc2ljU2hhcGVFbGxpcHNlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFw
ZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQoreworICAgIC8vIGVsbGlwc2UocmFk
aXVzWCkKKyAgICAvLyBlbGxpcHNlKHJhZGl1c1ggYXQgPHBvc2l0aW9uPikKKyAgICAvLyBlbGxp
cHNlKHJhZGl1c1ggcmFkaXVzWSkKKyAgICAvLyBlbGxpcHNlKHJhZGl1c1ggcmFkaXVzWSBhdCA8
cG9zaXRpb24+KQorICAgIC8vIGVsbGlwc2UoYXQgPHBvc2l0aW9uPikKKyAgICAvLyB3aGVyZSBw
b3NpdGlvbiBkZWZpbmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBvc2l0aW9u
PiBkYXRhIHR5cGUuCisgICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVFbGxpcHNlOjpjcmVh
dGUoKTsKKworICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50
KCk7IGFyZ3VtZW50OyBhcmd1bWVudCA9IGFyZ3MubmV4dCgpKSB7CisgICAgICAgIC8vIFRoZSBj
YWxsIHRvIHBhcnNlRmlsbFBvc2l0aW9uIGJlbG93IHNob3VsZCBjb25zdW1lIGFsbCBvZiB0aGUK
KyAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdGhyZWUuIFRodXMsIGFuIGlu
ZGV4IGdyZWF0ZXIgdGhhbiB0d28KKyAgICAgICAgLy8gaW5kaWNhdGVzIGFuIGludmFsaWQgcHJv
ZHVjdGlvbi4KKyAgICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4KCkgPiAyKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGFyZ3MuY3VycmVudEluZGV4KCkgPCAy
ICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZUF0KSB7CisgICAgICAgICAgICBpZiAoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKCphcmd1bWVudCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNoYXBlLT5yYWRpdXNYKCkpCisgICAgICAgICAgICAg
ICAgICAgIHNoYXBlLT5zZXRSYWRpdXNYKHJhZGl1cy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXNZKHJh
ZGl1cy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQgfHwgIWFyZ3MubmV4dCgpKSAvLyBl
eHBlY3RpbmcgZWxsaXBzZSguLiBhdCA8cG9zaXRpb24+KQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOworICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7CisgICAgICAgIHBhcnNlRmls
bFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgsIGNlbnRlclkpOworICAgICAgICBpZiAoIWNlbnRlclgg
fHwgIWNlbnRlclkgfHwgYXJncy5jdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWChjZW50ZXJYLnJlbGVhc2VOb25OdWxsKCkp
OworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShjZW50ZXJZLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHNoYXBlKTsKK30KKworUmVmUHRyPENTU0Jhc2lj
U2hhcGVQb2x5Z29uPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBhcmdzKQoreworICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLnNpemUoKTsKKyAg
ICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzaGFwZSA9
IENTU0Jhc2ljU2hhcGVQb2x5Z29uOjpjcmVhdGUoKTsKKworICAgIENTU1BhcnNlclZhbHVlKiBh
cmd1bWVudCA9IGFyZ3MuY3VycmVudCgpOworICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFs
dWVFdmVub2RkIHx8IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbnplcm8pIHsKKyAgICAgICAg
c2hhcGUtPnNldFdpbmRSdWxlKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgPyBSVUxF
X0VWRU5PREQgOiBSVUxFX05PTlpFUk8pOworCisgICAgICAgIGlmICghaXNDb21tYShhcmdzLm5l
eHQoKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhcmd1bWVudCA9
IGFyZ3MubmV4dCgpOworICAgICAgICBzaXplIC09IDI7CisgICAgfQorCisgICAgLy8gPGxlbmd0
aD4gPGxlbmd0aD4sIC4uLiA8bGVuZ3RoPiA8bGVuZ3RoPiAtPiBlYWNoIHBhaXIgaGFzIDMgZWxl
bWVudHMgZXhjZXB0IHRoZSBsYXN0IG9uZQorICAgIGlmICghc2l6ZSB8fCAoc2l6ZSAlIDMpIC0g
MikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1l
bnRYID0gYXJndW1lbnQ7CisgICAgd2hpbGUgKGFyZ3VtZW50WCkgeworCisgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnRYKTsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3Ro
IHwgRlBlcmNlbnQpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8g
eExlbmd0aCA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFhXaXRoQ2FsY3Vs
YXRpb24pOworCisgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFkgPSBhcmdzLm5leHQo
KTsKKyAgICAgICAgaWYgKCFhcmd1bWVudFkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRZV2l0aENhbGN1bGF0aW9uKCph
cmd1bWVudFkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFlXaXRoQ2FsY3Vs
YXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgYXV0byB5TGVuZ3RoID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3Vt
ZW50WVdpdGhDYWxjdWxhdGlvbik7CisKKyAgICAgICAgc2hhcGUtPmFwcGVuZFBvaW50KFdURk1v
dmUoeExlbmd0aCksIFdURk1vdmUoeUxlbmd0aCkpOworCisgICAgICAgIENTU1BhcnNlclZhbHVl
KiBjb21tYU9yTnVsbCA9IGFyZ3MubmV4dCgpOworICAgICAgICBpZiAoIWNvbW1hT3JOdWxsKQor
ICAgICAgICAgICAgYXJndW1lbnRYID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSBpZiAoIWlzQ29t
bWEoY29tbWFPck51bGwpKSAKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBl
bHNlIAorICAgICAgICAgICAgYXJndW1lbnRYID0gYXJncy5uZXh0KCk7CisgICAgfQorCisgICAg
cmV0dXJuIFdURk1vdmUoc2hhcGUpOworfQorCitSZWZQdHI8Q1NTQmFzaWNTaGFwZVBhdGg+IENT
U1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUGF0aChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCit7
CisgICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOworICAgIGlmIChzaXplICE9IDEgJiYg
c2l6ZSAhPSAzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdpbmRSdWxlIHdpbmRS
dWxlID0gUlVMRV9OT05aRVJPOworCisgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJn
cy5jdXJyZW50KCk7CisgICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgfHwg
YXJndW1lbnQtPmlkID09IENTU1ZhbHVlTm9uemVybykgeworICAgICAgICB3aW5kUnVsZSA9IGFy
Z3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQgPyBSVUxFX0VWRU5PREQgOiBSVUxFX05PTlpF
Uk87CisKKyAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3MubmV4dCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOworICAgIH0KKwor
ICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGJ5dGVTdHJlYW0gPSBzdGQ6Om1h
a2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOworICAgIGlmICghYnVpbGRTVkdQYXRoQnl0
ZVN0cmVhbUZyb21TdHJpbmcoYXJndW1lbnQtPnN0cmluZywgKmJ5dGVTdHJlYW0sIFVuYWx0ZXJl
ZFBhcnNpbmcpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2hhcGUgPSBD
U1NCYXNpY1NoYXBlUGF0aDo6Y3JlYXRlKFdURk1vdmUoYnl0ZVN0cmVhbSkpOworICAgIHNoYXBl
LT5zZXRXaW5kUnVsZSh3aW5kUnVsZSk7CisKKyAgICBhcmdzLm5leHQoKTsKKyAgICByZXR1cm4g
V1RGTW92ZShzaGFwZSk7Cit9CisKK3N0YXRpYyBib29sIGlzQm94VmFsdWUoQ1NTVmFsdWVJRCB2
YWx1ZUlkLCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKK3sKKyAgICBzd2l0Y2ggKHZhbHVlSWQpIHsK
KyAgICBjYXNlIENTU1ZhbHVlQ29udGVudEJveDoKKyAgICBjYXNlIENTU1ZhbHVlUGFkZGluZ0Jv
eDoKKyAgICBjYXNlIENTU1ZhbHVlQm9yZGVyQm94OgorICAgIGNhc2UgQ1NTVmFsdWVNYXJnaW5C
b3g6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTVmFsdWVGaWxsOgorICAgIGNh
c2UgQ1NTVmFsdWVTdHJva2U6CisgICAgY2FzZSBDU1NWYWx1ZVZpZXdCb3g6CisgICAgICAgIHJl
dHVybiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aDsKKyAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQW5kT3JCb3goQ1NTUHJvcGVydHlJRCBwcm9w
SWQpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKKworICAgIGJvb2wgc2hhcGVGb3VuZCA9IGZhbHNlOworICAgIGJvb2wgYm94Rm91bmQgPSBm
YWxzZTsKKyAgICBDU1NWYWx1ZUlEIHZhbHVlSWQ7CisKKyAgICBhdXRvIGxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI7ICsraSkgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHZhbHVlSWQgPSB2YWx1ZS0+aWQ7CisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgIXNoYXBlRm91bmQpIHsKKyAgICAgICAgICAgIC8v
IHBhcnNlQmFzaWNTaGFwZSBhbHJlYWR5IGFza3MgZm9yIHRoZSBuZXh0IHZhbHVlIGxpc3QgaXRl
bS4KKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZSA9IHBh
cnNlQmFzaWNTaGFwZSgpOworICAgICAgICAgICAgaWYgKCFzaGFwZVZhbHVlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHNoYXBlVmFs
dWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBzaGFwZUZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpc0JveFZhbHVlKHZhbHVlSWQsIHByb3BJZCkgJiYgIWJveEZvdW5k
KSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7
CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICBib3hGb3VuZCA9IHRydWU7CisgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgfQorCisgICAgaWYgKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBXVEZNb3ZlKGxpc3QpOworfQorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCitSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElk
KQoreworICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
OworICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOworCisgICAgaWYgKHZhbHVlSWQg
PT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZUlkKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7CisgICAg
aWYgKHZhbHVlSWQgIT0gQ1NTVmFsdWVOb25lICYmIHBhcnNlRmlsbEltYWdlKCptX3ZhbHVlTGlz
dCwgaW1hZ2VWYWx1ZSkpIHsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAg
cmV0dXJuIGltYWdlVmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHBhcnNlQmFzaWNTaGFwZUFu
ZE9yQm94KHByb3BJZCk7Cit9CisjZW5kaWYKKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQ2xpcFBhdGgoKQoreworICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOworICAgIENTU1ZhbHVlSUQgdmFsdWVJZCA9IHZhbHVlLmlkOworCisg
ICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKKyAgICB9CisgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuc3RyaW5nLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgfQorCisgICAgcmV0dXJuIHBhcnNlQmFz
aWNTaGFwZUFuZE9yQm94KENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgpOworfQorCitSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlKCkKK3sKKyAgICBD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBBU1NF
UlQodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pOworICAgIENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOworCisgICAgaWYg
KCFhcmdzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxDU1NCYXNpY1No
YXBlPiBzaGFwZTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICJjaXJjbGUoIikpCisgICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1No
YXBlQ2lyY2xlKCphcmdzKTsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImVsbGlwc2UoIikpCisgICAgICAgIHNoYXBlID0g
cGFyc2VCYXNpY1NoYXBlRWxsaXBzZSgqYXJncyk7CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwb2x5Z29uKCIpKQorICAg
ICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oKmFyZ3MpOworICAgIGVsc2UgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicGF0
aCgiKSkKKyAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVQYXRoKCphcmdzKTsKKyAgICBl
bHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFt
ZSwgImluc2V0KCIpKQorICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZUluc2V0KCphcmdz
KTsKKworICAgIGlmICghc2hhcGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKKyAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShzaGFwZS5yZWxlYXNlTm9uTnVsbCgpKTsKK30KKworLy8gWyAnZm9udC1zdHls
ZScgfHwgJ2ZvbnQtdmFyaWFudCcgfHwgJ2ZvbnQtd2VpZ2h0JyBdPyAnZm9udC1zaXplJyBbIC8g
J2xpbmUtaGVpZ2h0JyBdPyAnZm9udC1mYW1pbHknCitib29sIENTU1BhcnNlcjo6cGFyc2VGb250
KGJvb2wgaW1wb3J0YW50KQoreworICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGlu
aGVyaXQgb3IgaW5pdGlhbCBzb21ld2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92YWx1ZUxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX3ZhbHVlTGlzdC0+dmFsdWVBdChpKS0+aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IG1fdmFs
dWVMaXN0LT52YWx1ZUF0KGkpLT5pZCA9PSBDU1NWYWx1ZUluaXRpYWwpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NT
UHJvcGVydHlGb250KTsKKyAgICAvLyBPcHRpb25hbCBmb250LXN0eWxlLCBmb250LXZhcmlhbnQg
YW5kIGZvbnQtd2VpZ2h0LgorICAgIGJvb2wgZm9udFN0eWxlUGFyc2VkID0gZmFsc2U7CisgICAg
Ym9vbCBmb250VmFyaWFudFBhcnNlZCA9IGZhbHNlOworICAgIGJvb2wgZm9udFdlaWdodFBhcnNl
ZCA9IGZhbHNlOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKKyAgICB3aGlsZSAoKHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKKyAgICAgICAgaWYgKCFmb250U3R5bGVQYXJz
ZWQgJiYgaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxl
LCB2YWx1ZS0+aWQsIG1fY29udGV4dCwgbV9zdHlsZVNoZWV0KSkgeworICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CisgICAgICAgICAg
ICBmb250U3R5bGVQYXJzZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCFmb250VmFyaWFu
dFBhcnNlZCAmJiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZVNtYWxsQ2FwcykpIHsKKyAgICAgICAgICAgIC8vIEZvbnQgdmFyaWFudCBpbiB0aGUg
c2hvcnRoYW5kIGlzIHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0cyBub3JtYWwgb3Igc21hbGwt
Y2Fwcy4KKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBz
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgZm9udFZhcmlhbnRQYXJzZWQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKCFmb250V2VpZ2h0UGFyc2VkICYmIHBhcnNlRm9udFdlaWdodChp
bXBvcnRhbnQpKQorICAgICAgICAgICAgZm9udFdlaWdodFBhcnNlZCA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwor
ICAgIH0KKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZm9udFN0eWxlUGFyc2VkKQorICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOworICAgIGlmICghZm9udFZhcmlhbnRQYXJz
ZWQpCisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgaWYgKCFmb250V2VpZ2h0UGFyc2VkKQorICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0
cnVlKTsKKworICAgIC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KKyAgICAvLyA8YWJz
b2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8
IGluaGVyaXQKKyAgICBpZiAoIXBhcnNlRm9udFNpemUoaW1wb3J0YW50KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc0ZvcndhcmRTbGFz
aE9wZXJhdG9yKCp2YWx1ZSkpIHsKKyAgICAgICAgLy8gVGhlIGxpbmUtaGVpZ2h0IHByb3BlcnR5
LgorICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VMaW5lSGVp
Z2h0KGltcG9ydGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlCisg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRh
bnQsIHRydWUpOworCisgICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlZEZhbWlseVZhbHVlID0gcGFyc2VGb250RmFtaWx5KCk7CisgICAg
aWYgKCFwYXJzZWRGYW1pbHlWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRGYW1pbHlWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpLCBpbXBvcnRhbnQpOworCisgICAgLy8gRklYTUU6IGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMDMyNC8jZm9udC1wcm9wIHJlcXVpcmVzIHRoYXQK
KyAgICAvLyAiZm9udC1zdHJldGNoIiwgImZvbnQtc2l6ZS1hZGp1c3QiLCBhbmQgImZvbnQta2Vy
bmluZyIgYmUgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMKKyAgICAvLyBidXQgd2UgZG9u
J3Qgc2VlbSB0byBzdXBwb3J0IHRoZW0gYXQgdGhlIG1vbWVudC4gVGhleSBzaG91bGQgYWxzbyBi
ZSBhZGRlZCBoZXJlIG9uY2UgaW1wbGVtZW50ZWQuCisgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wb3J0YW50KQoreworICAgIEFT
U0VSVChtX3ZhbHVlTGlzdC0+c2l6ZSgpID09IDEpOworICAgIENTU1ZhbHVlSUQgc3lzdGVtRm9u
dElEID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCktPmlkOworICAgIEFTU0VSVChzeXN0ZW1Gb250
SUQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIHN5c3RlbUZvbnRJRCA8PSBDU1NWYWx1ZVN0YXR1c0Jh
cik7CisgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOworICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lz
dGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7CisgICAgaWYgKCFmb250RGVz
Y3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ug
bXVzdCBzZXQgZm9udCdzIGNvbnN0aXR1ZW50IHByb3BlcnRpZXMsIGV2ZW4gZm9yIHN5c3RlbSBm
b250cywgc28gdGhlIGNhc2NhZGUgZnVuY3Rpb25zIGNvcnJlY3RseS4KKyAgICBTaG9ydGhhbmRT
Y29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZvbnQpOworICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFN0eWxlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShmb250RGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uID8gQ1NTVmFs
dWVJdGFsaWMgOiBDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlGb250V2VpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKSwgaW1wb3J0YW50KTsKKyAgICBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5TGlz
dCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICBmb250RmFtaWx5
TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZh
bHVlKGZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdCgwKSwgRnJvbVN5c3RlbUZvbnRJRDo6WWVzKSk7
CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBXVEZNb3ZlKGZvbnRGYW1p
bHlMaXN0KSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOworfQorCitjbGFzcyBGb250RmFtaWx5VmFs
dWVCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyKENTU1ZhbHVl
TGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBhZGQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBp
ZiAoIW1fYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKCcg
Jyk7CisKKyAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICAgICAgbV9idWls
ZGVyLmFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIH0KKworICAgIHZvaWQg
Y29tbWl0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1aWxkZXIuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2xpc3QuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKG1fYnVpbGRlci50b1N0cmluZygpKSk7CisgICAg
ICAgIG1fYnVpbGRlci5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdCdWls
ZGVyIG1fYnVpbGRlcjsKKyAgICBDU1NWYWx1ZUxpc3QmIG1fbGlzdDsKK307CisKK3N0YXRpYyBi
b29sIHZhbHVlSXNDU1NLZXl3b3JkKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBhZGQgInVuc2V0Iiwgd2Ugc2hvdWxkIGhhbmRsZSBpdCBoZXJl
LgorICAgIHJldHVybiB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgdmFsdWUuaWQgPT0g
Q1NTVmFsdWVJbmhlcml0IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRGVmYXVsdDsKK30KKworUmVm
UHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQoreworICAgIGF1
dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworCisgICAgRm9udEZh
bWlseVZhbHVlQnVpbGRlciBmYW1pbHlCdWlsZGVyKGxpc3QpOworICAgIGJvb2wgaW5GYW1pbHkg
PSBmYWxzZTsKKworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICBDU1NQYXJzZXJWYWx1ZSog
bmV4dFZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgYm9vbCBuZXh0VmFsQnJl
YWtzRm9udCA9ICFuZXh0VmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChuZXh0VmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG5leHRWYWx1
ZS0+aVZhbHVlID09ICcsJyk7CisgICAgICAgIGJvb2wgbmV4dFZhbElzRm9udE5hbWUgPSBuZXh0
VmFsdWUgJiYKKyAgICAgICAgICAgICgobmV4dFZhbHVlLT5pZCA+PSBDU1NWYWx1ZVNlcmlmICYm
IG5leHRWYWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRCb2R5KSB8fAorICAgICAgICAgICAgKG5l
eHRWYWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBuZXh0VmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkpOworCisgICAgICAgIGJv
b2wgdmFsdWVJc0tleXdvcmQgPSB2YWx1ZUlzQ1NTS2V5d29yZCgqdmFsdWUpOworICAgICAgICBp
ZiAodmFsdWVJc0tleXdvcmQgJiYgIWluRmFtaWx5KSB7CisgICAgICAgICAgICBpZiAobmV4dFZh
bEJyZWFrc0ZvbnQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OworICAgICAgICAgICAgZWxzZSBpZiAobmV4dFZhbElzRm9udE5hbWUpCisgICAgICAgICAgICAg
ICAgdmFsdWUgPSBuZXh0VmFsdWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVTZXJpZiAmJiB2YWx1ZS0+aWQgPD0g
Q1NTVmFsdWVXZWJraXRCb2R5KSB7CisgICAgICAgICAgICBpZiAoaW5GYW1pbHkpCisgICAgICAg
ICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICBl
bHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQoKTsKKyAgICAgICAgICAgICAgICBmYW1pbHlCdWls
ZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpbkZhbWlseSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKKyAgICAgICAgICAgIC8vIFN0cmluZ3MgbmV2ZXIg
c2hhcmUgaW4gYSBmYW1pbHkgbmFtZS4KKyAgICAgICAgICAgIGluRmFtaWx5ID0gZmFsc2U7Cisg
ICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgpOworICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHZhbHVl
LT5zdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKSB7CisgICAgICAgICAgICBpZiAoaW5GYW1pbHkpCisgICAgICAg
ICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICBl
bHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9u
dEZhbWlseVZhbHVlKHZhbHVlLT5zdHJpbmcpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7CisgICAgICAgICAgICAgICAgZmFtaWx5
QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICAgICAgaW5GYW1pbHkgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5leHRWYWx1ZSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmIChuZXh0VmFsQnJlYWtzRm9udCkgeworICAgICAgICAgICAgdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQo
KTsKKyAgICAgICAgICAgIGluRmFtaWx5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobmV4dFZhbElzRm9udE5hbWUpCisgICAgICAgICAgICB2YWx1ZSA9IG5leHRWYWx1ZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZhbWlseUJ1aWxk
ZXIuY29tbWl0KCk7CisKKyAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKK30KKworYm9vbCBDU1NQYXJzZXI6
OnBhcnNlTGluZUhlaWdodChib29sIGltcG9ydGFudCkKK3sKKyAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAg
Q1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CisgICAgYm9v
bCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOworICAgIC8vIG5vcm1hbCB8IDxudW1iZXI+IHwgPGxl
bmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CisgICAgaWYgKGlkID09IENTU1ZhbHVlTm9y
bWFsKQorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOworICAgIGlmICh2YWxp
ZFByaW1pdGl2ZSAmJiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkgfHwgaW5TaG9ydGhhbmQoKSkpCisg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VWYWxpZFByaW1p
dGl2ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOworICAgIHJldHVybiB2
YWxpZFByaW1pdGl2ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFNpemUoYm9vbCBp
bXBvcnRhbnQpCit7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRp
b24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOworICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxz
ZTsKKyAgICAvLyA8YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8
IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKKyAgICBpZiAoaWQgPj0gQ1NTVmFsdWVYeFNtYWxsICYm
IGlkIDw9IENTU1ZhbHVlTGFyZ2VyKQorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Cisg
ICAgZWxzZQorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZyk7CisgICAgaWYgKHZhbGlk
UHJpbWl0aXZlICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKKyAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VWYWxpZFByaW1pdGl2
ZShpZCwgdmFsdWVXaXRoQ2FsY3VsYXRpb24pLCBpbXBvcnRhbnQpOworICAgIHJldHVybiB2YWxp
ZFByaW1pdGl2ZTsKK30KKworc3RhdGljIENTU1ZhbHVlSUQgY3JlYXRlRm9udFdlaWdodFZhbHVl
S2V5d29yZChpbnQgd2VpZ2h0KQoreworICAgIEFTU0VSVCghKHdlaWdodCAlIDEwMCkgJiYgd2Vp
Z2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKTsKKyAgICBDU1NWYWx1ZUlEIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVJRD4oQ1NTVmFsdWUxMDAgKyB3ZWlnaHQgLyAxMDAgLSAxKTsKKyAg
ICBBU1NFUlQodmFsdWUgPj0gQ1NTVmFsdWUxMDAgJiYgdmFsdWUgPD0gQ1NTVmFsdWU5MDApOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFdlaWdodChi
b29sIGltcG9ydGFudCkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICBpZiAoKHZhbHVlLmlkID49IENTU1ZhbHVlTm9ybWFsKSAmJiAo
dmFsdWUuaWQgPD0gQ1NTVmFsdWU5MDApKSB7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUuaWQpLCBpbXBvcnRhbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwor
ICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5v
bk5lZywgQ1NTUXVpcmtzTW9kZSkpIHsKKyAgICAgICAgaW50IHdlaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIGlmICgh
KHdlaWdodCAlIDEwMCkgJiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7CisgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNyZWF0ZUZvbnRXZWlnaHRWYWx1ZUtl
eXdvcmQod2VpZ2h0KSksIGltcG9ydGFudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZvbnRTeW50aGVzaXMoYm9vbCBpbXBvcnRhbnQpCit7CisgICAgLy8gbm9uZSB8IFsgd2Vp
Z2h0IHx8IHN0eWxlIF0KKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7
CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpcywgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1w
b3J0YW50KTsKKyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgYm9vbCBlbmNvdW50ZXJlZFdlaWdodCA9IGZhbHNlOworICAgIGJv
b2wgZW5jb3VudGVyZWRTdHlsZSA9IGZhbHNlOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAg
ICBzd2l0Y2ggKHZhbHVlLT5pZCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0OgorICAg
ICAgICAgICAgZW5jb3VudGVyZWRXZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTdHlsZToKKyAgICAgICAgICAgIGVuY291bnRlcmVkU3R5bGUg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgIH0KKworICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3Bh
Y2VTZXBhcmF0ZWQoKTsKKyAgICBpZiAoZW5jb3VudGVyZWRXZWlnaHQpCisgICAgICAgIGxpc3Qt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVdlaWdodCkpOworICAgIGlmIChlbmNvdW50ZXJlZFN0eWxlKQorICAgICAgICBsaXN0
LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVTdHlsZSkpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN5bnRoZXNp
cywgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmNVUkkoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3Qp
Cit7CisgICAgYXV0byB1cmlWYWx1ZSA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZShjb21w
bGV0ZVVSTChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5zdHJpbmcpKTsKKworICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgaWYgKCF2YWx1ZSkgewor
ICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUodXJpVmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6
T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpIHsKKyAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICAgICAgdmFsdWVMaXN0LmFwcGVuZChXVEZNb3ZlKHVyaVZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQ
YXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLT5mdW5jdGlvbi0+bmFtZSwgImZvcm1hdCgiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gRklYTUU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy1mb250cy0y
MDExMTAwNC8gc2F5cyB0aGF0IGZvcm1hdCgpIGNvbnRhaW5zIGEgY29tbWEtc2VwYXJhdGVkIGxp
c3Qgb2Ygc3RyaW5ncywKKyAgICAvLyBidXQgQ1NTRm9udEZhY2VTcmNWYWx1ZSBzdG9yZXMgb25s
eSBvbmUgZm9ybWF0LiBBbGxvd2luZyBvbmUgZm9ybWF0IGZvciBub3cuCisgICAgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOworICAgIGlmICgh
YXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSB8fCAoYXJncy0+Y3VycmVudCgpLT51bml0ICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HICYmIGFyZ3MtPmN1cnJlbnQoKS0+dW5pdCAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJncy0+Y3VycmVudCgpLT5zdHJpbmcpOworICAgIHZhbHVl
TGlzdC5hcHBlbmQoV1RGTW92ZSh1cmlWYWx1ZSkpOworICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywnKQorICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VGb250
RmFjZVNyY0xvY2FsKENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0KQoreworICAgIENTU1BhcnNlclZh
bHVlTGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOworICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoYXJncy0+c2l6ZSgpID09IDEgJiYgYXJncy0+Y3VycmVudCgpLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAgICB2YWx1ZUxpc3QuYXBw
ZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZ3MtPmN1cnJlbnQoKS0+c3Ry
aW5nKSk7CisgICAgZWxzZSBpZiAoYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
ICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiBsb2NhbFZhbHVlID0gYXJncy0+Y3VycmVudCgpOyBs
b2NhbFZhbHVlOyBsb2NhbFZhbHVlID0gYXJncy0+bmV4dCgpKSB7CisgICAgICAgICAgICBpZiAo
bG9jYWxWYWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGxvY2FsVmFsdWUtPnN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgdmFs
dWVMaXN0LmFwcGVuZChDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChidWlsZGVyLnRv
U3RyaW5nKCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAg
aWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZh
bHVlID09ICcsJykKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCit7
CisgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CisKKyAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSkgeworICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VGb250RmFjZVNyY1VSSSh2YWx1ZXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAibG9jYWwoIikpIHsKKyAgICAgICAgICAg
IGlmICghcGFyc2VGb250RmFjZVNyY0xvY2FsKHZhbHVlcykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVNyYywgV1RGTW92ZSh2YWx1ZXMpLCBtX2ltcG9y
dGFudCk7CisgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKQoreworICAgIGF1dG8g
dmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgIGJvb2wg
ZmFpbGVkID0gZmFsc2U7CisgICAgYm9vbCBvcGVyYXRvckV4cGVjdGVkID0gZmFsc2U7CisgICAg
Zm9yICg7IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IG1fdmFsdWVMaXN0LT5uZXh0KCksIG9wZXJh
dG9yRXhwZWN0ZWQgPSAhb3BlcmF0b3JFeHBlY3RlZCkgeworICAgICAgICBpZiAob3BlcmF0b3JF
eHBlY3RlZCkgeworICAgICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlW
YWx1ZSA9PSAnLCcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmYWls
ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTklD
T0RFX1JBTkdFKSB7CisgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBtX3ZhbHVlTGlz
dC0+Y3VycmVudCgpLT5zdHJpbmc7CisgICAgICAgIFVDaGFyMzIgZnJvbSA9IDA7CisgICAgICAg
IFVDaGFyMzIgdG8gPSAwOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSByYW5nZVN0cmluZy5s
ZW5ndGgoKTsKKworICAgICAgICBpZiAobGVuZ3RoIDwgMykgeworICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDI7CisgICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBVQ2hh
ciBjID0gcmFuZ2VTdHJpbmdbaV07CisgICAgICAgICAgICBpZiAoYyA9PSAnLScgfHwgYyA9PSAn
PycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmcm9tICo9IDE2OworICAg
ICAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorICAgICAgICAgICAgICAgIGZyb20g
Kz0gYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQor
ICAgICAgICAgICAgICAgIGZyb20gKz0gMTAgKyBjIC0gJ0EnOworICAgICAgICAgICAgZWxzZSBp
ZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisgICAgICAgICAgICAgICAgZnJvbSArPSAxMCArIGMg
LSAnYSc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSsr
OworICAgICAgICB9CisgICAgICAgIGlmIChmYWlsZWQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAoaSA9PSBsZW5ndGgpCisgICAgICAgICAgICB0byA9IGZyb207CisgICAgICAg
IGVsc2UgaWYgKHJhbmdlU3RyaW5nW2ldID09ICc/JykgeworICAgICAgICAgICAgdW5zaWduZWQg
c3BhbiA9IDE7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiByYW5nZVN0cmluZ1tp
XSA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICBzcGFuICo9IDE2OworICAgICAgICAgICAgICAg
IGZyb20gKj0gMTY7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHRvID0gZnJvbSArIHNwYW4gLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGxlbmd0aCA8IGkgKyAyKSB7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkr
KzsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgVUNo
YXIgYyA9IHJhbmdlU3RyaW5nW2ldOworICAgICAgICAgICAgICAgIHRvICo9IDE2OworICAgICAg
ICAgICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAg
dG8gKz0gYyAtICcwJzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9
ICdGJykKKyAgICAgICAgICAgICAgICAgICAgdG8gKz0gMTAgKyBjIC0gJ0EnOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorICAgICAgICAgICAgICAgICAg
ICB0byArPSAxMCArIGMgLSAnYSc7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmcm9tIDw9IHRvKQorICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVW5p
Y29kZVJhbmdlVmFsdWU6OmNyZWF0ZShmcm9tLCB0bykpOworICAgIH0KKyAgICBpZiAoZmFpbGVk
IHx8ICF2YWx1ZXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UsIFdURk1vdmUodmFsdWVzKSwgbV9pbXBvcnRh
bnQpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyB3aGljaCBmb3JtIGEgdmFsaWQgZG91YmxlCisvLyBhbmQgYXJlIHRlcm1pbmF0ZWQg
YnkgdGhlIGdpdmVuIHRlcm1pbmF0b3IgY2hhcmFjdGVyCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KK3N0YXRpYyBpbnQgY2hlY2tGb3JWYWxpZERvdWJsZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJt
aW5hdG9yKQoreworICAgIGludCBsZW5ndGggPSBlbmQgLSBzdHJpbmc7CisgICAgaWYgKGxlbmd0
aCA8IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBm
YWxzZTsKKyAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9y
KSB7CisgICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgeworICAg
ICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKKyAgICAg
ICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlY2lt
YWxNYXJrU2VlbiAmJiBwcm9jZXNzZWRMZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gcHJvY2Vzc2VkTGVuZ3RoOworfQorCisvLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyBjb25zdW1lZCBmb3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQorLy8gdGVy
bWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGludCBwYXJzZURvdWJsZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJt
aW5hdG9yLCBkb3VibGUmIHZhbHVlKQoreworICAgIGludCBsZW5ndGggPSBjaGVja0ZvclZhbGlk
RG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIGRvdWJsZSBsb2NhbFZh
bHVlID0gMDsKKworICAgIC8vIFRoZSBjb25zdW1lZCBjaGFyYWN0ZXJzIGhlcmUgYXJlIGd1YXJh
bnRlZWQgdG8gYmUKKyAgICAvLyBBU0NJSSBkaWdpdHMgd2l0aCBvciB3aXRob3V0IGEgZGVjaW1h
bCBtYXJrCisgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoOyArK3Bvc2l0aW9uKSB7CisgICAg
ICAgIGlmIChzdHJpbmdbcG9zaXRpb25dID09ICcuJykKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1ZSAqIDEwICsgc3RyaW5nW3Bvc2l0aW9uXSAtICcw
JzsKKyAgICB9CisKKyAgICBpZiAoKytwb3NpdGlvbiA9PSBsZW5ndGgpIHsKKyAgICAgICAgdmFs
dWUgPSBsb2NhbFZhbHVlOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAgIGRv
dWJsZSBmcmFjdGlvbiA9IDA7CisgICAgZG91YmxlIHNjYWxlID0gMTsKKworICAgIHdoaWxlIChw
b3NpdGlvbiA8IGxlbmd0aCAmJiBzY2FsZSA8IE1BWF9TQ0FMRSkgeworICAgICAgICBmcmFjdGlv
biA9IGZyYWN0aW9uICogMTAgKyBzdHJpbmdbcG9zaXRpb24rK10gLSAnMCc7CisgICAgICAgIHNj
YWxlICo9IDEwOworICAgIH0KKworICAgIHZhbHVlID0gbG9jYWxWYWx1ZSArIGZyYWN0aW9uIC8g
c2NhbGU7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CitzdGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IENo
YXJhY3RlclR5cGUqJiBzdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hh
ciB0ZXJtaW5hdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBleHBlY3QsIGludCYg
dmFsdWUpCit7CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHN0cmluZzsKKyAg
ICBkb3VibGUgbG9jYWxWYWx1ZSA9IDA7CisgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOworICAg
IHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCisgICAgICAg
IGN1cnJlbnQrKzsKKyAgICBpZiAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPT0gJy0nKSB7
CisgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKKyAgICAgICAgY3VycmVudCsrOworICAgIH0KKyAg
ICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNBU0NJSURpZ2l0
KCpjdXJyZW50KSkgeworICAgICAgICBkb3VibGUgbmV3VmFsdWUgPSBsb2NhbFZhbHVlICogMTAg
KyAqY3VycmVudCsrIC0gJzAnOworICAgICAgICBpZiAobmV3VmFsdWUgPj0gMjU1KSB7CisgICAg
ICAgICAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMjU1LgorICAgICAgICAgICAgbG9jYWxWYWx1ZSA9
IDI1NTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQo
KmN1cnJlbnQpKQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGxvY2FsVmFsdWUgPSBuZXdWYWx1ZTsKKyAgICB9CisKKyAg
ICBpZiAoY3VycmVudCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChl
eHBlY3QgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50ID09ICcu
JyB8fCAqY3VycmVudCA9PSAnJScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
KmN1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRoZSBpbnRl
Z3JhbCBwYXJ0LCB0cnkgdG8gcGFyc2UKKyAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBhcnQgb2Yg
dGhlIHBlcmNlbnRhZ2UgdmFsdWUuCisgICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMDsKKyAg
ICAgICAgaW50IG51bUNoYXJhY3RlcnNQYXJzZWQgPSBwYXJzZURvdWJsZShjdXJyZW50LCBlbmQs
ICclJywgcGVyY2VudGFnZSk7CisgICAgICAgIGlmICghbnVtQ2hhcmFjdGVyc1BhcnNlZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVudCArPSBudW1DaGFyYWN0ZXJz
UGFyc2VkOworICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRhZ2U7CisgICAgfQorCisgICAg
aWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgKmN1cnJl
bnQgIT0gJyUnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKmN1cnJlbnQgPT0g
JyUnKSB7CisgICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RTsKKyAgICAgICAgbG9jYWxWYWx1ZSA9IGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4wOworICAg
ICAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMjU1IGZvciBwZXJjZW50YWdlcyBvdmVyIDEwMCUKKyAg
ICAgICAgaWYgKGxvY2FsVmFsdWUgPiAyNTUpCisgICAgICAgICAgICBsb2NhbFZhbHVlID0gMjU1
OworICAgICAgICBjdXJyZW50Kys7CisgICAgfSBlbHNlCisgICAgICAgIGV4cGVjdCA9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworCisgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYm
IGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKKyAgICAgICAgY3VycmVudCsrOworICAgIGlmIChjdXJy
ZW50ID09IGVuZCB8fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAvLyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVyby4KKyAgICB2YWx1ZSA9
IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4obG9jYWxWYWx1ZSk7CisgICAgc3RyaW5n
ID0gY3VycmVudDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50aEFscGhhKGNvbnN0IENoYXJh
Y3RlclR5cGUqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKK3sKKyAgICAvLyAiMC5YIgorICAg
IGlmIChsZW5ndGggPT0gMyAmJiBzdHJpbmdbMF0gPT0gJzAnICYmIHN0cmluZ1sxXSA9PSAnLicg
JiYgaXNBU0NJSURpZ2l0KHN0cmluZ1syXSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gIi5YIgorICAgIGlmIChsZW5ndGggPT0gMiAmJiBzdHJpbmdbMF0gPT0gJy4nICYmIGlzQVND
SUlEaWdpdChzdHJpbmdbMV0pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5s
aW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IENoYXJhY3RlclR5cGUqJiBzdHJpbmcsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVl
KQoreworICAgIHdoaWxlIChzdHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJpbmcpKQor
ICAgICAgICArK3N0cmluZzsKKworICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKKworICAgIGlm
IChzdHJpbmcgIT0gZW5kICYmICpzdHJpbmcgPT0gJy0nKSB7CisgICAgICAgIG5lZ2F0aXZlID0g
dHJ1ZTsKKyAgICAgICAgKytzdHJpbmc7CisgICAgfQorCisgICAgdmFsdWUgPSAwOworCisgICAg
aW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKKyAgICBpZiAobGVuZ3RoIDwgMikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0cmluZ1tsZW5ndGggLSAxXSAhPSB0ZXJtaW5hdG9y
IHx8ICFpc0FTQ0lJRGlnaXQoc3RyaW5nW2xlbmd0aCAtIDJdKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHN0cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBz
dHJpbmdbMF0gIT0gJy4nKSB7CisgICAgICAgIGlmIChjaGVja0ZvclZhbGlkRG91YmxlKHN0cmlu
ZywgZW5kLCB0ZXJtaW5hdG9yKSkgeworICAgICAgICAgICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAg
OiAyNTU7CisgICAgICAgICAgICBzdHJpbmcgPSBlbmQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxl
bmd0aCA9PSAyICYmIHN0cmluZ1swXSAhPSAnLicpIHsKKyAgICAgICAgdmFsdWUgPSAhbmVnYXRp
dmUgJiYgc3RyaW5nWzBdID09ICcxJyA/IDI1NSA6IDA7CisgICAgICAgIHN0cmluZyA9IGVuZDsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGlzVGVudGhBbHBoYShzdHJp
bmcsIGxlbmd0aCAtIDEpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgdGVudGhBbHBoYVZh
bHVlc1tdID0geyAwLCAyNSwgNTEsIDc2LCAxMDIsIDEyNywgMTUzLCAxNzksIDIwNCwgMjMwIH07
CisgICAgICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogdGVudGhBbHBoYVZhbHVlc1tzdHJpbmdb
bGVuZ3RoIC0gMl0gLSAnMCddOworICAgICAgICBzdHJpbmcgPSBlbmQ7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGRvdWJsZSBhbHBoYSA9IDA7CisgICAgaWYgKCFwYXJzZURv
dWJsZShzdHJpbmcsIGVuZCwgdGVybWluYXRvciwgYWxwaGEpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGFscGhhICog
bmV4dGFmdGVyKDI1Ni4wLCAwLjApKTsKKyAgICBzdHJpbmcgPSBlbmQ7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGlu
ZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgNSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBjaGFyYWN0ZXJzWzRdID09ICcoJworICAgICAgICAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMF0sICdyJykKKyAgICAgICAgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzFdLCAnZycpCisgICAgICAgICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1syXSwgJ2InKQorICAgICAgICAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbM10sICdhJyk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlm
IChsZW5ndGggPCA0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoYXJhY3Rl
cnNbM10gPT0gJygnCisgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFj
dGVyc1swXSwgJ3InKQorICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJh
Y3RlcnNbMV0sICdnJykKKyAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFy
YWN0ZXJzWzJdLCAnYicpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3N0YXRpYyBpbmxpbmUgYm9vbCBmYXN0UGFyc2VDb2xvckludGVybmFsKFJHQkEzMiYgcmdiLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGggLCBib29sIHN0
cmljdCkKK3sKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV4cGVjdCA9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAgICAKKyAgICBpZiAoIXN0cmljdCAmJiBsZW5n
dGggPj0gMykgeworICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKKyAgICAgICAg
ICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSwg
cmdiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJn
YikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBUcnkgcmdiYSgpIHN5bnRheC4KKyAgICBpZiAobWlnaHRCZVJHQkEoY2hhcmFjdGVycywg
bGVuZ3RoKSkgeworICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gY2hhcmFj
dGVycyArIDU7CisgICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMg
KyBsZW5ndGg7CisgICAgICAgIGludCByZWQ7CisgICAgICAgIGludCBncmVlbjsKKyAgICAgICAg
aW50IGJsdWU7CisgICAgICAgIGludCBhbHBoYTsKKyAgICAgICAgCisgICAgICAgIGlmICghcGFy
c2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBl
cmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3Vy
cmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmdiID0gbWFrZVJHQkEocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBUcnkgcmdiKCkgc3ludGF4LgorICAgIGlmIChtaWdodEJlUkdCKGNoYXJhY3RlcnMsIGxlbmd0
aCkpIHsKKyAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogY3VycmVudCA9IGNoYXJhY3RlcnMg
KyA0OworICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVu
Z3RoOworICAgICAgICBpbnQgcmVkOworICAgICAgICBpbnQgZ3JlZW47CisgICAgICAgIGludCBi
bHVlOworICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5k
LCAnLCcsIGV4cGVjdCwgcmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3Qs
IGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJnYiA9IG1ha2VSR0IocmVkLCBncmVlbiwg
Ymx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KK2Jvb2wgQ1NTUGFyc2VyOjpmYXN0
UGFyc2VDb2xvcihSR0JBMzImIHJnYiwgY29uc3QgU3RyaW5nVHlwZSYgbmFtZSwgYm9vbCBzdHJp
Y3QpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBib29sIHBh
cnNlUmVzdWx0OworCisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICBwYXJzZVJlc3VsdCA9IGZhc3RQYXJzZUNv
bG9ySW50ZXJuYWwocmdiLCBuYW1lLmNoYXJhY3RlcnM4KCksIGxlbmd0aCwgc3RyaWN0KTsKKyAg
ICBlbHNlCisgICAgICAgIHBhcnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChyZ2Is
IG5hbWUuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgc3RyaWN0KTsKKworICAgIGlmIChwYXJzZVJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUcnkgbmFtZWQgY29sb3JzLgor
ICAgIENvbG9yIHRjOworICAgIHRjLnNldE5hbWVkQ29sb3IobmFtZSk7CisgICAgaWYgKHRjLmlz
VmFsaWQoKSkgeworICAgICAgICByZ2IgPSB0Yy5yZ2IoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2lubGluZSBkb3VibGUgQ1NTUGFy
c2VyOjpwYXJzZWREb3VibGUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0
aW9uKQoreworICAgIHJldHVybiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpID8g
dmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKS0+ZG91YmxlVmFsdWUoKSA6IHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOworfQorCitib29sIENTU1BhcnNlcjo6aXND
YWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLnVu
aXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisgICAgICAgICYmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImNhbGMoIikKKyAgICAgICAg
ICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiLXdlYmtpdC1jYWxjKCIpKTsKK30KKworaW5saW5lIGludCBDU1NQYXJzZXI6OmNvbG9ySW50
RnJvbVZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKK3sK
KyAgICBib29sIGlzUGVyY2VudDsKKyAgICAKKyAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24u
Y2FsY3VsYXRpb24oKSkKKyAgICAgICAgaXNQZXJjZW50ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24u
Y2FsY3VsYXRpb24oKS0+Y2F0ZWdvcnkoKSA9PSBDYWxjUGVyY2VudDsKKyAgICBlbHNlCisgICAg
ICAgIGlzUGVyY2VudCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisKKyAgICBjb25zdCBkb3VibGUgZG91Ymxl
VmFsdWUgPSBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgIAorICAgIGlm
IChkb3VibGVWYWx1ZSA8PSAwLjApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlzUGVy
Y2VudCkgeworICAgICAgICBpZiAoZG91YmxlVmFsdWUgPj0gMTAwLjApCisgICAgICAgICAgICBy
ZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihkb3VibGVWYWx1ZSAq
IDI1Ni4wIC8gMTAwLjApOworICAgIH0KKworICAgIGlmIChkb3VibGVWYWx1ZSA+PSAyNTUuMCkK
KyAgICAgICAgcmV0dXJuIDI1NTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGRvdWJs
ZVZhbHVlKTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEpCit7Cisg
ICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbigq
YXJncy0+Y3VycmVudCgpKTsKKyAgICBVbml0cyB1bml0VHlwZSA9IEZVbmtub3duOworICAgIC8v
IEdldCB0aGUgZmlyc3QgdmFsdWUgYW5kIGl0cyB0eXBlCisgICAgaWYgKHZhbGlkYXRlVW5pdChm
aXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpCisg
ICAgICAgIHVuaXRUeXBlID0gRkludGVnZXI7CisgICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZp
cnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBjb2xvckFycmF5WzBdID0gY29sb3JJbnRGcm9tVmFsdWUoZmlyc3RBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbik7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsK
KyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQgPSAqYXJncy0+bmV4dCgp
OworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpP
cGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9tVmFs
dWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOworICAgIH0KKyAgICBpZiAocGFyc2VBbHBoYSkg
eworICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0
KCk7CisgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VkRG91
YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgLy8gQ29udmVydCB0aGUgZmxv
YXRpbmcgcG9pbnRlciBudW1iZXIgb2YgYWxwaGEgdG8gYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ug
WzAsIDI1NiksCisgICAgICAgIC8vIHdpdGggYW4gZXF1YWwgZGlzdHJpYnV0aW9uIGFjcm9zcyBh
bGwgMjU2IHZhbHVlcy4KKyAgICAgICAgY29sb3JBcnJheVszXSA9IHN0YXRpY19jYXN0PGludD4o
c3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIGRvdWJsZVZhbHVlKSkgKiBu
ZXh0YWZ0ZXIoMjU2LjAsIDAuMCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
VGhlIENTUzMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgYSBIU0wgY29sb3Ig
YXMKKy8vIGhzbCg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2VudD4pCisvLyBhbmQgd2l0aCBh
bHBoYSwgdGhlIGZvcm1hdCBpcworLy8gaHNsYSg8bnVtYmVyPiwgPHBlcmNlbnQ+LCA8cGVyY2Vu
dD4sIDxudW1iZXI+KQorLy8gVGhlIGZpcnN0IHZhbHVlLCBIVUUsIGlzIGluIGFuIGFuZ2xlIHdp
dGggYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MAorYm9vbCBDU1NQYXJzZXI6OnBhcnNlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwgYm9vbCBw
YXJzZUFscGhhKQoreworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0
aW9uLT5hcmdzLmdldCgpOworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CisgICAgLy8gR2V0IHRoZSBmaXJzdCB2
YWx1ZQorICAgIGlmICghdmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
bm9ybWFsaXplIHRoZSBIdWUgdmFsdWUgYW5kIGNoYW5nZSBpdCB0byBiZSBiZXR3ZWVuIDAgYW5k
IDEuMAorICAgIGNvbG9yQXJyYXlbMF0gPSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJs
ZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAz
NjAuMDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7ICsraSkgeworICAgICAgICBDU1NQYXJz
ZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7CisgICAgICAgIGlmIChv
cGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJh
dG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3Mt
Pm5leHQoKSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRv
dWJsZT4oMTAwLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkgLyAxMDAu
MDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKKyAgICB9CisgICAgaWYg
KHBhcnNlQWxwaGEpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIG9wZXJhdG9yQXJndW1lbnQg
PSAqYXJncy0+bmV4dCgpOworICAgICAgICBpZiAob3BlcmF0b3JBcmd1bWVudC51bml0ICE9IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFyZ3VtZW50LmlWYWx1ZSAhPSAnLCcp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0KCkpOworICAgICAgICBpZiAoIXZh
bGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgQ1NTU3RyaWN0TW9k
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbG9yQXJyYXlbM10gPSBz
dGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQoreworICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGlm
ICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZSA/ICp2YWx1ZSA6ICptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpLCBjKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjKTsKK30KKworYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBSR0JBMzImIGMp
Cit7CisgICAgaWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIKKyAgICAgICAgJiYgdmFsdWUuZlZhbHVlID49IDAuICYmIHZhbHVl
LmZWYWx1ZSA8IDEwMDAwMDAuKSB7CisgICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6OmZvcm1h
dCgiJTA2ZCIsIHN0YXRpY19jYXN0PGludD4oKHZhbHVlLmZWYWx1ZSsuNSkpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHN0cmljdCBwYXJzaW5nIGZvciBTVkcgYXMgd2VsbC4K
KyAgICAgICAgaWYgKCFmYXN0UGFyc2VDb2xvcihjLCBzdHIsIGluU3RyaWN0TW9kZSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSEVYQ09MT1IKKyAgICAgICAgfHwgdmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UCisgICAgICAgIHx8IChpblF1aXJrc01v
ZGUoKSAmJiB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkg
eworICAgICAgICBpZiAoIWZhc3RQYXJzZUNvbG9yKGMsIHZhbHVlLnN0cmluZywgaW5TdHJpY3RN
b2RlKCkgJiYgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCisg
ICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiByZ2IgKyB0d28g
Y29tbWFzICovCisgICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAicmdiKCIpKSB7CisgICAgICAgIGludCBjb2xvclZhbHVlc1szXTsK
KyAgICAgICAgaWYgKCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIGZh
bHNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYyA9IG1ha2VSR0IoY29s
b3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uCisg
ICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncworICAgICAgICAgICAgJiYgdmFsdWUu
ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA3IC8qIHJnYmEgKyB0aHJlZSBjb21tYXMgKi8KKyAg
ICAgICAgICAgICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAicmdiYSgiKSkgeworICAgICAgICAgICAgaW50IGNvbG9yVmFsdWVzWzRdOworICAg
ICAgICAgICAgaWYgKCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRy
dWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGMgPSBtYWtl
UkdCQShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xv
clZhbHVlc1szXSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24KKyAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCisgICAg
ICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDUgLyogaHNsICsgdHdv
IGNvbW1hcyAqLworICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2woIikpIHsKKyAgICAgICAgICAgIGRvdWJsZSBjb2xv
clZhbHVlc1szXTsKKyAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0ZXJzKHZhbHVlLCBj
b2xvclZhbHVlcywgZmFsc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sx
XSwgY29sb3JWYWx1ZXNbMl0sIDEuMCk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KKyAgICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9u
LT5hcmdzCisgICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDcg
LyogaHNsYSArIHRocmVlIGNvbW1hcyAqLworICAgICAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJoc2xhKCIpKSB7CisgICAgICAg
ICAgICBkb3VibGUgY29sb3JWYWx1ZXNbNF07CisgICAgICAgICAgICBpZiAoIXBhcnNlSFNMUGFy
YW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBd
LCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIFRoaXMgY2xhc3MgdHJhY2tzIHBhcnNpbmcgc3RhdGUgZm9yIHNoYWRv
dyB2YWx1ZXMuICBJZiBpdCBnb2VzIG91dCBvZiBzY29wZSAoZS5nLiwgZHVlIHRvIGFuIGVhcmx5
IHJldHVybikKKy8vIHdpdGhvdXQgdGhlIGFsbG93QnJlYWsgYml0IGJlaW5nIHNldCwgdGhlbiBp
dCB3aWxsIGNsZWFuIHVwIGFsbCBvZiB0aGUgb2JqZWN0cyBhbmQgZGVzdHJveSB0aGVtLgorc3Ry
dWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7CisgICAgU2hhZG93UGFyc2VDb250ZXh0KENTU1Byb3Bl
cnR5SUQgcHJvcCwgQ1NTUGFyc2VyJiBwYXJzZXIpCisgICAgICAgIDogcHJvcGVydHkocHJvcCkK
KyAgICAgICAgLCBtX3BhcnNlcihwYXJzZXIpCisgICAgICAgICwgYWxsb3dYKHRydWUpCisgICAg
ICAgICwgYWxsb3dZKGZhbHNlKQorICAgICAgICAsIGFsbG93Qmx1cihmYWxzZSkKKyAgICAgICAg
LCBhbGxvd1NwcmVhZChmYWxzZSkKKyAgICAgICAgLCBhbGxvd0NvbG9yKHRydWUpCisgICAgICAg
ICwgYWxsb3dTdHlsZShwcm9wID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3Ag
PT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cpCisgICAgICAgICwgYWxsb3dCcmVhayh0cnVlKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGFsbG93TGVuZ3RoKCkgeyByZXR1cm4gYWxsb3dYIHx8IGFs
bG93WSB8fCBhbGxvd0JsdXIgfHwgYWxsb3dTcHJlYWQ7IH0KKworICAgIHZvaWQgY29tbWl0VmFs
dWUoKQorICAgIHsKKyAgICAgICAgLy8gSGFuZGxlIHRoZSAsLCBjYXNlIGdyYWNlZnVsbHkgYnkg
ZG9pbmcgbm90aGluZy4KKyAgICAgICAgaWYgKHggfHwgeSB8fCBibHVyIHx8IHNwcmVhZCB8fCBj
b2xvciB8fCBzdHlsZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCisgICAgICAgICAgICAg
ICAgdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworCisgICAg
ICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGN1cnJlbnQgc2hhZG93IHZhbHVlIGFuZCBhZGQgaXQg
dG8gdGhlIGxpc3QuCisgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NTaGFkb3dWYWx1ZTo6
Y3JlYXRlKFdURk1vdmUoeCksIFdURk1vdmUoeSksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoc3By
ZWFkKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBOb3cgcmVzZXQgZm9yIHRoZSBuZXh0IHNoYWRvdyB2YWx1ZS4KKyAgICAgICAgeCA9
IG51bGxwdHI7CisgICAgICAgIHkgPSBudWxscHRyOworICAgICAgICBibHVyID0gbnVsbHB0cjsK
KyAgICAgICAgc3ByZWFkID0gbnVsbHB0cjsKKyAgICAgICAgc3R5bGUgPSBudWxscHRyOworICAg
ICAgICBjb2xvciA9IG51bGxwdHI7CisKKyAgICAgICAgYWxsb3dYID0gdHJ1ZTsKKyAgICAgICAg
YWxsb3dDb2xvciA9IHRydWU7CisgICAgICAgIGFsbG93QnJlYWsgPSB0cnVlOworICAgICAgICBh
bGxvd1kgPSBmYWxzZTsKKyAgICAgICAgYWxsb3dCbHVyID0gZmFsc2U7CisgICAgICAgIGFsbG93
U3ByZWFkID0gZmFsc2U7CisgICAgICAgIGFsbG93U3R5bGUgPSBwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNoYWRvdzsK
KyAgICB9CisKKyAgICB2b2lkIGNvbW1pdExlbmd0aChDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1
bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gcHJpbWl0
aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRo
Q2FsY3VsYXRpb24pOworCisgICAgICAgIGlmIChhbGxvd1gpIHsKKyAgICAgICAgICAgIHggPSBX
VEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIGFsbG93WCA9IGZhbHNlOworICAg
ICAgICAgICAgYWxsb3dZID0gdHJ1ZTsKKyAgICAgICAgICAgIGFsbG93Q29sb3IgPSBmYWxzZTsK
KyAgICAgICAgICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGFsbG93QnJlYWsg
PSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChhbGxvd1kpIHsKKyAgICAgICAgICAgIHkgPSBX
VEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIGFsbG93WSA9IGZhbHNlOworICAg
ICAgICAgICAgYWxsb3dCbHVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGFsbG93Q29sb3IgPSB0cnVl
OworICAgICAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OworICAgICAgICAg
ICAgYWxsb3dCcmVhayA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoYWxsb3dCbHVyKSB7Cisg
ICAgICAgICAgICBibHVyID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBh
bGxvd0JsdXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGFsbG93U3ByZWFkID0gcHJvcGVydHkgPT0g
Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hT
aGFkb3c7CisgICAgICAgIH0gZWxzZSBpZiAoYWxsb3dTcHJlYWQpIHsKKyAgICAgICAgICAgIHNw
cmVhZCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgYWxsb3dTcHJlYWQg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tbWl0Q29sb3IoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkKKyAgICB7CisgICAgICAgIGNvbG9yID0gdmFsOwor
ICAgICAgICBhbGxvd0NvbG9yID0gZmFsc2U7CisgICAgICAgIGlmIChhbGxvd1gpIHsKKyAgICAg
ICAgICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGFsbG93QnJlYWsgPSBmYWxz
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbG93Qmx1ciA9IGZhbHNlOworICAg
ICAgICAgICAgYWxsb3dTcHJlYWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGFsbG93U3R5bGUgPSBw
cm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eUJveFNoYWRvdzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tbWl0U3R5
bGUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3R5bGUgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CisgICAg
ICAgIGFsbG93U3R5bGUgPSBmYWxzZTsKKyAgICAgICAgaWYgKGFsbG93WCkKKyAgICAgICAgICAg
IGFsbG93QnJlYWsgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhbGxvd0Js
dXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGFsbG93U3ByZWFkID0gZmFsc2U7CisgICAgICAgICAg
ICBhbGxvd0NvbG9yID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5OworICAgIENTU1BhcnNlciYgbV9wYXJzZXI7CisKKyAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiB2YWx1ZXM7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4OworICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGJsdXI7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzcHJlYWQ7CisgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbG9yOworCisgICAgYm9vbCBhbGxvd1g7CisgICAgYm9vbCBhbGxvd1k7CisgICAgYm9v
bCBhbGxvd0JsdXI7CisgICAgYm9vbCBhbGxvd1NwcmVhZDsKKyAgICBib29sIGFsbG93Q29sb3I7
CisgICAgYm9vbCBhbGxvd1N0eWxlOyAvLyBpbnNldCBvciBub3QuCisgICAgYm9vbCBhbGxvd0Jy
ZWFrOworfTsKKworUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpCit7Cisg
ICAgU2hhZG93UGFyc2VDb250ZXh0IGNvbnRleHQocHJvcElkLCAqdGhpcyk7CisgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlOworICAgIHdoaWxlICgodmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgp
KSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigq
dmFsdWUpOworICAgICAgICAvLyBDaGVjayBmb3IgYSBjb21tYSBicmVhayBmaXJzdC4KKyAgICAg
ICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvcikgeworICAgICAg
ICAgICAgaWYgKHZhbHVlLT5pVmFsdWUgIT0gJywnIHx8ICFjb250ZXh0LmFsbG93QnJlYWspIHsK
KyAgICAgICAgICAgICAgICAvLyBPdGhlciBvcGVyYXRvcnMgYXJlbid0IGxlZ2FsIG9yIHdlIGFy
ZW4ndCBkb25lIHdpdGggdGhlIGN1cnJlbnQgc2hhZG93CisgICAgICAgICAgICAgICAgLy8gdmFs
dWUuICBUcmVhdCBhcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgbm90
IHN1cHBvcnQgbXVsdGlwbGUgdmFsdWVzLgorICAgICAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0LgorICAgICAgICAg
ICAgY29udGV4dC5jb21taXRWYWx1ZSgpOworICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAg
ICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3QgZ2V0IG9uZS4gSW52YWxp
ZC4KKyAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyBCbHVyIHJhZGl1cyBtdXN0IGJl
IG5vbi1uZWdhdGl2ZS4KKyAgICAgICAgICAgIGlmIChjb250ZXh0LmFsbG93Qmx1ciAmJiAhdmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NTU3Ry
aWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAg
IC8vIEEgbGVuZ3RoIGlzIGFsbG93ZWQgaGVyZS4gIENvbnN0cnVjdCB0aGUgdmFsdWUgYW5kIGFk
ZCBpdC4KKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TGVuZ3RoKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbnNldCkgewor
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFsbG93U3R5bGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0U3R5bGUodmFsdWVXaXRo
Q2FsY3VsYXRpb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIG9ubHkg
b3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0J3Mgb2sgaXMgYSBjb2xvciB2YWx1ZS4KKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkQ29sb3I7CisgICAgICAgICAgICBi
b29sIGlzQ29sb3IgPSAoaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUodmFsdWUtPmlkKSB8fCB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVNZW51CisgICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5pZCA+PSBD
U1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdlYmtp
dFRleHQgJiYgaW5RdWlya3NNb2RlKCkpCisgICAgICAgICAgICAgICAgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKKyAgICAgICAgICAgIGlmIChpc0NvbG9yKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFsbG93Q29sb3IpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKKyAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBidWlsdC1pbi4gVHJ5IHRvIHBhcnNlIGl0IGFzIGEgY29sb3IuCisgICAg
ICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbHVlKTsKKworICAgICAgICAg
ICAgaWYgKCFwYXJzZWRDb2xvciB8fCAhY29udGV4dC5hbGxvd0NvbG9yKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0
aCBhbmQgaXMgaW52YWxpZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBh
IGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCisKKyAgICAg
ICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOworICAgIH0KKworICAgIGlm
IChjb250ZXh0LmFsbG93QnJlYWspIHsKKyAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwor
ICAgICAgICBpZiAoY29udGV4dC52YWx1ZXMgJiYgY29udGV4dC52YWx1ZXMtPmxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY29udGV4dC52YWx1ZXMpOworICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VSZWZsZWN0KENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICAvLyBib3gtcmVmbGVjdDog
PGRpcmVjdGlvbj4gPG9mZnNldD4gPG1hc2s+CisKKyAgICAvLyBEaXJlY3Rpb24gY29tZXMgZmly
c3QuCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
KyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbjsKKyAgICBzd2l0Y2ggKHZh
bHVlLT5pZCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlQWJvdmU6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVCZWxvdzoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxlZnQ6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVSaWdodDoKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBUaGUgb2Zmc2V0IGNvbWVzIG5leHQuCisgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0OworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIG9mZnNldCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgZWxzZSB7CisgICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAg
ICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBl
cmNlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBvZmZzZXQgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgIH0KKwor
ICAgIC8vIE5vdyBmb3IgdGhlIG1hc2suCisgICAgUmVmUHRyPENTU1ZhbHVlPiBtYXNrOworICAg
IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAg
aWYgKCFwYXJzZUJvcmRlckltYWdlKHByb3BJZCwgbWFzaykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NSZWZsZWN0VmFsdWU6
OmNyZWF0ZShkaXJlY3Rpb24ucmVsZWFzZU5vbk51bGwoKSwgb2Zmc2V0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUobWFzaykpLCBpbXBvcnRhbnQpOworICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsZXgoQ1NTUGFy
c2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBpZiAoIWFyZ3Muc2l6
ZSgpIHx8IGFyZ3Muc2l6ZSgpID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgdW5zZXRWYWx1ZSA9IC0xOworICAgIGRvdWJsZSBmbGV4R3JvdyA9IHVu
c2V0VmFsdWU7CisgICAgZG91YmxlIGZsZXhTaHJpbmsgPSB1bnNldFZhbHVlOworICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmxleEJhc2lzOworCisgICAgd2hpbGUgKENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MuY3VycmVudCgpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1
bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2
YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkg
eworICAgICAgICAgICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCisgICAgICAgICAgICAg
ICAgZmxleEdyb3cgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOworICAg
ICAgICAgICAgZWxzZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQorICAgICAgICAgICAg
ICAgIGZsZXhTaHJpbmsgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwor
ICAgICAgICAgICAgZWxzZSBpZiAoIXBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAo
c2FucyB1bml0cykgaWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJl
YWR5IGJlZW4gc2V0LgorICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgMyBu
dW1iZXJzIHdpdGhvdXQgdW5pdHMgaWYgdGhlIGxhc3QgdmFsdWUgaXMgMC4gRS5nLiwgZmxleDox
IDEgMSBpcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghZmxleEJhc2lzICYmIChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKSkKKyAgICAg
ICAgICAgIGZsZXhCYXNpcyA9IHBhcnNlVmFsaWRQcmltaXRpdmUoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5pZCwgYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIE5vdCBhIHZhbGlkIGFyZyBmb3IgZmxleC4KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBhcmdzLm5leHQoKTsKKyAgICB9CisK
KyAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKKyAgICAgICAgZmxleEdyb3cgPSAxOwor
ICAgIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCisgICAgICAgIGZsZXhTaHJpbmsgPSAx
OworICAgIGlmICghZmxleEJhc2lzKQorICAgICAgICBmbGV4QmFzaXMgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwor
CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4R3JvdywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvRmxvYXQoZmxleEdyb3cpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGbGV4U2hyaW5rLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNsYW1w
VG9GbG9hdChmbGV4U2hyaW5rKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBv
cnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEJhc2lzLCBmbGV4QmFzaXMu
cmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Ry
dWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKKyAgICBCb3JkZXJJbWFnZVBhcnNlQ29udGV4
dCgpCisgICAgOiBtX2NhbkFkdmFuY2UoZmFsc2UpCisgICAgLCBtX2FsbG93Q29tbWl0KHRydWUp
CisgICAgLCBtX2FsbG93SW1hZ2UodHJ1ZSkKKyAgICAsIG1fYWxsb3dJbWFnZVNsaWNlKHRydWUp
CisgICAgLCBtX2FsbG93UmVwZWF0KHRydWUpCisgICAgLCBtX2FsbG93Rm9yd2FyZFNsYXNoT3Bl
cmF0b3IoZmFsc2UpCisgICAgLCBtX3JlcXVpcmVXaWR0aChmYWxzZSkKKyAgICAsIG1fcmVxdWly
ZU91dHNldChmYWxzZSkKKyAgICB7fQorCisgICAgYm9vbCBjYW5BZHZhbmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5BZHZhbmNlOyB9CisgICAgdm9pZCBzZXRDYW5BZHZhbmNlKGJvb2wgY2FuQWR2
YW5jZSkgeyBtX2NhbkFkdmFuY2UgPSBjYW5BZHZhbmNlOyB9CisKKyAgICBib29sIGFsbG93Q29t
bWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0NvbW1pdDsgfQorICAgIGJvb2wgYWxsb3dJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dJbWFnZTsgfQorICAgIGJvb2wgYWxsb3dJbWFnZVNs
aWNlKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ltYWdlU2xpY2U7IH0KKyAgICBib29sIGFsbG93
UmVwZWF0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1JlcGVhdDsgfQorICAgIGJvb2wgYWxsb3dG
b3J3YXJkU2xhc2hPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGb3J3YXJkU2xhc2hP
cGVyYXRvcjsgfQorCisgICAgYm9vbCByZXF1aXJlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVpcmVXaWR0aDsgfQorICAgIGJvb2wgcmVxdWlyZU91dHNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVxdWlyZU91dHNldDsgfQorCisgICAgdm9pZCBjb21taXRJbWFnZShSZWZQdHI8Q1NTVmFsdWU+
JiYgaW1hZ2UpCisgICAgeworICAgICAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7CisgICAg
ICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7CisgICAgICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwor
ICAgICAgICBtX2FsbG93SW1hZ2UgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3Jl
cXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOworICAgICAgICBtX2FsbG93SW1h
Z2VTbGljZSA9ICFtX2ltYWdlU2xpY2U7CisgICAgICAgIG1fYWxsb3dSZXBlYXQgPSAhbV9yZXBl
YXQ7CisgICAgfQorICAgIHZvaWQgY29tbWl0SW1hZ2VTbGljZShSZWZQdHI8Q1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlPiYmIHNsaWNlKQorICAgIHsKKyAgICAgICAgbV9pbWFnZVNsaWNlID0gV1RG
TW92ZShzbGljZSk7CisgICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7CisgICAgICAgIG1fYWxs
b3dDb21taXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSB0cnVlOworICAgICAgICBt
X2FsbG93SW1hZ2VTbGljZSA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFs
c2U7CisgICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOworICAgICAgICBtX2FsbG93UmVw
ZWF0ID0gIW1fcmVwZWF0OworICAgIH0KKyAgICB2b2lkIGNvbW1pdEZvcndhcmRTbGFzaE9wZXJh
dG9yKCkKKyAgICB7CisgICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7CisgICAgICAgIG1fYWxs
b3dDb21taXQgPSBtX2FsbG93SW1hZ2UgPSBtX2FsbG93SW1hZ2VTbGljZSA9IG1fYWxsb3dSZXBl
YXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFt
X2JvcmRlclNsaWNlKSB7CisgICAgICAgICAgICBtX3JlcXVpcmVXaWR0aCA9IHRydWU7CisgICAg
ICAgICAgICBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fcmVxdWlyZU91dHNldCA9IHRydWU7CisgICAgICAgICAgICBtX3JlcXVpcmVXaWR0
aCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgY29tbWl0Qm9yZGVyV2lkdGgo
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHNsaWNlKQorICAgIHsKKyAgICAgICAgbV9ib3Jk
ZXJTbGljZSA9IFdURk1vdmUoc2xpY2UpOworICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOwor
ICAgICAgICBtX2FsbG93Q29tbWl0ID0gbV9hbGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9yID0gdHJ1
ZTsKKyAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVxdWly
ZU91dHNldCA9IGZhbHNlOworICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsKKyAgICAg
ICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKKyAgICB9CisgICAgdm9pZCBjb21taXRCb3Jk
ZXJPdXRzZXQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIG91dHNldCkKKyAgICB7CisgICAg
ICAgIG1fb3V0c2V0ID0gV1RGTW92ZShvdXRzZXQpOworICAgICAgICBtX2NhbkFkdmFuY2UgPSB0
cnVlOworICAgICAgICBtX2FsbG93Q29tbWl0ID0gdHJ1ZTsKKyAgICAgICAgbV9hbGxvd0ltYWdl
U2xpY2UgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3JlcXVpcmVXaWR0aCA9IG1f
cmVxdWlyZU91dHNldCA9IGZhbHNlOworICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsK
KyAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKKyAgICB9CisgICAgdm9pZCBjb21t
aXRSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYmIHJlcGVhdCkKKyAgICB7CisgICAgICAgIG1fcmVw
ZWF0ID0gV1RGTW92ZShyZXBlYXQpOworICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOworICAg
ICAgICBtX2FsbG93Q29tbWl0ID0gdHJ1ZTsKKyAgICAgICAgbV9hbGxvd1JlcGVhdCA9IG1fYWxs
b3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0
ID0gZmFsc2U7CisgICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gIW1faW1hZ2VTbGljZTsKKyAg
ICAgICAgbV9hbGxvd0ltYWdlID0gIW1faW1hZ2U7CisgICAgfQorCisgICAgUmVmPENTU1ZhbHVl
PiBjb21taXRXZWJLaXRCb3JkZXJJbWFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
Qm9yZGVySW1hZ2VWYWx1ZShtX2ltYWdlLmNvcHlSZWYoKSwgbV9pbWFnZVNsaWNlLmNvcHlSZWYo
KSwgbV9ib3JkZXJTbGljZS5jb3B5UmVmKCksIG1fb3V0c2V0LmNvcHlSZWYoKSwgbV9yZXBlYXQu
Y29weVJlZigpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbW1pdEJvcmRlckltYWdlKENTU1BhcnNl
ciYgcGFyc2VyLCBib29sIGltcG9ydGFudCkKKyAgICB7CisgICAgICAgIGNvbW1pdEJvcmRlcklt
YWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwgcGFyc2VyLCBXVEZNb3Zl
KG1faW1hZ2UpLCBpbXBvcnRhbnQpOworICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5
KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgcGFyc2VyLCBtX2ltYWdlU2xpY2UsIGltcG9y
dGFudCk7CisgICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZVdpZHRoLCBwYXJzZXIsIG1fYm9yZGVyU2xpY2UsIGltcG9ydGFudCk7CisgICAgICAg
IGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldCwg
cGFyc2VyLCBtX291dHNldCwgaW1wb3J0YW50KTsKKyAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0LCBwYXJzZXIsIFdURk1vdmUobV9y
ZXBlYXQpLCBpbXBvcnRhbnQpOworICAgIH0KKworICAgIHZvaWQgY29tbWl0Qm9yZGVySW1hZ2VQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUGFyc2VyJiBwYXJzZXIsIFJlZlB0cjxD
U1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCisgICAgeworICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICBwYXJzZXIuYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpLCBpbXBvcnRhbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJzZXIu
YWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgfQorCisgICAgYm9vbCBt
X2NhbkFkdmFuY2U7CisKKyAgICBib29sIG1fYWxsb3dDb21taXQ7CisgICAgYm9vbCBtX2FsbG93
SW1hZ2U7CisgICAgYm9vbCBtX2FsbG93SW1hZ2VTbGljZTsKKyAgICBib29sIG1fYWxsb3dSZXBl
YXQ7CisgICAgYm9vbCBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3I7CisKKyAgICBib29sIG1f
cmVxdWlyZVdpZHRoOworICAgIGJvb2wgbV9yZXF1aXJlT3V0c2V0OworCisgICAgUmVmUHRyPENT
U1ZhbHVlPiBtX2ltYWdlOworICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IG1f
aW1hZ2VTbGljZTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm9yZGVyU2xpY2U7
CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX291dHNldDsKKworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gbV9yZXBlYXQ7Cit9OworCitib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFn
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0LCBib29sIGlt
cG9ydGFudCkKK3sKKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOworICAg
IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IGNvbnRleHQ7CisgICAgd2hpbGUgKENTU1BhcnNlclZh
bHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIGNv
bnRleHQuc2V0Q2FuQWR2YW5jZShmYWxzZSk7CisKKyAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFk
dmFuY2UoKSAmJiBjb250ZXh0LmFsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IoKSAmJiBpc0Zvcndh
cmRTbGFzaE9wZXJhdG9yKCpjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgY29udGV4dC5jb21t
aXRGb3J3YXJkU2xhc2hPcGVyYXRvcigpOworCisgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZh
bmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
VmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCisgICAgICAgICAgICAg
ICAgY29udGV4dC5jb21taXRJbWFnZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwo
Y3VycmVudFZhbHVlLT5zdHJpbmcpKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0dlbmVyYXRl
ZEltYWdlVmFsdWUoKmN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlOworICAgICAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCpt
X3ZhbHVlTGlzdCwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdElt
YWdlKFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVNldEZ1
bmN0aW9uVmFsdWUoKmN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gcGFyc2VJbWFnZVNldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZSh2YWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlLT5pZCA9PSBD
U1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4
dC5hbGxvd0ltYWdlU2xpY2UoKSkgeworICAgICAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZT4gaW1hZ2VTbGljZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdl
U2xpY2UocHJvcElkLCBpbWFnZVNsaWNlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1p
dEltYWdlU2xpY2UoV1RGTW92ZShpbWFnZVNsaWNlKSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQuYWxsb3dSZXBlYXQoKSkgeworICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXBlYXQ7CisgICAgICAgICAgICBpZiAocGFyc2VC
b3JkZXJJbWFnZVJlcGVhdChyZXBlYXQpKQorICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
UmVwZWF0KFdURk1vdmUocmVwZWF0KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNvbnRl
eHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQucmVxdWlyZVdpZHRoKCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm9yZGVyU2xpY2U7CisgICAgICAgICAgICBpZiAo
cGFyc2VCb3JkZXJJbWFnZVdpZHRoKGJvcmRlclNsaWNlKSkKKyAgICAgICAgICAgICAgICBjb250
ZXh0LmNvbW1pdEJvcmRlcldpZHRoKFdURk1vdmUoYm9yZGVyU2xpY2UpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5yZXF1aXJlT3V0
c2V0KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm9yZGVyT3V0
c2V0OworICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VPdXRzZXQoYm9yZGVyT3V0c2V0
KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEJvcmRlck91dHNldChXVEZNb3ZlKGJv
cmRlck91dHNldCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFu
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOworICAgIH0KKworICAgIGlmIChjb250ZXh0LmFsbG93Q29tbWl0KCkpIHsKKyAgICAg
ICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlKQorICAgICAgICAgICAgY29u
dGV4dC5jb21taXRCb3JkZXJJbWFnZSgqdGhpcywgaW1wb3J0YW50KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgLy8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFsdWUuCisg
ICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNvbW1pdFdlYktpdEJvcmRlckltYWdlKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQoaW50IGlkKQoreworICAgIHJldHVy
biBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0g
Q1NTVmFsdWVTcGFjZSB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kOworfQorCitib29sIENTU1BhcnNl
cjo6cGFyc2VCb3JkZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCit7Cisg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdFZhbHVlOworICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gc2Vjb25kVmFsdWU7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWwpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkpCisgICAgICAg
IGZpcnN0VmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWwtPmlkKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZh
bCA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgaWYgKHZhbCkgeworICAgICAgICBpZiAoaXNC
b3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkpCisgICAgICAgICAgICBzZWNvbmRWYWx1
ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+
aWQpOworICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgeworICAgICAgICAgICAgLy8g
SWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gcmV3aW5kIHRoZSB2YWx1ZSBsaXN0LCBzbyB0aGF0IHdoZW4gaXRzIGFkdmFu
Y2VkIHdlJ2xsCisgICAgICAgICAgICAvLyBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgorICAg
ICAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7CisgICAgICAgICAgICBzZWNvbmRWYWx1
ZSA9IGZpcnN0VmFsdWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgc2Vjb25kVmFs
dWUgPSBmaXJzdFZhbHVlOworCisgICAgcmVzdWx0ID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWly
KGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSwgc2Vjb25kVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIEJvcmRlckltYWdlU2xpY2VQYXJzZUNv
bnRleHQgeworcHVibGljOgorICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQoQ1NTUGFy
c2VyJiBwYXJzZXIpCisgICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgLCBtX2FsbG93TnVtYmVy
KHRydWUpCisgICAgLCBtX2FsbG93RmlsbCh0cnVlKQorICAgICwgbV9hbGxvd0ZpbmFsQ29tbWl0
KGZhbHNlKQorICAgICwgbV9maWxsKGZhbHNlKQorICAgIHsgfQorCisgICAgYm9vbCBhbGxvd051
bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dOdW1iZXI7IH0KKyAgICBib29sIGFsbG93Rmls
bCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dGaWxsOyB9CisgICAgYm9vbCBhbGxvd0ZpbmFsQ29t
bWl0KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZpbmFsQ29tbWl0OyB9CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CisKKyAgICB2b2lk
IGNvbW1pdE51bWJlcihDU1NQYXJzZXI6OlZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNl
ci5jcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAg
ICAgICBpZiAoIW1fdG9wKQorICAgICAgICAgICAgbV90b3AgPSBXVEZNb3ZlKHByaW1pdGl2ZVZh
bHVlKTsKKyAgICAgICAgZWxzZSBpZiAoIW1fcmlnaHQpCisgICAgICAgICAgICBtX3JpZ2h0ID0g
V1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKCFtX2JvdHRvbSkKKyAg
ICAgICAgICAgIG1fYm90dG9tID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKCFtX2xlZnQpOworICAgICAgICAgICAgbV9sZWZ0ID0g
V1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBtX2FsbG93TnVt
YmVyID0gIW1fbGVmdDsKKyAgICAgICAgbV9hbGxvd0ZpbmFsQ29tbWl0ID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbW1pdEZpbGwoKSB7IG1fZmlsbCA9IHRydWU7IG1fYWxsb3dGaWxsID0g
ZmFsc2U7IG1fYWxsb3dOdW1iZXIgPSAhbV90b3A7IH0KKworICAgIFJlZjxDU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWU+IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQorICAgIHsKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBjbG9uZSBhbmQgcmVwZWF0IHZhbHVlcyBmb3IgYW55IG9taXNzaW9ucy4KKyAg
ICAgICAgQVNTRVJUKG1fdG9wKTsKKyAgICAgICAgaWYgKCFtX3JpZ2h0KSB7CisgICAgICAgICAg
ICBtX3JpZ2h0ID0gbV90b3A7CisgICAgICAgICAgICBtX2JvdHRvbSA9IG1fdG9wOworICAgICAg
ICAgICAgbV9sZWZ0ID0gbV90b3A7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2JvdHRvbSkg
eworICAgICAgICAgICAgbV9ib3R0b20gPSBtX3RvcDsKKyAgICAgICAgICAgIG1fbGVmdCA9IG1f
cmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2xlZnQpCisgICAgICAgICAgICBtX2xl
ZnQgPSBtX3JpZ2h0OworCisgICAgICAgIC8vIE5vdyBidWlsZCBhIHJlY3QgdmFsdWUgdG8gaG9s
ZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgYXV0byBxdWFkID0g
UXVhZDo6Y3JlYXRlKCk7CisgICAgICAgIHF1YWQtPnNldFRvcChtX3RvcC5jb3B5UmVmKCkpOwor
ICAgICAgICBxdWFkLT5zZXRSaWdodChtX3JpZ2h0LmNvcHlSZWYoKSk7CisgICAgICAgIHF1YWQt
PnNldEJvdHRvbShtX2JvdHRvbS5jb3B5UmVmKCkpOworICAgICAgICBxdWFkLT5zZXRMZWZ0KG1f
bGVmdC5jb3B5UmVmKCkpOworCisgICAgICAgIC8vIE1ha2Ugb3VyIG5ldyBib3JkZXIgaW1hZ2Ug
dmFsdWUgbm93LgorICAgICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1YWQpKSwg
bV9maWxsKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKKwor
ICAgIGJvb2wgbV9hbGxvd051bWJlcjsKKyAgICBib29sIG1fYWxsb3dGaWxsOworICAgIGJvb2wg
bV9hbGxvd0ZpbmFsQ29tbWl0OworCisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Rv
cDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7CisgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fbGVmdDsKKworICAgIGJvb2wgbV9maWxsOworfTsKKworYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Qm9yZGVySW1hZ2VTbGljZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZT4mIHJlc3VsdCkKK3sKKyAgICBCb3JkZXJJbWFnZVNsaWNlUGFyc2VDb250
ZXh0IGNvbnRleHQoKnRoaXMpOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKKyAgICB3aGls
ZSAoKHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKKyAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgLy8gRklY
TUUgY2FsYygpIGh0dHA6Ly93ZWJraXQub3JnL2IvMTY2NjIgOiBjYWxjIGlzIHBhcnNlZCBidXQg
dmFsdWVzIGFyZSBub3QgY3JlYXRlZCB5ZXQuCisgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVt
YmVyKCkgJiYgIWlzQ2FsY3VsYXRpb24odmFsdWVXaXRoQ2FsY3VsYXRpb24pICYmIHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnIHwgRlBlcmNlbnQs
IENTU1N0cmljdE1vZGUpKSB7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5hbGxvd0ZpbGwo
KSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsKQorICAgICAgICAgICAgY29udGV4dC5jb21t
aXRGaWxsKCk7CisgICAgICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7CisgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlk
LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UncmUgZ29pbmcgdG8gc3VjY2Vzc2Z1bGx5IHBhcnNlLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBj
b25zdW1lIHRoaXMgdG9rZW4uCisgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3Vz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKworICAgIGlmIChjb250ZXh0LmFsbG93Rmlu
YWxDb21taXQoKSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmls
aXR5LCAtd2Via2l0LWJvcmRlci1pbWFnZSwgLXdlYmtpdC1tYXNrLWJveC1pbWFnZSBhbmQgLXdl
YmtpdC1ib3gtcmVmbGVjdCBoYXZlIHRvIGRvIGEgZmlsbCBieSBkZWZhdWx0LgorICAgICAgICAv
LyBGSVhNRTogV2hhdCBkbyB3ZSBkbyB3aXRoIC13ZWJraXQtYm94LXJlZmxlY3QgYW5kIC13ZWJr
aXQtbWFzay1ib3gtaW1hZ2U/IFByb2JhYmx5IGp1c3QgaGF2ZSB0byBsZWF2ZSB0aGVtIGZpbGxp
bmcuLi4KKyAgICAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdl
IHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSB8fCBwcm9wSWQgPT0g
Q1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0KQorICAgICAgICAgICAgY29udGV4dC5jb21taXRG
aWxsKCk7CisKKyAgICAgICAgLy8gTmVlZCB0byBmdWxseSBjb21taXQgYXMgYSBzaW5nbGUgdmFs
dWUuCisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY29tbWl0Qm9yZGVySW1hZ2VTbGljZSgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Ns
YXNzIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCB7CitwdWJsaWM6CisgICAgQm9yZGVySW1h
Z2VRdWFkUGFyc2VDb250ZXh0KENTU1BhcnNlciYgcGFyc2VyKQorICAgIDogbV9wYXJzZXIocGFy
c2VyKQorICAgICwgbV9hbGxvd051bWJlcih0cnVlKQorICAgICwgbV9hbGxvd0ZpbmFsQ29tbWl0
KGZhbHNlKQorICAgIHsgfQorCisgICAgYm9vbCBhbGxvd051bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb3dOdW1iZXI7IH0KKyAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkg
Y29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KKworICAgIHZvaWQgY29tbWl0TnVtYmVyKENT
U1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQorICAg
IHsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKKyAg
ICAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRv
KQorICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBtX3BhcnNlci5jcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworCisgICAgICAg
IGlmICghbV90b3ApCisgICAgICAgICAgICBtX3RvcCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUp
OworICAgICAgICBlbHNlIGlmICghbV9yaWdodCkKKyAgICAgICAgICAgIG1fcmlnaHQgPSBXVEZN
b3ZlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoIW1fYm90dG9tKQorICAgICAg
ICAgICAgbV9ib3R0b20gPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fbGVmdCk7CisgICAgICAgICAgICBtX2xlZnQgPSBXVEZN
b3ZlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYWxsb3dOdW1iZXIg
PSAhbV9sZWZ0OworICAgICAgICBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgc2V0QWxsb3dGaW5hbENvbW1pdCgpIHsgbV9hbGxvd0ZpbmFsQ29tbWl0ID0gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0VG9wKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsg
bV90b3AgPSBXVEZNb3ZlKHZhbCk7IH0KKworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY29t
bWl0Qm9yZGVySW1hZ2VRdWFkKCkKKyAgICB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUg
YW5kIHJlcGVhdCB2YWx1ZXMgZm9yIGFueSBvbWlzc2lvbnMuCisgICAgICAgIEFTU0VSVChtX3Rv
cCk7CisgICAgICAgIGlmICghbV9yaWdodCkgeworICAgICAgICAgICAgbV9yaWdodCA9IG1fdG9w
OworICAgICAgICAgICAgbV9ib3R0b20gPSBtX3RvcDsKKyAgICAgICAgICAgIG1fbGVmdCA9IG1f
dG9wOworICAgICAgICB9CisgICAgICAgIGlmICghbV9ib3R0b20pIHsKKyAgICAgICAgICAgIG1f
Ym90dG9tID0gbV90b3A7CisgICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0OworICAgICAgICB9
CisgICAgICAgIGlmICghbV9sZWZ0KQorICAgICAgICAgICAgbV9sZWZ0ID0gbV9yaWdodDsKKwor
ICAgICAgICAvLyBOb3cgYnVpbGQgYSBxdWFkIHZhbHVlIHRvIGhvbGQgYWxsIGZvdXIgb2Ygb3Vy
IHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIGF1dG8gcXVhZCA9IFF1YWQ6OmNyZWF0ZSgpOwor
ICAgICAgICBxdWFkLT5zZXRUb3AobV90b3AuY29weVJlZigpKTsKKyAgICAgICAgcXVhZC0+c2V0
UmlnaHQobV9yaWdodC5jb3B5UmVmKCkpOworICAgICAgICBxdWFkLT5zZXRCb3R0b20obV9ib3R0
b20uY29weVJlZigpKTsKKyAgICAgICAgcXVhZC0+c2V0TGVmdChtX2xlZnQuY29weVJlZigpKTsK
KworICAgICAgICAvLyBNYWtlIG91ciBuZXcgdmFsdWUgbm93LgorICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKHF1YWQpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKKworICAgIGJvb2wgbV9hbGxv
d051bWJlcjsKKyAgICBib29sIG1fYWxsb3dGaW5hbENvbW1pdDsKKworICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbV90b3A7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Jp
Z2h0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207CisgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Cit9OworCitib29sIENTU1BhcnNlcjo6cGFyc2VC
b3JkZXJJbWFnZVF1YWQoVW5pdHMgdmFsaWRVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYgcmVzdWx0KQoreworICAgIEJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dCBjb250ZXh0KCp0
aGlzKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CisgICAgd2hpbGUgKCh2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVt
YmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRVbml0cywg
Q1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAg
fSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkgeworICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90
IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LmFs
bG93RmluYWxDb21taXQoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMo
KTsgLy8gVGhlIHNob3J0aGFuZCBsb29wIHdpbGwgYWR2YW5jZSBiYWNrIHRvIHRoaXMgcG9pbnQu
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOworICAgIH0KKworICAgIGlmIChjb250ZXh0LmFsbG93RmluYWxDb21taXQoKSkgeworICAg
ICAgICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KKyAgICAgICAg
cmVzdWx0ID0gY29udGV4dC5jb21taXRCb3JkZXJJbWFnZVF1YWQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQm9yZGVySW1hZ2VXaWR0aChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCit7
CisgICAgcmV0dXJuIHBhcnNlQm9yZGVySW1hZ2VRdWFkKEZMZW5ndGggfCBGSW50ZWdlciB8IEZO
b25OZWcgfCBGUGVyY2VudCwgcmVzdWx0KTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9y
ZGVySW1hZ2VPdXRzZXQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0KQoreworICAg
IHJldHVybiBwYXJzZUJvcmRlckltYWdlUXVhZChGTGVuZ3RoIHwgRkludGVnZXIgfCBGTm9uTmVn
LCByZXN1bHQpOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJSYWRpdXMoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQoreworICAgIHVuc2lnbmVkIG51bSA9IG1f
dmFsdWVMaXN0LT5zaXplKCk7CisgICAgaWYgKG51bSA+IDkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7CisgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpaVsyXVs0XTsKKworICAgIHVuc2lnbmVkIGluZGV4QWZ0
ZXJTbGFzaCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bTsgKytpKSB7Cisg
ICAgICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+dmFsdWVBdChpKTsK
KyAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaVZhbHVlICE9ICcvJykKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghaSB8fCBpbmRleEFmdGVyU2xhc2ggfHwgaSAr
IDEgPT0gbnVtIHx8IG51bSA+IGkgKyA1KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgaW5kZXhBZnRlclNsYXNoID0gaSArIDE7CisgICAgICAgICAgICBjb21w
bGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGkgLSBpbmRleEFmdGVyU2xhc2ggPj0gNCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbih2YWx1ZSk7CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CisKKyAgICAgICAgaWYgKCFpbmRleEFmdGVy
U2xhc2gpIHsKKyAgICAgICAgICAgIHJhZGlpWzBdW2ldID0gV1RGTW92ZShyYWRpdXMpOworCisg
ICAgICAgICAgICAvLyBMZWdhY3kgc3ludGF4OiAtd2Via2l0LWJvcmRlci1yYWRpdXM6IGwxIGwy
OyBpcyBlcXVpdmFsZW50IHRvIGJvcmRlci1yYWRpdXM6IGwxIC8gbDI7CisgICAgICAgICAgICBp
ZiAobnVtID09IDIgJiYgcHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzKSB7
CisgICAgICAgICAgICAgICAgaW5kZXhBZnRlclNsYXNoID0gMTsKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByYWRpaVsxXVtpIC0gaW5kZXhBZnRlclNsYXNoXSA9IFdURk1vdmUo
cmFkaXVzKTsKKyAgICB9CisKKyAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgeworICAgICAgICBj
b21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzBdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgIHJhZGlpWzFdW2ldID0gcmFkaWlbMF1baV07Cisg
ICAgfSBlbHNlCisgICAgICAgIGNvbXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMV0pOworCisgICAg
SW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKKyAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsIGNyZWF0ZVByaW1p
dGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzBdKSwgV1RGTW92ZShyYWRpaVsxXVswXSkp
LCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRS
YWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHJhZGlpWzBdWzFdKSwgV1RG
TW92ZShyYWRpaVsxXVsxXSkpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZN
b3ZlKHJhZGlpWzBdWzJdKSwgV1RGTW92ZShyYWRpaVsxXVsyXSkpLCBpbXBvcnRhbnQpOworICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgY3JlYXRlUHJp
bWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bM10pLCBXVEZNb3ZlKHJhZGlpWzFdWzNd
KSksIGltcG9ydGFudCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpw
YXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50KQoreworICAgIHVuc2lnbmVkIG51bSA9IG1f
dmFsdWVMaXN0LT5zaXplKCk7CisgICAgaWYgKG51bSA9PSAxKSB7CisgICAgICAgIENTU1ZhbHVl
SUQgdmFsdWVJZCA9IG1fdmFsdWVMaXN0LT52YWx1ZUF0KDApLT5pZDsKKyAgICAgICAgaWYgKHZh
bHVlSWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSWQgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9u
cyB8fCB2YWx1ZUlkID09IENTU1ZhbHVlRnJvbUludHJpbnNpYykgeworICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCksIGltcG9ydGFudCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChudW0gIT0g
MykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUGFyc2VyVmFsdWUmIG9wID0gKm1f
dmFsdWVMaXN0LT52YWx1ZUF0KDEpOworCisgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9y
KG9wKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
bHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFsdWVBdCgwKSk7CisgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gcnZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+dmFs
dWVBdCgyKSk7CisgICAgaWYgKCF2YWxpZGF0ZVVuaXQobHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRk5vbk5lZykgfHwgIXZhbGlkYXRlVW5pdChydmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIgfCBGTm9uTmVnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgaWYgKCFsdmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUgfHwgIXJ2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLmZWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3Jl
YXRlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
ZlZhbHVlKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChydmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUpKSwgaW1wb3J0YW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQgZGVmYXVs
dFZhbHVlLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBlbnVtIHsgSUQsIFZBTCB9IHN0YXRlID0g
SUQ7CisKKyAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb3VudGVyTmFtZTsKKworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
SUQ6CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgY291bnRlck5hbWUg
PSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFZBTDsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWQUw6IHsKKyAgICAgICAgICAgICAg
ICBpbnQgaSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaSA9IGNsYW1wVG9JbnRlZ2VyKHZhbHVlLT5mVmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShj
b3VudGVyTmFtZSksCisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoaSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSk7CisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBJRDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobGlz
dC0+bGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShs
aXN0KSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHNob3VsZCBnbyBhd2F5IG9uY2Ugd2UgZHJvcCBzdXBw
b3J0IGZvciAtd2Via2l0LWdyYWRpZW50CitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgYm9v
bCBob3Jpem9udGFsKQoreworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0Owor
ICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAg
ICAgICAgaWYgKChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImxlZnQiKSAm
JiBob3Jpem9udGFsKQorICAgICAgICAgICAgfHwgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLCAidG9wIikgJiYgIWhvcml6b250YWwpKQorICAgICAgICAgICAgcmVzdWx0ID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgZWxzZSBpZiAoKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLCAicmlnaHQiKSAmJiBob3Jpem9udGFsKQorICAgICAgICAgICAg
fHwgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiYm90dG9tIikgJiYgIWhv
cml6b250YWwpKQorICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwor
ICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImNl
bnRlciIpKQorICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAg
fSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSIHx8
IHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAg
ICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLmZW
YWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5p
dCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlRGVwcmVjYXRl
ZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciYgcGFyc2VyLCBDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKQoreworICAgIGlmICh2YWx1ZS51bml0ICE9
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwg
ImZyb20oIikKKyAgICAgICAgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAidG8oIikKKyAgICAgICAgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVu
Y3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJmcm9tKCIpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAidG8oIikpIHsKKyAgICAgICAgLy8gVGhlICJmcm9tIiBh
bmQgInRvIiBzdG9wcyBleHBlY3QgMSBhcmd1bWVudC4KKyAgICAgICAgaWYgKGFyZ3MtPnNpemUo
KSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikpCisg
ICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisKKyAgICAg
ICAgQ1NTVmFsdWVJRCBpZCA9IGFyZ3MtPmN1cnJlbnQoKS0+aWQ7CisgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1
ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQorICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VDb2xvcihh
cmdzLT5jdXJyZW50KCkpOworICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1bmN0aW9u
IGV4cGVjdHMgMyBhcmd1bWVudHMuCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkgeworICAgICAgICBpZiAo
YXJncy0+c2l6ZSgpICE9IDMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Q1NTUGFyc2VyVmFsdWUqIHN0b3BBcmcgPSBhcmdzLT5jdXJyZW50KCk7CisgICAgICAgIGlmIChz
dG9wQXJnLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAg
ICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoc3RvcEFyZy0+ZlZhbHVlIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CisgICAgICAgIGVsc2UgaWYgKHN0b3BBcmctPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpCisgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHN0b3BBcmctPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgc3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKHN0b3BBcmct
PnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IHN0b3BBcmctPmlWYWx1ZSAhPSAn
LCcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RvcEFyZyA9IGFyZ3Mt
Pm5leHQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHN0b3BBcmctPmlkOworICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0IHx8IENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNv
bG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKKyAgICAgICAgICAgIHN0b3AubV9j
b2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VyLnBhcnNl
Q29sb3Ioc3RvcEFyZyk7CisgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU1Bh
cnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQoreworICAgIC8vIFdhbGsgdGhlIGFyZ3Vt
ZW50cy4KKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgp
LT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpID09
IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBp
cyB0aGUgZ3JhZGllbnQgdHlwZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCisgICAgQ1NTR3JhZGll
bnRUeXBlIGdyYWRpZW50VHlwZTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdz
LT5jdXJyZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImxpbmVhciIpKQorICAg
ICAgICBncmFkaWVudFR5cGUgPSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQ7CisgICAgZWxz
ZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAicmFkaWFsIikp
CisgICAgICAgIGdyYWRpZW50VHlwZSA9IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudDsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NHcmFkaWVudFZh
bHVlPiByZXN1bHQ7CisgICAgc3dpdGNoIChncmFkaWVudFR5cGUpIHsKKyAgICBjYXNlIENTU0Rl
cHJlY2F0ZWRMaW5lYXJHcmFkaWVudDoKKyAgICAgICAgcmVzdWx0ID0gQ1NTTGluZWFyR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlKE5vblJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQ6CisgICAgICAgIHJlc3Vs
dCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShOb25SZXBlYXRpbmcsIGdyYWRpZW50
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRoZSByZXN0
IG9mIHRoZSBncmFkaWVudCB0eXBlcyBzaG91bGRuJ3QgYXBwZWFyIGhlcmUuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIC8vIENvbW1hLgorICAgIGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOworICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIE5leHQgY29tZXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0
aGUgZ3JhZGllbnQgYXMgYW4geCB5IHBhaXIuICBUaGVyZSBpcyBubworICAgIC8vIGNvbW1hIGJl
dHdlZW4gdGhlIHggYW5kIHRoZSB5IHZhbHVlcy4KKyAgICAvLyBGaXJzdCBYLiAgSXQgY2FuIGJl
IGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KKyAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKKyAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9p
bnQoKmFyZ3VtZW50LCB0cnVlKTsKKyAgICBpZiAoIXBvaW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7CisKKyAg
ICAvLyBGaXJzdCBZLiAgSXQgY2FuIGJlIHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4K
KyAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICBpZiAoIWFyZ3VtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50
KCphcmd1bWVudCwgZmFsc2UpOworICAgIGlmICghcG9pbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXN1bHQtPnNldEZpcnN0WShwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAg
IC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCBwb2ludC4KKyAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKKyAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IGEgbnVt
ZXJpYyByYWRpdXMuCisgICAgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFs
R3JhZGllbnQpIHsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBjYWxjdWxhdGlvbiB2YWx1ZXMuCisgICAgICAg
IGlmICghYXJndW1lbnQgfHwgYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGRv
d25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCpyZXN1bHQpLnNldEZpcnN0UmFkaXVzKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOworCisg
ICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCisgICAgICAgIGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5leHQgaXMgdGhlIGVuZGluZyBw
b2ludCBmb3IgdGhlIGdyYWRpZW50IGFzIGFuIHgsIHkgcGFpci4KKyAgICAvLyBTZWNvbmQgWC4g
IEl0IGNhbiBiZSBsZWZ0LCByaWdodCwgbnVtYmVyIG9yIHBlcmNlbnQuCisgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CisgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIHRy
dWUpOworICAgIGlmICghcG9pbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQt
PnNldFNlY29uZFgocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAvLyBTZWNvbmQgWS4g
IEl0IGNhbiBiZSB0b3AsIGJvdHRvbSwgbnVtYmVyIG9yIHBlcmNlbnQuCisgICAgYXJndW1lbnQg
PSBhcmdzLT5uZXh0KCk7CisgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1lbnQsIGZh
bHNlKTsKKyAgICBpZiAoIXBvaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0
LT5zZXRTZWNvbmRZKHBvaW50LnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgLy8gRm9yIHJhZGlh
bCBncmFkaWVudHMgb25seSwgd2Ugbm93IGV4cGVjdCB0aGUgc2Vjb25kIHJhZGl1cy4KKyAgICBp
ZiAoZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgeworICAgICAg
ICAvLyBDb21tYSBhZnRlciB0aGUgc2Vjb25kIHBvaW50LgorICAgICAgICBhcmd1bWVudCA9IGFy
Z3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KKyAg
ICAgICAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAg
ICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFk
aXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikp
OworICAgIH0KKworICAgIC8vIFdlIG5vdyB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIHN0b3Bz
ICgwIG9yIG1vcmUpLgorICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIHdoaWxlIChh
cmd1bWVudCkgeworICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0
IHN0b3AuCisgICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTm93IGV4YW1pbmUgdGhlIHN0b3AgaXRzZWxmLgorICAg
ICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBUaGUgZnVuY3Rpb24gbmFtZSBu
ZWVkcyB0byBiZSBvbmUgb2YgImZyb20iLCAidG8iLCBvciAiY29sb3Itc3RvcC4iCisgICAgICAg
IENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7CisgICAgICAgIGlmICghcGFyc2VEZXByZWNhdGVk
R3JhZGllbnRDb2xvclN0b3AoKnRoaXMsICphcmd1bWVudCwgc3RvcCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC0+YWRkU3RvcChzdG9wKTsKKworICAgICAgICAv
LyBBZHZhbmNlCisgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOworICAgIH0KKworICAg
IGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUsIGJvb2wmIGlzSG9yaXpvbnRhbCkKK3sKKyAgICBpZiAodmFsdWUudW5p
dCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxlZnQ6
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKKyAgICAgICAgICAgIGlzSG9yaXpvbnRhbCA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRvcDoKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUJvdHRvbToKKyAgICAgICAgICAgIGlzSG9yaXpvbnRhbCA9IGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKK30KKworc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1BhcnNlciYg
cGFyc2VyLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgQ1NTVmFsdWVJRCBpZCA9IHZh
bHVlLmlkOworICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjpp
c1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09
IENTU1ZhbHVlQ3VycmVudGNvbG9yKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworCisgICAgcmV0dXJuIHBhcnNlci5w
YXJzZUNvbG9yKCZ2YWx1ZSk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRM
aW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1Zh
bHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1By
ZWZpeGVkTGluZWFyR3JhZGllbnQpOworCisgICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgorICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9u
LT5hcmdzLmdldCgpOworICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJy
ZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisK
KyAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CisgICAgLy8gTG9vayBmb3IgYW5nbGUuCisg
ICAgaWYgKHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NT
dHJpY3RNb2RlKSkgeworICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOworCisgICAgICAgIGFyZ3MtPm5l
eHQoKTsKKyAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIExvb2sgb25lIG9yIHR3byBvcHRpb25hbCBrZXl3b3JkcyB0aGF0IGluZGljYXRlIGEgc2lk
ZSBvciBjb3JuZXIuCisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3RhcnRYLCBz
dGFydFk7CisgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFsc2U7CisgICAgICAgIGlmIChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQo
KmFyZ3VtZW50LCBpc0hvcml6b250YWwpKSB7CisgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KQorICAgICAgICAgICAgICAgIHN0YXJ0WCA9IFdURk1vdmUobG9jYXRpb24pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1vdmUobG9jYXRpb24pOworCisg
ICAgICAgICAgICBpZiAoKGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICgobG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQsIGlzSG9y
aXpvbnRhbCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gV1RG
TW92ZShsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhcnRZKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WSA9IFdURk1vdmUobG9j
YXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYXJn
cy0+bmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZXhwZWN0Q29tbWEgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdGFydFgg
JiYgIXN0YXJ0WSkKKyAgICAgICAgICAgIHN0YXJ0WSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKKworICAgICAgICByZXN1bHQt
PnNldEZpcnN0WChXVEZNb3ZlKHN0YXJ0WCkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0WShX
VEZNb3ZlKHN0YXJ0WSkpOworICAgIH0KKworICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3Rv
cHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIXJlc3VsdC0+c3RvcENvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVu
dFJlcGVhdCByZXBlYXRpbmcpCit7CisgICAgYXV0byByZXN1bHQgPSBDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZFJhZGlhbEdyYWRpZW50KTsKKwor
ICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3Mg
PSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBpZiAoIWFy
Z3MgfHwgIWFyZ3MtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUGFy
c2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOworICAgIGlmICghYXJndW1lbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsK
KworICAgIC8vIE9wdGlvbmFsIGJhY2tncm91bmQtcG9zaXRpb24KKyAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNlbnRlclg7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50
ZXJZOworICAgIC8vIHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbiBhZHZhbmNlcyB0aGUgYXJncyBu
ZXh0IHBvaW50ZXIuCisgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCphcmdzLCBjZW50ZXJY
LCBjZW50ZXJZKTsKKyAgICBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBpZiAoIWFy
Z3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2VudGVyWCB8fCBjZW50
ZXJZKSB7CisgICAgICAgIC8vIENvbW1hCisgICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAg
IHJlc3VsdC0+c2V0U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgpKTsKKyAgICAvLyBDU1MzIHJhZGlh
bCBncmFkaWVudHMgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgcG9pbnQuCisg
ICAgcmVzdWx0LT5zZXRGaXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0
U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKKworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc2hhcGVWYWx1ZTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemVWYWx1ZTsK
KworICAgIC8vIE9wdGlvbmFsIHNoYXBlIGFuZC9vciBzaXplIGluIGFueSBvcmRlci4KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQg
IT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGJvb2wgZm91bmRWYWx1ZSA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50
LT5pZCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgorICAgICAgICBjYXNlIENTU1Zh
bHVlRWxsaXBzZToKKyAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOworICAgICAgICAgICAg
Zm91bmRWYWx1ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUNsb3Nlc3RTaWRlOgorICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VzdENvcm5lcjoKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0U2lkZToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUZh
cnRoZXN0Q29ybmVyOgorICAgICAgICBjYXNlIENTU1ZhbHVlQ29udGFpbjoKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUNvdmVyOgorICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKKyAgICAgICAg
ICAgIGZvdW5kVmFsdWUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZFZh
bHVlKSB7CisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgICAg
IGlmICghYXJndW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBleHBlY3RDb21tYSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQt
PnNldFNoYXBlKHNoYXBlVmFsdWUuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNpemluZ0Jl
aGF2aW9yKHNpemVWYWx1ZS5jb3B5UmVmKCkpOworCisgICAgLy8gT3IsIHR3byBsZW5ndGhzIG9y
IHBlcmNlbnRhZ2VzCisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsU2l6
ZTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKKworICAgIGlm
ICghc2hhcGVWYWx1ZSAmJiAhc2l6ZVZhbHVlKSB7CisgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIGhTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7CisgICAgICAgIGlmICh2YWxpZGF0
ZVVuaXQoaFNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpIHsKKyAgICAg
ICAgICAgIGhvcml6b250YWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGhTaXpl
V2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwor
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Cisg
ICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodlNpemVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxhdGlvbik7CisKKyAgICAgICAgICAgIGFyZ3VtZW50
ID0gYXJncy0+bmV4dCgpOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBNdXN0IGhhdmUgbmVpdGhlciBvciBib3RoLgorICAgIGlm
ICghaG9yaXpvbnRhbFNpemUgIT0gIXZlcnRpY2FsU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShXVEZNb3ZlKGhvcml6b250YWxT
aXplKSk7CisgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUoV1RGTW92ZSh2ZXJ0aWNhbFNp
emUpKTsKKworICAgIGlmICghcGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwg
ZXhwZWN0Q29tbWEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBncmFkaWVudCA9IFdU
Rk1vdmUocmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCit7CisgICAg
YXV0byByZXN1bHQgPSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBD
U1NMaW5lYXJHcmFkaWVudCk7CisKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1
ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBpZiAoIWFyZ3MgfHwg
IWFyZ3MtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFhcmdzLT5j
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CisKKyAg
ICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CisgICAgLy8gTG9vayBmb3IgYW5nbGUuCisgICAg
aWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENT
U1N0cmljdE1vZGUpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKKworICAgICAgICBh
cmdzLT5uZXh0KCk7CisgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlyc3RB
cmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgInRvIikpIHsKKyAgICAgICAgLy8gdG8gWyBbbGVmdCB8
IHJpZ2h0XSB8fCBbdG9wIHwgYm90dG9tXSBdCisgICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0
QXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmICghbmV4dEFyZ3VtZW50KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmFs
c2U7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb24gPSB2YWx1ZUZy
b21TaWRlS2V5d29yZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOworICAgICAgICBpZiAo
IWxvY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gZW5kWCwgZW5kWTsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkK
KyAgICAgICAgICAgIGVuZFggPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZW5kWSA9IFdURk1vdmUobG9jYXRpb24pOworCisgICAgICAgIG5leHRBcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKKyAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29y
ZCgqbmV4dEFyZ3VtZW50LCBpc0hvcml6b250YWwpOworICAgICAgICBpZiAobG9jYXRpb24pIHsK
KyAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5k
WCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGVu
ZFggPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGVuZFkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBlbmRZID0gV1RGTW92ZShsb2NhdGlvbik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGFyZ3MtPm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdENvbW1h
ID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoV1RGTW92ZShlbmRYKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1vdmUoZW5kWSkpOworICAgIH0KKworICAgIGlmICgh
cGFyc2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlc3VsdC0+c3RvcENvdW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChD
U1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQs
IENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1JhZGlhbEdyYWRpZW50KTsK
KworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOworICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdz
LT5jdXJyZW50KCk7CisgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOworCisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBzaGFwZVZhbHVlOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZh
bHVlOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaG9yaXpvbnRhbFNpemU7CisgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7CisKKyAgICAvLyBGaXJzdCBw
YXJ0IG9mIGdyYW1tYXIsIHRoZSBzaXplL3NoYXBlIGNsYXVzZToKKyAgICAvLyBbIGNpcmNsZSB8
fCA8bGVuZ3RoPiBdIHwKKyAgICAvLyBbIGVsbGlwc2UgfHwgWyA8bGVuZ3RoPiB8IDxwZXJjZW50
YWdlPiBdezJ9IF0gfAorICAgIC8vIFsgWyBjaXJjbGUgfCBlbGxpcHNlXSB8fCA8c2l6ZS1rZXl3
b3JkPiBdCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsK
KyAgICAgICAgICAgIGJvb2wgYmFkSWRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAo
YXJndW1lbnQtPmlkKSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgorICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUVsbGlwc2U6CisgICAgICAgICAgICAgICAgaWYgKHNoYXBlVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBz
aGFwZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoYXJndW1lbnQtPmlkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVDbG9zZXN0U2lkZToKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZXN0
Q29ybmVyOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0U2lkZToKKyAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVGYXJ0aGVzdENvcm5lcjoKKyAgICAgICAgICAgICAgICBpZiAoc2l6
ZVZhbHVlIHx8IGhvcml6b250YWxTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYmFkSWRlbnQgPSB0
cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYmFkSWRlbnQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwor
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisKKyAgICAgICAgICAgIGlmIChzaXplVmFsdWUgfHwg
aG9yaXpvbnRhbFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaG9yaXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24pOworCisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
KyAgICAgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2U2l6ZVdpdGhDYWxjdWxhdGlv
bigqYXJndW1lbnQpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2U2l6ZVdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgeworICAgICAgICAgICAgICAgIHZlcnRpY2Fs
U2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2U2l6ZVdpdGhDYWxjdWxhdGlvbik7
CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+
bmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBZb3UgY2FuIHNwZWNpZnkgc2l6ZSBhcyBhIGtl
eXdvcmQgb3IgYSBsZW5ndGgvcGVyY2VudGFnZSwgbm90IGJvdGguCisgICAgaWYgKHNpemVWYWx1
ZSAmJiBob3Jpem9udGFsU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIENpcmNs
ZXMgbXVzdCBoYXZlIDAgb3IgMSBsZW5ndGhzLgorICAgIGlmIChzaGFwZVZhbHVlICYmIHNoYXBl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNpcmNsZSAmJiB2ZXJ0aWNhbFNpemUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbGxpcHNlcyBtdXN0IGhhdmUgMCBvciAyIGxl
bmd0aC9wZXJjZW50YWdlcy4KKyAgICBpZiAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVFbGxpcHNlICYmIGhvcml6b250YWxTaXplICYmICF2ZXJ0aWNh
bFNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25l
IHNpemUsIGl0IG11c3QgYmUgYSBsZW5ndGguCisgICAgaWYgKCF2ZXJ0aWNhbFNpemUgJiYgaG9y
aXpvbnRhbFNpemUgJiYgaG9yaXpvbnRhbFNpemUtPmlzUGVyY2VudGFnZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlVmFsdWUuY29weVJlZigp
KTsKKyAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVWYWx1ZS5jb3B5UmVmKCkpOwor
ICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJlZigp
KTsKKyAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigp
KTsKKworICAgIC8vIFNlY29uZCBwYXJ0IG9mIGdyYW1tYXIsIHRoZSBjZW50ZXItcG9zaXRpb24g
Y2xhdXNlOgorICAgIC8vIGF0IDxwb3NpdGlvbj4KKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNlbnRlclg7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOworICAg
IGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UICYmIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmd1bWVudCwgImF0IikpIHsKKyAgICAgICAg
YXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oKmFyZ3MsIGNl
bnRlclgsIGNlbnRlclkpOworICAgICAgICBpZiAoIShjZW50ZXJYICYmIGNlbnRlclkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVu
dCgpOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRGaXJzdFkoY2VudGVyWS5jb3B5UmVmKCkpOworICAgICAgICAvLyBSaWdodCBu
b3csIENTUyByYWRpYWwgZ3JhZGllbnRzIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBjZW50
ZXJzLgorICAgICAgICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAg
ICAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5jb3B5UmVmKCkpOworICAgIH0KKworICAg
IGlmIChzaGFwZVZhbHVlIHx8IHNpemVWYWx1ZSB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJY
IHx8IGNlbnRlclkpCisgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKKworICAgIGlmICghcGFy
c2VHcmFkaWVudENvbG9yU3RvcHMoKmFyZ3MsIHJlc3VsdCwgZXhwZWN0Q29tbWEpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBncmFkaWVudCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xvclN0b3Bz
KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVu
dCwgYm9vbCBleHBlY3RDb21tYSkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSB2YWx1
ZUxpc3QuY3VycmVudCgpOworICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSB0cnVl
OworCisgICAgLy8gTm93IGxvb2sgZm9yIGNvbG9yIHN0b3BzLgorICAgIHdoaWxlICh2YWx1ZSkg
eworICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCisg
ICAgICAgIGlmIChleHBlY3RDb21tYSkgeworICAgICAgICAgICAgaWYgKCFpc0NvbW1hKHZhbHVl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHZhbHVlID0g
dmFsdWVMaXN0Lm5leHQoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gPGNvbG9yLXN0b3A+ID0g
PGNvbG9yPiBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0/CisgICAgICAgIENTU0dyYWRpZW50
Q29sb3JTdG9wIHN0b3A7CisgICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlR3JhZGllbnRDb2xv
ck9yS2V5d29yZCgqdGhpcywgKnZhbHVlKTsKKyAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpIHsK
KyAgICAgICAgICAgIGlmIChwcmV2aW91c1N0b3BXYXNNaWRwb2ludCkgLy8gMiBtaWRwb2ludHMg
aW4gYSByb3cgaXMgbm90IGFsbG93ZWQuIFRoaXMgYWxzbyBjYXRjaGVzIHN0YXJ0aW5nIHdpdGgg
YSBtaWRwb2ludC4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IHN0b3AuaXNNaWRwb2ludCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZUxpc3QubmV4dCgpOworCisgICAgICAgIHByZXZpb3VzU3RvcFdhc01pZHBvaW50
ID0gc3RvcC5pc01pZHBvaW50OworCisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjcmVhdGVQcmlt
aXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOworICAgICAgICAgICAgICAg
IHZhbHVlID0gdmFsdWVMaXN0Lm5leHQoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcC5p
c01pZHBvaW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdyYWRpZW50LmFkZFN0b3Aoc3RvcCk7CisgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBXZSBjYW4ndCBlbmQgb24gYSBtaWRwb2ludC4KKyAgICBpZiAo
cHJldmlvdXNTdG9wV2FzTWlkcG9pbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IE11c3QgaGF2ZSAyIG9yIG1vcmUgc3RvcHMgdG8gYmUgdmFsaWQuCisgICAgcmV0dXJuIGdyYWRp
ZW50LnN0b3BDb3VudCgpID49IDI7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjppc0dlbmVyYXRlZElt
YWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKSBjb25zdAoreworICAgIGlmICh2YWx1ZS51
bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiLXdlYmtpdC1ncmFkaWVudCgiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbGluZWFyLWdyYWRp
ZW50KCIpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAibGluZWFyLWdyYWRpZW50KCIpCisgICAgICAgIHx8IGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRp
bmctbGluZWFyLWdyYWRpZW50KCIpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgi
KQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlv
bi0+bmFtZSwgIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpCisgICAgICAgIHx8IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmFkaWFsLWdyYWRp
ZW50KCIpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpCisgICAg
ICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY2FudmFzKCIp
CisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiY3Jvc3MtZmFkZSgiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3MtZmFkZSgiKQorICAg
ICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFt
ZSwgImZpbHRlcigiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2
YWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtZmlsdGVyKCIpCisgICAgICAgIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1u
YW1lZC1pbWFnZSgiKTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlR2VuZXJhdGVkSW1hZ2Uo
Q1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQor
eworICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSA9ICp2YWx1ZUxpc3QuY3VycmVudCgp
OworCisgICAgaWYgKHBhcnNlclZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWdyYWRpZW50KCIp
KQorICAgICAgICByZXR1cm4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1
ZSk7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LWxpbmVhci1ncmFkaWVudCgiKSkKKyAgICAgICAgcmV0
dXJuIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJl
cGVhdGluZyk7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2Vy
VmFsdWUuZnVuY3Rpb24tPm5hbWUsICJsaW5lYXItZ3JhZGllbnQoIikpCisgICAgICAgIHJldHVy
biBwYXJzZUxpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIE5vblJlcGVhdGluZyk7CisK
KyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIikpCisgICAgICAg
IHJldHVybiBwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBS
ZXBlYXRpbmcpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNl
clZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKSkKKyAg
ICAgICAgcmV0dXJuIHBhcnNlTGluZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgUmVwZWF0
aW5nKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1
ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtcmFkaWFsLWdyYWRpZW50KCIpKQorICAgICAgICBy
ZXR1cm4gcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9u
UmVwZWF0aW5nKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJz
ZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgInJhZGlhbC1ncmFkaWVudCgiKSkKKyAgICAgICAgcmV0
dXJuIHBhcnNlUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsK
KworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKSkKKyAgICAg
ICAgcmV0dXJuIHBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUs
IFJlcGVhdGluZyk7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFy
c2VyVmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpKQor
ICAgICAgICByZXR1cm4gcGFyc2VSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBl
YXRpbmcpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jYW52YXMoIikpCisgICAgICAgIHJldHVybiBw
YXJzZUNhbnZhcyh2YWx1ZUxpc3QsIHZhbHVlKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtY3Jvc3Mt
ZmFkZSgiKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlQ3Jvc3NmYWRlKHZhbHVlTGlzdCwgdmFsdWUs
IHRydWUpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3Jvc3MtZmFkZSgiKSkKKyAgICAgICAgcmV0dXJuIHBhcnNl
Q3Jvc3NmYWRlKHZhbHVlTGlzdCwgdmFsdWUsIGZhbHNlKTsKKworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZpbHRlcigi
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+
bmFtZSwgIi13ZWJraXQtZmlsdGVyKCIpKQorICAgICAgICByZXR1cm4gcGFyc2VGaWx0ZXJJbWFn
ZSh2YWx1ZUxpc3QsIHZhbHVlKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtbmFtZWQtaW1hZ2UoIikp
CisgICAgICAgIHJldHVybiBwYXJzZU5hbWVkSW1hZ2UodmFsdWVMaXN0LCB2YWx1ZSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbHRlckltYWdlKENT
U1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBmaWx0ZXIpCit7
CisgICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgorICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJn
cyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOworICAgIGlmICgh
YXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGltYWdlLiBJdCBpcyBhIGZpbGwg
aW1hZ2UuCisgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOworICAgIGlmICghcGFyc2VG
aWxsSW1hZ2UoKmFyZ3MsIGltYWdlVmFsdWUpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgICAgIGltYWdlVmFsdWUg
PSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWUtPnN0cmluZykpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmFsdWUg
PSBhcmdzLT5uZXh0KCk7CisKKyAgICAvLyBTa2lwIGEgY29tbWEKKyAgICBpZiAoIWlzQ29tbWEo
dmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmFsdWUgPSBhcmdzLT5uZXh0KCk7
CisKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmaWx0ZXJWYWx1ZTsKKyAgICBpZiAoIXZhbHVl
IHx8ICFwYXJzZUZpbHRlcigqYXJncywgZmlsdGVyVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdmFsdWUgPSBhcmdzLT5uZXh0KCk7CisKKyAgICBmaWx0ZXIgPSBDU1NGaWx0ZXJJ
bWFnZVZhbHVlOjpjcmVhdGUoaW1hZ2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBmaWx0ZXJWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU1Bh
cnNlcjo6cGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0
cjxDU1NWYWx1ZT4mIGNyb3NzZmFkZSwgYm9vbCBwcmVmaXhlZCkKK3sKKyAgICAvLyBXYWxrIHRo
ZSBhcmd1bWVudHMuCisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1
cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNp
emUoKSAhPSA1KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQg
aXMgdGhlICJmcm9tIiBpbWFnZS4gSXQgaXMgYSBmaWxsIGltYWdlLgorICAgIFJlZlB0cjxDU1NW
YWx1ZT4gZnJvbUltYWdlVmFsdWU7CisgICAgaWYgKCFhcmd1bWVudCB8fCAhcGFyc2VGaWxsSW1h
Z2UoKmFyZ3MsIGZyb21JbWFnZVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOworCisgICAgLy8gU2tpcCBhIGNvbW1hCisgICAgaWYgKCFp
c0NvbW1hKGFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOworCisgICAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgInRvIiBp
bWFnZS4gSXQgaXMgYSBmaWxsIGltYWdlLgorICAgIFJlZlB0cjxDU1NWYWx1ZT4gdG9JbWFnZVZh
bHVlOworICAgIGlmICghYXJndW1lbnQgfHwgIXBhcnNlRmlsbEltYWdlKCphcmdzLCB0b0ltYWdl
VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7CisKKyAgICAvLyBTa2lwIGEgY29tbWEKKyAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisKKyAg
ICAvLyBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGNyb3NzZmFkZSB2YWx1ZS4gSXQgaXMgYSBw
ZXJjZW50YWdlIG9yIGEgZnJhY3Rpb25hbCBudW1iZXIuCisgICAgaWYgKCFhcmd1bWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cGVyY2VudGFnZTsKKyAgICBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKQorICAgICAgICBwZXJjZW50YWdlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oYXJndW1lbnQtPmZWYWx1ZSAvIDEw
MCwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICBlbHNlIGlmIChh
cmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAg
cGVyY2VudGFnZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBU
bzxkb3VibGU+KGFyZ3VtZW50LT5mVmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjcm9zc2Zh
ZGUgPSBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKGZyb21JbWFnZVZhbHVlLnJlbGVhc2VOb25O
dWxsKCksIHRvSW1hZ2VWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBwZXJjZW50YWdlLnJlbGVhc2VO
b25OdWxsKCksIHByZWZpeGVkKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU1Bh
cnNlcjo6cGFyc2VDYW52YXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NWYWx1ZT4mIGNhbnZhcykKK3sKKyAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCisgICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7CisgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhbnZhcyBu
YW1lLiAgSXQgaXMgYW4gaWRlbnRpZmllci4KKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBh
cmdzLT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS0+dW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYW52
YXMgPSBDU1NDYW52YXNWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VOYW1lZEltYWdlKENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBuYW1lZEltYWdlKQoreworICAgIENT
U1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9uLT5h
cmdzLmdldCgpOworICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIGltYWdlIG5h
bWUuCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy0+Y3VycmVudCgpOworICAgIGlm
ICghdmFsdWUgfHwgdmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbmFtZWRJbWFnZSA9IENTU05hbWVkSW1hZ2VW
YWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYg
RU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQorUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZUltYWdlUmVzb2x1dGlvbigpCit7CisgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIGJvb2wgaGF2ZVJlc29sdXRpb24gPSBm
YWxzZTsKKyAgICBib29sIGhhdmVGcm9tSW1hZ2UgPSBmYWxzZTsKKyAgICBib29sIGhhdmVTbmFw
ID0gZmFsc2U7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOworICAgICAgICBpZiAoIWhhdmVGcm9tSW1h
Z2UgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRnJvbUltYWdlKSB7CisgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUtPmlkKSk7CisgICAgICAgICAgICBoYXZlRnJvbUltYWdlID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIGlmICghaGF2ZVNuYXAgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlU25hcCkgeworICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgaGF2ZVNuYXAgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZWYWx1ZSA+
IDApIHsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKKyAgICAgICAgICAgIGhhdmVSZXNvbHV0aW9uID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0KKyAgICBpZiAoIWxpc3QtPmxl
bmd0aCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWhhdmVGcm9tSW1hZ2Ug
JiYgIWhhdmVSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
V1RGTW92ZShsaXN0KTsKK30KKyNlbmRpZgorCitSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUltYWdlU2V0KCkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24pOworCisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBmdW5jdGlvbkFy
Z3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBpZiAoIWZ1bmN0aW9uQXJncyB8
fCAhZnVuY3Rpb25BcmdzLT5zaXplKCkgfHwgIWZ1bmN0aW9uQXJncy0+Y3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZh
bHVlOjpjcmVhdGUoKTsKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJnID0gZnVuY3Rpb25BcmdzLT5j
dXJyZW50KCk7CisgICAgd2hpbGUgKGFyZykgeworICAgICAgICBpZiAoYXJnLT51bml0ICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaW1hZ2VTZXQtPmFwcGVuZChDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVV
UkwoYXJnLT5zdHJpbmcpKSk7CisgICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgpOwor
ICAgICAgICBpZiAoIWFyZyB8fCBhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
SU1FTlNJT04pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBkb3VibGUg
aW1hZ2VTY2FsZUZhY3RvciA9IDA7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nID0gYXJn
LT5zdHJpbmc7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3QgTENoYXIqIHN0YXJ0ID0g
c3RyaW5nLmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICBwYXJzZURvdWJsZShzdGFydCwgc3Rh
cnQgKyBsZW5ndGgsICd4JywgaW1hZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBzdHJpbmcuY2hhcmFjdGVyczE2KCk7Cisg
ICAgICAgICAgICBwYXJzZURvdWJsZShzdGFydCwgc3RhcnQgKyBsZW5ndGgsICd4JywgaW1hZ2VT
Y2FsZUZhY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltYWdlU2NhbGVGYWN0b3IgPD0g
MCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpbWFnZVNldC0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW1hZ2VTY2FsZUZhY3Rvciwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKworICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgbm8gbW9yZSBhcmd1bWVudHMsIHdlJ3JlIGRvbmUuCisgICAgICAgIGFyZyA9IGZ1bmN0aW9u
QXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIWFyZykKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIGFyZ3VtZW50cywgdGhleSBzaG91bGQgYmUgYWZ0
ZXIgYSBjb21tYS4KKyAgICAgICAgaWYgKCFpc0NvbW1hKGFyZykpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBTa2lwIHRoZSBjb21tYSBhbmQgbW92ZSBvbiB0byB0
aGUgbmV4dCBhcmd1bWVudC4KKyAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0KCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VTZXQpOworfQorCitjbGFzcyBUcmFuc2Zv
cm1PcGVyYXRpb25JbmZvIHsKK3B1YmxpYzoKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvKGNv
bnN0IENTU1BhcnNlclN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBtX3R5cGUoV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICwgbV9hcmdD
b3VudCgxKQorICAgICAgICAsIG1fYWxsb3dTaW5nbGVBcmd1bWVudChmYWxzZSkKKyAgICAgICAg
LCBtX3VuaXQoQ1NTUGFyc2VyOjpGVW5rbm93bikKKyAgICB7CisgICAgICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzOworICAgICAgICB1bnNpZ25lZCBuYW1lTGVuZ3RoID0gbmFtZS5sZW5ndGgo
KTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nZXN0TmFtZUxlbmd0aCA9IDEyOworICAg
ICAgICBVQ2hhciBjaGFyYWN0ZXJCdWZmZXJbbG9uZ2VzdE5hbWVMZW5ndGhdOworICAgICAgICBp
ZiAobmFtZS5pczhCaXQoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RkOjpt
aW4obG9uZ2VzdE5hbWVMZW5ndGgsIG5hbWVMZW5ndGgpOworICAgICAgICAgICAgY29uc3QgTENo
YXIqIGNoYXJhY3RlcnM4ID0gbmFtZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGNoYXJhY3Rl
ckJ1ZmZlcltpXSA9IGNoYXJhY3RlcnM4W2ldOworICAgICAgICAgICAgY2hhcmFjdGVycyA9IGNo
YXJhY3RlckJ1ZmZlcjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjaGFyYWN0ZXJzID0g
bmFtZS5jaGFyYWN0ZXJzMTYoKTsKKworICAgICAgICBzd2l0Y2ggKG5hbWVMZW5ndGgpIHsKKyAg
ICAgICAgY2FzZSA1OgorICAgICAgICAgICAgLy8gVmFsaWQgbmFtZTogc2tldyguCisgICAgICAg
ICAgICBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1Mn
KSkKKyAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAnaycpIHx8IChjaGFyYWN0
ZXJzWzFdID09ICdLJykpCisgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2Un
KSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnRScpKQorICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzNdID09ICd3JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKKyAgICAgICAgICAgICAg
ICAmIChjaGFyYWN0ZXJzWzRdID09ICcoJykpIHsKKyAgICAgICAgICAgICAgICBtX3VuaXQgPSBD
U1NQYXJzZXI6OkZBbmdsZTsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX2Fs
bG93U2luZ2xlQXJndW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAg
ICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBza2V3eCgsIHNrZXd5KCwgc2NhbGUoLgorICAgICAg
ICAgICAgaWYgKChjaGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ0Mn
KSkgeworICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAoY2hh
cmFjdGVyc1swXSA9PSAnUycpKQorICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sy
XSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCisgICAgICAgICAgICAgICAgICAg
ICYgKChjaGFyYWN0ZXJzWzNdID09ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKKyAg
ICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVy
c1s0XSA9PSAnRScpKQorICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzVdID09ICco
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwor
ICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVB
cmd1bWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09
ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMV0gPT0gJ2snKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnSycpKQorICAg
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnZScpIHx8IChjaGFyYWN0
ZXJzWzJdID09ICdFJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNd
ID09ICd3JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ1cnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgJiAoY2hhcmFjdGVyc1s1XSA9PSAnKCcpKSB7CisgICAgICAgICAgICAgICAgaWYgKChjaGFy
YWN0ZXJzWzRdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1gnKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKKyAgICAgICAgICAgICAgICAg
ICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0
aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3knKSB8
fCAoY2hhcmFjdGVyc1s0XSA9PSAnWScpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9
IENTU1BhcnNlcjo6RkFuZ2xlOworICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoK
KyAgICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBtYXRyaXgoLCByb3RhdGUoLCBzY2FsZXgoLCBz
Y2FsZXkoLCBzY2FsZXooLgorICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdtJykg
fHwgKGNoYXJhY3RlcnNbMF0gPT0gJ00nKSkgeworICAgICAgICAgICAgICAgIGlmICgoKGNoYXJh
Y3RlcnNbMV0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQorICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdU
JykpCisgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykgfHwgKGNo
YXJhY3RlcnNbM10gPT0gJ1InKSkKKyAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNb
NF0gPT0gJ2knKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnSScpKQorICAgICAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1s1XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdYJykpCisg
ICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7CisgICAgICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb247CisgICAgICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAxMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdyJykgfHwg
KGNoYXJhY3RlcnNbMF0gPT0gJ1InKSkgeworICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3Rl
cnNbMV0gPT0gJ28nKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQorICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykp
CisgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdhJykgfHwgKGNoYXJh
Y3RlcnNbM10gPT0gJ0EnKSkKKyAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnVCcpKQorICAgICAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s1XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdFJykpCisgICAg
ICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJygnKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKKyAgICAgICAgICAgICAgICAgICAg
bV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVy
c1swXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzBdID09ICdTJykpCisgICAgICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdjJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ0Mn
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAo
Y2hhcmFjdGVyc1syXSA9PSAnQScpKQorICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1szXSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdMJykpCisgICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0g
J0UnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7
CisgICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzVdID09ICd4JykgfHwgKGNoYXJhY3Rl
cnNbNV0gPT0gJ1gnKSkgeworICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6
OkZOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICgoY2hhcmFjdGVyc1s1XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdZJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOworICAgICAg
ICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJh
bnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNb
NV0gPT0gJ3onKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnWicpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgbV90
eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSA4OgorICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IHJvdGF0ZXgoLCByb3Rh
dGV5KCwgcm90YXRleigsIHNjYWxlM2QoLgorICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBd
ID09ICdzJykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkgeworICAgICAgICAgICAgICAgIGlm
ICgoKGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKQorICAg
ICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJz
WzJdID09ICdBJykpCisgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICds
JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKKyAgICAgICAgICAgICAgICAgICAgJiAoKGNo
YXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScpKQorICAgICAgICAg
ICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzVdID09ICczJykKKyAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2QnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnRCcpKQorICAg
ICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzddID09ICcoJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOworICAgICAgICAgICAgICAgICAg
ICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJh
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAo
Y2hhcmFjdGVyc1swXSA9PSAnUicpKQorICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1sxXSA9PSAnbycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCisgICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0g
J1QnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8
fCAoY2hhcmFjdGVyc1szXSA9PSAnQScpKQorICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s0XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCisgICAgICAgICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0g
PT0gJ0UnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s3XSA9PSAnKCcp
KSB7CisgICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzZdID09ICd4JykgfHwgKGNoYXJh
Y3RlcnNbNl0gPT0gJ1gnKSkgeworICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJz
ZXI6OkZBbmdsZTsKKyAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICgoY2hhcmFjdGVyc1s2XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdZJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7CisgICAg
ICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZ
VHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3Rl
cnNbNl0gPT0gJ3onKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAnWicpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOworICAgICAgICAgICAgICAgICAgICBt
X3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlv
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgLy8gVmFsaWQgbmFtZXM6IG1hdHJpeDNkKCwg
cm90YXRlM2QoLgorICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzBdID09ICdtJykgfHwgKGNo
YXJhY3RlcnNbMF0gPT0gJ00nKSkgeworICAgICAgICAgICAgICAgIGlmICgoKGNoYXJhY3RlcnNb
MV0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQScpKQorICAgICAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdUJykpCisg
ICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdyJykgfHwgKGNoYXJhY3Rl
cnNbM10gPT0gJ1InKSkKKyAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0g
J2knKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnSScpKQorICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1s1XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdYJykpCisgICAgICAg
ICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0gJzMnKQorICAgICAgICAgICAgICAgICAg
ICAmICgoY2hhcmFjdGVyc1s3XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdEJykpCisg
ICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbOF0gPT0gJygnKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7CisgICAgICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9w
ZXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDMxOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdyJykg
fHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1InKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNo
YXJhY3RlcnNbMV0gPT0gJ28nKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnTycpKQorICAgICAgICAg
ICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzJd
ID09ICdUJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICdh
JykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0EnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbNF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnVCcpKQorICAgICAg
ICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJz
WzVdID09ICdFJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNl0gPT0g
JzMnKQorICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAnZCcpIHx8
IChjaGFyYWN0ZXJzWzddID09ICdEJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJh
Y3RlcnNbOF0gPT0gJygnKSkgeworICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6
Rk51bWJlcjsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV9hcmdDb3Vu
dCA9IDc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAx
MDoKKyAgICAgICAgICAgIC8vIFZhbGlkIG5hbWU6IHRyYW5zbGF0ZSguCisgICAgICAgICAgICBp
ZiAoKChjaGFyYWN0ZXJzWzBdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1QnKSkKKyAg
ICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxXSA9PSAncicpIHx8IChjaGFyYWN0ZXJzWzFd
ID09ICdSJykpCisgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAo
Y2hhcmFjdGVyc1syXSA9PSAnQScpKQorICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNd
ID09ICduJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ04nKSkKKyAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1s0XSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdTJykpCisgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAn
TCcpKQorICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzZdID09ICdhJykgfHwgKGNoYXJh
Y3RlcnNbNl0gPT0gJ0EnKSkKKyAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAn
dCcpIHx8IChjaGFyYWN0ZXJzWzddID09ICdUJykpCisgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbOF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnRScpKQorICAgICAgICAgICAg
ICAgICYgKGNoYXJhY3RlcnNbOV0gPT0gJygnKSkgeworICAgICAgICAgICAgICAgIG1fdW5pdCA9
IENTU1BhcnNlcjo6Rkxlbmd0aCB8IENTU1BhcnNlcjo6RlBlcmNlbnQ7CisgICAgICAgICAgICAg
ICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX2FsbG93U2luZ2xlQXJndW1lbnQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICAvLyBWYWxpZCBuYW1lczog
dHJhbnNsYXRleCgsIHRyYW5zbGF0ZXkoLCB0cmFuc2xhdGV6KC4KKyAgICAgICAgICAgIGlmICgo
KGNoYXJhY3RlcnNbMF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnVCcpKQorICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0g
J1InKSkKKyAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFy
YWN0ZXJzWzJdID09ICdBJykpCisgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0g
J24nKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnTicpKQorICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzRdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKKyAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykp
CisgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVy
c1s2XSA9PSAnQScpKQorICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0Jykg
fHwgKGNoYXJhY3RlcnNbN10gPT0gJ1QnKSkKKyAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVy
c1s4XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCisgICAgICAgICAgICAgICAg
JiAoY2hhcmFjdGVyc1sxMF0gPT0gJygnKSkgeworICAgICAgICAgICAgICAgIGlmICgoY2hhcmFj
dGVyc1s5XSA9PSAneCcpIHx8IChjaGFyYWN0ZXJzWzldID09ICdYJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2Vu
dDsKKyAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICgoY2hhcmFjdGVyc1s5XSA9PSAneScpIHx8IChjaGFyYWN0ZXJzWzldID09ICdZJykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwgQ1NTUGFyc2Vy
OjpGUGVyY2VudDsKKyAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICgoY2hhcmFjdGVyc1s5XSA9PSAneicpIHx8IChjaGFyYWN0ZXJzWzldID09ICda
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTGVuZ3RoIHwg
Q1NTUGFyc2VyOjpGUGVyY2VudDsKKyAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMTI6CisgICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogcGVyc3BlY3RpdmUoLCB0cmFuc2xh
dGUzZCguCisgICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3AnKSB8fCAoY2hhcmFj
dGVyc1swXSA9PSAnUCcpKSB7CisgICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9
PSAnZScpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdFJykpCisgICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzJdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1InKSkKKyAgICAg
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1sz
XSA9PSAnUycpKQorICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAncCcp
IHx8IChjaGFyYWN0ZXJzWzRdID09ICdQJykpCisgICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1s2XSA9PSAn
QycpKQorICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s3XSA9PSAndCcpIHx8IChj
aGFyYWN0ZXJzWzddID09ICdUJykpCisgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzhdID09ICdpJykgfHwgKGNoYXJhY3RlcnNbOF0gPT0gJ0knKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbOV0gPT0gJ3YnKSB8fCAoY2hhcmFjdGVyc1s5XSA9PSAnVicpKQor
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sxMF0gPT0gJ2UnKSB8fCAoY2hhcmFj
dGVyc1sxMF0gPT0gJ0UnKSkKKyAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1sxMV0g
PT0gJygnKSkgeworICAgICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1i
ZXI7CisgICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJz
WzBdID09ICdUJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09
ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ1InKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnQScpKQorICAg
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnbicpIHx8IChjaGFyYWN0
ZXJzWzNdID09ICdOJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRd
ID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnTCcpKQor
ICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s2XSA9PSAnYScpIHx8IChjaGFy
YWN0ZXJzWzZdID09ICdBJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzddID09ICd0JykgfHwgKGNoYXJhY3RlcnNbN10gPT0gJ1QnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgJiAoKGNoYXJhY3RlcnNbOF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnRScp
KQorICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzldID09ICczJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMTBdID09ICdkJykgfHwgKGNoYXJhY3Rl
cnNbMTBdID09ICdEJykpCisgICAgICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbMTFd
ID09ICcoJykpIHsKKyAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGgg
fCBDU1NQYXJzZXI6OkZQZXJjZW50OworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAg
ICAgICAgICBtX2FyZ0NvdW50ID0gNTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IC8vIGVuZCBzd2l0Y2ggKCkKKyAgICB9CisKKyAgICBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgdW5zaWduZWQgYXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ0Nv
dW50OyB9CisgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0KCkgY29uc3QgeyByZXR1cm4gbV91bml0
OyB9CisKKyAgICBib29sIHVua25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KKyAgICBib29s
IGhhc0NvcnJlY3RBcmdDb3VudCh1bnNpZ25lZCBhcmdDb3VudCkgeyByZXR1cm4gbV9hcmdDb3Vu
dCA9PSBhcmdDb3VudCB8fCAobV9hbGxvd1NpbmdsZUFyZ3VtZW50ICYmIGFyZ0NvdW50ID09IDEp
OyB9CisKK3ByaXZhdGU6CisgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUgbV90eXBlOworICAgIHVuc2lnbmVkIG1fYXJnQ291bnQ7CisgICAgYm9vbCBt
X2FsbG93U2luZ2xlQXJndW1lbnQ7CisgICAgQ1NTUGFyc2VyOjpVbml0cyBtX3VuaXQ7Cit9Owor
CitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKK3sKKyAg
ICBpZiAoIW1fdmFsdWVMaXN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
bGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICBmb3IgKENT
U1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1W
YWx1ZSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgaWYgKCFwYXJzZWRU
cmFuc2Zvcm1WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGxp
c3QtPmFwcGVuZChwYXJzZWRUcmFuc2Zvcm1WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKK30KKworUmVmUHRyPFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtVmFsdWUoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biB8fCAhdmFsdWUuZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8g
RXZlcnkgcHJpbWl0aXZlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KKyAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKKyAgICBp
ZiAoIWFyZ3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2VlIGlmIHRoZSBz
cGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5kLgorICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbkluZm8gaW5mbyh2YWx1ZS5mdW5jdGlvbi0+bmFtZSk7CisgICAgaWYgKGluZm8udW5r
bm93bigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghaW5mby5oYXNDb3Jy
ZWN0QXJnQ291bnQoYXJncy0+c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5jdGlvbmFsIHByaW1pdGl2ZXMgdGhh
dCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVyYXRpb25zLgorICAgIC8vIFdlIGNvbGxlY3QgYSBsaXN0
IG9mIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVjaWZpZXMg
YSBzaW5nbGUgb3BlcmF0aW9uLgorCisgICAgLy8gQ3JlYXRlIHRoZSBuZXcgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUgZm9yIHRoaXMgb3BlcmF0aW9uIGFuZCBhZGQgaXQgdG8gb3VyIGxpc3QuCisg
ICAgYXV0byB0cmFuc2Zvcm1WYWx1ZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUo
aW5mby50eXBlKCkpOworCisgICAgLy8gU25hZyBvdXIgdmFsdWVzLgorICAgIENTU1BhcnNlclZh
bHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKKyAgICB1bnNpZ25lZCBhcmdOdW1iZXIg
PSAwOworICAgIHdoaWxlIChhcmd1bWVudCkgeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOworICAgICAgICBDU1NQYXJzZXI6
OlVuaXRzIHVuaXQgPSBpbmZvLnVuaXQoKTsKKworICAgICAgICBpZiAoaW5mby50eXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFy
Z051bWJlciA9PSAzKSB7CisgICAgICAgICAgICAvLyA0dGggcGFyYW0gb2Ygcm90YXRlM2QoKSBp
cyBhbiBhbmdsZSByYXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVyLCB2YWxpZGF0ZSBpdCBhcyBzdWNo
CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwg
RkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09IDIpIHsKKyAg
ICAgICAgICAgIC8vIDNyZCBwYXJhbSBvZiB0cmFuc2xhdGUzZCgpIGNhbm5vdCBiZSBhIHBlcmNl
bnRhZ2UKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7Cisg
ICAgICAgICAgICAvLyAxc3QgcGFyYW0gb2YgdHJhbnNsYXRlWigpIGNhbm5vdCBiZSBhIHBlcmNl
bnRhZ2UKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewor
ICAgICAgICAgICAgLy8gMXN0IHBhcmFtIG9mIHBlcnNwZWN0aXZlKCkgbXVzdCBiZSBhIG5vbi1u
ZWdhdGl2ZSBudW1iZXIgKGRlcHJlY2F0ZWQpIG9yIGxlbmd0aC4KKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxlbmd0aCB8
IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24sIHVuaXQsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0
aW9uLgorICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOworCisgICAgICAgIGFyZ3VtZW50ID0g
YXJncy0+bmV4dCgpOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
fHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CisKKyAgICAgICAgKythcmdOdW1iZXI7
CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUodHJhbnNmb3JtVmFsdWUpOworfQorCitib29s
IENTU1BhcnNlcjo6aXNCbGVuZE1vZGUoQ1NTVmFsdWVJRCB2YWx1ZUlEKQoreworICAgIHJldHVy
biAodmFsdWVJRCA+PSBDU1NWYWx1ZU11bHRpcGx5ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVMdW1p
bm9zaXR5KQorICAgICAgICB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsCisgICAgICAgIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdmVybGF5OworfQorCitib29sIENTU1BhcnNlcjo6aXNDb21w
b3NpdGVPcGVyYXRvcihDU1NWYWx1ZUlEIHZhbHVlSUQpCit7CisgICAgLy8gRklYTUU6IEFkZCBD
U1NWYWx1ZURlc3RpbmF0aW9uIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIgd2hlbiB0aGUgQ29tcG9zaXRp
bmcgc3BlYyB1cGRhdGVzLgorICAgIHJldHVybiB2YWx1ZUlEID49IENTU1ZhbHVlQ2xlYXIgJiYg
dmFsdWVJRCA8PSBDU1NWYWx1ZVhvcjsKK30KKworc3RhdGljIHZvaWQgZmlsdGVySW5mb0Zvck5h
bWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBuYW1lLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Rmls
dGVyT3BlcmF0aW9uVHlwZSYgZmlsdGVyVHlwZSwgdW5zaWduZWQmIG1heGltdW1Bcmd1bWVudENv
dW50KQoreworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAiZ3Jh
eXNjYWxlKCIpKQorICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okdy
YXlzY2FsZUZpbHRlck9wZXJhdGlvbjsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCAic2VwaWEoIikpCisgICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb247CisgICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInNhdHVyYXRlKCIpKQorICAgICAgICBmaWx0
ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOwor
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJodWUtcm90
YXRlKCIpKQorICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJv
dGF0ZUZpbHRlck9wZXJhdGlvbjsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShuYW1lLCAiaW52ZXJ0KCIpKQorICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjsKKyAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAib3BhY2l0eSgiKSkKKyAgICAgICAgZmlsdGVy
VHlwZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOworICAg
IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJicmlnaHRuZXNz
KCIpKQorICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5l
c3NGaWx0ZXJPcGVyYXRpb247CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobmFtZSwgImNvbnRyYXN0KCIpKQorICAgICAgICBmaWx0ZXJUeXBlID0gV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOworICAgIGVsc2UgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJibHVyKCIpKQorICAgICAgICBmaWx0ZXJU
eXBlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb247CisgICAgZWxz
ZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImRyb3Atc2hhZG93KCIp
KSB7CisgICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjsKKyAgICAgICAgbWF4aW11bUFyZ3VtZW50Q291bnQgPSA0OyAgLy8g
eC1vZmZzZXQsIHktb2Zmc2V0LCBibHVyLXJhZGl1cywgY29sb3IgLS0gc3ByZWFkIGFuZCBpbnNl
dCBzdHlsZSBub3QgYWxsb3dlZC4KKyAgICB9Cit9CisKK1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMoQ1NTUGFyc2VyVmFs
dWVMaXN0JiBhcmdzLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSBm
aWx0ZXJUeXBlKQoreworICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Y3JlYXRlKGZpbHRlclR5cGUpOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7ICAgIAor
ICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoK
KyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbjoKKyAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKKyAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246CisgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjoKKyAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjogeworICAg
ICAgICAvLyBPbmUgb3B0aW9uYWwgYXJndW1lbnQsIDAtMSBvciAwJS0xMDAlLCBpZiBtaXNzaW5n
IHVzZSAxMDAlLgorICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50
KCkpOworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBhdXRvIHByaW1pdGl2ZVZh
bHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
KTsKKworICAgICAgICAgICAgLy8gU2F0dXJhdGUgYW5kIENvbnRyYXN0IGFsbG93IHZhbHVlcyBv
dmVyIDEwMCUuCisgICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSAhPSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb24KKyAgICAgICAgICAgICAgICAmJiBmaWx0ZXJU
eXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbikgewor
ICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhBbGxvd2VkID0gcHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAxMDAuMCA6
IDEuMDsKKyAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCkgPiBtYXhBbGxvd2VkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChXVEZNb3ZlKHBy
aW1pdGl2ZVZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246IHsKKyAg
ICAgICAgLy8gT25lIG9wdGlvbmFsIGFyZ3VtZW50LCBpZiBtaXNzaW5nIHVzZSAxMDAlLgorICAg
ICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOworICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
UGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRl
ck9wZXJhdGlvbjogeworICAgICAgICAvLyBodWUtcm90YXRlKCkgdGFrZXMgb25lIG9wdGlvbmFs
IGFuZ2xlLgorICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1
cnJlbnQoKSk7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgIC8vIEJsdXIgdGFrZXMgYSBzaW5nbGUg
bGVuZ3RoLiBaZXJvIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQuCisgICAgICAgIGlmIChhcmdzLnNp
emUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAg
IGlmIChhcmdzLnNpemUoKSkgeworICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b246IHsKKyAgICAgICAgLy8gZHJvcC1zaGFkb3coKSB0YWtlcyBhIHNpbmdsZSBzaGFkb3cuCisg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hhZG93
KGFyZ3MsIENTU1Byb3BlcnR5RmlsdGVyKTsKKyAgICAgICAgaWYgKCFzaGFkb3dWYWx1ZUxpc3Qg
fHwgc2hhZG93VmFsdWVMaXN0LT5sZW5ndGgoKSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIAorICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKCpzaGFkb3dWYWx1
ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IHJldHVybiBXVEZNb3ZlKGZpbHRlclZhbHVlKTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNl
RmlsdGVyKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiYgcmVzdWx0KQoreworICAgIC8vIFRoZSBmaWx0ZXIgaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwg
cHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkgaW5kaXZpZHVhbCBvcGVyYXRpb25zLgorICAgIGF1dG8g
bGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICBmb3IgKGF1
dG8qIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gdmFsdWVMaXN0
Lm5leHQoKSkgeworICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VUkkgJiYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbiB8fCAh
dmFsdWUtPmZ1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb247CisKKyAgICAgICAgLy8g
U2VlIGlmIHRoZSBzcGVjaWZpZWQgcHJpbWl0aXZlIGlzIG9uZSB3ZSB1bmRlcnN0YW5kLgorICAg
ICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVmZXJlbmNlRmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24p
OworICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyVmFsdWUtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSk7
CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoV1RGTW92ZShyZWZlcmVuY2VGaWx0ZXJWYWx1ZSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgQ1NTUGFyc2VyU3RyaW5nIG5h
bWUgPSB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWU7CisgICAgICAgICAgICB1bnNpZ25lZCBtYXhpbXVt
QXJndW1lbnRDb3VudCA9IDE7CisKKyAgICAgICAgICAgIGZpbHRlckluZm9Gb3JOYW1lKG5hbWUs
IGZpbHRlclR5cGUsIG1heGltdW1Bcmd1bWVudENvdW50KTsKKworICAgICAgICAgICAgaWYgKGZp
bHRlclR5cGUgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb24p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IGZpbHRlclZhbHVlID0gcGFyc2VCdWlsdGlu
RmlsdGVyQXJndW1lbnRzKCphcmdzLCBmaWx0ZXJUeXBlKTsKKyAgICAgICAgICAgIGlmICghZmls
dGVyVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoZmlsdGVyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBXVEZNb3ZlKGxpc3QpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCitzdGF0aWMgYm9vbCB2YWxp
ZEZsb3dOYW1lKGNvbnN0IFN0cmluZyYgZmxvd05hbWUpCit7CisgICAgcmV0dXJuICEoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJhdXRvIikKKyAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJkZWZhdWx0IikKKyAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJpbmhlcml0IikKKyAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJpbml0aWFs
IikKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmxvd05hbWUsICJu
b25lIikpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKK2Jv
b2wgQ1NTUGFyc2VyOjppc1RleHRBdXRvc2l6aW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGV4dC50ZXh0QXV0b3NpemluZ0VuYWJsZWQ7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCitib29sIENTU1BhcnNlcjo6aXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jc3NHcmlkTGF5b3V0RW5hYmxl
ZDsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorCisvLyBub25lIHwgPGlk
ZW50PgorYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdEZsb3dJbnRvKTsKKworICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25l
KSB7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBTdHJpbmco
dmFsdWUtPnN0cmluZyk7CisgICAgaWYgKCFpbnB1dFByb3BlcnR5LmlzRW1wdHkoKSkgeworICAg
ICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORyksIGltcG9ydGFudCk7CisgICAgfSBlbHNlCisgICAgICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKSwgaW1wb3J0YW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLyAtd2Vi
a2l0LWZsb3ctZnJvbTogbm9uZSB8IDxpZGVudD4KK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZ2lv
blRocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCit7CisgICAgQVNT
RVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tKTsKKworICAgIGlmIChtX3Zh
bHVlTGlzdC0+c2l6ZSgpICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5p
ZCksIGltcG9ydGFudCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0cmluZyBpbnB1dFByb3BlcnR5
ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOworICAgICAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGlucHV0UHJvcGVy
dHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVHJhbnNmb3JtT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlE
JiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQz
LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgdmFsdWUyLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTMpCit7CisgICAgcHJvcElkMSA9
IHByb3BJZDsKKyAgICBwcm9wSWQyID0gcHJvcElkOworICAgIHByb3BJZDMgPSBwcm9wSWQ7Cisg
ICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbikgeworICAgICAgICBw
cm9wSWQxID0gQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YOworICAgICAgICBwcm9wSWQyID0g
Q1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZOworICAgICAgICBwcm9wSWQzID0gQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW5aOworICAgIH0KKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjoKKyAgICAgICAgaWYgKCFwYXJzZVRyYW5z
Zm9ybU9yaWdpblNob3J0aGFuZCh2YWx1ZSwgdmFsdWUyLCB2YWx1ZTMpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZCBh
ZHZhbmNlcyB0aGUgbV92YWx1ZUxpc3QgcG9pbnRlcgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWDogeworICAgICAgICB2YWx1ZSA9IHBhcnNlUG9z
aXRpb25YKCptX3ZhbHVlTGlzdCk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luWTogeworICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25Z
KCptX3ZhbHVlTGlzdCk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luWjogeworICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgICAgIGlmICh2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgpKQorICAgICAgICAgICAgdmFs
dWUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwor
ICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQy
LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgdmFsdWUyKQoreworICAgIHByb3BJZDEgPSBwcm9wSWQ7CisgICAgcHJvcElkMiA9IHBy
b3BJZDsKKyAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW4pIHsK
KyAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YOworICAgICAg
ICBwcm9wSWQyID0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblk7CisgICAgfQorCisgICAg
c3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW46
CisgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6ZSgpID4gMikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKCptX3ZhbHVlTGlzdCwg
dmFsdWUsIHZhbHVlMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJz
cGVjdGl2ZU9yaWdpblg6IHsKKyAgICAgICAgdmFsdWUgPSBwYXJzZVBvc2l0aW9uWCgqbV92YWx1
ZUxpc3QpOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0
aXZlT3JpZ2luWTogeworICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25ZKCptX3ZhbHVlTGlz
dCk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2
YWx1ZTsKK30KKwordm9pZCBDU1NQYXJzZXI6OmFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQpCit7CisgICAgLy8gVGhlIHRleHQtZGVjb3JhdGlvbi1saW5lIHByb3BlcnR5IHRha2VzIHBy
aW9yaXR5IG92ZXIgdGV4dC1kZWNvcmF0aW9uLCB1bmxlc3MgdGhlIGxhdHRlciBoYXMgaW1wb3J0
YW50IHByaW9yaXR5IHNldC4KKyAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24gJiYgIWltcG9ydGFudCAmJiAhaW5TaG9ydGhhbmQoKSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAobV9wYXJzZWRQcm9wZXJ0aWVzW2ldLmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbkxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFu
dCk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHREZWNvcmF0aW9uKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVOb25lKSB7CisgICAgICAgIGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkocHJvcElk
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICB3aGls
ZSAoaXNWYWxpZCAmJiB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgeworICAg
ICAgICBjYXNlIENTU1ZhbHVlQmxpbms6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lVGhyb3Vn
aDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgorICAgICAgICBjYXNlIENTU1ZhbHVl
VW5kZXJsaW5lOgorI2lmIEVOQUJMRShMRVRURVJQUkVTUykKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdExldHRlcnByZXNzOgorI2VuZGlmCisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlzVmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChp
c1ZhbGlkKQorICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgIH0K
KworICAgIC8vIFZhbHVlcyBhcmUgZWl0aGVyIHZhbGlkIG9yIGluIHNob3J0aGFuZCBzY29wZS4K
KyAgICBpZiAobGlzdC0+bGVuZ3RoKCkgJiYgKGlzVmFsaWQgfHwgaW5TaG9ydGhhbmQoKSkpIHsK
KyAgICAgICAgYWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUobGlzdCks
IGltcG9ydGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGJvb2wg
aW1wb3J0YW50KQoreworICAgIC8vIFRoZSB0ZXh0LWRlY29yYXRpb24tc2tpcCBwcm9wZXJ0eSBo
YXMgc3ludGF4ICJub25lIHwgWyBvYmplY3RzIHx8IHNwYWNlcyB8fCBpbmsgfHwgZWRnZXMgfHwg
Ym94LWRlY29yYXRpb24gXSIuCisgICAgLy8gSG93ZXZlciwgb25seSAnbm9uZScgYW5kICdpbmsn
IGFyZSBpbXBsZW1lbnRlZCB5ZXQsIHNvIHdlIHdpbGwgcGFyc2Ugc3ludGF4ICJub25lIHwgaW5r
IiBmb3Igbm93LgorICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7CisgICAgZG8geworICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgeworICAgICAgICBj
YXNlIENTU1ZhbHVlTm9uZToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVJbms6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVPYmplY3RzOgorICAgICAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGlt
cG9ydGFudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVGV4dFVuZGVybGluZVBvc2l0aW9uKGJvb2wgaW1wb3J0YW50KQoreworICAgIC8vIFRo
ZSB0ZXh0LXVuZGVybGluZS1wb3NpdGlvbiBwcm9wZXJ0eSBoYXMgc2ludGF4ICJhdXRvIHwgYWxw
aGFiZXRpYyB8IFsgdW5kZXIgfHwgWyBsZWZ0IHwgcmlnaHQgXSBdIi4KKyAgICAvLyBIb3dldmVy
LCB2YWx1ZXMgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBzbyB3
ZSB3aWxsIHBhcnNlIHNpbnRheAorICAgIC8vICJhdXRvIHwgYWxwaGFiZXRpYyB8IHVuZGVyIiBm
b3Igbm93LgorICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOworICAgIHN3aXRjaCAodmFsdWUuaWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQXV0bzoKKyAg
ICBjYXNlIENTU1ZhbHVlQWxwaGFiZXRpYzoKKyAgICBjYXNlIENTU1ZhbHVlVW5kZXI6CisgICAg
ICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0
aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCksIGltcG9ydGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KQoreworICAgIHVuc2ln
bmVkIHZhbHVlTGlzdFNpemUgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOworCisgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBmaWxsOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hh
cGU7CisKKyAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSB7CisgICAgICAg
ICAgICBpZiAoZmlsbCB8fCBzaGFwZSB8fCAodmFsdWVMaXN0U2l6ZSAhPSAxICYmICFpblNob3J0
aGFuZCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSgqdmFsdWUpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIGlmIChmaWxs
IHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CisgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT3BlbiB8fCB2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVGaWxsZWQpIHsKKyAgICAgICAgICAgIGlmIChmaWxsKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZpbGwgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZURvdCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVD
aXJjbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRG91YmxlQ2lyY2xlIHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVRyaWFuZ2xlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNlc2FtZSkgeworICAg
ICAgICAgICAgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHNoYXBlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAgfSBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKGZpbGwgJiYgc2hhcGUpIHsKKyAgICAgICAgYXV0byBwYXJzZWRW
YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgICAgIHBh
cnNlZFZhbHVlcy0+YXBwZW5kKGZpbGwucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHBhcnNl
ZFZhbHVlcy0+YXBwZW5kKHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBXVEZNb3ZlKHBhcnNlZFZh
bHVlcyksIGltcG9ydGFudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
ZmlsbCkgeworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNp
c1N0eWxlLCBmaWxsLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAoc2hhcGUpIHsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZSwgc2hhcGUucmVsZWFzZU5vbk51bGwoKSwg
aW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihib29s
IGltcG9ydGFudCkKK3sKKyAgICBib29sIGZvdW5kT3Zlck9yVW5kZXIgPSBmYWxzZTsKKyAgICBD
U1NWYWx1ZUlEIG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZU92ZXI7CisgICAgYm9vbCBmb3Vu
ZExlZnRPclJpZ2h0ID0gZmFsc2U7CisgICAgQ1NTVmFsdWVJRCBsZWZ0UmlnaHRWYWx1ZUlEID0g
Q1NTVmFsdWVSaWdodDsKKyAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAg
ICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU92ZXI6Cisg
ICAgICAgICAgICBpZiAoZm91bmRPdmVyT3JVbmRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBmb3VuZE92ZXJPclVuZGVyID0gdHJ1ZTsKKyAgICAgICAgICAg
IG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZU92ZXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZVVuZGVyOgorICAgICAgICAgICAgaWYgKGZvdW5kT3Zlck9yVW5k
ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm91bmRPdmVy
T3JVbmRlciA9IHRydWU7CisgICAgICAgICAgICBvdmVyVW5kZXJWYWx1ZUlEID0gQ1NTVmFsdWVV
bmRlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKKyAg
ICAgICAgICAgIGlmIChmb3VuZExlZnRPclJpZ2h0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGZvdW5kTGVmdE9yUmlnaHQgPSB0cnVlOworICAgICAgICAgICAg
bGVmdFJpZ2h0VmFsdWVJRCA9IENTU1ZhbHVlTGVmdDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlUmlnaHQ6CisgICAgICAgICAgICBpZiAoZm91bmRMZWZ0T3JSaWdo
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3VuZExlZnRP
clJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGxlZnRSaWdodFZhbHVlSUQgPSBDU1NWYWx1ZVJp
Z2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZE92ZXJPclVuZGVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShvdmVyVW5kZXJWYWx1ZUlEKSk7CisgICAg
aWYgKGZvdW5kTGVmdE9yUmlnaHQpCisgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShsZWZ0UmlnaHRWYWx1ZUlEKSk7Cisg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbiwgV1RG
TW92ZShsaXN0KSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPENT
U1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVRleHRJbmRlbnQoKQoreworICAgIC8vIDxsZW5n
dGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQgaXMgZGlzYWJsZWQu
CisgICAgLy8gWyA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiBdICYmIFsgLXdlYmtpdC1oYW5naW5n
IHx8IC13ZWJraXQtZWFjaC1saW5lIF0/IHwgaW5oZXJpdCAgd2hlbiBDU1MzX1RFWFQgaXMgZW5h
YmxlZC4KKyAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVk
KCk7CisgICAgYm9vbCBoYXNMZW5ndGhPclBlcmNlbnRhZ2UgPSBmYWxzZTsKKyNpZiBFTkFCTEUo
Q1NTM19URVhUKQorICAgIGJvb2wgaGFzRWFjaExpbmUgPSBmYWxzZTsKKyAgICBib29sIGhhc0hh
bmdpbmcgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKKyAgICAgICAgaWYg
KCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKSB7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CisgICAgICAg
ICAgICBoYXNMZW5ndGhPclBlcmNlbnRhZ2UgPSB0cnVlOworICAgICAgICB9CisjaWYgRU5BQkxF
KENTUzNfVEVYVCkKKyAgICAgICAgZWxzZSBpZiAoIWhhc0VhY2hMaW5lICYmIHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKSB7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJr
aXRFYWNoTGluZSkpOworICAgICAgICAgICAgaGFzRWFjaExpbmUgPSB0cnVlOworICAgICAgICB9
IGVsc2UgaWYgKCFoYXNIYW5naW5nICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtpdEhhbmdp
bmcpIHsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEhhbmdpbmcpKTsKKyAgICAgICAg
ICAgIGhhc0hhbmdpbmcgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlz
dC0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghaGFzTGVuZ3RoT3JQZXJjZW50YWdlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOworfQorCiti
b29sIENTU1BhcnNlcjo6cGFyc2VIYW5naW5nUHVuY3R1YXRpb24oYm9vbCBpbXBvcnRhbnQpCit7
CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAg
ICBpZiAodmFsdWUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUhhbmdpbmdQdW5jdHVhdGlvbiwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsK
KyAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIHN0ZDo6Yml0c2V0PG51bUNTU1Zh
bHVlS2V5d29yZHM+IHNlZW5WYWx1ZXM7CisgICAgd2hpbGUgKGlzVmFsaWQgJiYgdmFsdWUpIHsK
KyAgICAgICAgaWYgKHNlZW5WYWx1ZXNbdmFsdWUtPmlkXQorICAgICAgICAgICAgfHwgKHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUFsbG93RW5kICYmIHNlZW5WYWx1ZXNbQ1NTVmFsdWVGb3JjZUVuZF0p
CisgICAgICAgICAgICB8fCAodmFsdWUtPmlkID09IENTU1ZhbHVlRm9yY2VFbmQgJiYgc2VlblZh
bHVlc1tDU1NWYWx1ZUFsbG93RW5kXSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodmFsdWUtPmlk
KSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxvd0VuZDoKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUZpcnN0OgorICAgICAgICBjYXNlIENTU1ZhbHVlRm9yY2VFbmQ6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVMYXN0OgorICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgc2Vl
blZhbHVlcy5zZXQodmFsdWUtPmlkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzVmFsaWQpCisgICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7CisgICAgfQorICAgIAorICAgIC8vIFZhbHVlcyBhcmUgZWl0aGVyIHZh
bGlkIG9yIGluIHNob3J0aGFuZCBzY29wZS4KKyAgICBpZiAobGlzdC0+bGVuZ3RoKCkgJiYgaXNW
YWxpZCkgeworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhhbmdpbmdQdW5jdHVhdGlv
biwgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGlu
ZUJveENvbnRhaW4oYm9vbCBpbXBvcnRhbnQpCit7CisgICAgTGluZUJveENvbnRhaW4gbGluZUJv
eENvbnRhaW4gPSBMaW5lQm94Q29udGFpbk5vbmU7CisKKyAgICBmb3IgKENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJsb2NrKSB7
CisgICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkJsb2NrKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGxpbmVCb3hDb250YWlu
IHw9IExpbmVCb3hDb250YWluQmxvY2s7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09
IENTU1ZhbHVlSW5saW5lKSB7CisgICAgICAgICAgICBpZiAobGluZUJveENvbnRhaW4gJiBMaW5l
Qm94Q29udGFpbklubGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbklubGluZTsKKyAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb250KSB7CisgICAgICAgICAgICBpZiAobGlu
ZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkZvbnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5Gb250
OworICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUdseXBocykgeworICAg
ICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRhaW5HbHlwaHMpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0g
TGluZUJveENvbnRhaW5HbHlwaHM7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENT
U1ZhbHVlUmVwbGFjZWQpIHsKKyAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVC
b3hDb250YWluUmVwbGFjZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5SZXBsYWNlZDsKKyAgICAgICAg
fSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmxpbmVCb3gpIHsKKyAgICAgICAgICAg
IGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWluSW5saW5lQm94KQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGxpbmVCb3hDb250YWluIHw9IExpbmVC
b3hDb250YWluSW5saW5lQm94OworICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUluaXRpYWxMZXR0ZXIpIHsKKyAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExp
bmVCb3hDb250YWluSW5pdGlhbExldHRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbkluaXRpYWxMZXR0
ZXI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghbGluZUJveENvbnRhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW4sIENTU0xpbmVCb3hDb250
YWluVmFsdWU6OmNyZWF0ZShsaW5lQm94Q29udGFpbiksIGltcG9ydGFudCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGZWF0dXJlVGFnKENTU1ZhbHVl
TGlzdCYgc2V0dGluZ3MpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICAvLyBGZWF0dXJlIHRhZyBuYW1lIGNvbWVzIGZpcnN0CisgICAg
aWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRm9udEZlYXR1cmVUYWcgdGFnOworICAgIGlmICh2YWx1ZS0+
c3RyaW5nLmxlbmd0aCgpICE9IHRhZy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
IExpbWl0cyB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB0byAweDIwLTB4N0UsIGZvbGxvd2luZyB0
aGUgdGFnIG5hbWUgcnVsZXMgZGVmaWVuZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4K
KyAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gdmFsdWUtPnN0cmluZ1tpXTsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA8IDB4MjAgfHwgY2hhcmFjdGVyID4gMHg3RSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdGFnW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7CisgICAg
fQorCisgICAgaW50IHRhZ1ZhbHVlID0gMTsKKyAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291
bGQgZm9sbG93OiA8aW50ZWdlcj4gfCBvbiB8IG9mZgorICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT5pc0ludCAmJiB2YWx1ZS0+ZlZh
bHVlID49IDApIHsKKyAgICAgICAgICAgIHRhZ1ZhbHVlID0gY2xhbXBUb0ludGVnZXIodmFsdWUt
PmZWYWx1ZSk7CisgICAgICAgICAgICBpZiAodGFnVmFsdWUgPCAwKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAg
IH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT24gfHwgdmFsdWUtPmlkID09IENTU1Zh
bHVlT2ZmKSB7CisgICAgICAgICAgICB0YWdWYWx1ZSA9IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU9u
OworICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBzZXR0aW5ncy5hcHBlbmQoQ1NTRm9udEZlYXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFn
KSwgdGFnVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRm9udEZlYXR1cmVTZXR0aW5ncyhib29sIGltcG9ydGFudCkKK3sKKyAgICBpZiAobV92YWx1
ZUxpc3QtPnNpemUoKSA9PSAxICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1Zh
bHVlTm9ybWFsKSB7CisgICAgICAgIGF1dG8gbm9ybWFsVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dEZlYXR1cmVTZXR0aW5ncywgV1RGTW92ZShub3JtYWxWYWx1ZSksIGltcG9ydGFudCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gc2V0dGluZ3MgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpKSB7CisgICAgICAgIGlmICghcGFyc2VGb250RmVhdHVyZVRhZyhzZXR0aW5ncykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXNuJ3Qg
cGFyc2VkIGZ1bGx5LCB0aGUgY3VycmVudCB2YWx1ZSBzaG91bGQgYmUgY29tbWEuCisgICAgICAg
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHZhbHVlICYmICFp
c0NvbW1hKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHNldHRpbmdzLT5sZW5ndGgoKSkgeworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRGZWF0dXJlU2V0dGluZ3MsIFdURk1vdmUoc2V0dGluZ3MpLCBpbXBvcnRhbnQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1Bh
cnNlcjo6cGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyhib29sIGltcG9ydGFudCwgYm9vbCB1bmtu
b3duSXNGYWlsdXJlLCBib29sIGltcGxpY2l0KQoreworICAgIGF1dG8gdmFsdWVzID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIEZvbnRWYXJpYW50TGlnYXR1cmVz
IGNvbW1vbkxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgRm9u
dFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWw7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0
dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgRm9udFZhcmlhbnRMaWdh
dHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
OworCisgICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CisgICAgICAgIGlmICh2
YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKKyAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJl
cyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgorICAgICAgICAgICAgY29tbW9uTGlnYXR1
cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgorICAgICAgICAgICAg
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJl
czoKKyAgICAgICAgICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPSBGb250VmFyaWFudExpZ2F0
dXJlczo6WWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hp
c3RvcmljYWxMaWdhdHVyZXM6CisgICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzOgorICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0
dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUNvbnRleHR1YWw6CisgICAgICAgICAgICBjb250ZXh0dWFsQWx0
ZXJuYXRlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29udGV4dHVhbDoKKyAgICAgICAgICAgIGNvbnRleHR1
YWxBbHRlcm5hdGVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAodW5rbm93bklzRmFpbHVyZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29tbW9uTGlnYXR1cmVzKSB7CisgICAgY2Fz
ZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29tbW9u
TGlnYXR1cmVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vOgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykg
eworICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgICAgICB2YWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAo
aGlzdG9yaWNhbExpZ2F0dXJlcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVz
OgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgICAgIHZhbHVl
cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHN3aXRjaCAoY29udGV4dHVhbEFsdGVybmF0ZXMpIHsKKyAgICBjYXNlIEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFZhcmlh
bnRMaWdhdHVyZXM6OlllczoKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250ZXh0dWFsKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgICAg
ICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vQ29udGV4dHVhbCkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAhdW5rbm93bklzRmFp
bHVyZTsKKworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMs
IFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhib29sIGltcG9y
dGFudCwgYm9vbCB1bmtub3duSXNGYWlsdXJlLCBib29sIGltcGxpY2l0KQoreworICAgIGF1dG8g
dmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5v
cm1hbDsKKyAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmcgPSBGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpOb3JtYWw7CisgICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24g
ZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOworICAgIEZvbnRW
YXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6
Ok5vcm1hbDsKKyAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBzbGFzaGVkWmVybyA9
IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7CisKKyAgICBmb3IgKENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmluZ051
bXM6CisgICAgICAgICAgICBmaWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Okxpbmlu
Z051bWJlcnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU9sZHN0
eWxlTnVtczoKKyAgICAgICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6
T2xkU3R5bGVOdW1iZXJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVQcm9wb3J0aW9uYWxOdW1zOgorICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZVRhYnVsYXJOdW1zOgorICAgICAgICAgICAgc3BhY2luZyA9IEZv
bnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9uczoKKyAgICAgICAgICAg
IGZyYWN0aW9uID0gRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25z
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGFja2VkRnJhY3Rp
b25zOgorICAgICAgICAgICAgZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6
U3RhY2tlZEZyYWN0aW9uczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlT3JkaW5hbDoKKyAgICAgICAgICAgIG9yZGluYWwgPSBGb250VmFyaWFudE51bWVyaWNPcmRp
bmFsOjpZZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNsYXNo
ZWRaZXJvOgorICAgICAgICAgICAgc2xhc2hlZFplcm8gPSBGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzo6WWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBpZiAodW5rbm93bklzRmFpbHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAoZmlndXJlKSB7CisgICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Okxpbmlu
Z051bWJlcnM6CisgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluaW5nTnVtcykpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJz
OgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9sZHN0eWxlTnVtcykpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHNwYWNpbmcpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgorICAgICAgICB2YWx1ZXMtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVByb3BvcnRpb25hbE51bXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFy
aWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKKyAgICAgICAgdmFsdWVzLT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVUYWJ1bGFyTnVtcykpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZy
YWN0aW9uKSB7CisgICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFn
b25hbEZyYWN0aW9uczoKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9ucykp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpT
dGFja2VkRnJhY3Rpb25zOgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnMp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChvcmRpbmFsKSB7CisgICAg
Y2FzZSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgorICAgICAgICB2YWx1ZXMt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU9yZGluYWwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChz
bGFzaGVkWmVybykgeworICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5v
cm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybzo6WWVzOgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNsYXNoZWRaZXJvKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuICF1bmtub3duSXNGYWlsdXJlOworCisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudE51bWVyaWMsIFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRWYXJpYW50RWFz
dEFzaWFuKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGlj
aXQpCit7CisgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7CisgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQgPSBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDsKKyAgICBGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoIHdpZHRoID0gRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOworICAgIEZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieSBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3Jt
YWw7CisKKyAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYg
KHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUppczc4OgorICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzNzg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZUppczgzOgorICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6SmlzODM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUppczkwOgorICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzOTA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUppczA0
OgorICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
MDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBsaWZpZWQ6
CisgICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1w
bGlmaWVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUcmFkaXRp
b25hbDoKKyAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OlRyYWRpdGlvbmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVG
dWxsV2lkdGg6CisgICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6
OkZ1bGw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRp
b25hbFdpZHRoOgorICAgICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
OjpQcm9wb3J0aW9uYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVJ1Ynk6CisgICAgICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh1
bmtub3duSXNGYWlsdXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh2YXJpYW50KSB7
CisgICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUppczc4KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVK
aXM4MykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6SmlzOTA6CisgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzOTApKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0OgorICAgICAg
ICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUppczA0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOgorICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVNpbXBsaWZpZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgorICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRyYWRpdGlv
bmFsKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAod2lkdGgpIHsKKyAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAgICAgICB2YWx1
ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUZ1bGxXaWR0aCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQ
cm9wb3J0aW9uYWxXaWR0aCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHJ1YnkpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgorICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1YnkpKTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlcy0+bGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiAhdW5rbm93bklzRmFpbHVyZTsKKworICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0QXNpYW4sIFdURk1vdmUodmFsdWVzKSwgaW1w
b3J0YW50LCBpbXBsaWNpdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUZvbnRWYXJpYW50KGJvb2wgaW1wb3J0YW50KQoreworICAgIFNob3J0aGFuZFNjb3Bl
IHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOworICAgIGlmICghcGFyc2VGb250
VmFyaWFudExpZ2F0dXJlcyhpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOworICAgIGlmICgh
cGFyc2VGb250VmFyaWFudE51bWVyaWMoaW1wb3J0YW50LCBmYWxzZSwgZmFsc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbV92YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRleCgwKTsKKyAg
ICBpZiAoIXBhcnNlRm9udFZhcmlhbnRFYXN0QXNpYW4oaW1wb3J0YW50LCBmYWxzZSwgZmFsc2Up
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92YWx1ZUxpc3QtPnNldEN1cnJlbnRJbmRl
eCgwKTsKKworICAgIEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24gPSBGb250VmFyaWFudFBv
c2l0aW9uOjpOb3JtYWw7CisgICAgRm9udFZhcmlhbnRDYXBzIGNhcHMgPSBGb250VmFyaWFudENh
cHM6Ok5vcm1hbDsKKyAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcyA9IEZvbnRW
YXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOworCisgICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
bmV4dCgpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAo
dmFsdWUtPmlkKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlczoKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZURpc2NyZXRp
b25hcnlMaWdhdHVyZXM6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVy
ZXM6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzOgorICAgICAgICBj
YXNlIENTU1ZhbHVlQ29udGV4dHVhbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29udGV4dHVh
bDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmluZ051bXM6CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVPbGRzdHlsZU51bXM6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxOdW1zOgor
ICAgICAgICBjYXNlIENTU1ZhbHVlVGFidWxhck51bXM6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVE
aWFnb25hbEZyYWN0aW9uczoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnM6
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFsOgorICAgICAgICBjYXNlIENTU1ZhbHVlU2xh
c2hlZFplcm86CisgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM3ODoKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUppczgzOgorICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVKaXMwNDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNpbXBsaWZpZWQ6CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVUcmFkaXRpb25hbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUZ1bGxXaWR0aDoK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgorICAgICAgICBjYXNlIENT
U1ZhbHVlUnVieToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU3Vi
OgorICAgICAgICAgICAgcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgorICAgICAg
ICAgICAgcG9zaXRpb24gPSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXBzOgorICAgICAgICAg
ICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6U21hbGw7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAgICAgIGNhcHMgPSBGb250
VmFyaWFudENhcHM6OkFsbFNtYWxsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVQZXRpdGVDYXBzOgorICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6
UGV0aXRlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxQZXRp
dGVDYXBzOgorICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAg
ICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlVGl0bGluZ0NhcHM6CisgICAgICAgICAgICBjYXBzID0g
Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVIaXN0b3JpY2FsRm9ybXM6CisgICAgICAgICAgICBhbHRlcm5hdGVzID0gRm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50UG9z
aXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudFBvc2l0
aW9uOjpTdWJzY3JpcHQ6CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlh
bnRQb3NpdGlvbiwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVTdWIpLCBpbXBvcnRhbnQsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKKyAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1cGVyKSwgaW1wb3J0YW50LCBmYWxz
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoY2FwcykgeworICAgIGNh
c2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dFZhcmlhbnRDYXBzOjpTbWFsbDoKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlU21hbGxDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsU21hbGxDYXBzKSwgaW1wb3J0YW50LCBm
YWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBldGl0ZUNh
cHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFy
aWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2FwcyksIGltcG9ydGFudCwgZmFsc2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5pY2FzZSksIGltcG9ydGFudCwgZmFs
c2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoK
KyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVGl0bGluZ0Nh
cHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dp
dGNoIChhbHRlcm5hdGVzKSB7CisgICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1h
bDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3Rv
cmljYWxGb3JtczoKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudEFs
dGVybmF0ZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSGlzdG9yaWNhbEZvcm1zKSwgaW1wb3J0YW50LCBmYWxzZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNWYWxpZFdpbGxDaGFuZ2VBbmltYXRhYmxlRmVhdHVyZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZS5pZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVBbGwpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICh2YWx1ZUlzQ1NTS2V5d29yZCh2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChjc3NQcm9wZXJ0eUlEKHZhbHVlLnN0cmluZykgPT0gQ1NT
UHJvcGVydHlXaWxsQ2hhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlV2lsbENoYW5nZShib29sIGltcG9ydGFu
dCkKK3sKKyAgICBhdXRvIHdpbGxDaGFuZ2VQcm9wZXJ0eVZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKworICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsK
KyAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGV4cGVj
dENvbW1hKSB7CisgICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhwZWN0Q29tbWEg
PSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkV2lsbENoYW5nZUFuaW1hdGFi
bGVGZWF0dXJlKCp2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZTsKKyAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZVNjcm9sbFBvc2l0aW9uIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRzKQorICAg
ICAgICAgICAgY3NzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7CisgICAg
ICAgICAgICBpZiAocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUludmFsaWQpCisgICAgICAgICAg
ICAgICAgY3NzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIGVsc2UgLy8gVGhpcyBtaWdodCBiZSBh
IHByb3BlcnR5IHdlIGRvbid0IHN1cHBvcnQuCisgICAgICAgICAgICAgICAgY3NzVmFsdWUgPSBj
cmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAg
d2lsbENoYW5nZVByb3BlcnR5VmFsdWVzLT5hcHBlbmQoY3NzVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKKyAgICB9CisKKyAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdpbGxDaGFuZ2UsIFdURk1vdmUod2lsbENoYW5nZVByb3BlcnR5VmFsdWVz
KSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPENTU0NhbGNWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ2Fs
Y3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQoreworICAgIEFTU0VSVChpc0NhbGN1
bGF0aW9uKHZhbHVlKSk7CisgICAgCisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CisgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIENTU0NhbGNWYWx1ZTo6Y3Jl
YXRlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAqYXJncywgcmFuZ2UpOworfQorCisjZGVmaW5lIEVO
RF9UT0tFTiAwCisKKyNpbmNsdWRlICJDU1NHcmFtbWFyLmgiCisKK2VudW0gQ2hhcmFjdGVyVHlw
ZSB7CisgICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3aXRjaC4KKworICAgIC8vIFRoZSBmaXJz
dCA0IHR5cGVzIG11c3QgYmUgZ3JvdXBlZCB0b2dldGhlciwgYXMgdGhleQorICAgIC8vIHJlcHJl
c2VudCB0aGUgYWxsb3dlZCBjaGFycyBpbiBhbiBpZGVudGlmaWVyLgorICAgIENoYXJhY3RlckNh
c2VsZXNzVSwKKyAgICBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisgICAgQ2hhcmFjdGVyTnVt
YmVyLAorICAgIENoYXJhY3RlckRhc2gsCisKKyAgICBDaGFyYWN0ZXJPdGhlciwKKyAgICBDaGFy
YWN0ZXJOdWxsLAorICAgIENoYXJhY3RlcldoaXRlU3BhY2UsCisgICAgQ2hhcmFjdGVyRW5kQ29u
ZGl0aW9uUXVlcnksCisgICAgQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCisgICAgQ2hhcmFjdGVyUXVv
dGUsCisgICAgQ2hhcmFjdGVyRXhjbGFtYXRpb25NYXJrLAorICAgIENoYXJhY3Rlckhhc2htYXJr
LAorICAgIENoYXJhY3RlckRvbGxhciwKKyAgICBDaGFyYWN0ZXJBc3RlcmlzaywKKyAgICBDaGFy
YWN0ZXJQbHVzLAorICAgIENoYXJhY3RlckRvdCwKKyAgICBDaGFyYWN0ZXJTbGFzaCwKKyAgICBD
aGFyYWN0ZXJMZXNzLAorICAgIENoYXJhY3RlckF0LAorICAgIENoYXJhY3RlckJhY2tTbGFzaCwK
KyAgICBDaGFyYWN0ZXJYb3IsCisgICAgQ2hhcmFjdGVyVmVydGljYWxCYXIsCisgICAgQ2hhcmFj
dGVyVGlsZGUsCit9OworCisvLyAxMjggQVNDSUkgY29kZXMKK3N0YXRpYyBjb25zdCBDaGFyYWN0
ZXJUeXBlIHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKKy8qICAgMCAtIE51bGwgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdWxsLAorLyogICAxIC0gU3RhcnQgb2YgSGVhZGluZyAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogICAyIC0gU3RhcnQgb2YgVGV4dCAgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogICAzIC0gRW5kIG9mIFRleHQgICAgICAgICovIENoYXJhY3Rlck90aGVy
LAorLyogICA0IC0gRW5kIG9mIFRyYW5zbS4gICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA1
IC0gRW5xdWlyeSAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA2IC0gQWNrbm93
bGVkZ21lbnQgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA3IC0gQmVsbCAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck90aGVyLAorLyogICA4IC0gQmFjayBTcGFjZSAgICAgICAgICovIENo
YXJhY3Rlck90aGVyLAorLyogICA5IC0gSG9yaXpvbnRhbCBUYWIgICAgICovIENoYXJhY3Rlcldo
aXRlU3BhY2UsCisvKiAgMTAgLSBMaW5lIEZlZWQgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVT
cGFjZSwKKy8qICAxMSAtIFZlcnRpY2FsIFRhYiAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8q
ICAxMiAtIEZvcm0gRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAorLyogIDEz
IC0gQ2FycmlhZ2UgUmV0dXJuICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCisvKiAgMTQgLSBT
aGlmdCBPdXQgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTUgLSBTaGlmdCBJbiAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTYgLSBEYXRhIExpbmUgRXNjYXBlICAg
Ki8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMTcgLSBEZXZpY2UgQ29udHJvbCAxICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCisvKiAgMTggLSBEZXZpY2UgQ29udHJvbCAyICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgMTkgLSBEZXZpY2UgQ29udHJvbCAzICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjAg
LSBEZXZpY2UgQ29udHJvbCA0ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjEgLSBOZWdhdGl2
ZSBBY2suICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjIgLSBTeW5jaHJvbm91cyBJZGxl
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjMgLSBFbmQgb2YgVHJhbnNtaXQgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCisvKiAgMjQgLSBDYW5jZWwgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCisvKiAgMjUgLSBFbmQgb2YgTWVkaXVtICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAg
MjYgLSBTdWJzdGl0dXRlICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjcgLSBFc2Nh
cGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjggLSBGaWxlIFNlcGFyYXRv
ciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgMjkgLSBHcm91cCBTZXBhcmF0b3IgICAgKi8g
Q2hhcmFjdGVyT3RoZXIsCisvKiAgMzAgLSBSZWNvcmQgU2VwYXJhdG9yICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCisvKiAgMzEgLSBVbml0IFNlcGFyYXRvciAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisv
KiAgMzIgLSBTcGFjZSAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKKy8qICAz
MyAtICEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCisvKiAg
MzQgLSAiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCisvKiAgMzUgLSAjICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySGFzaG1hcmssCisvKiAgMzYgLSAkICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyRG9sbGFyLAorLyogIDM3IC0gJSAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck90aGVyLAorLyogIDM4IC0gJiAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlck90aGVyLAorLyogIDM5IC0gJyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlclF1b3Rl
LAorLyogIDQwIC0gKCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAorLyogIDQx
IC0gKSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckVuZE50aENoaWxkLAorLyogIDQyIC0g
KiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckFzdGVyaXNrLAorLyogIDQzIC0gKyAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlclBsdXMsCisvKiAgNDQgLSAsICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNDUgLSAtICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyRGFzaCwKKy8qICA0NiAtIC4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEb3Qs
CisvKiAgNDcgLSAvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyU2xhc2gsCisvKiAgNDgg
LSAwICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDQ5IC0gMSAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1MCAtIDIgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTEgLSAzICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyTnVtYmVyLAorLyogIDUyIC0gNCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ck51bWJlciwKKy8qICA1MyAtIDUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIs
CisvKiAgNTQgLSA2ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU1
IC0gNyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKKy8qICA1NiAtIDggICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCisvKiAgNTcgLSA5ICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAorLyogIDU4IC0gOiAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogIDU5IC0gOyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
ckVuZENvbmRpdGlvblF1ZXJ5LAorLyogIDYwIC0gPCAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3Rlckxlc3MsCisvKiAgNjEgLSA9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
CisvKiAgNjIgLSA+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjMg
LSA/ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgNjQgLSBAICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyQXQsCisvKiAgNjUgLSBBICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY2IC0gQiAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA2NyAtIEMgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNjggLSBEICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDY5IC0gRSAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MCAtIEYgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzEgLSBHICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDcyIC0gSCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3MyAtIEkgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzQgLSBKICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc1IC0gSyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3NiAtIEwgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgNzcgLSBNICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDc4IC0gTiAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA3OSAtIE8gICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODAgLSBQICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDgxIC0gUSAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4MiAtIFIg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODMgLSBT
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg0IC0g
VCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4NSAt
IFUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJDYXNlbGVzc1UsCisvKiAgODYgLSBWICAg
ICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDg3IC0gVyAg
ICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA4OCAtIFgg
ICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAgODkgLSBZ
ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogIDkwIC0g
WiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qICA5MSAt
IFsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKKy8qICA5MiAtIFwgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJCYWNrU2xhc2gsCisvKiAgOTMgLSBdICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCisvKiAgOTQgLSBeICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVyWG9yLAorLyogIDk1IC0gXyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qICA5NiAtIGAgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKKy8qICA5NyAtIGEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCisvKiAgOTggLSBiICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAorLyogIDk5IC0gYyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKKy8qIDEwMCAtIGQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCisvKiAxMDEgLSBlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAorLyogMTAyIC0gZiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKKy8qIDEwMyAtIGcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCisvKiAxMDQgLSBoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAorLyogMTA1IC0gaSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKKy8qIDEwNiAtIGogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCisvKiAxMDcgLSBrICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SWRlbnRpZmllclN0YXJ0LAorLyogMTA4IC0gbCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
cklkZW50aWZpZXJTdGFydCwKKy8qIDEwOSAtIG0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTAgLSBuICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAorLyogMTExIC0gbyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExMiAtIHAgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTMgLSBxICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE0IC0gciAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDExNSAtIHMgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTYgLSB0ICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTE3IC0gdSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlckNhc2VsZXNzVSwKKy8qIDExOCAtIHYgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMTkgLSB3ICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIwIC0geCAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKKy8qIDEyMSAtIHkgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCisvKiAxMjIgLSB6ICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAorLyogMTIzIC0geyAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlckVuZENvbmRpdGlvblF1ZXJ5LAorLyogMTI0IC0gfCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlclZlcnRpY2FsQmFyLAorLyogMTI1IC0gfSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3Rlck90aGVyLAorLyogMTI2IC0gfiAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rl
clRpbGRlLAorLyogMTI3IC0gRGVsZXRlICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAor
fTsKKworLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBDU1MgdG9rZW5pemVyLgorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0NTU0xl
dHRlcihDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID49
IDEyOCB8fCB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW2NoYXJhY3Rlcl0gPD0gQ2hhcmFjdGVyRGFz
aDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5l
IGJvb2wgaXNDU1NFc2NhcGUoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJu
IGNoYXJhY3RlciA+PSAnICcgJiYgY2hhcmFjdGVyICE9IDEyNzsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNVUklMZXR0ZXIoQ2hh
cmFjdGVyVHlwZSBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0gJyonICYm
IGNoYXJhY3RlciAhPSAxMjcpIHx8IChjaGFyYWN0ZXIgPj0gJyMnICYmIGNoYXJhY3RlciA8PSAn
JicpIHx8IGNoYXJhY3RlciA9PSAnISc7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGlzSWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKENo
YXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YShjdXJyZW50Q2hhcmFjdGVyWzBdKSB8fCBjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdfJyB8fCBj
dXJyZW50Q2hhcmFjdGVyWzBdID49IDEyOAorICAgICAgICB8fCAoY3VycmVudENoYXJhY3Rlclsw
XSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKGN1cnJlbnRDaGFyYWN0ZXJbMV0pKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNDdXN0
b21Qcm9wZXJ0eUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcikKK3sK
KyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGN1cnJlbnRDaGFyYWN0ZXJbMF0pIHx8IGN1cnJlbnRD
aGFyYWN0ZXJbMF0gPT0gJ18nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPj0gMTI4CisgICAgICAg
IHx8IChjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoY3VycmVudENo
YXJhY3RlclsxXSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKENoYXJhY3RlclR5cGUqIGNz
c1N0cmluZywgY29uc3QgY2hhciogY29uc3RhbnRTdHJpbmcpCit7CisgICAgLy8gQ29tcGFyZSBh
biBjaGFyYWN0ZXIgbWVtb3J5IGRhdGEgd2l0aCBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcuCisg
ICAgZG8geworICAgICAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBwYXJ0IG9mIGFuIGlkZW50aWZp
ZXIgaWYgY29uc3RhbnRDaGFyIG9yIGNvbnN0U3RyaW5nCisgICAgICAgIC8vIGNvbnRhaW5zICct
Jy4gT3RoZXJ3aXNlIHRvQVNDSUlMb3dlclVuY2hlY2tlZCgnXHInKSB3b3VsZCBiZSBlcXVhbCB0
byAnLScuCisgICAgICAgIEFTU0VSVCgoKmNvbnN0YW50U3RyaW5nID49ICdhJyAmJiAqY29uc3Rh
bnRTdHJpbmcgPD0gJ3onKSB8fCAqY29uc3RhbnRTdHJpbmcgPT0gJy0nKTsKKyAgICAgICAgQVNT
RVJUKCpjb25zdGFudFN0cmluZyAhPSAnLScgfHwgaXNDU1NMZXR0ZXIoKmNzc1N0cmluZykpOwor
ICAgICAgICBpZiAodG9BU0NJSUxvd2VyVW5jaGVja2VkKCpjc3NTdHJpbmcrKykgIT0gKCpjb25z
dGFudFN0cmluZysrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgq
Y29uc3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsVG9DU1NDYXNlU2Vu
c2l0aXZlSWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiBzdHJpbmcsIGNvbnN0IGNoYXIqIGNvbnN0
YW50U3RyaW5nKQoreworICAgIGRvIHsKKyAgICAgICAgaWYgKCpzdHJpbmcrKyAhPSAqY29uc3Rh
bnRTdHJpbmcrKykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IHdoaWxlICgqY29u
c3RhbnRTdHJpbmcpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBDaGFyYWN0ZXJUeXBlKiBjaGVja0FuZFNraXBFc2NhcGUo
Q2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcikKK3sKKyAgICAvLyBSZXR1cm5zIHdpdGgg
MCwgaWYgZXNjYXBlIGNoZWNrIGlzIGZhaWxlZC4gT3RoZXJ3aXNlCisgICAgLy8gaXQgcmV0dXJu
cyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLgorICAgIEFTU0VSVCgqY3VycmVudENoYXJh
Y3RlciA9PSAnXFwnKTsKKworICAgICsrY3VycmVudENoYXJhY3RlcjsKKyAgICBpZiAoIWlzQ1NT
RXNjYXBlKCpjdXJyZW50Q2hhcmFjdGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBpZiAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSkgeworICAgICAgICBpbnQg
bGVuZ3RoID0gNjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0
ZXI7CisgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJhY3Rlcikg
JiYgLS1sZW5ndGgpOworCisgICAgICAgIC8vIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHRoZSBlc2Nh
cGUgc2VxdWVuY2UuCisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJhY3Rlcikp
CisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgIHJldHVybiBjdXJyZW50
Q2hhcmFjdGVyOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudENoYXJhY3RlciArIDE7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBDaGFyYWN0
ZXJUeXBlKiBza2lwV2hpdGVTcGFjZShDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyKQor
eworICAgIHdoaWxlIChpc0hUTUxTcGFjZSgqY3VycmVudENoYXJhY3RlcikpCisgICAgICAgICsr
Y3VycmVudENoYXJhY3RlcjsKKyAgICByZXR1cm4gY3VycmVudENoYXJhY3RlcjsKK30KKworLy8g
TWFpbiBDU1MgdG9rZW5pemVyIGZ1bmN0aW9ucy4KKwordGVtcGxhdGUgPD4KK0xDaGFyKiBDU1NQ
YXJzZXJTdHJpbmc6OmNoYXJhY3RlcnM8TENoYXI+KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVy
czgoKTsgfQorCit0ZW1wbGF0ZSA8PgorVUNoYXIqIENTU1BhcnNlclN0cmluZzo6Y2hhcmFjdGVy
czxVQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzMTYoKTsgfQorCit0ZW1wbGF0ZSA8
PgoraW5saW5lIExDaGFyKiYgQ1NTUGFyc2VyOjpjdXJyZW50Q2hhcmFjdGVyPExDaGFyPigpCit7
CisgICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rlcjg7Cit9CisKK3RlbXBsYXRlIDw+Citpbmxp
bmUgVUNoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXI8VUNoYXI+KCkKK3sKKyAgICBy
ZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTY7Cit9CisKK1VDaGFyKiYgQ1NTUGFyc2VyOjpjdXJy
ZW50Q2hhcmFjdGVyMTYoKQoreworICAgIGlmICghbV9jdXJyZW50Q2hhcmFjdGVyMTYpIHsKKyAg
ICAgICAgbV9kYXRhU3RhcnQxNiA9IHN0ZDo6bWFrZV91bmlxdWU8VUNoYXJbXT4obV9sZW5ndGgp
OworICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG1fZGF0YVN0YXJ0MTYuZ2V0KCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjE2OworfQorCit0ZW1wbGF0ZSA8
PgoraW5saW5lIExDaGFyKiBDU1NQYXJzZXI6OnRva2VuU3RhcnQ8TENoYXI+KCkKK3sKKyAgICBy
ZXR1cm4gbV90b2tlblN0YXJ0LnB0cjg7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgVUNoYXIq
IENTU1BhcnNlcjo6dG9rZW5TdGFydDxVQ2hhcj4oKQoreworICAgIHJldHVybiBtX3Rva2VuU3Rh
cnQucHRyMTY7Cit9CisKK0NTU1BhcnNlcjo6TG9jYXRpb24gQ1NTUGFyc2VyOjpjdXJyZW50TG9j
YXRpb24oKQoreworICAgIExvY2F0aW9uIGxvY2F0aW9uOworICAgIGxvY2F0aW9uLmxpbmVOdW1i
ZXIgPSBtX3Rva2VuU3RhcnRMaW5lTnVtYmVyOworICAgIGxvY2F0aW9uLmNvbHVtbk51bWJlciA9
IG1fdG9rZW5TdGFydENvbHVtbk51bWJlcjsKKworICAgIEFTU0VSVChsb2NhdGlvbi5saW5lTnVt
YmVyID49IDApOworICAgIEFTU0VSVChsb2NhdGlvbi5jb2x1bW5OdW1iZXIgPj0gMCk7CisKKyAg
ICBpZiAobG9jYXRpb24ubGluZU51bWJlciA9PSBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyKQorICAg
ICAgICBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgKz0gbV9zaGVldFN0YXJ0Q29sdW1uTnVtYmVyOwor
CisgICAgaWYgKGlzOEJpdFNvdXJjZSgpKQorICAgICAgICBsb2NhdGlvbi50b2tlbi5pbml0KHRv
a2VuU3RhcnQ8TENoYXI+KCksIGN1cnJlbnRDaGFyYWN0ZXI8TENoYXI+KCkgLSB0b2tlblN0YXJ0
PExDaGFyPigpKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2F0aW9uLnRva2VuLmluaXQodG9rZW5T
dGFydDxVQ2hhcj4oKSwgY3VycmVudENoYXJhY3RlcjxVQ2hhcj4oKSAtIHRva2VuU3RhcnQ8VUNo
YXI+KCkpOworCisgICAgcmV0dXJuIGxvY2F0aW9uOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK2lubGluZSBib29sIENTU1BhcnNlcjo6aXNJZGVudGlmaWVyU3RhcnQo
KQoreworICAgIC8vIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBzdGFydGVkLgorICAg
IHJldHVybiBpc0lkZW50aWZpZXJTdGFydEFmdGVyRGFzaCgoKmN1cnJlbnRDaGFyYWN0ZXI8Q2hh
cmFjdGVyVHlwZT4oKSAhPSAnLScpID8gY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigp
IDogY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpICsgMSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBDaGFyYWN0ZXJUeXBlKiBj
aGVja0FuZFNraXBTdHJpbmcoQ2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlciwgaW50IHF1
b3RlKQoreworICAgIC8vIFJldHVybnMgd2l0aCAwLCBpZiBzdHJpbmcgY2hlY2sgaXMgZmFpbGVk
LiBPdGhlcndpc2UKKyAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0
ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgLy8gc2luY2Ugd2UgY2Fubm90IHJldmVydCBlc2Nh
cGUgc2VxdWVuY2VzLCB0aHVzIHN0cmluZ3MKKyAgICAvLyBtdXN0IGJlIHZhbGlkYXRlZCBiZWZv
cmUgcGFyc2luZy4KKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoKmN1
cnJlbnRDaGFyYWN0ZXIgPT0gcXVvdGUpKSB7CisgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2lu
ZyBpcyBzdWNjZXNzZnVsLgorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXIgKyAx
OworICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSghKmN1cnJlbnRDaGFyYWN0ZXIpKSB7
CisgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBzdWNjZXNzZnVsIHVwIHRvIGVuZCBv
ZiBpbnB1dC4KKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOworICAgICAgICB9
CisgICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJhY3RlciA8PSAnXHInICYmICgqY3Vy
cmVudENoYXJhY3RlciA9PSAnXG4nIHx8ICgqY3VycmVudENoYXJhY3RlciB8IDB4MSkgPT0gJ1xy
JykpKSB7CisgICAgICAgICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBmYWlsZWQgZm9yIGNoYXJh
Y3RlciAnXG4nLCAnXGYnIG9yICdccicuCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChMSUtFTFkoY3VycmVudENoYXJhY3RlclswXSAhPSAnXFwn
KSkKKyAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjsKKyAgICAgICAgZWxzZSBpZiAoY3Vy
cmVudENoYXJhY3RlclsxXSA9PSAnXG4nIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMV0gPT0gJ1xmJykK
KyAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgKz0gMjsKKyAgICAgICAgZWxzZSBpZiAoY3Vy
cmVudENoYXJhY3RlclsxXSA9PSAnXHInKQorICAgICAgICAgICAgY3VycmVudENoYXJhY3RlciAr
PSBjdXJyZW50Q2hhcmFjdGVyWzJdID09ICdcbicgPyAzIDogMjsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gY2hlY2tBbmRTa2lwRXNjYXBlKGN1cnJlbnRD
aGFyYWN0ZXIpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50Q2hhcmFjdGVyKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3Vuc2lnbmVkIENTU1BhcnNlcjo6cGFyc2VFc2NhcGUo
Q2hhcmFjdGVyVHlwZSomIHNyYykKK3sKKyAgICBBU1NFUlQoKnNyYyA9PSAnXFwnICYmIGlzQ1NT
RXNjYXBlKHNyY1sxXSkpOworCisgICAgdW5zaWduZWQgdW5pY29kZSA9IDA7CisKKyAgICArK3Ny
YzsKKyAgICBpZiAoaXNBU0NJSUhleERpZ2l0KCpzcmMpKSB7CisKKyAgICAgICAgaW50IGxlbmd0
aCA9IDY7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgdW5pY29kZSA9ICh1bmljb2RlIDw8
IDQpICsgdG9BU0NJSUhleFZhbHVlKCpzcmMrKyk7CisgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3Ro
ICYmIGlzQVNDSUlIZXhEaWdpdCgqc3JjKSk7CisKKyAgICAgICAgaWYgKHVuaWNvZGUgPiBVQ0hB
Ul9NQVhfVkFMVUUpCisgICAgICAgICAgICB1bmljb2RlID0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7
CisKKyAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1ZW5jZS4K
KyAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpzcmMpKQorICAgICAgICAgICAgKytzcmM7CisKKyAg
ICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgfQorCisgICAgcmV0dXJuICpjdXJyZW50Q2hhcmFj
dGVyPENoYXJhY3RlclR5cGU+KCkrKzsKK30KKwordGVtcGxhdGUgPD4KK2lubGluZSB2b2lkIENT
U1BhcnNlcjo6VW5pY29kZVRvQ2hhcnM8TENoYXI+KExDaGFyKiYgcmVzdWx0LCB1bnNpZ25lZCB1
bmljb2RlKQoreworICAgIEFTU0VSVCh1bmljb2RlIDw9IDB4ZmYpOworICAgICpyZXN1bHQgPSB1
bmljb2RlOworCisgICAgKytyZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgdm9pZCBD
U1NQYXJzZXI6OlVuaWNvZGVUb0NoYXJzPFVDaGFyPihVQ2hhciomIHJlc3VsdCwgdW5zaWduZWQg
dW5pY29kZSkKK3sKKyAgICAvLyBSZXBsYWNlIHVuaWNvZGUgd2l0aCBhIHN1cnJvZ2F0ZSBwYWly
cyB3aGVuIGl0IGlzIGJpZ2dlciB0aGFuIDB4ZmZmZgorICAgIGlmIChVMTZfTEVOR1RIKHVuaWNv
ZGUpID09IDIpIHsKKyAgICAgICAgKnJlc3VsdCsrID0gVTE2X0xFQUQodW5pY29kZSk7CisgICAg
ICAgICpyZXN1bHQgPSBVMTZfVFJBSUwodW5pY29kZSk7CisgICAgfSBlbHNlCisgICAgICAgICpy
ZXN1bHQgPSB1bmljb2RlOworCisgICAgKytyZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KK2lubGluZSBi
b29sIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVySW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSom
IHNyYywgRGVzdENoYXJhY3RlclR5cGUqJiByZXN1bHQsIGJvb2wmIGhhc0VzY2FwZSkKK3sKKyAg
ICBoYXNFc2NhcGUgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChMSUtFTFkoKnNyYyAh
PSAnXFwnKSkKKyAgICAgICAgICAgICpyZXN1bHQrKyA9ICpzcmMrKzsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBoYXNFc2NhcGUgPSB0cnVlOworICAgICAgICAgICAgU3JjQ2hhcmFjdGVy
VHlwZSogc2F2ZWRFc2NhcGVTdGFydCA9IHNyYzsKKyAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNv
ZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOworICAgICAgICAgICAgaWYg
KHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihEZXN0Q2hhcmFjdGVyVHlwZSkgPT0gMSkgeworICAg
ICAgICAgICAgICAgIHNyYyA9IHNhdmVkRXNjYXBlU3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMocmVz
dWx0LCB1bmljb2RlKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGlzQ1NTTGV0dGVyKHNyY1sw
XSkgfHwgKHNyY1swXSA9PSAnXFwnICYmIGlzQ1NTRXNjYXBlKHNyY1sxXSkpKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGlu
ZSB2b2lkIENTU1BhcnNlcjo6cGFyc2VJZGVudGlmaWVyKENoYXJhY3RlclR5cGUqJiByZXN1bHQs
IENTU1BhcnNlclN0cmluZyYgcmVzdWx0U3RyaW5nLCBib29sJiBoYXNFc2NhcGUpCit7CisgICAg
Q2hhcmFjdGVyVHlwZSogc3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCk7
CisgICAgaWYgKFVOTElLRUxZKCFwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChjdXJyZW50Q2hhcmFj
dGVyPENoYXJhY3RlclR5cGU+KCksIHJlc3VsdCwgaGFzRXNjYXBlKSkpIHsKKyAgICAgICAgLy8g
Rm91bmQgYW4gZXNjYXBlIHdlIGNvdWxkbid0IGhhbmRsZSB3aXRoIDggYml0cywgY29weSB3aGF0
IGhhcyBiZWVuIHJlY29nbml6ZWQgYW5kIGNvbnRpbnVlCisgICAgICAgIEFTU0VSVChpczhCaXRT
b3VyY2UoKSk7CisgICAgICAgIFVDaGFyKiYgcmVzdWx0MTYgPSBjdXJyZW50Q2hhcmFjdGVyMTYo
KTsKKyAgICAgICAgVUNoYXIqIHN0YXJ0MTYgPSByZXN1bHQxNjsKKyAgICAgICAgaW50IGkgPSAw
OworICAgICAgICBmb3IgKDsgaSA8IHJlc3VsdCAtIHN0YXJ0OyArK2kpCisgICAgICAgICAgICBy
ZXN1bHQxNltpXSA9IHN0YXJ0W2ldOworCisgICAgICAgIHJlc3VsdDE2ICs9IGk7CisKKyAgICAg
ICAgcGFyc2VJZGVudGlmaWVySW50ZXJuYWwoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBl
PigpLCByZXN1bHQxNiwgaGFzRXNjYXBlKTsKKworICAgICAgICByZXN1bHQgKz0gcmVzdWx0MTYg
LSBzdGFydDE2OworICAgICAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1bHQxNiAt
IHN0YXJ0MTYpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHRTdHJpbmcu
aW5pdChzdGFydCwgcmVzdWx0IC0gc3RhcnQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3Jj
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+CitpbmxpbmUgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlU3RyaW5nSW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNyYywgRGVz
dENoYXJhY3RlclR5cGUqJiByZXN1bHQsIFVDaGFyIHF1b3RlKQoreworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqc3JjID09IHF1b3RlKSkgeworICAgICAgICAgICAg
Ly8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgICsrc3JjOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFVOTElLRUxZKCEqc3JjKSkg
eworICAgICAgICAgICAgLy8gU3RyaW5nIHBhcnNpbmcgaXMgZG9uZSwgYnV0IGRvbid0IGFkdmFu
Y2UgcG9pbnRlciBpZiBhdCB0aGUgZW5kIG9mIGlucHV0LgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCpzcmMgPiAnXHInIHx8ICgqc3JjIDwgJ1xu
JyAmJiAqc3JjKSB8fCAqc3JjID09ICdcdicpOworCisgICAgICAgIGlmIChMSUtFTFkoc3JjWzBd
ICE9ICdcXCcpKQorICAgICAgICAgICAgKnJlc3VsdCsrID0gKnNyYysrOworICAgICAgICBlbHNl
IGlmIChzcmNbMV0gPT0gJ1xuJyB8fCBzcmNbMV0gPT0gJ1xmJykKKyAgICAgICAgICAgIHNyYyAr
PSAyOworICAgICAgICBlbHNlIGlmIChzcmNbMV0gPT0gJ1xyJykKKyAgICAgICAgICAgIHNyYyAr
PSBzcmNbMl0gPT0gJ1xuJyA/IDMgOiAyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFNy
Y0NoYXJhY3RlclR5cGUqIHNhdmVkRXNjYXBlU3RhcnQgPSBzcmM7CisgICAgICAgICAgICB1bnNp
Z25lZCB1bmljb2RlID0gcGFyc2VFc2NhcGU8U3JjQ2hhcmFjdGVyVHlwZT4oc3JjKTsKKyAgICAg
ICAgICAgIGlmICh1bmljb2RlID4gMHhmZiAmJiBzaXplb2YoRGVzdENoYXJhY3RlclR5cGUpID09
IDEpIHsKKyAgICAgICAgICAgICAgICBzcmMgPSBzYXZlZEVzY2FwZVN0YXJ0OworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVuaWNvZGVU
b0NoYXJzKHJlc3VsdCwgdW5pY29kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU3RyaW5nKENoYXJhY3RlclR5cGUqJiByZXN1bHQsIENTU1BhcnNl
clN0cmluZyYgcmVzdWx0U3RyaW5nLCBVQ2hhciBxdW90ZSkKK3sKKyAgICBDaGFyYWN0ZXJUeXBl
KiBzdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKKworICAgIGlmIChV
TkxJS0VMWSghcGFyc2VTdHJpbmdJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5
cGU+KCksIHJlc3VsdCwgcXVvdGUpKSkgeworICAgICAgICAvLyBGb3VuZCBhbiBlc2NhcGUgd2Ug
Y291bGRuJ3QgaGFuZGxlIHdpdGggOCBiaXRzLCBjb3B5IHdoYXQgaGFzIGJlZW4gcmVjb2duaXpl
ZCBhbmQgY29udGludWUKKyAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsKKyAgICAgICAg
VUNoYXIqJiByZXN1bHQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOworICAgICAgICBVQ2hhciog
c3RhcnQxNiA9IHJlc3VsdDE2OworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGZvciAoOyBp
IDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkKKyAgICAgICAgICAgIHJlc3VsdDE2W2ldID0gc3RhcnRb
aV07CisKKyAgICAgICAgcmVzdWx0MTYgKz0gaTsKKworICAgICAgICBwYXJzZVN0cmluZ0ludGVy
bmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSwgcmVzdWx0MTYsIHF1b3RlKTsK
KworICAgICAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydDE2LCByZXN1bHQxNiAtIHN0YXJ0MTYp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0U3RyaW5nLmluaXQoc3RhcnQs
IHJlc3VsdCAtIHN0YXJ0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CitpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OmZpbmRVUkkoQ2hhcmFjdGVyVHlwZSomIHN0YXJ0LCBD
aGFyYWN0ZXJUeXBlKiYgZW5kLCBVQ2hhciYgcXVvdGUpCit7CisgICAgc3RhcnQgPSBza2lwV2hp
dGVTcGFjZShjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkpOworICAgIAorICAgIGlm
ICgqc3RhcnQgPT0gJyInIHx8ICpzdGFydCA9PSAnXCcnKSB7CisgICAgICAgIHF1b3RlID0gKnN0
YXJ0Kys7CisgICAgICAgIGVuZCA9IGNoZWNrQW5kU2tpcFN0cmluZyhzdGFydCwgcXVvdGUpOwor
ICAgICAgICBpZiAoIWVuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBxdW90ZSA9IDA7CisgICAgICAgIGVuZCA9IHN0YXJ0OworICAgICAgICB3aGls
ZSAoaXNVUklMZXR0ZXIoKmVuZCkpIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoKmVuZCAhPSAn
XFwnKSkKKyAgICAgICAgICAgICAgICArK2VuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGVuZCA9IGNoZWNrQW5kU2tpcEVzY2FwZShlbmQpOworICAgICAgICAgICAgICAg
IGlmICghZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlbmQgPSBza2lwV2hpdGVTcGFjZShlbmQpOwor
ICAgIGlmICgqZW5kICE9ICcpJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+CitpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVVJJ
SW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomIHNyYywgRGVzdENoYXJhY3RlclR5cGUqJiBkZXN0
LCBVQ2hhciBxdW90ZSkKK3sKKyAgICBpZiAocXVvdGUpIHsKKyAgICAgICAgQVNTRVJUKHF1b3Rl
ID09ICciJyB8fCBxdW90ZSA9PSAnXCcnKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nSW50
ZXJuYWwoc3JjLCBkZXN0LCBxdW90ZSk7CisgICAgfQorICAgIAorICAgIHdoaWxlIChpc1VSSUxl
dHRlcigqc3JjKSkgeworICAgICAgICBpZiAoTElLRUxZKCpzcmMgIT0gJ1xcJykpCisgICAgICAg
ICAgICAqZGVzdCsrID0gKnNyYysrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHVuaWNvZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOworICAgICAg
ICAgICAgaWYgKHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihTcmNDaGFyYWN0ZXJUeXBlKSA9PSAx
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFVuaWNvZGVUb0No
YXJzKGRlc3QsIHVuaWNvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpwYXJzZVVSSShDU1NQYXJzZXJTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDaGFyYWN0
ZXJUeXBlKiB1cmlTdGFydDsKKyAgICBDaGFyYWN0ZXJUeXBlKiB1cmlFbmQ7CisgICAgVUNoYXIg
cXVvdGU7CisgICAgaWYgKCFmaW5kVVJJKHVyaVN0YXJ0LCB1cmlFbmQsIHF1b3RlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIENoYXJhY3RlclR5cGUqIGRlc3QgPSBjdXJyZW50Q2hhcmFj
dGVyPENoYXJhY3RlclR5cGU+KCkgPSB1cmlTdGFydDsKKyAgICBpZiAoTElLRUxZKHBhcnNlVVJJ
SW50ZXJuYWwoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCBkZXN0LCBxdW90ZSkp
KQorICAgICAgICBzdHJpbmcuaW5pdCh1cmlTdGFydCwgZGVzdCAtIHVyaVN0YXJ0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gQW4gZXNjYXBlIHNlcXVlbmNlIHdhcyBlbmNvdW50ZXJlZCB0aGF0
IGNhbid0IGJlIHN0b3JlZCBpbiA4IGJpdHMuCisgICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50
IGNoYXJhY3RlciB0byB0aGUgc3RhcnQgb2YgdGhlIFVSSSBhbmQgcmUtcGFyc2Ugd2l0aAorICAg
ICAgICAvLyBhIDE2LWJpdCBkZXN0aW5hdGlvbi4KKyAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJj
ZSgpKTsKKyAgICAgICAgVUNoYXIqIHVyaVN0YXJ0MTYgPSBjdXJyZW50Q2hhcmFjdGVyMTYoKTsK
KyAgICAgICAgY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gdXJpU3RhcnQ7Cisg
ICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyc2VVUklJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENo
YXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFyYWN0ZXIxNigpLCBxdW90ZSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOworICAgICAgICBzdHJpbmcuaW5pdCh1cmlTdGFy
dDE2LCBjdXJyZW50Q2hhcmFjdGVyMTYoKSAtIHVyaVN0YXJ0MTYpOworICAgIH0KKworICAgIGN1
cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IHVyaUVuZCArIDE7CisgICAgbV90b2tl
biA9IFVSSTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVW5pY29kZVJhbmdlKCkKK3sKKyAgICBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgKyAxOworICAg
IGludCBsZW5ndGggPSA2OworICAgIEFTU0VSVCgqY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJU
eXBlPigpID09ICcrJyk7CisKKyAgICB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpjaGFyYWN0ZXIp
ICYmIGxlbmd0aCkgeworICAgICAgICArK2NoYXJhY3RlcjsKKyAgICAgICAgLS1sZW5ndGg7Cisg
ICAgfQorCisgICAgaWYgKGxlbmd0aCAmJiAqY2hhcmFjdGVyID09ICc/JykgeworICAgICAgICAv
LyBBdCBtb3N0IDUgaGV4IGRpZ2l0IGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyay4KKyAgICAg
ICAgZG8geworICAgICAgICAgICAgKytjaGFyYWN0ZXI7CisgICAgICAgICAgICAtLWxlbmd0aDsK
KyAgICAgICAgfSB3aGlsZSAoKmNoYXJhY3RlciA9PSAnPycgJiYgbGVuZ3RoKTsKKyAgICAgICAg
Y3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoIDwgNikgeworICAgICAgICAvLyBB
dCBsZWFzdCBvbmUgaGV4IGRpZ2l0LgorICAgICAgICBpZiAoY2hhcmFjdGVyWzBdID09ICctJyAm
JiBpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyWzFdKSkgeworICAgICAgICAgICAgLy8gRm9sbG93
ZWQgYnkgYSBkYXNoIGFuZCBhIGhleCBkaWdpdC4KKyAgICAgICAgICAgICsrY2hhcmFjdGVyOwor
ICAgICAgICAgICAgbGVuZ3RoID0gNjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg
ICArK2NoYXJhY3RlcjsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuZ3RoICYmIGlzQVNDSUlI
ZXhEaWdpdCgqY2hhcmFjdGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudENoYXJhY3Rl
cjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZU50aENoaWxkKCkKK3sKKyAgICBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCk7CisKKyAg
ICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIpKQorICAgICAgICArK2NoYXJhY3RlcjsK
KyAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY2hhcmFjdGVyLCAnbicpKSB7Cisg
ICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IGNoYXJhY3RlciArIDE7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBDU1NQYXJzZXI6OnBhcnNlTnRo
Q2hpbGRFeHRyYSgpCit7CisgICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVyID0gc2tpcFdoaXRl
U3BhY2UoY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpKTsKKyAgICBpZiAoKmNoYXJh
Y3RlciAhPSAnKycgJiYgKmNoYXJhY3RlciAhPSAnLScpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNoYXJhY3RlciA9IHNraXBXaGl0ZVNwYWNlKGNoYXJhY3RlciArIDEpOworICAgIGlm
ICghaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBkbyB7CisgICAgICAgICsrY2hhcmFjdGVyOworICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdpdCgq
Y2hhcmFjdGVyKSk7CisKKyAgICBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSBj
aGFyYWN0ZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgoraW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpkZXRlY3RGdW5jdGlvblR5cGVUb2tl
bihpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKyAgICBDaGFyYWN0ZXJU
eXBlKiBuYW1lID0gdG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOworCisgICAgc3dpdGNoIChs
ZW5ndGgpIHsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKG5hbWVbMF0sICduJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAn
bycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkgeworICAgICAg
ICAgICAgbV90b2tlbiA9IE5PVEZVTkNUSU9OOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwg
J3UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnbCcpKSB7CisgICAgICAgICAgICBtX3Rva2Vu
ID0gVVJJOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ3YnKSAmJiBpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMV0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzJdLCAncicpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gVkFSRlVOQ1RJT047CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2MnKSAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICd1JykgJiYgaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzJdLCAnZScpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gQ1VFRlVO
Q1RJT047CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisjaWYg
RU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQorICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzBdLCAnZCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFt
ZVsxXSwgJ2knKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdyJykpIHsK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBESVJGVU5DVElPTjsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2Fz
ZSA0OgorICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAiY2FsYyIpKSB7
CisgICAgICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFt
ZSwgImxhbmciKSkgeworICAgICAgICAgICAgbV90b2tlbiA9IExBTkdGVU5DVElPTjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNf
TEVWRUw0KQorICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAicm9sZSIp
KSB7CisgICAgICAgICAgICBtX3Rva2VuID0gUk9MRUZVTkNUSU9OOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRl
bnRpZmllcihuYW1lLCAiaG9zdCIpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gSE9TVEZVTkNU
SU9OOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY2FzZSA3OgorICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmll
cihuYW1lLCAibWF0Y2hlcyIpKSB7CisgICAgICAgICAgICBtX3Rva2VuID0gTUFUQ0hFU0ZVTkNU
SU9OOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgInNsb3R0ZWQiKSkgeworICAgICAgICAgICAgbV90
b2tlbiA9IFNMT1RURURGVU5DVElPTjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgOToKKyAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSwgIm50aC1jaGlsZCIpKSB7CisgICAgICAgICAgICBt
X3Rva2VuID0gTlRIQ0hJTERGVU5DVElPTlM7CisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0g
TnRoQ2hpbGRNb2RlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSAxMToKKyAgICAgICAgaWYgKGlzRXF1YWxUb0NT
U0lkZW50aWZpZXIobmFtZSwgIm50aC1vZi10eXBlIikpIHsKKyAgICAgICAgICAgIG1fcGFyc2lu
Z01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIDE0OgorICAgICAgICBpZiAoaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibnRoLWxhc3QtY2hpbGQiKSkgeworICAgICAgICAg
ICAgbV90b2tlbiA9IE5USENISUxERlVOQ1RJT05TOworICAgICAgICAgICAgbV9wYXJzaW5nTW9k
ZSA9IE50aENoaWxkTW9kZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgMTY6CisgICAgICAgIGlmIChpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUsICJudGgtbGFzdC1vZi10eXBlIikpIHsKKyAgICAgICAgICAg
IG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1vZGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSB2b2lk
IENTU1BhcnNlcjo6ZGV0ZWN0TWVkaWFRdWVyeVRva2VuKGludCBsZW5ndGgpCit7CisgICAgQVNT
RVJUKG1fcGFyc2luZ01vZGUgPT0gTWVkaWFRdWVyeU1vZGUpOworICAgIENoYXJhY3RlclR5cGUq
IG5hbWUgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7CisKKyAgICBpZiAobGVuZ3RoID09
IDMpIHsKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ2En
KSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAnZCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1F
RElBX0FORDsKKyAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzBdLCAnbicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ28nKSAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICd0JykpCisgICAgICAgICAgICBtX3Rv
a2VuID0gTUVESUFfTk9UOworICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAg
aWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICduJykKKyAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdsJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbChuYW1lWzNdLCAneScpKQorICAgICAgICAgICAgbV90b2tlbiA9IE1FRElBX09OTFk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSB2b2lk
IENTU1BhcnNlcjo6ZGV0ZWN0TnVtYmVyVG9rZW4oQ2hhcmFjdGVyVHlwZSogdHlwZSwgaW50IGxl
bmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisKKyAgICBzd2l0Y2ggKHRvQVNDSUlM
b3dlclVuY2hlY2tlZCh0eXBlWzBdKSkgeworICAgIGNhc2UgJ2MnOgorICAgICAgICBpZiAobGVu
Z3RoID09IDIgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAg
ICAgICAgICAgbV90b2tlbiA9IENNUzsKKyAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDIgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnaCcpKQorICAgICAgICAgICAgbV90
b2tlbiA9IENIUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnZCc6CisgICAgICAgIGlm
IChsZW5ndGggPT0gMyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdlJykg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnZycpKQorICAgICAgICAgICAg
bV90b2tlbiA9IERFR1M7CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFC
TEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKKyAgICAgICAgZWxzZSBpZiAobGVuZ3RoID4gMiAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdwJykpIHsKKyAgICAgICAgICAg
IGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZGlzY3Vz
c2lvbiBhYm91dCB0aGUgbmFtZSBvZiB0aGlzIHVuaXQgb24gd3d3LXN0eWxlLgorICAgICAgICAg
ICAgICAgIC8vIEtlZXAgdGhpcyBjb21waWxlIHRpbWUgZ3VhcmQgaW4gcGxhY2UgdW50aWwgdGhh
dCBpcyByZXNvbHZlZC4KKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vbGlzdHMudzMub3JnL0Fy
Y2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxMk1heS8wOTE1Lmh0bWwKKyAgICAgICAgICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAncCcpICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwgJ3gnKSkKKyAgICAgICAgICAgICAgICAgICAgbV90
b2tlbiA9IERQUFg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0eXBlWzJdLCAnYycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsz
XSwgJ20nKSkKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQQ007CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlw
ZVsyXSwgJ2knKSkKKyAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IERQSTsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ2UnOgorICAgICAgICBpZiAo
bGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KHR5cGVbMV0sICdtJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEVNUzsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3gnKSkKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuID0gRVhTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYgaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAncicpKQorICAgICAgICAgICAgbV90b2tlbiA9IEZSOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSAnZyc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNCAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdyJykKKyAgICAgICAgICAgICAg
ICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnZCcpKQorICAgICAgICAgICAgbV90b2tlbiA9IEdS
QURTOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSAyICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3onKSkKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBIRVJUWjsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6
CisgICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMV0sICduJykpCisgICAgICAgICAgICBtX3Rva2VuID0gSU5TOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlICdrJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAzICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2gnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KHR5cGVbMl0sICd6JykpCisgICAgICAgICAgICBtX3Rva2VuID0gS0hFUlRaOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlICdtJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7CisgICAg
ICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBNTVM7CisgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdzJykpCisgICAgICAgICAgICAgICAgbV90b2tl
biA9IE1TRUNTOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKHR5cGVbMV0sICd4JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFBY
UzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsx
XSwgJ3QnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gUFRTOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYycpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBQQ1M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSAncic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMykgeworICAgICAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKHR5cGVbMl0sICdkJykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFJBRFM7
CisgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0s
ICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnbScpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBSRU1TOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgJ3MnOgorICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAgICBtX3Rv
a2VuID0gU0VDUzsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAndCc6CisgICAgICAgIGlm
IChsZW5ndGggPT0gNCAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICd1JykK
KyAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdy
JykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbicpKQorICAgICAgICAg
ICAgbV90b2tlbiA9IFRVUk5TOworICAgICAgICByZXR1cm47CisgICAgY2FzZSAndic6CisgICAg
ICAgIGlmIChsZW5ndGggPT0gMikgeworICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwodHlwZVsxXSwgJ3cnKSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVlc7Cisg
ICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdo
JykpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFZIOworICAgICAgICB9IGVsc2UgaWYgKGxl
bmd0aCA9PSA0ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ20nKSkgewor
ICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2knKSAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICduJykpCisgICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFZNSU47CisgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKHR5cGVbMl0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBl
WzNdLCAneCcpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBWTUFYOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICh0eXBlWzBdID09ICdf
JyAmJiBsZW5ndGggPT0gNSAmJiB0eXBlWzFdID09ICdfJyAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbMl0sICdxJykKKyAgICAgICAgICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKHR5cGVbM10sICdlJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBl
WzRdLCAnbScpKQorICAgICAgICAgICAgbV90b2tlbiA9IFFFTVM7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIHZv
aWQgQ1NTUGFyc2VyOjpkZXRlY3REYXNoVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBDaGFyYWN0
ZXJUeXBlKiBuYW1lID0gdG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOworCisgICAgaWYgKGxl
bmd0aCA9PSAxMSkgeworICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzEwXSwgJ3knKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Via2l0LWFu
IikpCisgICAgICAgICAgICBtX3Rva2VuID0gQU5ZRlVOQ1RJT047CisgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMF0sICduJykgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1taSIpKQorICAgICAgICAgICAgbV90b2tlbiA9
IE1JTkZVTkNUSU9OOworICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMTBdLCAneCcpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJr
aXQtbWEiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNQVhGVU5DVElPTjsKKyAgICB9IGVsc2Ug
aWYgKGxlbmd0aCA9PSAxMiAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAxLCAid2Vi
a2l0LWNhbGMiKSkKKyAgICAgICAgbV90b2tlbiA9IENBTENGVU5DVElPTjsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVj
dEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCit7CisgICAgQ2hhcmFjdGVyVHlw
ZSogbmFtZSA9IHRva2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICBBU1NFUlQobmFtZVsw
XSA9PSAnQCcgJiYgbGVuZ3RoID49IDIpOworCisgICAgLy8gY2hhcnNldCwgZm9udC1mYWNlLCBp
bXBvcnQsIG1lZGlhLCBuYW1lc3BhY2UsIHBhZ2UsIHN1cHBvcnRzLAorICAgIC8vIC13ZWJraXQt
a2V5ZnJhbWVzLCBhbmQgLXdlYmtpdC1tZWRpYXF1ZXJ5IGFyZSBub3QgYWZmZWN0ZWQgYnkgaGFz
RXNjYXBlLgorICAgIHN3aXRjaCAodG9BU0NJSUxvd2VyVW5jaGVja2VkKG5hbWVbMV0pKSB7Cisg
ICAgY2FzZSAnYic6CisgICAgICAgIGlmIChoYXNFc2NhcGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMjoKKyAgICAgICAg
ICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVmdCIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUX1NZTTsKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1yaWdodCIpKQorICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBCT1RUT01SSUdIVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSAxNDoKKyAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAi
b3R0b20tY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTUNFTlRFUl9T
WU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAg
IGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tbGVmdC1jb3JuZXIi
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NTEVGVENPUk5FUl9TWU07CisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgIGlmIChpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3R0b20tcmlnaHQtY29ybmVyIikpCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRPTVJJR0hUQ09STkVSX1NZTTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdjJzoKKyAg
ICAgICAgaWYgKGxlbmd0aCA9PSA4ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIs
ICJoYXJzZXQiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBDSEFSU0VUX1NZTTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSAnZic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9udC1mYWNlIikpCisgICAgICAgICAgICBt
X3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAnaSc6
CisgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAibXBvcnQiKSkgeworICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlN
b2RlOworICAgICAgICAgICAgbV90b2tlbiA9IElNUE9SVF9TWU07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAnayc6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYg
aXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImV5ZnJhbWVzIikpCisgICAgICAgICAg
ICBtX3Rva2VuID0gS0VZRlJBTUVTX1NZTTsKKyAgICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDE0
ICYmICFoYXNFc2NhcGUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImV5ZnJh
bWUtcnVsZSIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FX1JVTEVfU1lNOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlICdsJzoKKyAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobGVuZ3RoID09IDkpIHsKKyAgICAgICAg
ICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LXRvcCIpKQorICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBMRUZUVE9QX1NZTTsKKyAgICAgICAgfSBlbHNlIGlmIChs
ZW5ndGggPT0gMTIpIHsKKyAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3Rl
ciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgorICAgICAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdlJykgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImVmdC1taWRkbCIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBMRUZUTUlERExFX1NZTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMV0sICdtJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgImVmdC1ib3R0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBM
RUZUQk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICdt
JzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA2ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFt
ZSArIDIsICJlZGlhIikpIHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5
TW9kZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJQV9TWU07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSAnbic6CisgICAgICAgIGlmIChsZW5ndGggPT0gMTAgJiYg
aXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImFtZXNwYWNlIikpCisgICAgICAgICAg
ICBtX3Rva2VuID0gTkFNRVNQQUNFX1NZTTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSAn
cCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUgKyAyLCAiYWdlIikpCisgICAgICAgICAgICBtX3Rva2VuID0gUEFHRV9TWU07CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgJ3InOgorICAgICAgICBpZiAoaGFzRXNjYXBlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsZW5ndGggPT0gMTApIHsKKyAgICAgICAgICAg
IGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC10b3AiKSkKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gUklHSFRUT1BfU1lNOworICAgICAgICB9IGVsc2UgaWYgKGxl
bmd0aCA9PSAxMykgeworICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVy
IGZpcnN0IGNvdWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCisgICAgICAg
ICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEyXSwgJ2UnKSAmJiBpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiaWdodC1taWRkbCIpKQorICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBSSUdIVE1JRERMRV9TWU07CisgICAgICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnbScpICYmIGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDIsICJpZ2h0LWJvdHRvIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9
IFJJR0hUQk9UVE9NX1NZTTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
ICdzJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA5ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIo
bmFtZSArIDIsICJ1cHBvcnRzIikpIHsKKyAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBTdXBw
b3J0c01vZGU7CisgICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfU1lNOworICAgICAgICB9
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAoaGFzRXNjYXBl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CisgICAg
ICAgIGNhc2UgOToKKyAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAib3AtbGVmdCIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUX1NZTTsK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgaWYg
KGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1yaWdodCIpKQorICAgICAgICAg
ICAgICAgIG1fdG9rZW4gPSBUT1BSSUdIVF9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUgKyAyLCAib3AtY2VudGVyIikpCisgICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUENFTlRF
Ul9TWU07CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAg
ICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtbGVmdC1jb3JuZXIi
KSkKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QTEVGVENPUk5FUl9TWU07CisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgIGlmIChpc0VxdWFs
VG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3AtcmlnaHQtY29ybmVyIikpCisgICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFRPUFJJR0hUQ09STkVSX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgc3dp
dGNoIChsZW5ndGgpIHsKKyAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGlmICghaGFzRXNj
YXBlICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtcnVsZSIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfUlVMRV9TWU07CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgIGlmIChoYXNFc2NhcGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFz
dCBjaGFyYWN0ZXIgZmlyc3QgY291bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNl
cy4KKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAn
cycpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtZGVjbCIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfREVDTFNfU1lNOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEzXSwgJ2UnKSAmJiBpc0Vx
dWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXZhbHUiKSkKKyAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gV0VCS0lUX1ZBTFVFX1NZTTsKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjYXNlIDE1OgorICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgICAgICAgICBpZiAo
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzE0XSwgJ24nKSAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXJlZ2lvIikpCisgICAgICAgICAgICAgICAgbV90
b2tlbiA9IFdFQktJVF9SRUdJT05fUlVMRV9TWU07CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG5hbWVbMTZdLCAncicpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIs
ICJ3ZWJraXQtc2VsZWN0byIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU0VM
RUNUT1JfU1lNOworI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCisgICAgICAgICAg
ICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTZdLCAndCcpICYmIGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtdmlld3BvciIpKQorICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfVklFV1BPUlRfUlVMRV9TWU07CisjZW5kaWYKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE4OgorICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWVzIikpCisgICAg
ICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FU19TWU07CisgICAgICAgICAgICBlbHNlIGlm
IChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAid2Via2l0LXNpemVzYXR0ciIpKQor
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU0laRVNBVFRSX1NZTTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtbWVkaWFxdWVyeSIpKSB7CisgICAgICAg
ICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOworICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICAgIGlmICghaGFzRXNj
YXBlICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQta2V5ZnJhbWUt
cnVsZSIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBLRVlGUkFNRV9SVUxFX1NZTTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIDI3OgorICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc3VwcG9ydHMtY29uZGl0aW9u
IikpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gU3VwcG9ydHNNb2RlOworICAg
ICAgICAgICAgICAgIG1fdG9rZW4gPSBXRUJLSVRfU1VQUE9SVFNfQ09ORElUSU9OX1NZTTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6
OmRldGVjdFN1cHBvcnRzVG9rZW4oaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9wYXJzaW5n
TW9kZSA9PSBTdXBwb3J0c01vZGUpOworICAgIENoYXJhY3RlclR5cGUqIG5hbWUgPSB0b2tlblN0
YXJ0PENoYXJhY3RlclR5cGU+KCk7CisKKyAgICBpZiAobGVuZ3RoID09IDIpIHsKKyAgICAgICAg
aWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ28nKSAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdyJykpCisgICAgICAgICAgICBtX3Rva2VuID0gU1VQ
UE9SVFNfT1I7CisgICAgfSBlbHNlIGlmIChsZW5ndGggPT0gMykgeworICAgICAgICBpZiAoaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
Ml0sICdkJykpCisgICAgICAgICAgICBtX3Rva2VuID0gU1VQUE9SVFNfQU5EOworICAgICAgICBl
bHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICduJykgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwobmFtZVsyXSwgJ3QnKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19OT1Q7
CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZT4KK2ludCBD
U1NQYXJzZXI6OnJlYWxMZXgodm9pZCogeXlsdmFsV2l0aG91dFR5cGUpCit7CisgICAgWVlTVFlQ
RSogeXlsdmFsID0gc3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHl5bHZhbFdpdGhvdXRUeXBlKTsKKyAg
ICAvLyBXcml0ZSBwb2ludGVyIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgU3JjQ2hhcmFj
dGVyVHlwZSogcmVzdWx0OworICAgIENTU1BhcnNlclN0cmluZyByZXN1bHRTdHJpbmc7CisgICAg
Ym9vbCBoYXNFc2NhcGU7CisKKyAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGlzIHRlcm1pbmF0ZWQg
YnkgYSBcMCBjaGFyYWN0ZXIsIHNvCisgICAgLy8gaXQgaXMgc2FmZSB0byByZWFkIG9uZSBjaGFy
YWN0ZXIgYWhlYWQgb2YgYSBrbm93biBub24tbnVsbC4KKyNpZm5kZWYgTkRFQlVHCisgICAgLy8g
SW4gZGVidWcgd2UgY2hlY2sgd2l0aCBhbiBBU1NFUlQgdGhhdCB0aGUgbGVuZ3RoIGlzID4gMCBm
b3Igc3RyaW5nIHR5cGVzLgorICAgIHl5bHZhbC0+c3RyaW5nLmNsZWFyKCk7CisjZW5kaWYKKwor
cmVzdGFydEFmdGVyQ29tbWVudDoKKyAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCk7CisgICAgc2V0VG9rZW5TdGFydChyZXN1bHQpOworICAgIG1fdG9rZW5T
dGFydExpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7CisgICAgbV90b2tlblN0YXJ0Q29sdW1uTnVt
YmVyID0gdG9rZW5TdGFydE9mZnNldCgpIC0gbV9jb2x1bW5PZmZzZXRGb3JMaW5lOworICAgIG1f
dG9rZW4gPSAqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworCisgICAgc3dpdGNoICgobV90b2tl
biA8PSAxMjcpID8gdHlwZXNPZkFTQ0lJQ2hhcmFjdGVyc1ttX3Rva2VuXSA6IENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCkgeworICAgIGNhc2UgQ2hhcmFjdGVyQ2FzZWxlc3NVOgorICAgICAgICBp
ZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKycp
KSB7CisgICAgICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2U8U3JjQ2hhcmFjdGVyVHlwZT4o
KSkgeworICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBVTklDT0RFUkFOR0U7CisgICAgICAgICAg
ICAgICAgeXlsdmFsLT5zdHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCks
IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hh
cmFjdGVyVHlwZT4oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgRkFMTFRIUk9VR0g7IC8vIFRvIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydC4KKworICAgIGNhc2UgQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0OgorICAgICAgICAtLWN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgcGFyc2VJZGVudGlm
aWVyKHJlc3VsdCwgeXlsdmFsLT5zdHJpbmcsIGhhc0VzY2FwZSk7CisgICAgICAgIG1fdG9rZW4g
PSBJREVOVDsKKworICAgICAgICBpZiAoVU5MSUtFTFkoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKSA9PSAnKCcpKSB7CisgICAgICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9
PSBTdXBwb3J0c01vZGUgJiYgIWhhc0VzY2FwZSkgeworICAgICAgICAgICAgICAgIGRldGVjdFN1
cHBvcnRzVG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFy
YWN0ZXJUeXBlPigpKTsKKyAgICAgICAgICAgICAgICBpZiAobV90b2tlbiAhPSBJREVOVCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3Rv
a2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICBib29sIHNob3VsZFNraXBQYXJlbnRoZXNpcyA9
IHRydWU7CisgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkgeworICAgICAgICAgICAgICAgIGJv
b2wgZGV0ZWN0ZWQgPSBkZXRlY3RGdW5jdGlvblR5cGVUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihy
ZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOworICAgICAgICAgICAgICAg
IGlmICghZGV0ZWN0ZWQgJiYgbV9wYXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyAuLi4gYW5kKG1heC13aWR0aDogNDgwcHgpIC4uLiBsb29rcyBs
aWtlIGEgZnVuY3Rpb24sIGJ1dCBpbiBmYWN0IGl0IGlzIG5vdCwKKyAgICAgICAgICAgICAgICAg
ICAgLy8gc28gcnVuIG1vcmUgZGV0ZWN0aW9uIGNvZGUgaW4gdGhlIE1lZGlhUXVlcnlNb2RlLgor
ICAgICAgICAgICAgICAgICAgICBkZXRlY3RNZWRpYVF1ZXJ5VG9rZW48U3JjQ2hhcmFjdGVyVHlw
ZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkU2tpcFBhcmVudGhlc2lzID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoTElLRUxZKHNob3VsZFNraXBQYXJl
bnRoZXNpcykpIHsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKTsKKyAgICAgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgICAgICAr
K3l5bHZhbC0+c3RyaW5nLm1fbGVuZ3RoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodG9rZW4oKSA9PSBVUkkpIHsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyByZWFsbHkgYW4gVVJJLgor
ICAgICAgICAgICAgICAgIGlmICh5eWx2YWwtPnN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VVUkk8TENoYXI+KHl5bHZhbC0+c3RyaW5nKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBhcnNlVVJJPFVDaGFyPih5eWx2YWwtPnN0cmlu
Zyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9wYXJzaW5n
TW9kZSAhPSBOb3JtYWxNb2RlKSAmJiAhaGFzRXNjYXBlKSB7CisgICAgICAgICAgICBpZiAobV9w
YXJzaW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSkKKyAgICAgICAgICAgICAgICBkZXRlY3RNZWRp
YVF1ZXJ5VG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFy
YWN0ZXJUeXBlPigpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gU3Vw
cG9ydHNNb2RlKQorICAgICAgICAgICAgICAgIGRldGVjdFN1cHBvcnRzVG9rZW48U3JjQ2hhcmFj
dGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdLCAnbicp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAibiIgaXMgSURF
TlQgYnV0ICJuKzEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hp
bGRFeHRyYTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3Rva2VuID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcubV9s
ZW5ndGggPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0
PFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+
PSAyICYmIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSA9PSAnLScpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuLSIgaXMgSURFTlQgYnV0ICJuLTEiIGlzIE5USC4K
KyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8gJy0nIHRvIGNv
bnRpbnVlIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIG5l
eHRDaGFyYWN0ZXIgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0
ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSAr
IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFj
dGVyVHlwZT4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLnNldExlbmd0aChjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2UgdG8gY3VycmVudENoYXJhY3RlciBpZiB1bnN1Y2Nlc3Nm
dWwuCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KCkgPSBuZXh0Q2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX3BhcnNp
bmdNb2RlID09IE50aENoaWxkTW9kZSAmJiBtX3Rva2VuID09IElERU5UICYmIHl5bHZhbC0+c3Ry
aW5nLmxlbmd0aCgpID09IDIgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeXlsdmFs
LT5zdHJpbmcsICJvZiIpKSB7CisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9k
ZTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOVEhDSElMRFNFTEVDVE9SU0VQQVJBVE9SOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJEb3Q6CisgICAgICAg
IGlmICghaXNBU0NJSURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVsw
XSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgRkFMTFRIUk9VR0g7IC8vIFRvIENoYXJh
Y3Rlck51bWJlci4KKworICAgIGNhc2UgQ2hhcmFjdGVyTnVtYmVyOiB7CisgICAgICAgIGJvb2wg
ZG90U2VlbiA9IChtX3Rva2VuID09ICcuJyk7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVy
VHlwZT4oKVswXSkpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBkb3QgaXMgYWxsb3dl
ZCBmb3IgYSBudW1iZXIsCisgICAgICAgICAgICAgICAgLy8gYW5kIGl0IG11c3QgYmUgZm9sbG93
ZWQgYnkgYSBkaWdpdC4KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcjxTcmND
aGFyYWN0ZXJUeXBlPigpWzBdICE9ICcuJyB8fCBkb3RTZWVuIHx8ICFpc0FTQ0lJRGlnaXQoY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlID09IE50aENoaWxk
TW9kZSkgJiYgIWRvdFNlZW4gJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCgqY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpLCAnbicpKSB7CisgICAgICAgICAgICAvLyAiWzAt
OV0rbiIgaXMgYWx3YXlzIGFuIE50aENoaWxkLgorICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7CisgICAgICAg
ICAgICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwg
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFy
YWN0ZXJUeXBlPigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVXNlIFNWRyBwYXJzZXIgZm9yIG51bWJlcnMgb24gU1ZHIHByZXNlbnRhdGlvbiBhdHRyaWJ1
dGVzLgorICAgICAgICBpZiAobV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSkgewor
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgdW5pdHMgbGlrZSAnZW0nIG9y
ICdleCcuCisgICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbCgqY2hhcmFjdGVyLCAnZScpKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGNoYXJhY3RlciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+IDApOworICAg
ICAgICAgICAgICAgICsrY2hhcmFjdGVyOworICAgICAgICAgICAgICAgIGlmICgqY2hhcmFjdGVy
ID09ICctJyB8fCAqY2hhcmFjdGVyID09ICcrJyB8fCBpc0FTQ0lJRGlnaXQoKmNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgICAgICAgICAgKytjaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChpc0FTQ0lJRGlnaXQoKmNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgICAgICAg
ICArK2NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZMT0FUVE9LRU4gaWYg
dGhlIHN0cmluZyBjb250YWlucyBleHBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIGRvdFNl
ZW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCkgPSBjaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFwYXJzZVNWR051bWJlcih0b2tlblN0YXJ0PFNyY0NoYXJhY3Rl
clR5cGU+KCksIGNoYXJhY3RlciAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgeXls
dmFsLT5udW1iZXIpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHl5bHZhbC0+bnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKHRva2VuU3RhcnQ8
U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKKyAKKyAgICAgICAgLy8gVHlwZSBv
ZiB0aGUgZnVuY3Rpb24uCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydDxTcmNDaGFyYWN0
ZXJUeXBlPigpKSB7CisgICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiB0eXBlID0gY3VycmVu
dENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICAgICAgICAgcmVzdWx0ID0gY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworCisgICAgICAgICAgICBwYXJzZUlk
ZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7CisKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBESU1FTjsKKyAgICAgICAgICAgIGlmICghaGFzRXNjYXBlKQorICAgICAgICAg
ICAgICAgIGRldGVjdE51bWJlclRva2VuKHR5cGUsIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKSAtIHR5cGUpOworCisgICAgICAgICAgICBpZiAobV90b2tlbiA9PSBESU1FTikg
eworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVkIG51bWJlciBpcyBvdmVyd3JpdHRlbiwg
YnV0IHRoaXMgaXMgaW50ZW50aW9uYWwuCisgICAgICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcu
aW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKSA9PSAnJScpIHsKKyAgICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSBDU1MgZ3Jh
bW1hciBzYXlzIHtudW19JSB3ZSBmb2xsb3cKKyAgICAgICAgICAgIC8vIHdlYmtpdCBhdCB0aGUg
bW9tZW50IHdoaWNoIHVzZXMge251bX0lKy4KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAg
IH0gd2hpbGUgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJyUnKTsK
KyAgICAgICAgICAgIG1fdG9rZW4gPSBQRVJDRU5UQUdFOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBkb3RTZWVuID8gRkxPQVRUT0tFTiA6IElOVEVHRVI7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQ2hhcmFjdGVyRGFzaDoKKyAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSkpIHsKKyAgICAgICAgICAgIC0tY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpOworICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVyKHJlc3VsdCwgcmVzdWx0U3RyaW5nLCBo
YXNFc2NhcGUpOworICAgICAgICAgICAgbV90b2tlbiA9IElERU5UOworCisgICAgICAgICAgICBp
ZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnKCcpIHsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gRlVOQ1RJT047CisgICAgICAgICAgICAgICAgaWYgKCFoYXNF
c2NhcGUpCisgICAgICAgICAgICAgICAgICAgIGRldGVjdERhc2hUb2tlbjxTcmNDaGFyYWN0ZXJU
eXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOworICAgICAgICAg
ICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICAgICAg
ICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNp
bmdNb2RlID09IE50aENoaWxkTW9kZSkgJiYgIWhhc0VzY2FwZSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSwgJ24nKSkgeworICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkg
PT0gMikgeworICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgIi1uIiBpcyBJREVOVCBidXQg
Ii1uKzEiIGlzIE5USC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRy
YTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkg
Pj0gMyAmJiB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KClbMl0gPT0gJy0nKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4tIiBpcyBJREVOVCBidXQgIi1uLTEiIGlzIE5U
SC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRDaGFyYWN0ZXIgdG8gc2Vjb25k
ICctJyBvZiAnLW4tJyB0byBjb250aW51ZSBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBT
cmNDaGFyYWN0ZXJUeXBlKiBuZXh0Q2hhcmFjdGVyID0gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPSB0b2tlblN0YXJ0PFNy
Y0NoYXJhY3RlclR5cGU+KCkgKyAyOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhD
aGlsZEV4dHJhPFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBOVEg7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZSB0byBjdXJy
ZW50Q2hhcmFjdGVyIGlmIHVuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IG5leHRDaGFyYWN0ZXI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXN1bHRTdHJpbmcuc2V0TGVuZ3RoKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hh
cmFjdGVyVHlwZT4oKSk7CisgICAgICAgICAgICB5eWx2YWwtPnN0cmluZyA9IHJlc3VsdFN0cmlu
ZzsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KClbMF0gPT0gJy0nICYmIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVsxXSA9
PSAnPicpIHsKKyAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KSArPSAyOworICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7CisgICAgICAgIH0gZWxzZSBp
ZiAoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdID09ICctJykgeworICAg
ICAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAg
ICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7Cisg
ICAgICAgICAgICBtX3Rva2VuID0gQ1VTVE9NX1BST1BFUlRZOworICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcgPSByZXN1bHRTdHJpbmc7CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobV9w
YXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7CisgICAgICAgICAgICAvLyAiLVswLTldK24i
IGlzIGFsd2F5cyBhbiBOdGhDaGlsZC4KKyAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkPFNy
Y0NoYXJhY3RlclR5cGU+KCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOworICAg
ICAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJU
eXBlPigpLCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0
PFNyY0NoYXJhY3RlclR5cGU+KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJPdGhlcjoKKyAgICAgICAgLy8gbV90b2tlbiBp
cyBzaW1wbHkgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLgorICAgICAgICBicmVhazsKKworICAgIGNh
c2UgQ2hhcmFjdGVyTnVsbDoKKyAgICAgICAgLy8gRG8gbm90IGFkdmFuY2UgcG9pbnRlciBhdCB0
aGUgZW5kIG9mIGlucHV0LgorICAgICAgICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVy
VHlwZT4oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlcldoaXRlU3BhY2U6
CisgICAgICAgIG1fdG9rZW4gPSBXSElURVNQQUNFOworICAgICAgICAvLyBNaWdodCBzdGFydCB3
aXRoIGEgJ1xuJy4KKyAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmND
aGFyYWN0ZXJUeXBlPigpID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICArK21fbGluZU51bWJl
cjsKKyAgICAgICAgICAgICAgICBtX2NvbHVtbk9mZnNldEZvckxpbmUgPSBjdXJyZW50Q2hhcmFj
dGVyT2Zmc2V0KCkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgIH0gd2hpbGUgKCpjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPD0gJyAnICYmICh0eXBlc09mQVNDSUlDaGFyYWN0
ZXJzWypjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCldID09IENoYXJhY3Rlcldo
aXRlU3BhY2UpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoYXJhY3RlckVuZENvbmRp
dGlvblF1ZXJ5OiB7CisgICAgICAgIGJvb2wgaXNQYXJzaW5nQ29uZGl0aW9uID0gbV9wYXJzaW5n
TW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSB8fCBtX3BhcnNpbmdNb2RlID09IFN1cHBvcnRzTW9kZTsK
KyAgICAgICAgaWYgKGlzUGFyc2luZ0NvbmRpdGlvbikKKyAgICAgICAgICAgIG1fcGFyc2luZ01v
ZGUgPSBOb3JtYWxNb2RlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENoYXJh
Y3RlckVuZE50aENoaWxkOgorICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1v
ZGUpCisgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIENoYXJhY3RlclF1b3RlOgorICAgICAgICBpZiAoY2hlY2tBbmRTa2lw
U3RyaW5nKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgbV90b2tlbikpIHsK
KyAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICAgICAgcGFyc2VTdHJpbmc8U3JjQ2hhcmFj
dGVyVHlwZT4ocmVzdWx0LCB5eWx2YWwtPnN0cmluZywgbV90b2tlbik7CisgICAgICAgICAgICBt
X3Rva2VuID0gU1RSSU5HOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBD
aGFyYWN0ZXJFeGNsYW1hdGlvbk1hcms6IHsKKyAgICAgICAgU3JjQ2hhcmFjdGVyVHlwZSogc3Rh
cnQgPSBza2lwV2hpdGVTcGFjZShjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkp
OworICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihzdGFydCwgImltcG9ydGFudCIp
KSB7CisgICAgICAgICAgICBtX3Rva2VuID0gSU1QT1JUQU5UX1NZTTsKKyAgICAgICAgICAgIGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHN0YXJ0ICsgOTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENoYXJhY3Rlckhhc2htYXJrOiB7
CisgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIHN0YXJ0ID0gY3VycmVudENoYXJhY3RlcjxTcmND
aGFyYWN0ZXJUeXBlPigpOworICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCk7CisKKyAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGEgdmFsaWQgaGV4IG51bWJlciB0b2tlbi4KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAg
IH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdCgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpKSk7CisgICAgICAgICAgICBtX3Rva2VuID0gSEVYOworICAgICAgICAgICAgeXlsdmFs
LT5zdHJpbmcuaW5pdChzdGFydCwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC0gc3RhcnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0PFNyY0NoYXJh
Y3RlclR5cGU+KCkpIHsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBJRFNFTDsKKyAgICAgICAgICAg
IHBhcnNlSWRlbnRpZmllcihyZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBoYXNFc2NhcGUpOworICAg
ICAgICAgICAgaWYgKCFoYXNFc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0
aGVyIHRoZSBpZGVudGlmaWVyIGlzIGFsc28gYSB2YWxpZCBoZXggbnVtYmVyLgorICAgICAgICAg
ICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBzdGFydDsKKyAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gSEVYOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Rva2VuID0gSURTRUw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCA8IHJlc3VsdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBDaGFyYWN0ZXJTbGFz
aDoKKyAgICAgICAgLy8gSWdub3JlIGNvbW1lbnRzLiBUaGV5IGFyZSBub3QgZXZlbiBjb25zaWRl
cmVkIGFzIHdoaXRlIHNwYWNlcy4KKyAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgPT0gJyonKSB7CisgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KClbMF0gIT0gJyonIHx8IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKVsxXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnRD
aGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAg
ICAgICsrbV9saW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBtX2NvbHVtbk9mZnNldEZv
ckxpbmUgPSBjdXJyZW50Q2hhcmFjdGVyT2Zmc2V0KCkgKyAxOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnXDAnKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFVudGVybWluYXRlZCBjb21tZW50cyBhcmUgc2ltcGx5
IGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKSAtPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkgKz0gMjsKKyAgICAgICAgICAgIGdvdG8gcmVzdGFydEFmdGVyQ29tbWVu
dDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyRG9sbGFy
OgorICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAn
PScpIHsKKyAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
OworICAgICAgICAgICAgbV90b2tlbiA9IEVORFNXSVRIOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJBc3RlcmlzazoKKyAgICAgICAgaWYgKCpjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJz0nKSB7CisgICAgICAgICAgICArK2N1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBDT05UQUlOUzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFj
dGVyUGx1czoKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRN
b2RlKSkgeworICAgICAgICAgICAgLy8gU2ltcGxlc3QgY2FzZS4gIitbMC05XSpuIiBpcyBhbHdh
eXMgTnRoQ2hpbGQuCisgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZDxTcmNDaGFyYWN0ZXJU
eXBlPigpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VOdGhDaGlsZEV4dHJhPFNyY0NoYXJhY3Rl
clR5cGU+KCk7CisgICAgICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKKyAgICAgICAgICAgICAg
ICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0
ZXJUeXBlPigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgQ2hhcmFjdGVyTGVzczoKKyAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKVswXSA9PSAnIScgJiYgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpWzFdID09ICctJyAmJiBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+
KClbMl0gPT0gJy0nKSB7CisgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3Rl
clR5cGU+KCkgKz0gMzsKKyAgICAgICAgICAgIG1fdG9rZW4gPSBTR01MX0NEOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGFyYWN0ZXJBdDoKKyAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpIHsKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBBVEtFWVdPUkQ7CisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgICAgIHBhcnNl
SWRlbnRpZmllcihyZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKKyAgICAgICAgICAg
IGRldGVjdEF0VG9rZW48U3JjQ2hhcmFjdGVyVHlwZT4ocmVzdWx0IC0gdG9rZW5TdGFydDxTcmND
aGFyYWN0ZXJUeXBlPigpLCBoYXNFc2NhcGUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBDaGFyYWN0ZXJCYWNrU2xhc2g6CisgICAgICAgIGlmIChpc0NTU0VzY2FwZSgq
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgeworICAgICAgICAgICAgLS1j
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7CisgICAgICAgICAgICBwYXJzZUlk
ZW50aWZpZXIocmVzdWx0LCB5eWx2YWwtPnN0cmluZywgaGFzRXNjYXBlKTsKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBJREVOVDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wYXJzaW5nTW9kZSA9
PSBOdGhDaGlsZE1vZGUgJiYgbV90b2tlbiA9PSBJREVOVCAmJiB5eWx2YWwtPnN0cmluZy5sZW5n
dGgoKSA9PSAyICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHl5bHZhbC0+c3RyaW5n
LCAib2YiKSkgeworICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1hbE1vZGU7CisgICAg
ICAgICAgICBtX3Rva2VuID0gTlRIQ0hJTERTRUxFQ1RPUlNFUEFSQVRPUjsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyWG9yOgorICAgICAgICBpZiAoKmN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKKyAgICAgICAgICAg
ICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICAgICAgICAgbV90
b2tlbiA9IEJFR0lOU1dJVEg7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IENoYXJhY3RlclZlcnRpY2FsQmFyOgorICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKKyAgICAgICAgICAgICsrY3VycmVudENoYXJhY3Rl
cjxTcmNDaGFyYWN0ZXJUeXBlPigpOworICAgICAgICAgICAgbV90b2tlbiA9IERBU0hNQVRDSDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ2hhcmFjdGVyVGlsZGU6Cisg
ICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9Jykg
eworICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Cisg
ICAgICAgICAgICBtX3Rva2VuID0gSU5DTFVERVM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuKCk7Cit9CisKK1JlZlB0cjxTdHlsZVJ1
bGVJbXBvcnQ+IENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJp
bmcmIHVybCwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEpCit7CisgICAgaWYgKCFtZWRp
YSB8fCAhbV9hbGxvd0ltcG9ydFJ1bGVzKSB7CisgICAgICAgIHBvcFJ1bGVEYXRhKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVJbXBv
cnQ6OmNyZWF0ZSh1cmwsIG1lZGlhLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHByb2Nlc3NBbmRB
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gV1RGTW92ZShydWxl
KTsKK30KKworUmVmPFN0eWxlUnVsZU1lZGlhPiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZShS
ZWZQdHI8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSwgUnVsZUxpc3QqIHJ1bGVzKQoreworICAgIG1f
YWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsK
KyAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IHJ1bGU7CisgICAgUnVsZUxpc3QgZW1wdHlSdWxl
czsKKyAgICBpZiAoIW1lZGlhKSB7CisgICAgICAgIC8vIFRvIGNvbXBseSB3aXRoIHczYyB0ZXN0
IHN1aXRlIGV4cGVjdGF0aW9uLCBjcmVhdGUgYW4gZW1wdHkgbWVkaWEgcXVlcnkKKyAgICAgICAg
Ly8gZXZlbiB3aGVuIGl0IGlzIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0LgorICAgICAgICBydWxl
ID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKSwgZW1wdHlS
dWxlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVkaWEtPnNocmlua1RvRml0KCk7CisgICAg
ICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLnJlbGVhc2VOb25OdWxsKCks
IHJ1bGVzID8gKnJ1bGVzIDogZW1wdHlSdWxlcyk7CisgICAgfQorICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9u
TnVsbCgpOworfQorCitSZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRlRW1wdHlN
ZWRpYVJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQoreworICAgIHJldHVybiBjcmVhdGVNZWRpYVJ1bGUo
TWVkaWFRdWVyeVNldDo6Y3JlYXRlKCksIHJ1bGVzKTsKK30KKworUmVmPFN0eWxlUnVsZVN1cHBv
cnRzPiBDU1NQYXJzZXI6OmNyZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9y
dGVkLCBSdWxlTGlzdCogcnVsZXMpCit7CisgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxv
d05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOworCisgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBkYXRhID0gcG9wU3VwcG9ydHNSdWxlRGF0YSgpOworICAgIFN0cmluZyBjb25kaXRp
b25UZXh0OworICAgIHVuc2lnbmVkIGNvbmRpdGlvbk9mZnNldCA9IGRhdGEtPnJ1bGVIZWFkZXJS
YW5nZS5zdGFydCArIDk7CisgICAgdW5zaWduZWQgY29uZGl0aW9uTGVuZ3RoID0gZGF0YS0+cnVs
ZUhlYWRlclJhbmdlLmxlbmd0aCgpIC0gOTsKKworICAgIGlmIChpczhCaXRTb3VyY2UoKSkKKyAg
ICAgICAgY29uZGl0aW9uVGV4dCA9IFN0cmluZyhtX2RhdGFTdGFydDguZ2V0KCkgKyBjb25kaXRp
b25PZmZzZXQsIGNvbmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgZWxzZQor
ICAgICAgICBjb25kaXRpb25UZXh0ID0gU3RyaW5nKG1fZGF0YVN0YXJ0MTYuZ2V0KCkgKyBjb25k
aXRpb25PZmZzZXQsIGNvbmRpdGlvbkxlbmd0aCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICBS
ZWZQdHI8U3R5bGVSdWxlU3VwcG9ydHM+IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBy
dWxlID0gU3R5bGVSdWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25kaXRpb25J
c1N1cHBvcnRlZCwgKnJ1bGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlS
dWxlczsKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZVN1cHBvcnRzOjpjcmVhdGUoY29uZGl0aW9u
VGV4dCwgY29uZGl0aW9uSXNTdXBwb3J0ZWQsIGVtcHR5UnVsZXMpOworICAgIH0KKworICAgIHBy
b2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKworICAgIHJldHVybiBy
dWxlLnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU3VwcG9ydHNS
dWxlSGVhZGVyU3RhcnQoKQoreworICAgIGlmICghbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2spCisg
ICAgICAgIG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291
cmNlRGF0YUxpc3Q+KCk7CisKKyAgICBhdXRvIGRhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3Jl
YXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVVBQT1JUU19SVUxFKTsKKyAgICBkYXRhLT5ydWxlSGVh
ZGVyUmFuZ2Uuc3RhcnQgPSB0b2tlblN0YXJ0T2Zmc2V0KCk7CisgICAgbV9zdXBwb3J0c1J1bGVE
YXRhU3RhY2stPmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKK30KKwordm9pZCBDU1NQYXJzZXI6Om1h
cmtTdXBwb3J0c1J1bGVIZWFkZXJFbmQoKQoreworICAgIEFTU0VSVChtX3N1cHBvcnRzUnVsZURh
dGFTdGFjayAmJiAhbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisKKyAgICBp
ZiAoaXM4Qml0U291cmNlKCkpCisgICAgICAgIG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrLT5sYXN0
KCktPnJ1bGVIZWFkZXJSYW5nZS5lbmQgPSB0b2tlblN0YXJ0PExDaGFyPigpIC0gbV9kYXRhU3Rh
cnQ4LmdldCgpOworICAgIGVsc2UKKyAgICAgICAgbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmxh
c3QoKS0+cnVsZUhlYWRlclJhbmdlLmVuZCA9IHRva2VuU3RhcnQ8VUNoYXI+KCkgLSBtX2RhdGFT
dGFydDE2LmdldCgpOworfQorCitSZWY8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9w
U3VwcG9ydHNSdWxlRGF0YSgpCit7CisgICAgQVNTRVJUKG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNr
ICYmICFtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV9z
dXBwb3J0c1J1bGVEYXRhU3RhY2stPnRha2VMYXN0KCk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpw
cm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIWlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1hcmtSdWxlQm9k
eUVuZCgpOworICAgIFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSA9ICpwb3BSdWxlRGF0YSgp
OworICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMocnVsZSk7CisgICAgYWRkTmV3UnVsZVRv
U291cmNlVHJlZShXVEZNb3ZlKHJ1bGUpKTsKK30KKwordm9pZCBDU1NQYXJzZXI6OmFkZE5ld1J1
bGVUb1NvdXJjZVRyZWUoUmVmPENTU1J1bGVTb3VyY2VEYXRhPiYmIHJ1bGUpCit7CisgICAgLy8g
UHJlY29uZGl0aW9uOiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4KKyAgICBpZiAoIW1fcnVs
ZVNvdXJjZURhdGFSZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9jdXJyZW50UnVs
ZURhdGFTdGFjay0+aXNFbXB0eSgpKQorICAgICAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5h
cHBlbmQoV1RGTW92ZShydWxlKSk7CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZSkpOworfQorCitS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQoreworICAg
IGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAgbV9j
dXJyZW50UnVsZURhdGEgPSBudWxscHRyOworICAgIHJldHVybiBtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrLT50YWtlTGFzdCgpOworfQorCit2b2lkIENTU1BhcnNlcjo6c3ludGF4RXJyb3IoY29uc3Qg
TG9jYXRpb24mIGxvY2F0aW9uLCBTeW50YXhFcnJvclR5cGUgZXJyb3IpCit7CisgICAgaWYgKCFp
c0xvZ2dpbmdFcnJvcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIFByb3BlcnR5RGVjbGFyYXRp
b25FcnJvcjoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJJbnZhbGlkIENTUyBwcm9w
ZXJ0eSBkZWNsYXJhdGlvbiBhdDogIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVW5leHBlY3RlZCBDU1MgdG9rZW46ICIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobG9jYXRpb24udG9rZW4uaXM4Qml0KCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxvY2F0aW9uLnRva2VuLmNoYXJhY3RlcnM4KCksIGxv
Y2F0aW9uLnRva2VuLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGxvY2F0aW9uLnRva2VuLmNoYXJhY3RlcnMxNigpLCBsb2NhdGlvbi50b2tlbi5sZW5ndGgoKSk7
CisKKyAgICBsb2dFcnJvcihidWlsZGVyLnRvU3RyaW5nKCksIGxvY2F0aW9uLmxpbmVOdW1iZXIs
IGxvY2F0aW9uLmNvbHVtbk51bWJlcik7CisKKyAgICBtX2lnbm9yZUVycm9yc0luRGVjbGFyYXRp
b24gPSB0cnVlOworfQorCitib29sIENTU1BhcnNlcjo6aXNMb2dnaW5nRXJyb3JzKCkKK3sKKyAg
ICByZXR1cm4gbV9sb2dFcnJvcnMgJiYgIW1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbjsKK30K
Kwordm9pZCBDU1NQYXJzZXI6OmxvZ0Vycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpCit7CisgICAgUGFnZUNvbnNvbGVDbGllbnQmIGNv
bnNvbGUgPSBtX3N0eWxlU2hlZXQtPnNpbmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgpLT5jb25z
b2xlKCk7CisgICAgY29uc29sZS5hZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywgTWVzc2Fn
ZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlLCBtX3N0eWxlU2hlZXQtPmJhc2VVUkwoKS5zdHJpbmco
KSwgbGluZU51bWJlciArIDEsIGNvbHVtbk51bWJlciArIDEpOworfQorCitSZWY8U3R5bGVSdWxl
S2V5ZnJhbWVzPiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+IGtleWZy
YW1lcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFy
YXRpb25zID0gZmFsc2U7CisgICAgUmVmPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9IFN0eWxl
UnVsZUtleWZyYW1lczo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvJiBrZXlGcmFtZSA6ICprZXlm
cmFtZXMpCisgICAgICAgIHJ1bGUtPnBhcnNlckFwcGVuZEtleWZyYW1lKFdURk1vdmUoa2V5RnJh
bWUpKTsKKyAgICBydWxlLT5zZXROYW1lKG5hbWUpOworICAgIHByb2Nlc3NBbmRBZGROZXdSdWxl
VG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcnVsZTsKK30KKworUmVmUHRyPFN0
eWxlUnVsZT4gQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiBzZWxlY3RvcnMpCit7CisgICAgUmVmUHRyPFN0eWxlUnVs
ZT4gcnVsZTsKKyAgICBpZiAoc2VsZWN0b3JzKSB7CisgICAgICAgIG1fYWxsb3dJbXBvcnRSdWxl
cyA9IGZhbHNlOworICAgICAgICBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7
CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxlY3RvckxpbmVOdW1i
ZXIsIGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKKyAgICAgICAgcnVsZS0+cGFyc2VyQWRvcHRT
ZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKKyAgICAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVU
b1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgIH0gZWxzZQorICAgICAgICBwb3BSdWxlRGF0YSgp
OworICAgIGNsZWFyUHJvcGVydGllcygpOworICAgIHJldHVybiBydWxlOworfQorCitSZWZQdHI8
U3R5bGVSdWxlRm9udEZhY2U+IENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKK3sKKyAg
ICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFs
c2U7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IG1fcGFyc2VkUHJvcGVydGllcykgeworICAg
ICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxD
U1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpwcm9wZXJ0eS52YWx1ZSgpKS5sZW5ndGgoKSAhPSAxKSkgeworICAgICAgICAgICAgLy8gVW5s
aWtlIGZvbnQtZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250
LWZhY2UgcnVsZQorICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4
YWN0bHkgb25lIGZhbWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCisgICAgICAgICAgICAvLyBo
YXZlICdpbml0aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KKyAg
ICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWZvbnRzLyNmb250
LWZhbWlseS1kZXNjCisgICAgICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKKyAgICAgICAgICAg
IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVGb250RmFjZTo6Y3JlYXRlKGNyZWF0ZVN0
eWxlUHJvcGVydGllcygpKTsKKyAgICBjbGVhclByb3BlcnRpZXMoKTsKKyAgICBwcm9jZXNzQW5k
QWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIFdURk1vdmUocnVs
ZSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQoreworICAgIGlmICghbV9zdHlsZVNo
ZWV0IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gZmFsc2U7CisgICAgbV9zdHlsZVNoZWV0LT5wYXJzZXJB
ZGROYW1lc3BhY2UocHJlZml4LCB1cmkpOworICAgIGlmIChwcmVmaXguaXNFbXB0eSgpICYmICF1
cmkuaXNOdWxsKCkpCisgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKK30KKworUXVh
bGlmaWVkTmFtZSBDU1NQYXJzZXI6OmRldGVybWluZU5hbWVJbk5hbWVzcGFjZShjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCit7CisgICAg
aWYgKHByZWZpeC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQv
YXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCisgICAgaWYgKHBy
ZWZpeC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKGVtcHR5QXRvbSwg
bG9jYWxOYW1lLCBlbXB0eUF0b20pOyAvLyBFbXB0eSBuYW1lc3BhY2UuCisgICAgaWYgKHByZWZp
eCA9PSBzdGFyQXRvbSkKKyAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2Nh
bE5hbWUsIHN0YXJBdG9tKTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KKworICAgIGlm
ICghbV9zdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxv
Y2FsTmFtZSwgbV9kZWZhdWx0TmFtZXNwYWNlKTsKKyAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShw
cmVmaXgsIGxvY2FsTmFtZSwgbV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2UocHJlZml4
KSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhOYW1lc3BhY2VJ
Zk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYgc3BlY2lmaWVycykKK3sKKyAgICBpZiAobV9kZWZh
dWx0TmFtZXNwYWNlICE9IHN0YXJBdG9tIHx8IHNwZWNpZmllcnMuaXNDdXN0b21Qc2V1ZG9FbGVt
ZW50KCkpIHsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBlbGVtZW50TmFtZShudWxsQXRvbSwgc3Rh
ckF0b20sIG1fZGVmYXVsdE5hbWVzcGFjZSk7CisgICAgICAgIHJld3JpdGVTcGVjaWZpZXJzV2l0
aEVsZW1lbnROYW1lKGVsZW1lbnROYW1lLCBzcGVjaWZpZXJzLCAvKnRhZ0lzRm9yTmFtZXNwYWNl
UnVsZSovdHJ1ZSk7CisgICAgfQorfQorCit2b2lkIENTU1BhcnNlcjo6cmV3cml0ZVNwZWNpZmll
cnNXaXRoRWxlbWVudE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJiBzcGVjaWZp
ZXJzKQoreworICAgIFF1YWxpZmllZE5hbWUgdGFnKGRldGVybWluZU5hbWVJbk5hbWVzcGFjZShu
YW1lc3BhY2VQcmVmaXgsIGVsZW1lbnROYW1lKSk7CisgICAgcmV3cml0ZVNwZWNpZmllcnNXaXRo
RWxlbWVudE5hbWUodGFnLCBzcGVjaWZpZXJzLCBmYWxzZSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2Vy
OjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWcsIENTU1BhcnNlclNlbGVjdG9yJiBzcGVjaWZpZXJzLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNl
UnVsZSkKK3sKKyAgICBpZiAoIXNwZWNpZmllcnMuaXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKHRhZyA9PSBhbnlRTmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoIXNwZWNpZmllcnMuaXNQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSkKKyAgICAg
ICAgICAgIHNwZWNpZmllcnMucHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgdGFnSXNGb3JOYW1lc3Bh
Y2VSdWxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTU1BhcnNlclNlbGVjdG9y
KiBsYXN0U2hhZG93RGVzY2VuZGFudCA9ICZzcGVjaWZpZXJzOworICAgIENTU1BhcnNlclNlbGVj
dG9yKiBoaXN0b3J5ID0gJnNwZWNpZmllcnM7CisgICAgd2hpbGUgKGhpc3RvcnktPnRhZ0hpc3Rv
cnkoKSkgeworICAgICAgICBoaXN0b3J5ID0gaGlzdG9yeS0+dGFnSGlzdG9yeSgpOworICAgICAg
ICBpZiAoaGlzdG9yeS0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkgfHwgaGlzdG9yeS0+aGFzU2hh
ZG93RGVzY2VuZGFudCgpKQorICAgICAgICAgICAgbGFzdFNoYWRvd0Rlc2NlbmRhbnQgPSBoaXN0
b3J5OworICAgIH0KKworICAgIGlmIChsYXN0U2hhZG93RGVzY2VuZGFudC0+dGFnSGlzdG9yeSgp
KSB7CisgICAgICAgIGlmICh0YWcgIT0gYW55UU5hbWUoKSkKKyAgICAgICAgICAgIGxhc3RTaGFk
b3dEZXNjZW5kYW50LT50YWdIaXN0b3J5KCktPnByZXBlbmRUYWdTZWxlY3Rvcih0YWcsIHRhZ0lz
Rm9yTmFtZXNwYWNlUnVsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGb3Ig
c2hhZG93LUlEIHBzZXVkby1lbGVtZW50cyB0byBiZSBjb3JyZWN0bHkgbWF0Y2hlZCwgdGhlIFNo
YWRvd0Rlc2NlbmRhbnQgY29tYmluYXRvciBoYXMgdG8gYmUgdXNlZC4KKyAgICAvLyBXZSB0aGVy
ZWZvcmUgY3JlYXRlIGEgbmV3IFNlbGVjdG9yIHdpdGggdGhhdCBjb21iaW5hdG9yIGhlcmUgaW4g
YW55IGNhc2UsIGV2ZW4gaWYgbWF0Y2hpbmcgYW55IChob3N0KSBlbGVtZW50IGluIGFueSBuYW1l
c3BhY2UgKGkuZS4gJyonKS4KKyAgICBsYXN0U2hhZG93RGVzY2VuZGFudC0+c2V0VGFnSGlzdG9y
eShzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPih0YWcpKTsKKyAgICBsYXN0U2hh
ZG93RGVzY2VuZGFudC0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1BhcnNlcjo6cmV3
cml0ZVNwZWNpZmllcnMoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzcGVjaWZp
ZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5ld1NwZWNpZmllcikKK3sK
KyAgICBpZiAobmV3U3BlY2lmaWVyLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBuZXdTcGVj
aWZpZXItPmlzUHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgLy8gVW5rbm93
biBwc2V1ZG8gZWxlbWVudCBhbHdheXMgZ29lcyBhdCB0aGUgdG9wIG9mIHNlbGVjdG9yIGNoYWlu
LgorICAgICAgICBuZXdTcGVjaWZpZXItPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlNo
YWRvd0Rlc2NlbmRhbnQsIFdURk1vdmUoc3BlY2lmaWVycykpOworICAgICAgICByZXR1cm4gbmV3
U3BlY2lmaWVyOworICAgIH0KKyAgICBpZiAoc3BlY2lmaWVycy0+aXNDdXN0b21Qc2V1ZG9FbGVt
ZW50KCkpIHsKKyAgICAgICAgLy8gU3BlY2lmaWVycyBmb3IgdW5rbm93biBwc2V1ZG8gZWxlbWVu
dCBnbyByaWdodCBiZWhpbmQgaXQgaW4gdGhlIGNoYWluLgorICAgICAgICBzcGVjaWZpZXJzLT5p
bnNlcnRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvciwgV1RGTW92ZShuZXdTcGVj
aWZpZXIpLCBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCk7CisgICAgICAgIHJldHVybiBz
cGVjaWZpZXJzOworICAgIH0KKyAgICBzcGVjaWZpZXJzLT5hcHBlbmRUYWdIaXN0b3J5KENTU1Nl
bGVjdG9yOjpTdWJTZWxlY3RvciwgV1RGTW92ZShuZXdTcGVjaWZpZXIpKTsKKyAgICByZXR1cm4g
c3BlY2lmaWVyczsKK30KKworUmVmUHRyPFN0eWxlUnVsZVBhZ2U+IENTU1BhcnNlcjo6Y3JlYXRl
UGFnZVJ1bGUoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3Ip
Cit7CisgICAgLy8gRklYTUU6IE1hcmdpbiBhdC1ydWxlcyBhcmUgaWdub3JlZC4KKyAgICBtX2Fs
bG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Cisg
ICAgaWYgKHBhZ2VTZWxlY3RvcikgeworICAgICAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVQYWdl
OjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkpOworICAgICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4gc2VsZWN0b3JWZWN0b3I7CisgICAgICAgIHNl
bGVjdG9yVmVjdG9yLmFwcGVuZChXVEZNb3ZlKHBhZ2VTZWxlY3RvcikpOworICAgICAgICBydWxl
LT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKKyAgICAgICAgcHJv
Y2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgICAgICBjbGVhclBy
b3BlcnRpZXMoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocnVsZSk7CisgICAgfQorCisgICAg
cG9wUnVsZURhdGEoKTsKKyAgICBjbGVhclByb3BlcnRpZXMoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+Pj4gQ1NTUGFyc2VyOjpjcmVhdGVTZWxlY3RvclZlY3RvcigpCit7CisgICAgaWYg
KG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcikgeworICAgICAgICBtX3JlY3ljbGVkU2VsZWN0b3JW
ZWN0b3ItPnNocmluaygwKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9yZWN5Y2xlZFNlbGVj
dG9yVmVjdG9yKTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PigpOworfQorCit2b2lkIENTU1BhcnNl
cjo6cmVjeWNsZVNlbGVjdG9yVmVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IHZlY3RvcikKK3sKKyAgICBpZiAodmVjdG9yICYm
ICFtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3IpCisgICAgICAgIG1fcmVjeWNsZWRTZWxlY3RvclZl
Y3RvciA9IFdURk1vdmUodmVjdG9yKTsKK30KKworUmVmUHRyPFN0eWxlUnVsZVJlZ2lvbj4gQ1NT
UGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+PiogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBpZiAo
IXJlZ2lvblNlbGVjdG9yIHx8ICFydWxlcykgeworICAgICAgICBwb3BSdWxlRGF0YSgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBt
X2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisKKyAgICBhdXRvIHJlZ2lvblJ1
bGUgPSBTdHlsZVJ1bGVSZWdpb246OmNyZWF0ZShyZWdpb25TZWxlY3RvciwgKnJ1bGVzKTsKKwor
ICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgIGFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWUoQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZVVua25vd24oKSk7CisKKyAgICByZXR1
cm4gV1RGTW92ZShyZWdpb25SdWxlKTsKK30KKwordm9pZCBDU1NQYXJzZXI6OmNyZWF0ZU1hcmdp
bkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSAvKiBtYXJnaW5Cb3ggKi8pCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBtYXJnaW4gYXQtcnVsZSBoZXJlLCB1c2luZzoKKyAgICAv
LyAgICAgICAgLSBtYXJnaW5Cb3g6IG1hcmdpbiBib3gKKyAgICAvLyAgICAgICAgLSBtX3BhcnNl
ZFByb3BlcnRpZXM6IHByb3BlcnRpZXMgYXQgW21fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1h
cmdpbkJveCwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKV0gYXJlIGZvciB0aGlzIGF0LXJ1bGUu
CisgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIGFsc28gdXBkYXRlIHRoZSBhY3Rpb24gZm9yIHBhZ2Ug
c3ltYm9sIGluIENTU0dyYW1tYXIueSBzdWNoIHRoYXQgbWFyZ2luIGF0LXJ1bGUgZGF0YSBpcyBj
bGVhcmVkIGlmIHBhZ2Vfc2VsZWN0b3IgaXMgaW52YWxpZC4KKworICAgIGVuZERlY2xhcmF0aW9u
c0Zvck1hcmdpbkJveCgpOworfQorCit2b2lkIENTU1BhcnNlcjo6c3RhcnREZWNsYXJhdGlvbnNG
b3JNYXJnaW5Cb3goKQoreworICAgIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJv
eCA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjplbmRE
ZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKQoreworICAgIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMo
bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1h
cmdpbkJveCk7CisgICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gaW52
YWxpZFBhcnNlZFByb3BlcnRpZXNDb3VudDsKK30KKworUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENT
U1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWUoQ1NTUGFyc2VyVmFsdWVMaXN0JiBrZXlzKQoreworICAg
IC8vIENyZWF0ZSBhIGtleSBzdHJpbmcgZnJvbSB0aGUgcGFzc2VkIGtleXMKKyAgICBTdHJpbmdC
dWlsZGVyIGtleVN0cmluZzsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBKdXN0IGFzIHBlciB0aGUgY29tbWVudCBiZWxvdywgd2Ug
aWdub3JlIGtleWZyYW1lcyB3aXRoCisgICAgICAgIC8vIGludmFsaWQga2V5IHZhbHVlcyAocGxh
aW4gbnVtYmVycyBvciB1bmtub3duIGlkZW50aWZpZXJzKQorICAgICAgICAvLyBtYXJrZWQgYXMg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOIGR1cmluZyBwYXJzaW5nLgorICAgICAgICBp
ZiAoa2V5cy52YWx1ZUF0KGkpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9X
TikgeworICAgICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChrZXlzLnZhbHVlQXQoaSktPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICBmbG9hdCBrZXkg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oa2V5cy52YWx1ZUF0KGkpLT5mVmFsdWUpOworICAgICAgICBp
ZiAoa2V5IDwgMCB8fCBrZXkgPiAxMDApIHsKKyAgICAgICAgICAgIC8vIEFzIHBlciBodHRwOi8v
d3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI2tleWZyYW1lcywKKyAgICAgICAgICAgIC8v
ICJJZiBhIGtleWZyYW1lIHNlbGVjdG9yIHNwZWNpZmllcyBuZWdhdGl2ZSBwZXJjZW50YWdlIHZh
bHVlcworICAgICAgICAgICAgLy8gb3IgdmFsdWVzIGhpZ2hlciB0aGFuIDEwMCUsIHRoZW4gdGhl
IGtleWZyYW1lIHdpbGwgYmUgaWdub3JlZC4iCisgICAgICAgICAgICBjbGVhclByb3BlcnRpZXMo
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChp
ICE9IDApCisgICAgICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCcsJyk7CisgICAgICAgIGtleVN0
cmluZy5hcHBlbmROdW1iZXIoa2V5KTsKKyAgICAgICAga2V5U3RyaW5nLmFwcGVuZCgnJScpOwor
ICAgIH0KKworICAgIGF1dG8ga2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoY3JlYXRl
U3R5bGVQcm9wZXJ0aWVzKCkpOworICAgIGtleWZyYW1lLT5zZXRLZXlUZXh0KGtleVN0cmluZy50
b1N0cmluZygpKTsKKworICAgIGNsZWFyUHJvcGVydGllcygpOworCisgICAgcmV0dXJuIFdURk1v
dmUoa2V5ZnJhbWUpOworfQorCit2b2lkIENTU1BhcnNlcjo6aW52YWxpZEJsb2NrSGl0KCkKK3sK
KyAgICBpZiAobV9zdHlsZVNoZWV0ICYmICFtX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENTU1J1bGUp
CisgICAgICAgIG1fc3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVy
KGZhbHNlKTsKK30KKwordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQ
b3NpdGlvbigpCit7CisgICAgbV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyID0gbV9saW5lTnVtYmVy
OworfQorCit2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1ZXJ5U2V0
JiBtZWRpYSkKK3sKKyAgICBtZWRpYS5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXhV
bnBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgQ1NTUnVs
ZVNvdXJjZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGF1dG8mIHByb3BlcnR5RGF0YSA9IHJ1bGVE
YXRhLnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOworICAgIHVuc2lnbmVkIHNpemUgPSBw
cm9wZXJ0eURhdGEuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLnJ1bGVCb2R5UmFuZ2Uuc3RhcnQ7Cisg
ICAgYXV0byogbmV4dERhdGEgPSAmcHJvcGVydHlEYXRhWzBdOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byogY3VycmVudERhdGEgPSBuZXh0
RGF0YTsKKyAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmcHJvcGVydHlEYXRhW2kg
KyAxXSA6IDA7CisKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAgJiYg
Y2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09ICc7
JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5RW5k
SW5TdHlsZVNoZWV0OworICAgICAgICBpZiAoIW5leHREYXRhKQorICAgICAgICAgICAgcHJvcGVy
dHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS5ydWxlQm9keVJhbmdlLmVuZCAtIDE7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFy
dCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7CisKKyAgICAgICAgd2hpbGUgKGlzSFRNTFNw
YWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdKSkKKyAgICAgICAgICAgIC0t
cHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7CisKKyAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAg
ICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5
bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJh
Y3Rlci4KKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlF
bmQpIHsKKyAgICAgICAgICAgIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVu
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0
YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3Ro
KCk7CisgICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5
RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0g
JzonKQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQp
CisgICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0
IHRoZSAnOicuCisgICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFy
dEluU3R5bGVTaGVldF0pKQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVl
dDsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20g
dGhlIHByb3BlcnR5IHZhbHVlLgorICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gU3Ry
aW5nKGNoYXJhY3RlcnMgKyB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5
bGVTaGVldCAtIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBDU1NQYXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURh
dGEmIHJ1bGVEYXRhKQoreworICAgIGlmICghcnVsZURhdGEuc3R5bGVTb3VyY2VEYXRhKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaXM4Qml0U291cmNlKCkpIHsKKyAgICAgICAgZml4VW5w
YXJzZWRQcm9wZXJ0aWVzPExDaGFyPihtX2RhdGFTdGFydDguZ2V0KCkgKyBtX3BhcnNlZFRleHRQ
cmVmaXhMZW5ndGgsIHJ1bGVEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZp
eFVucGFyc2VkUHJvcGVydGllczxVQ2hhcj4obV9kYXRhU3RhcnQxNi5nZXQoKSArIG1fcGFyc2Vk
VGV4dFByZWZpeExlbmd0aCwgcnVsZURhdGEpOworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya1J1
bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSBydWxlVHlwZSkKK3sKKyAgICBp
ZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
UG9wIG9mZiBkYXRhIGZvciBhIHByZXZpb3VzIGludmFsaWQgcnVsZS4KKyAgICBpZiAobV9jdXJy
ZW50UnVsZURhdGEpCisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnJlbW92ZUxhc3Qo
KTsKKworICAgIGF1dG8gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVsZVR5cGUp
OworICAgIGRhdGEtPnJ1bGVIZWFkZXJSYW5nZS5zdGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsK
KyAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IGRhdGEuY29weVJlZigpOworICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFJ1bGVIZWFkZXJF
bmQoY29uc3QgQ2hhcmFjdGVyVHlwZSogZGF0YVN0YXJ0KQoreworICAgIENoYXJhY3RlclR5cGUq
IGxpc3RFbmQgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7CisgICAgd2hpbGUgKGxpc3RF
bmQgPiBkYXRhU3RhcnQgKyAxKSB7CisgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqKGxpc3RFbmQg
LSAxKSkpCisgICAgICAgICAgICAtLWxpc3RFbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVs
ZUhlYWRlclJhbmdlLmVuZCA9IGxpc3RFbmQgLSBkYXRhU3RhcnQ7Cit9CisKK3ZvaWQgQ1NTUGFy
c2VyOjptYXJrUnVsZUhlYWRlckVuZCgpCit7CisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VE
YXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3Rh
Y2stPmlzRW1wdHkoKSk7CisKKyAgICBpZiAoaXM4Qml0U291cmNlKCkpCisgICAgICAgIHNldFJ1
bGVIZWFkZXJFbmQ8TENoYXI+KG1fZGF0YVN0YXJ0OC5nZXQoKSk7CisgICAgZWxzZQorICAgICAg
ICBzZXRSdWxlSGVhZGVyRW5kPFVDaGFyPihtX2RhdGFTdGFydDE2LmdldCgpKTsKK30KKwordm9p
ZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3RvclN0YXJ0KCkKK3sKKyAgICBpZiAoIWlzRXh0cmFjdGlu
Z1NvdXJjZURhdGEoKSB8fCBtX25lc3RlZFNlbGVjdG9yTGV2ZWwpCisgICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoIW1fc2VsZWN0b3JSYW5nZS5lbmQpOworCisgICAgbV9zZWxlY3RvclJhbmdl
LnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya1Nl
bGVjdG9yRW5kKCkKK3sKKyAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSB8fCBtX25l
c3RlZFNlbGVjdG9yTGV2ZWwpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fc2VsZWN0
b3JSYW5nZS5lbmQpOworICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5zaXplKCkp
OworCisgICAgbV9zZWxlY3RvclJhbmdlLmVuZCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKKyAgICBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnNlbGVjdG9yUmFuZ2VzLmFwcGVuZChtX3Nl
bGVjdG9yUmFuZ2UpOworICAgIG1fc2VsZWN0b3JSYW5nZS5zdGFydCA9IDA7CisgICAgbV9zZWxl
Y3RvclJhbmdlLmVuZCA9IDA7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFy
dCgpCit7CisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IG51bGxwdHI7CisgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdG9rZW5TdGFydE9mZnNldCgpOworICAgIGlmICh0b2tlblN0YXJ0Q2hhcigpID09ICd7JykK
KyAgICAgICAgKytvZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgor
ICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBtX2N1
cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7
Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQoreworICAgIC8vIFByZWNv
bmRpdGlvbjogKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdG9rZW5TdGFydE9mZnNldCgpOworICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFj
ay0+aXNFbXB0eSgpKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVC
b2R5UmFuZ2UuZW5kID0gb2Zmc2V0OworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5
U3RhcnQoKQoreworICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IGZhbHNlOworICAg
IGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVsZURhdGFT
dGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cHJvcGVydHlSYW5nZS5zdGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKK30KKwordm9pZCBDU1NQ
YXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9w
ZXJ0eVBhcnNlZCkKK3sKKyAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkgfHwg
IW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+c3R5bGVTb3VyY2VEYXRhKQorICAgICAg
ICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0YXJ0T2Zmc2V0KCk7Cisg
ICAgaWYgKHRva2VuU3RhcnRDaGFyKCkgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRv
IHRoZSBwcm9wZXJ0eSB0ZXh0LgorICAgICAgICArK29mZnNldDsKKyAgICBtX3Byb3BlcnR5UmFu
Z2UuZW5kID0gb2Zmc2V0OworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICYmICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdo
ZW4gdGhlIHN0eWxlIGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFydCA8IGVuZCk7CisgICAgICAgIFN0cmlu
ZyBwcm9wZXJ0eVN0cmluZzsKKyAgICAgICAgaWYgKGlzOEJpdFNvdXJjZSgpKQorICAgICAgICAg
ICAgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQ4LmdldCgpICsgc3RhcnQsIGVu
ZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhU3RhcnQxNi5nZXQoKSArIHN0YXJ0LCBlbmQg
LSBzdGFydCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIGlmIChwcm9wZXJ0eVN0cmluZy5l
bmRzV2l0aCgnOycpKQorICAgICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eVN0cmlu
Zy5sZWZ0KHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIHNpemVfdCBjb2xv
bkluZGV4ID0gcHJvcGVydHlTdHJpbmcuZmluZCgnOicpOworICAgICAgICBBU1NFUlQoY29sb25J
bmRleCAhPSBub3RGb3VuZCk7CisKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmlu
Zy5sZWZ0KGNvbG9uSW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBTdHJpbmcgdmFs
dWUgPSBwcm9wZXJ0eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3Ry
aW5nLmxlbmd0aCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgLy8gVGhlIHByb3BlcnR5
IHJhbmdlIGlzIHJlbGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQuCisgICAg
ICAgIFNvdXJjZVJhbmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJyZW50UnVsZURhdGFTdGFj
ay0+bGFzdCgpLT5ydWxlQm9keVJhbmdlOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LT5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKKyAgICAgICAg
ICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwg
aXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSB0b3BSdWxlQm9keVJhbmdlLnN0
YXJ0LCBlbmQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOworICAgIH0KKyAgICByZXNldFBy
b3BlcnR5UmFuZ2UoKTsKK30KKworI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCitS
ZWY8U3R5bGVSdWxlVmlld3BvcnQ+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKK3sK
KyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0g
ZmFsc2U7CisKKyAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRlKGNyZWF0
ZVN0eWxlUHJvcGVydGllcygpKTsKKyAgICBjbGVhclByb3BlcnRpZXMoKTsKKworICAgIHByb2Nl
c3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKworICAgIHJldHVybiBydWxl
OworfQorCitib29sIENTU1BhcnNlcjo6cGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKK3sKKyAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKKworICAgIENT
U1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOworICAgIGJvb2wg
dmFsaWRQcmltaXRpdmUgPSBmYWxzZTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1pbldpZHRoOiAvLyBhdXRvIHwgZGV2aWNlLXdpZHRoIHwgZGV2aWNlLWhl
aWdodCB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdp
ZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eU1heEhlaWdodDoKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NW
YWx1ZURldmljZVdpZHRoIHx8IGlkID09IENTU1ZhbHVlRGV2aWNlSGVpZ2h0KQorICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlXaWR0aDogLy8gc2hvcnRoYW5kCisgICAgICAgIHJldHVybiBwYXJzZVZpZXdw
b3J0U2hvcnRoYW5kKHByb3BJZCwgQ1NTUHJvcGVydHlNaW5XaWR0aCwgQ1NTUHJvcGVydHlNYXhX
aWR0aCwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgorICAgICAgICBy
ZXR1cm4gcGFyc2VWaWV3cG9ydFNob3J0aGFuZChwcm9wSWQsIENTU1Byb3BlcnR5TWluSGVpZ2h0
LCBDU1NQcm9wZXJ0eU1heEhlaWdodCwgaW1wb3J0YW50KTsKKyAgICBjYXNlIENTU1Byb3BlcnR5
TWluWm9vbTogLy8gYXV0byB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1heFpvb206CisgICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206CisgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVVzZXJab29tOiAvLyB6b29t
IHwgZml4ZWQKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlWm9vbSB8fCBpZCA9PSBDU1NWYWx1
ZUZpeGVkKQorICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENTU1Byb3BlcnR5T3JpZW50YXRpb246IC8vIGF1dG8gfCBwb3J0cmFpdCB8
IGxhbmRzY2FwZQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1Zh
bHVlUG9ydHJhaXQgfHwgaWQgPT0gQ1NTVmFsdWVMYW5kc2NhcGUpCisgICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKyAgICBpZiAodmFsaWRQcmltaXRp
dmUpIHsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgfQor
CisgICAgaWYgKCFwYXJzZWRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgIWluU2hvcnRoYW5kKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFsdWUucmVsZWFzZU5v
bk51bGwoKSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmlld3BvcnRTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3Bl
cnR5SUQgZmlyc3QsIENTU1Byb3BlcnR5SUQgc2Vjb25kLCBib29sIGltcG9ydGFudCkKK3sKKyAg
ICB1bnNpZ25lZCBudW1WYWx1ZXMgPSBtX3ZhbHVlTGlzdC0+c2l6ZSgpOworCisgICAgaWYgKG51
bVZhbHVlcyA+IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFNjb3Bl
IHNjb3BlKHRoaXMsIHByb3BJZCk7CisKKyAgICBpZiAoIXBhcnNlVmlld3BvcnRQcm9wZXJ0eShm
aXJzdCwgaW1wb3J0YW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYganVz
dCBvbmUgdmFsdWUgaXMgc3VwcGxpZWQsIHRoZSBzZWNvbmQgdmFsdWUKKyAgICAvLyBpcyBpbXBs
aWNpdGx5IGluaXRpYWxpemVkIHdpdGggdGhlIGZpcnN0IHZhbHVlLgorICAgIGlmIChudW1WYWx1
ZXMgPT0gMSkKKyAgICAgICAgbV92YWx1ZUxpc3QtPnByZXZpb3VzKCk7CisKKyAgICByZXR1cm4g
cGFyc2VWaWV3cG9ydFByb3BlcnR5KHNlY29uZCwgaW1wb3J0YW50KTsKK30KKyNlbmRpZgorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBDU1NQcm9wZXJ0eUlEIGNz
c1Byb3BlcnR5SUQoY29uc3QgQ2hhcmFjdGVyVHlwZSogcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgY2hhciBidWZmZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoICsgMSAr
IDFdOyAvLyAxIHRvIHR1cm4gImFwcGxlIi8ia2h0bWwiIGludG8gIndlYmtpdCIsIDEgZm9yIG51
bGwgY2hhcmFjdGVyCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIENoYXJhY3RlclR5cGUgYyA9IHByb3BlcnR5TmFtZVtpXTsKKyAgICAgICAg
aWYgKGMgPT0gMCB8fCBjID49IDB4N0YpCisgICAgICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJ
bnZhbGlkOyAvLyBpbGxlZ2FsIGNoYXJhY3RlcgorICAgICAgICBidWZmZXJbaV0gPSB0b0FTQ0lJ
TG93ZXIoYyk7CisgICAgfQorICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKworICAgIGNvbnN0
IGNoYXIqIG5hbWUgPSBidWZmZXI7CisgICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsKKyNpZiBF
TkFCTEUoTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpCisgICAgICAgIC8vIElmIHRoZSBwcmVm
aXggaXMgLWFwcGxlLSBvciAta2h0bWwtLCBjaGFuZ2UgaXQgdG8gLXdlYmtpdC0uCisgICAgICAg
IC8vIFRoaXMgbWFrZXMgdGhlIHN0cmluZyBvbmUgY2hhcmFjdGVyIGxvbmdlci4KKyAgICAgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGVnYWN5Q1NTVmVu
ZG9yUHJlZml4ZXNFbmFibGVkKCkKKyAgICAgICAgICAgICYmIChoYXNQcmVmaXgoYnVmZmVyLCBs
ZW5ndGgsICItYXBwbGUtIikgfHwgaGFzUHJlZml4KGJ1ZmZlciwgbGVuZ3RoLCAiLWtodG1sLSIp
KSkgeworICAgICAgICAgICAgbWVtbW92ZShidWZmZXIgKyA3LCBidWZmZXIgKyA2LCBsZW5ndGgg
KyAxIC0gNik7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCAiLXdlYmtpdCIsIDcpOworICAg
ICAgICAgICAgKytsZW5ndGg7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgY3NzUHJvcGVydHlOYW1lSU9TQWxpYXNpbmcoYnVmZmVyLCBuYW1lLCBsZW5ndGgp
OworI2VuZGlmCisgICAgfQorCisgICAgY29uc3QgUHJvcGVydHkqIGhhc2hUYWJsZUVudHJ5ID0g
ZmluZFByb3BlcnR5KG5hbWUsIGxlbmd0aCk7CisgICAgcmV0dXJuIGhhc2hUYWJsZUVudHJ5ID8g
c3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaGFzaFRhYmxlRW50cnktPmlkKSA6IENTU1Byb3Bl
cnR5SW52YWxpZDsKK30KKworQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOworICAg
IGlmIChsZW5ndGggPiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBD
U1NQcm9wZXJ0eUludmFsaWQ7CisgICAgCisgICAgcmV0dXJuIHN0cmluZy5pczhCaXQoKSA/IGNz
c1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NQcm9wZXJ0eUlE
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKK30KKworQ1NTUHJvcGVydHlJRCBjc3NQ
cm9wZXJ0eUlEKGNvbnN0IENTU1BhcnNlclN0cmluZyYgc3RyaW5nKQoreworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKworICAgIGlmICghbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOworICAgIGlmIChsZW5ndGggPiBtYXhDU1NQcm9wZXJ0
eU5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7CisgICAgCisg
ICAgcmV0dXJuIHN0cmluZy5pczhCaXQoKSA/IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIGxlbmd0aCkgOiBjc3NQcm9wZXJ0eUlEKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKTsKK30KKworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgY3NzUHJvcGVydHlOYW1lSU9TQWxp
YXNpbmcoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVydHlOYW1l
QWxpYXMsIHVuc2lnbmVkJiBuZXdMZW5ndGgpCit7CisgICAgaWYgKCFzdHJjbXAocHJvcGVydHlO
YW1lLCAiLXdlYmtpdC1oeXBoZW5hdGUtbG9jYWxlIikpIHsKKyAgICAgICAgLy8gV29ya2VkIGlu
IGlPUyA0LjIuCisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHdlYmtpdExvY2FsZVtdID0gIi13
ZWJraXQtbG9jYWxlIjsKKyAgICAgICAgcHJvcGVydHlOYW1lQWxpYXMgPSB3ZWJraXRMb2NhbGU7
CisgICAgICAgIG5ld0xlbmd0aCA9IHN0cmxlbih3ZWJraXRMb2NhbGUpOworICAgIH0KK30KKyNl
bmRpZgorCitzdGF0aWMgYm9vbCBpc0FwcGxlTGVnYWN5Q3NzVmFsdWVLZXl3b3JkKGNvbnN0IGNo
YXIqIHZhbHVlS2V5d29yZCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyIGFwcGxlUHJlZml4W10gPSAiLWFwcGxlLSI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgYXBw
bGVTeXN0ZW1QcmVmaXhbXSA9ICItYXBwbGUtc3lzdGVtIjsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogYXBwbGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlID0gZ2V0VmFsdWVOYW1lKENTU1Zh
bHVlQXBwbGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0QWN0aXZlKTsKKworICAgIHJldHVybiBoYXNQ
cmVmaXgodmFsdWVLZXl3b3JkLCBsZW5ndGgsIGFwcGxlUHJlZml4KQorICAgICAgICAmJiAhaGFz
UHJlZml4KHZhbHVlS2V5d29yZCwgbGVuZ3RoLCBhcHBsZVN5c3RlbVByZWZpeCkKKyAgICAgICAg
JiYgIVdURjo6ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlS2V5d29y
ZCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhcHBsZVdpcmVsZXNzUGxheWJhY2tU
YXJnZXRBY3RpdmUpLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3N0YXRpYyBDU1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENoYXJhY3Rl
clR5cGUqIHZhbHVlS2V5d29yZCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNoYXIgYnVmZmVy
W21heENTU1ZhbHVlS2V5d29yZExlbmd0aCArIDEgKyAxXTsgLy8gMSB0byB0dXJuICJhcHBsZSIv
ImtodG1sIiBpbnRvICJ3ZWJraXQiLCAxIGZvciBudWxsIGNoYXJhY3RlcgorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICBDaGFyYWN0ZXJUeXBl
IGMgPSB2YWx1ZUtleXdvcmRbaV07CisgICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQor
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxpZDsgLy8gaWxsZWdhbCBrZXl3b3JkLgor
ICAgICAgICBidWZmZXJbaV0gPSBXVEY6OnRvQVNDSUlMb3dlcihjKTsKKyAgICB9CisgICAgYnVm
ZmVyW2xlbmd0aF0gPSAnXDAnOworCisgICAgaWYgKGJ1ZmZlclswXSA9PSAnLScpIHsKKyAgICAg
ICAgLy8gSWYgdGhlIHByZWZpeCBpcyAtYXBwbGUtIG9yIC1raHRtbC0sIGNoYW5nZSBpdCB0byAt
d2Via2l0LS4KKyAgICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgc3RyaW5nIG9uZSBjaGFyYWN0ZXIg
bG9uZ2VyLgorICAgICAgICAvLyBPbiBpT1Mgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdmFsdWVz
IHN0YXJ0aW5nIHdpdGggLWFwcGxlLXN5c3RlbSB0byAtd2Via2l0LXN5c3RlbS4KKyAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIG1hbmdsaW5nIHdpdGhvdXQgYnJlYWtpbmcgdGhlIHdlYi4K
KyAgICAgICAgaWYgKGlzQXBwbGVMZWdhY3lDc3NWYWx1ZUtleXdvcmQoYnVmZmVyLCBsZW5ndGgp
IHx8IGhhc1ByZWZpeChidWZmZXIsIGxlbmd0aCwgIi1raHRtbC0iKSkgeworICAgICAgICAgICAg
bWVtbW92ZShidWZmZXIgKyA3LCBidWZmZXIgKyA2LCBsZW5ndGggKyAxIC0gNik7CisgICAgICAg
ICAgICBtZW1jcHkoYnVmZmVyLCAiLXdlYmtpdCIsIDcpOworICAgICAgICAgICAgKytsZW5ndGg7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBWYWx1ZSogaGFzaFRhYmxlRW50cnkgPSBm
aW5kVmFsdWUoYnVmZmVyLCBsZW5ndGgpOworICAgIHJldHVybiBoYXNoVGFibGVFbnRyeSA/IHN0
YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGhhc2hUYWJsZUVudHJ5LT5pZCkgOiBDU1NWYWx1ZUludmFs
aWQ7Cit9CisKK0NTU1ZhbHVlSUQgY3NzVmFsdWVLZXl3b3JkSUQoY29uc3QgQ1NTUGFyc2VyU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOworICAgIGlm
IChsZW5ndGggPiBtYXhDU1NWYWx1ZUtleXdvcmRMZW5ndGgpCisgICAgICAgIHJldHVybiBDU1NW
YWx1ZUludmFsaWQ7CisKKyAgICByZXR1cm4gc3RyaW5nLmlzOEJpdCgpID8gY3NzVmFsdWVLZXl3
b3JkSUQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBjc3NWYWx1ZUtleXdvcmRJRChz
dHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmll
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKworICAg
IC8vIC0/CisgICAgaWYgKGNoYXJhY3RlcnMgIT0gZW5kICYmIGNoYXJhY3RlcnNbMF0gPT0gJy0n
KQorICAgICAgICArK2NoYXJhY3RlcnM7CisKKyAgICAvLyB7bm1zdGFydH0KKyAgICBpZiAoY2hh
cmFjdGVycyA9PSBlbmQgfHwgIShjaGFyYWN0ZXJzWzBdID09ICdfJyB8fCBjaGFyYWN0ZXJzWzBd
ID49IDEyOCB8fCBpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyc1swXSkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgKytjaGFyYWN0ZXJzOworCisgICAgLy8ge25tY2hhcn0qCisgICAgZm9yICg7
IGNoYXJhY3RlcnMgIT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKKyAgICAgICAgaWYgKCEoY2hhcmFj
dGVyc1swXSA9PSAnXycgfHwgY2hhcmFjdGVyc1swXSA9PSAnLScgfHwgY2hhcmFjdGVyc1swXSA+
PSAxMjggfHwgaXNBU0NJSUFscGhhbnVtZXJpYyhjaGFyYWN0ZXJzWzBdKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vICJpZGVu
dCIgZnJvbSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5j
ZXMKK3N0YXRpYyBib29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisKKyAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihzdHJpbmcuY2hh
cmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVy
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tlbml6ZXJVUkwoY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CisgICAgCisgICAg
Zm9yICg7IGNoYXJhY3RlcnMgIT0gZW5kOyArK2NoYXJhY3RlcnMpIHsKKyAgICAgICAgQ2hhcmFj
dGVyVHlwZSBjID0gY2hhcmFjdGVyc1swXTsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAg
ICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIGNhc2UgJyMnOgorICAgICAgICAgICAgY2FzZSAn
JCc6CisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIGNhc2UgJyYnOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBp
ZiAoYyA8ICcqJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChjIDw9ICd+JykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgaWYgKGMgPCAxMjgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gInVybCIg
ZnJvbSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5jZXMK
K3N0YXRpYyBib29sIGlzQ1NTVG9rZW5pemVyVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorewor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKworICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAg
ICAgIHJldHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KTsKKyAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJVUkwoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgpOworfQorCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGlj
IGlubGluZSBTdHJpbmcgcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRm9yIGVmZmljaWVuY3ks
IHdlIGZpcnN0IHByZS1jYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcXVvdGVkIHN0cmluZywg
dGhlbiB3ZSBidWlsZCB0aGUgYWN0dWFsIG9uZS4KKyAgICAvLyBQbGVhc2Ugc2VlIGJlbG93IGZv
ciB0aGUgYWN0dWFsIGxvZ2ljLgorICAgIHVuc2lnbmVkIHF1b3RlZFN0cmluZ1NpemUgPSAyOyAv
LyBUd28gcXVvdGVzIHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUgc3RyaW5nLgorICAgIGJvb2wgYWZ0
ZXJFc2NhcGUgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IGNoYXJhY3RlcnNbaV07CisgICAgICAg
IGlmIChjaCA9PSAnXFwnIHx8IGNoID09ICdcJycpIHsKKyAgICAgICAgICAgIHF1b3RlZFN0cmlu
Z1NpemUgKz0gMjsKKyAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7CisgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPCAweDIwIHx8IGNoID09IDB4N0YpIHsKKyAgICAgICAgICAgIHF1b3RlZFN0
cmluZ1NpemUgKz0gMiArIChjaCA+PSAweDEwKTsKKyAgICAgICAgICAgIGFmdGVyRXNjYXBlID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1b3RlZFN0cmluZ1NpemUgKz0g
MSArIChhZnRlckVzY2FwZSAmJiAoaXNBU0NJSUhleERpZ2l0KGNoKSB8fCBjaCA9PSAnICcpKTsK
KyAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBTdHJpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKHF1b3RlZFN0cmluZ1NpemUpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBidWZmZXJbaW5kZXgrK10gPSAnXCcnOworICAg
IGFmdGVyRXNjYXBlID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIENoYXJhY3RlclR5cGUgY2ggPSBjaGFyYWN0ZXJzW2ldOworICAg
ICAgICBpZiAoY2ggPT0gJ1xcJyB8fCBjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICBidWZmZXJb
aW5kZXgrK10gPSAnXFwnOworICAgICAgICAgICAgYnVmZmVyW2luZGV4KytdID0gY2g7CisgICAg
ICAgICAgICBhZnRlckVzY2FwZSA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGNoIDwgMHgy
MCB8fCBjaCA9PSAweDdGKSB7IC8vIENvbnRyb2wgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGJ1
ZmZlcltpbmRleCsrXSA9ICdcXCc7CisgICAgICAgICAgICBwbGFjZUJ5dGVBc0hleENvbXByZXNz
SWZQb3NzaWJsZShjaCwgYnVmZmVyLCBpbmRleCwgTG93ZXJjYXNlKTsKKyAgICAgICAgICAgIGFm
dGVyRXNjYXBlID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNwYWNl
IGNoYXJhY3RlciBtYXkgYmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUgYmFja3NsYXNoLWVzY2FwZSBz
ZXF1ZW5jZSBhbmQgbm9ybWFsIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBpZiAoYWZ0ZXJFc2Nh
cGUgJiYgKGlzQVNDSUlIZXhEaWdpdChjaCkgfHwgY2ggPT0gJyAnKSkKKyAgICAgICAgICAgICAg
ICBidWZmZXJbaW5kZXgrK10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBj
aDsKKyAgICAgICAgICAgIGFmdGVyRXNjYXBlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnVmZmVyW2luZGV4KytdID0gJ1wnJzsKKworICAgIEFTU0VSVChxdW90ZWRTdHJpbmdTaXpl
ID09IGluZGV4KTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOworfQorCisvLyBX
ZSB1c2Ugc2luZ2xlIHF1b3RlcyBmb3Igbm93IGJlY2F1c2UgbWFya3VwLmNwcCB1c2VzIGRvdWJs
ZSBxdW90ZXMuCitTdHJpbmcgcXVvdGVDU1NTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBleHBhbmRzIGVhY2ggY2hhcmFjdGVyIHRvIGF0IG1vc3Qg
MyBjaGFyYWN0ZXJzICgnXHUwMDEwJyAtPiAnXCcgJzEnICcwJykgYXMgd2VsbCBhcyBhZGRzCisg
ICAgLy8gMiBxdW90ZSBjaGFyYWN0ZXJzIChiZWZvcmUgYW5kIGFmdGVyKS4gTWFrZSBzdXJlIHRo
ZSByZXN1bHRpbmcgc2l6ZSAoMyAqIGxlbmd0aCArIDIpIHdpbGwgbm90IG92ZXJmbG93IHVuc2ln
bmVkLgorCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworCisgICAgaWYg
KCFsZW5ndGgpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlwnXCciKTsKKworICAgIGlm
IChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyAzIC0gMikK
KyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KQorICAgICAgICByZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVy
czgoKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gcXVvdGVDU1NTdHJpbmdJbnRlcm5hbChzdHJpbmcu
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Cit9CisKK1N0cmluZyBxdW90ZUNTU1N0cmluZ0lmTmVl
ZGVkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBpc0NTU1Rva2VuaXplcklk
ZW50aWZpZXIoc3RyaW5nKSA/IHN0cmluZyA6IHF1b3RlQ1NTU3RyaW5nKHN0cmluZyk7Cit9CisK
K1N0cmluZyBxdW90ZUNTU1VSTElmTmVlZGVkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IHJldHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcpID8gc3RyaW5nIDogcXVvdGVDU1NTdHJp
bmcoc3RyaW5nKTsKK30KKworYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3Ry
aW5nJiB0b2tlbikKK3sKKyAgICAvLyBUaGUgdG9rZW5pemVyIGNoZWNrcyBmb3IgdGhlIGNvbnN0
cnVjdCBvZiBhbitiLgorICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSB7aWRlbnR9IHJ1bGUgcHJl
Y2VkZXMgdGhlIHtudGh9IHJ1bGUsIHNvbWUgb2YgdGhvc2UKKyAgICAvLyB0b2tlbnMgYXJlIGlk
ZW50aWZpZWQgYXMgc3RyaW5nIGxpdGVyYWwuIEZ1cnRoZXJtb3JlIHdlIG5lZWQgdG8gYWNjZXB0
CisgICAgLy8gIm9kZCIgYW5kICJldmVuIiB3aGljaCBkb2VzIG5vdCBtYXRjaCB0byBhbitiLgor
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbiwgIm9kZCIpCisg
ICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiZXZlbiIpCisg
ICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAibiIpCisgICAg
ICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAiLW4iKTsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCShyZXZpc2lvbiAyMDQ4
MzkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaDoyMDQ4MzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJWYWx1
ZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5
LmgiCisjaW5jbHVkZSAiU291cmNlU2l6ZUxpc3QuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGVJbXBv
cnQuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIgorI2luY2x1ZGUgPG1lbW9y
eT4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KKworI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisjaW5jbHVkZSAiR3Jp
ZEFyZWEuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFuaW1hdGlv
blBhcnNlQ29udGV4dDsKK2NsYXNzIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTsKK2NsYXNzIENT
U0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZTsKK2NsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOworY2xh
c3MgQ1NTU2VsZWN0b3JMaXN0OworY2xhc3MgQ1NTVmFsdWU7CitjbGFzcyBDU1NWYWx1ZUxpc3Q7
CitjbGFzcyBDU1NCYXNpY1NoYXBlOworY2xhc3MgQ1NTQmFzaWNTaGFwZUNpcmNsZTsKK2NsYXNz
IENTU0Jhc2ljU2hhcGVFbGxpcHNlOworY2xhc3MgQ1NTQmFzaWNTaGFwZUluc2V0OworY2xhc3Mg
Q1NTQmFzaWNTaGFwZVBhdGg7CitjbGFzcyBDU1NCYXNpY1NoYXBlUG9seWdvbjsKK2NsYXNzIENT
U0dyaWRMaW5lTmFtZXNWYWx1ZTsKK2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CitjbGFzcyBDU1NW
YXJpYWJsZURlcGVuZGVudFZhbHVlOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50Owor
Y2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOworY2xhc3MgTWVkaWFRdWVyeUV4cHJlc3Np
b247CitjbGFzcyBNZWRpYVF1ZXJ5U2V0OworY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydGllczsK
K2NsYXNzIFNWR0NvbG9yOworY2xhc3MgU1ZHUGFpbnQ7CitjbGFzcyBTdHlsZUtleWZyYW1lOwor
Y2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsKK2NsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0
eWxlUnVsZUJhc2U7CitjbGFzcyBTdHlsZVJ1bGVGb250RmFjZTsKK2NsYXNzIFN0eWxlUnVsZUtl
eWZyYW1lczsKK2NsYXNzIFN0eWxlUnVsZU1lZGlhOworY2xhc3MgU3R5bGVSdWxlUGFnZTsKK2Ns
YXNzIFN0eWxlUnVsZVJlZ2lvbjsKK2NsYXNzIFN0eWxlUnVsZVN1cHBvcnRzOworY2xhc3MgU3R5
bGVSdWxlVmlld3BvcnQ7CitjbGFzcyBTdHlsZUtleWZyYW1lOworY2xhc3MgU3R5bGVTaGVldENv
bnRlbnRzOworY2xhc3MgU3R5bGVkRWxlbWVudDsKK2NsYXNzIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOworCitjbGFzcyBDU1NQYXJzZXIgeworICAgIGZyaWVuZCBpbmxpbmUgaW50IGNzc3l5bGV4
KHZvaWQqLCBDU1NQYXJzZXIqKTsKKworcHVibGljOgorICAgIHN0cnVjdCBMb2NhdGlvbjsKKyAg
ICBlbnVtIFN5bnRheEVycm9yVHlwZSB7CisgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb25FcnJv
ciwKKyAgICAgICAgR2VuZXJhbFN5bnRheEVycm9yCisgICAgfTsKKworICAgIGVudW0gY2xhc3Mg
UGFyc2VSZXN1bHQgeworICAgICAgICBDaGFuZ2VkLAorICAgICAgICBVbmNoYW5nZWQsCisgICAg
ICAgIEVycm9yCisgICAgfTsKKworICAgIGNsYXNzIFZhbHVlV2l0aENhbGN1bGF0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFZhbHVlV2l0aENhbGN1bGF0aW9uKENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeyB9
CisKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorICAgICAgICBvcGVyYXRvciBDU1NQYXJzZXJWYWx1ZSYoKSB7IHJldHVybiBtX3ZhbHVl
OyB9CisKKyAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY2FsY3VsYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2NhbGN1bGF0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsY3VsYXRpb24oUmVm
UHRyPENTU0NhbGNWYWx1ZT4mJiBjYWxjdWxhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKGlzQ2FsY3VsYXRpb24obV92YWx1ZSkpOworICAgICAgICAgICAgbV9jYWxjdWxhdGlv
biA9IGNhbGN1bGF0aW9uOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDU1NQ
YXJzZXJWYWx1ZSYgbV92YWx1ZTsKKyAgICAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxj
dWxhdGlvbjsKKyAgICB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyKGNvbnN0IENT
U1BhcnNlckNvbnRleHQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+Q1NTUGFyc2VyKCk7CisKKyAg
ICB2b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgVGV4dFBvc2l0aW9uJiwgUnVsZVNvdXJjZURhdGFMaXN0KiwgYm9vbCBsb2dFcnJvcnMpOwor
ICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwg
Y29uc3QgU3RyaW5nJik7CisgICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVS
dWxlKFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgcGFyc2VT
dXBwb3J0c0NvbmRpdGlvbihjb25zdCBTdHJpbmcmKTsKKworICAgIHN0YXRpYyBQYXJzZVJlc3Vs
dCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRl
bnRzKik7CisgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0
Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKKworICAgIHN0YXRpYyBib29sIHBhcnNlQ29s
b3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7Cisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoQ1NTVmFsdWVJRCk7CisgICAg
c3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcm
LCBEb2N1bWVudCopOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRG
YWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1
bGF0aW9uJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYsIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4mJiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgc3Rh
dGljIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJh
dGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgYWRkUHJv
cGVydHlXaXRoUHJlZml4aW5nVmFyaWFudChDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+
JiYsIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOworICAgIHZvaWQgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYmLCBib29sIGltcG9ydGFu
dCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKKyAgICB2b2lkIHJvbGxiYWNrTGFzdFByb3BlcnRp
ZXMoaW50IG51bSk7CisgICAgYm9vbCBoYXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1f
cGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGFkZEV4cGFuZGVkUHJvcGVy
dHlGb3JWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmPENTU1ZhbHVlPiYmLCBib29sKTsK
KworICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Cisg
ICAgYm9vbCBwYXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHlsZVByb3BlcnR5
U2hvcnRoYW5kJiwgYm9vbCBpbXBvcnRhbnQpOworICAgIGJvb2wgcGFyc2U0VmFsdWVzKENTU1By
b3BlcnR5SUQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50
KTsKKyAgICBib29sIHBhcnNlQ29udGVudChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7
CisgICAgYm9vbCBwYXJzZVF1b3RlcyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Cisg
ICAgYm9vbCBwYXJzZUFsdChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CisgICAgCisg
ICAgYm9vbCBwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oYm9vbCBpbXBvcnRhbnQsIENT
U1ZhbHVlSUQpOworICAgIAorICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBdHRy
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncyk7CisKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBhcnNlQmFja2dyb3VuZENvbG9yKCk7CisKKyAgICBzdHJ1Y3QgU291cmNlU2l6ZSB7Cisg
ICAgICAgIE1lZGlhUXVlcnlFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgICAgIFJlZjxDU1NW
YWx1ZT4gbGVuZ3RoOworCisgICAgICAgIFNvdXJjZVNpemUoU291cmNlU2l6ZSYmKTsKKyAgICAg
ICAgU291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+JiYpOwor
ICAgIH07CisgICAgVmVjdG9yPFNvdXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5n
Vmlldyk7CisgICAgT3B0aW9uYWw8U291cmNlU2l6ZT4gc291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhw
cmVzc2lvbiYmLCBDU1NQYXJzZXJWYWx1ZSYpOworCisgICAgYm9vbCBwYXJzZUZpbGxJbWFnZShD
U1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisKKyAgICBlbnVtIEZpbGxQ
b3NpdGlvbkZsYWcgeyBJbnZhbGlkRmlsbFBvc2l0aW9uID0gMCwgQW1iaWd1b3VzRmlsbFBvc2l0
aW9uID0gMSwgWEZpbGxQb3NpdGlvbiA9IDIsIFlGaWxsUG9zaXRpb24gPSA0IH07CisgICAgZW51
bSBGaWxsUG9zaXRpb25QYXJzaW5nTW9kZSB7IFJlc29sdmVWYWx1ZXNBc1BlcmNlbnQgPSAwLCBS
ZXNvbHZlVmFsdWVzQXNLZXl3b3JkID0gMSB9OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgdW5zaWdu
ZWQmIGN1bXVsYXRpdmVGbGFncywgRmlsbFBvc2l0aW9uRmxhZyYgaW5kaXZpZHVhbEZsYWcsIEZp
bGxQb3NpdGlvblBhcnNpbmdNb2RlID0gUmVzb2x2ZVZhbHVlc0FzUGVyY2VudCk7CisgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVBvc2l0aW9uWChDU1NQYXJzZXJWYWx1ZUxpc3Qm
KTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlUG9zaXRpb25ZKENTU1BhcnNl
clZhbHVlTGlzdCYpOworICAgIHZvaWQgcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNl
clZhbHVlTGlzdCYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+Jik7CisgICAgYm9vbCBpc1BvdGVudGlhbFBvc2l0aW9uVmFsdWUoQ1NTUGFyc2Vy
VmFsdWUmKTsKKyAgICB2b2lkIHBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7
CisgICAgdm9pZCBwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7CisgICAg
dm9pZCBwYXJzZTRWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+JiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7CisKKyAgICB2b2lk
IHBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwor
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlE
LCBib29sICZhbGxvd0NvbW1hKTsKKworICAgIGJvb2wgcGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHBy
b3BJZDIsIFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgYm9vbCBw
YXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHJv
cGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KTsKKworICAgIHZvaWQg
YWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4mJiBydmFs
KTsKKyAgICB2b2lkIGFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJl
ZjxDU1NWYWx1ZT4mJiBydmFsKTsKKworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VBbmltYXRpb25EZWxheSgpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VB
bmltYXRpb25EaXJlY3Rpb24oKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
QW5pbWF0aW9uRHVyYXRpb24oKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
QW5pbWF0aW9uRmlsbE1vZGUoKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlQW5pbWF0aW9uTmFtZSgpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VBbmltYXRpb25QbGF5U3RhdGUoKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBh
cnNlQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uUGFyc2VDb250ZXh0Jik7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCk7CisjaWYgRU5BQkxFKENT
U19BTklNQVRJT05TX0xFVkVMXzIpCisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlv
blRyaWdnZXIoKTsKKyNlbmRpZgorICAgIHN0YXRpYyBWZWN0b3I8ZG91YmxlPiBwYXJzZUtleWZy
YW1lU2VsZWN0b3IoY29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIHBhcnNlVHJhbnNmb3JtT3Jp
Z2luU2hvcnRoYW5kKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gcGFy
c2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Cisg
ICAgT3B0aW9uYWw8ZG91YmxlPiBwYXJzZVNwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFy
c2VyVmFsdWVMaXN0Jik7CisgICAgYm9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4mLCBBbmltYXRpb25QYXJzZUNvbnRleHQmKTsKKyAgICBi
b29sIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFu
dCk7CisgICAgYm9vbCBwYXJzZUFuaW1hdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBib29s
IGltcG9ydGFudCk7CisKKyAgICBib29sIGlzU3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkKCkg
Y29uc3Q7CisKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uV2lkdGgo
KTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sdW1uQ291bnQoKTsKKyAg
ICBib29sIHBhcnNlQ29sdW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCk7CisKKyNpZiBFTkFC
TEUoSU9TX1RFWFRfQVVUT1NJWklORykKKyAgICBib29sIGlzVGV4dEF1dG9zaXppbmdFbmFibGVk
KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisgICAgYm9v
bCBpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkgY29uc3Q7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZUdyaWRQb3NpdGlvbigpOworICAgIGJvb2wgcGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRo
YW5kKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKKyAgICBlbnVtIFRyYWNrTGlzdFR5
cGUgeyBHcmlkVGVtcGxhdGUsIEdyaWRUZW1wbGF0ZU5vUmVwZWF0LCBHcmlkQXV0byB9OworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVGVtcGxhdGVDb2x1bW5zKFRyYWNrTGlzdFR5cGUg
PSBHcmlkVGVtcGxhdGUpOworICAgIGJvb2wgcGFyc2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXNB
bmRDb2x1bW5zKGJvb2wgaW1wb3J0YW50KTsKKyAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlU2hv
cnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKKyAgICBib29sIHBhcnNlR3JpZFNob3J0aGFuZChib29s
IGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KTsKKyAgICBib29sIHBhcnNlR3JpZEdhcFNob3J0aGFuZChib29sIGltcG9ydGFudCk7Cisg
ICAgYm9vbCBwYXJzZVNpbmdsZUdyaWRBcmVhTG9uZ2hhbmQoUmVmUHRyPENTU1ZhbHVlPiYpOwor
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVHJhY2tMaXN0KFRyYWNrTGlzdFR5cGUpOwor
ICAgIGJvb2wgcGFyc2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmLCBib29s
JiBpc0F1dG9SZXBlYXQsIGJvb2wmIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQpOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VHcmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRM
aXN0KTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JpZEJyZWFkdGgoQ1NT
UGFyc2VyVmFsdWUmKTsKKyAgICBib29sIHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFtZWRH
cmlkQXJlYU1hcCYsIGNvbnN0IHVuc2lnbmVkLCB1bnNpZ25lZCYpOworICAgIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpOworICAgIGJvb2wgcGFyc2VHcmlkTGluZU5h
bWVzKENTU1BhcnNlclZhbHVlTGlzdCYsIENTU1ZhbHVlTGlzdCYsIENTU0dyaWRMaW5lTmFtZXNW
YWx1ZSogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlR3JpZEF1dG9GbG93
KENTU1BhcnNlclZhbHVlTGlzdCYpOworI2VuZGlmCisKKyAgICBib29sIHBhcnNlRGFzaGJvYXJk
UmVnaW9ucyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CisKKyAgICBib29sIHBhcnNl
Q2xpcFNoYXBlKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKKworICAgIGJvb2wgcGFy
c2VMZWdhY3lQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CisgICAgYm9v
bCBwYXJzZUl0ZW1Qb3NpdGlvbk92ZXJmbG93UG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgYm9vbCBp
bXBvcnRhbnQpOworICAgIFJlZlB0cjxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+IHBhcnNl
Q29udGVudERpc3RyaWJ1dGlvbk92ZXJmbG93UG9zaXRpb24oKTsKKworI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQorICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaGFwZVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQpOworI2VuZGlmCisKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUJhc2ljU2hh
cGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUJhc2ljU2hhcGUoKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmKTsKKyAgICBSZWZQdHI8Q1NTQmFzaWNT
aGFwZUNpcmNsZT4gcGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYpOwor
ICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlRWxsaXBzZT4gcGFyc2VCYXNpY1NoYXBlRWxsaXBzZShD
U1NQYXJzZXJWYWx1ZUxpc3QmKTsKKyAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZVBvbHlnb24+IHBh
cnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CisgICAgUmVmUHRyPENT
U0Jhc2ljU2hhcGVQYXRoPiBwYXJzZUJhc2ljU2hhcGVQYXRoKENTU1BhcnNlclZhbHVlTGlzdCYp
OworICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IHBhcnNlQmFzaWNTaGFwZUluc2V0KENT
U1BhcnNlclZhbHVlTGlzdCYpOworCisgICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQp
OworICAgIHZvaWQgcGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wb3J0YW50KTsKKyAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYW1pbHkoKTsKKworICAgIGJvb2wgcGFyc2VDb3VudGVy
KENTU1Byb3BlcnR5SUQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wgaW1wb3J0YW50KTsKKyAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiBhcmdzLCBib29sIGNvdW50ZXJzKTsKKworICAgIGJvb2wgcGFyc2VDb2xvclBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVmFsdWUmLCBpbnQqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEp
OworICAgIGJvb2wgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlJiwgZG91YmxlKiBj
b2xvclZhbHVlcywgYm9vbCBwYXJzZUFscGhhKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBhcnNlQ29sb3IoQ1NTUGFyc2VyVmFsdWUqID0gbnVsbHB0cik7CisgICAgYm9vbCBwYXJz
ZUNvbG9yRnJvbVZhbHVlKENTU1BhcnNlclZhbHVlJiwgUkdCQTMyJik7CisgICAgdm9pZCBwYXJz
ZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIENTU1NlbGVjdG9yTGlzdCYpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KKyAgICBzdGF0aWMgYm9vbCBmYXN0UGFyc2VDb2xvcihS
R0JBMzImLCBjb25zdCBTdHJpbmdUeXBlJiwgYm9vbCBzdHJpY3QpOworCisgICAgYm9vbCBwYXJz
ZUxpbmVIZWlnaHQoYm9vbCBpbXBvcnRhbnQpOworICAgIGJvb2wgcGFyc2VGb250U2l6ZShib29s
IGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJzZUZvbnRXZWlnaHQoYm9vbCBpbXBvcnRhbnQpOwor
ICAgIGJvb2wgcGFyc2VGb250U3ludGhlc2lzKGJvb2wgaW1wb3J0YW50KTsKKyAgICBib29sIHBh
cnNlRm9udEZhY2VTcmMoKTsKKyAgICBib29sIHBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKTsK
KworICAgIGJvb2wgcGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpOworICAgIFJlZlB0cjxTVkdQYWludD4gcGFyc2VTVkdQYWludCgpOworICAgIFJlZlB0
cjxTVkdDb2xvcj4gcGFyc2VTVkdDb2xvcigpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBh
cnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VQ
YWludE9yZGVyKCk7CisKKyAgICAvLyBDU1MzIFBhcnNpbmcgUm91dGluZXMgKGZvciBwcm9wZXJ0
aWVzIHNwZWNpZmljIHRvIENTUzMpCisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VTaGFk
b3coQ1NTUGFyc2VyVmFsdWVMaXN0JiwgQ1NTUHJvcGVydHlJRCk7CisgICAgYm9vbCBwYXJzZUJv
cmRlckltYWdlKENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4mLCBib29sIGltcG9ydGFu
dCA9IGZhbHNlKTsKKyAgICBib29sIHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQoUmVmUHRyPENTU1Zh
bHVlPiYpOworICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVNsaWNlKENTU1Byb3BlcnR5SUQsIFJl
ZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+Jik7CisgICAgYm9vbCBwYXJzZUJvcmRlcklt
YWdlV2lkdGgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOworICAgIGJvb2wgcGFyc2VCb3Jk
ZXJJbWFnZU91dHNldChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7CisgICAgYm9vbCBwYXJz
ZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CisKKyAgICBib29s
IHBhcnNlQXNwZWN0UmF0aW8oYm9vbCBpbXBvcnRhbnQpOworCisgICAgYm9vbCBwYXJzZVJlZmxl
Y3QoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOworCisgICAgYm9vbCBwYXJzZUZsZXgo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGltcG9ydGFudCk7CisKKyAgICAvLyBJbWFn
ZSBnZW5lcmF0b3JzCisgICAgYm9vbCBwYXJzZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBS
ZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgYm9vbCBwYXJzZU5hbWVkSW1hZ2UoQ1NTUGFyc2VyVmFs
dWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworCisgICAgYm9vbCBwYXJzZURlcHJlY2F0ZWRH
cmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgYm9v
bCBwYXJzZURlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQ
dHI8Q1NTVmFsdWU+JiwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKKyAgICBib29sIHBh
cnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxD
U1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOworICAgIGJvb2wgcGFyc2VM
aW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+JiwgQ1NT
R3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKKyAgICBib29sIHBhcnNlUmFkaWFsR3JhZGllbnQo
Q1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0
IHJlcGVhdGluZyk7CisgICAgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJW
YWx1ZUxpc3QmLCBDU1NHcmFkaWVudFZhbHVlJiwgYm9vbCBleHBlY3RDb21tYSk7CisKKyAgICBi
b29sIHBhcnNlQ3Jvc3NmYWRlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4m
LCBib29sIHByZWZpeGVkKTsKKworI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKKyAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUltYWdlUmVzb2x1dGlvbigpOworI2VuZGlmCisK
KyAgICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gcGFyc2VJbWFnZVNldCgpOworCisgICAgYm9v
bCBwYXJzZUZpbHRlckltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4m
KTsKKworICAgIGJvb2wgcGFyc2VGaWx0ZXIoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENT
U1ZhbHVlTGlzdD4mKTsKKyAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHBhcnNlQnVp
bHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSk7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNl
Q2xpcFBhdGgoKTsKKworICAgIHN0YXRpYyBib29sIGlzQmxlbmRNb2RlKENTU1ZhbHVlSUQpOwor
ICAgIHN0YXRpYyBib29sIGlzQ29tcG9zaXRlT3BlcmF0b3IoQ1NTVmFsdWVJRCk7CisKKyAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZVRyYW5zZm9ybSgpOworICAgIFJlZlB0cjxXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwor
ICAgIGJvb2wgcGFyc2VUcmFuc2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1By
b3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIENTU1Byb3BlcnR5SUQm
IHByb3BJZDMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgIGJvb2wgcGFyc2VQZXJzcGVjdGl2ZU9y
aWdpbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJv
cGVydHlJRCYgcHJvcElkMiwgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+Jik7CisKKyAgICBib29sIHBhcnNlVGV4dEVtcGhhc2lzU3R5bGUoYm9v
bCBpbXBvcnRhbnQpOworICAgIGJvb2wgcGFyc2VUZXh0RW1waGFzaXNQb3NpdGlvbihib29sIGlt
cG9ydGFudCk7CisKKyAgICB2b2lkIGFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYmLCBib29sIGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJz
ZVRleHREZWNvcmF0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Cisg
ICAgYm9vbCBwYXJzZVRleHREZWNvcmF0aW9uU2tpcChib29sIGltcG9ydGFudCk7CisgICAgYm9v
bCBwYXJzZVRleHRVbmRlcmxpbmVQb3NpdGlvbihib29sIGltcG9ydGFudCk7CisKKyAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBwYXJzZVRleHRJbmRlbnQoKTsKKyAgICAKKyAgICBib29sIHBhcnNl
SGFuZ2luZ1B1bmN0dWF0aW9uKGJvb2wgaW1wb3J0YW50KTsKKworICAgIGJvb2wgcGFyc2VMaW5l
Qm94Q29udGFpbihib29sIGltcG9ydGFudCk7CisgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gcGFy
c2VDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVS
YW5nZSk7CisKKyAgICBib29sIHBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0Jik7Cisg
ICAgYm9vbCBwYXJzZUZvbnRGZWF0dXJlU2V0dGluZ3MoYm9vbCBpbXBvcnRhbnQpOworCisgICAg
Ym9vbCBwYXJzZUZsb3dUaHJlYWQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOworICAg
IGJvb2wgcGFyc2VSZWdpb25UaHJlYWQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwor
CisgICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50LCBib29s
IHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpOworICAgIGJvb2wgcGFyc2VGb250VmFy
aWFudE51bWVyaWMoYm9vbCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBp
bXBsaWNpdCk7CisgICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGJvb2wgaW1wb3J0
YW50LCBib29sIHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpOworICAgIGJvb2wgcGFy
c2VGb250VmFyaWFudChib29sIGltcG9ydGFudCk7CisKKyAgICBib29sIHBhcnNlV2lsbENoYW5n
ZShib29sIGltcG9ydGFudCk7CisKKyAgICAvLyBGYXN0ZXIgdGhhbiBkb2luZyBhIG5ldy9kZWxl
dGUgZWFjaCB0aW1lIHNpbmNlIGl0IGtlZXBzIG9uZSB2ZWN0b3IuCisgICAgc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gY3JlYXRlU2Vs
ZWN0b3JWZWN0b3IoKTsKKyAgICB2b2lkIHJlY3ljbGVTZWxlY3RvclZlY3RvcihzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+Pik7CisKKyAg
ICBSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNl
clN0cmluZyYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmKTsKKyAgICBSZWZQdHI8U3R5bGVLZXlm
cmFtZT4gY3JlYXRlS2V5ZnJhbWUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CisgICAgUmVmPFN0eWxl
UnVsZUtleWZyYW1lcz4gY3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmLCBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPj4+KTsKKworICAgIHR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4gUnVsZUxpc3Q7CisgICAgUmVmPFN0eWxlUnVs
ZU1lZGlhPiBjcmVhdGVNZWRpYVJ1bGUoUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYsIFJ1bGVMaXN0
Kik7CisgICAgUmVmPFN0eWxlUnVsZU1lZGlhPiBjcmVhdGVFbXB0eU1lZGlhUnVsZShSdWxlTGlz
dCopOworICAgIFJlZlB0cjxTdHlsZVJ1bGU+IGNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHNlbGVjdG9ycyk7CisgICAgUmVmUHRyPFN0
eWxlUnVsZUZvbnRGYWNlPiBjcmVhdGVGb250RmFjZVJ1bGUoKTsKKyAgICBSZWZQdHI8U3R5bGVS
dWxlUGFnZT4gY3JlYXRlUGFnZVJ1bGUoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBwYWdlU2VsZWN0b3IpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZVJlZ2lv
blJ1bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiByZWdpb25T
ZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKKyAgICB2b2lkIGNyZWF0ZU1hcmdpbkF0UnVsZShD
U1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSk7CisgICAgUmVmPFN0eWxlUnVsZVN1cHBvcnRzPiBj
cmVhdGVTdXBwb3J0c1J1bGUoYm9vbCBjb25kaXRpb25Jc1N1cHBvcnRlZCwgUnVsZUxpc3QqKTsK
KyAgICB2b2lkIG1hcmtTdXBwb3J0c1J1bGVIZWFkZXJTdGFydCgpOworICAgIHZvaWQgbWFya1N1
cHBvcnRzUnVsZUhlYWRlckVuZCgpOworICAgIFJlZjxDU1NSdWxlU291cmNlRGF0YT4gcG9wU3Vw
cG9ydHNSdWxlRGF0YSgpOworCisgICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCgpOworICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CisKKyAgICB2b2lk
IGFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3Ry
aW5nJiB1cmkpOworICAgIFF1YWxpZmllZE5hbWUgZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7
CisKKyAgICB2b2lkIHJld3JpdGVTcGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlUHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1l
LCBDU1NQYXJzZXJTZWxlY3RvciYpOworICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxl
bWVudE5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3Im
LCBib29sIGlzTmFtZXNwYWNlUGxhY2Vob2xkZXIgPSBmYWxzZSk7CisgICAgdm9pZCByZXdyaXRl
U3BlY2lmaWVyc1dpdGhOYW1lc3BhY2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcmV3cml0ZVNwZWNpZmllcnMoc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPik7CisKKyAgICB2b2lkIGludmFsaWRCbG9ja0hpdCgpOworCisgICAgdm9pZCB1
cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKTsKKyAgICB2b2lkIHVwZGF0ZUxhc3RN
ZWRpYUxpbmUoTWVkaWFRdWVyeVNldCYpOworCisgICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKTsK
KworICAgIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZVN0eWxlUHJvcGVydGll
cygpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRQYXJzZWRQcm9wZXJ0aWVz
Q291bnQ7CisKKyAgICBDU1NQYXJzZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIGJvb2wgbV9p
bXBvcnRhbnQgeyBmYWxzZSB9OworICAgIENTU1Byb3BlcnR5SUQgbV9pZCB7IENTU1Byb3BlcnR5
SW52YWxpZCB9OworICAgIEF0b21pY1N0cmluZyBtX2N1c3RvbVByb3BlcnR5TmFtZTsKKyAgICBT
dHlsZVNoZWV0Q29udGVudHMqIG1fc3R5bGVTaGVldCB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gbV9ydWxlOworICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tleWZy
YW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVlcnk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTb3VyY2VTaXplPj4gbV9zb3VyY2VTaXplTGlzdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKKyAgICBi
b29sIG1fc3VwcG9ydHNDb25kaXRpb24geyBmYWxzZSB9OworCisgICAgUGFyc2VkUHJvcGVydHlW
ZWN0b3IgbV9wYXJzZWRQcm9wZXJ0aWVzOworICAgIENTU1NlbGVjdG9yTGlzdCogbV9zZWxlY3Rv
ckxpc3RGb3JQYXJzZVNlbGVjdG9yIHsgbnVsbHB0ciB9OworCisgICAgdW5zaWduZWQgbV9udW1Q
YXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94IHsgaW52YWxpZFBhcnNlZFByb3BlcnRpZXND
b3VudCB9OworCisgICAgaW50IG1faW5QYXJzZVNob3J0aGFuZCB7IDAgfTsKKyAgICBDU1NQcm9w
ZXJ0eUlEIG1fY3VycmVudFNob3J0aGFuZCB7IENTU1Byb3BlcnR5SW52YWxpZCB9OworICAgIGJv
b2wgbV9pbXBsaWNpdFNob3J0aGFuZCB7IGZhbHNlIH07CisKKyAgICBib29sIG1faGFkU3ludGFj
dGljYWxseVZhbGlkQ1NTUnVsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2xvZ0Vycm9ycyB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVycm9yc0luRGVjbGFyYXRpb24geyBmYWxzZSB9Owor
CisgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZSB7IHN0YXJBdG9tIH07CisKKyAg
ICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQorICAgIHNpemVfdCBtX3BhcnNlZFRleHRQ
cmVmaXhMZW5ndGggeyAwIH07CisgICAgdW5zaWduZWQgbV9uZXN0ZWRTZWxlY3RvckxldmVsIHsg
MCB9OworICAgIFNvdXJjZVJhbmdlIG1fc2VsZWN0b3JSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSBt
X3Byb3BlcnR5UmFuZ2UgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fY3VycmVudFJ1bGVEYXRhU3RhY2s7CisgICAgUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRSdWxlRGF0YTsKKyAgICBSdWxlU291cmNlRGF0
YUxpc3QqIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgeyBudWxscHRyIH07CisKKyAgICB2b2lkIGZp
eFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEmKTsKKyAgICB2b2lkIG1h
cmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OlR5cGUpOworICAgIHZvaWQgbWFy
a1J1bGVIZWFkZXJFbmQoKTsKKworICAgIHZvaWQgc3RhcnROZXN0ZWRTZWxlY3Rvckxpc3QoKSB7
ICsrbV9uZXN0ZWRTZWxlY3RvckxldmVsOyB9CisgICAgdm9pZCBlbmROZXN0ZWRTZWxlY3Rvckxp
c3QoKSB7IC0tbV9uZXN0ZWRTZWxlY3RvckxldmVsOyB9CisgICAgdm9pZCBtYXJrU2VsZWN0b3JT
dGFydCgpOworICAgIHZvaWQgbWFya1NlbGVjdG9yRW5kKCk7CisKKyAgICB2b2lkIG1hcmtSdWxl
Qm9keVN0YXJ0KCk7CisgICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICB2b2lkIG1hcmtQ
cm9wZXJ0eVN0YXJ0KCk7CisgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFu
dEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpOworICAgIHZvaWQgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNl
VHJlZShSZWY8Q1NTUnVsZVNvdXJjZURhdGE+JiYpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gcG9wUnVsZURhdGEoKTsKKyAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9w
cm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgfQorICAgIGJvb2wgaXNFeHRyYWN0aW5nU291cmNlRGF0
YSgpIGNvbnN0IHsgcmV0dXJuICEhbV9jdXJyZW50UnVsZURhdGFTdGFjazsgfQorICAgIHZvaWQg
c3ludGF4RXJyb3IoY29uc3QgTG9jYXRpb24mLCBTeW50YXhFcnJvclR5cGUgPSBHZW5lcmFsU3lu
dGF4RXJyb3IpOworCisgICAgaW5saW5lIGludCBsZXgodm9pZCogeXlsdmFsKSB7IHJldHVybiAo
dGhpcy0+Km1fbGV4RnVuYykoeXlsdmFsKTsgfQorCisgICAgaW50IHRva2VuKCkgeyByZXR1cm4g
bV90b2tlbjsgfQorCisjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKKyAgICB2b2lk
IG1hcmtWaWV3cG9ydFJ1bGVCb2R5U3RhcnQoKSB7IG1faW5WaWV3cG9ydCA9IHRydWU7IH0KKyAg
ICB2b2lkIG1hcmtWaWV3cG9ydFJ1bGVCb2R5RW5kKCkgeyBtX2luVmlld3BvcnQgPSBmYWxzZTsg
fQorICAgIFJlZjxTdHlsZVJ1bGVWaWV3cG9ydD4gY3JlYXRlVmlld3BvcnRSdWxlKCk7CisjZW5k
aWYKKworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOworCisgICAgc3RhdGlj
IFVSTCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1
cmwpOworCisgICAgTG9jYXRpb24gY3VycmVudExvY2F0aW9uKCk7CisgICAgc3RhdGljIGJvb2wg
aXNDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYpOworCisgICAgdm9pZCBzZXRDdXN0b21Qcm9w
ZXJ0eU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIHsgbV9jdXN0b21Qcm9w
ZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7IH0KKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VW
YXJpYWJsZURlcGVuZGVudFZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVw
ZW5kZW50VmFsdWUmLCBjb25zdCBDdXN0b21Qcm9wZXJ0eVZhbHVlTWFwJiBjdXN0b21Qcm9wZXJ0
aWVzLCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBp
czhCaXRTb3VyY2UoKSB7IHJldHVybiBtX2lzOEJpdFNvdXJjZTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFNvdXJjZUNoYXJhY3RlclR5cGU+CisgICAgaW50IHJlYWxMZXgodm9pZCogeXls
dmFsKTsKKworICAgIFVDaGFyKiYgY3VycmVudENoYXJhY3RlcjE2KCk7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxpbmUgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PgorICAgIGlubGluZSBDaGFyYWN0ZXJUeXBlKiB0b2tlblN0YXJ0KCk7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxpbmUgdm9pZCBzZXRUb2tlblN0YXJ0
KENoYXJhY3RlclR5cGUqKTsKKworICAgIGlubGluZSB1bnNpZ25lZCB0b2tlblN0YXJ0T2Zmc2V0
KCk7CisgICAgaW5saW5lIFVDaGFyIHRva2VuU3RhcnRDaGFyKCk7CisKKyAgICBpbmxpbmUgdW5z
aWduZWQgY3VycmVudENoYXJhY3Rlck9mZnNldCgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CisgICAgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoKTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIHVuc2lnbmVkIHBhcnNl
RXNjYXBlKENoYXJhY3RlclR5cGUqJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERlc3RDaGFy
YWN0ZXJUeXBlPgorICAgIGlubGluZSB2b2lkIFVuaWNvZGVUb0NoYXJzKERlc3RDaGFyYWN0ZXJU
eXBlKiYsIHVuc2lnbmVkKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+CisgICAgaW5saW5lIGJvb2wgcGFyc2VJZGVu
dGlmaWVySW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBi
b29sJik7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxp
bmUgdm9pZCBwYXJzZUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSomLCBDU1NQYXJzZXJTdHJpbmcm
LCBib29sJik7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+CisgICAgaW5saW5lIGJvb2wgcGFyc2VTdHJpbmdJbnRl
cm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RDaGFyYWN0ZXJUeXBlKiYsIFVDaGFyKTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGlubGluZSB2b2lkIHBh
cnNlU3RyaW5nKENoYXJhY3RlclR5cGUqJiwgQ1NTUGFyc2VyU3RyaW5nJiByZXN1bHRTdHJpbmcs
IFVDaGFyKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGlu
bGluZSBib29sIGZpbmRVUkkoQ2hhcmFjdGVyVHlwZSomIHN0YXJ0LCBDaGFyYWN0ZXJUeXBlKiYg
ZW5kLCBVQ2hhciYgcXVvdGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNyY0NoYXJhY3Rl
clR5cGUsIHR5cGVuYW1lIERlc3RDaGFyYWN0ZXJUeXBlPgorICAgIGlubGluZSBib29sIHBhcnNl
VVJJSW50ZXJuYWwoU3JjQ2hhcmFjdGVyVHlwZSomLCBEZXN0Q2hhcmFjdGVyVHlwZSomLCBVQ2hh
ciBxdW90ZSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBp
bmxpbmUgdm9pZCBwYXJzZVVSSShDU1NQYXJzZXJTdHJpbmcmKTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZSgp
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcGFyc2VO
dGhDaGlsZCgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJv
b2wgcGFyc2VOdGhDaGlsZEV4dHJhKCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CisgICAgaW5saW5lIGJvb2wgZGV0ZWN0RnVuY3Rpb25UeXBlVG9rZW4oaW50KTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxpbmUgdm9pZCBkZXRl
Y3RNZWRpYVF1ZXJ5VG9rZW4oaW50KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KKyAgICBpbmxpbmUgdm9pZCBkZXRlY3ROdW1iZXJUb2tlbihDaGFyYWN0ZXJUeXBlKiwg
aW50KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBpbmxpbmUg
dm9pZCBkZXRlY3REYXNoVG9rZW4oaW50KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KKyAgICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgaW5saW5lIHZvaWQgZGV0ZWN0
U3VwcG9ydHNUb2tlbihpbnQpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CisgICAgaW5saW5lIHZvaWQgc2V0UnVsZUhlYWRlckVuZChjb25zdCBDaGFyYWN0ZXJUeXBl
Kik7CisKKyAgICB2b2lkIHNldFN0eWxlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNo
ZWV0KSB7IG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7IH0KKworICAgIGlubGluZSBib29sIGlu
U3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1N0cmljdE1v
ZGUgfHwgbV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsgfQorICAgIGlubGluZSBi
b29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1F1
aXJrc01vZGU7IH0KKyAgICAKKyAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwp
IGNvbnN0OworCisgICAgdm9pZCByZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGlu
dCBsZW4pOworCisgICAgdGVtcGxhdGU8dW5zaWduZWQgcHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBz
dWZmaXhMZW5ndGg+CisgICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyICgmcHJlZml4KVtw
cmVmaXhMZW5ndGhdLCBTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgY2hhciAoJnN1ZmZpeClbc3Vm
Zml4TGVuZ3RoXSkKKyAgICB7CisgICAgICAgIHNldHVwUGFyc2VyKHByZWZpeCwgcHJlZml4TGVu
Z3RoIC0gMSwgc3RyaW5nLCBzdWZmaXgsIHN1ZmZpeExlbmd0aCAtIDEpOworICAgIH0KKyAgICB2
b2lkIHNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3Ro
LCBTdHJpbmdWaWV3LCBjb25zdCBjaGFyKiBzdWZmaXgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCk7
CisgICAgYm9vbCBpblNob3J0aGFuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYXJzZVNob3J0aGFu
ZDsgfQorCisgICAgYm9vbCBpc1ZhbGlkU2l6ZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYpOworCisg
ICAgYm9vbCBpc0dlbmVyYXRlZEltYWdlVmFsdWUoQ1NTUGFyc2VyVmFsdWUmKSBjb25zdDsKKyAg
ICBib29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENT
U1ZhbHVlPiYpOworCisgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOworICAgIFJlZjxJbW11dGFibGVT
dHlsZVByb3BlcnRpZXM+IHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiwgU3R5bGVTaGVl
dENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisKKyAgICBSZWZQdHI8Q1NTQmFzaWNTaGFw
ZUluc2V0PiBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4m
JiwgQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CisKKyAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsK
KyAgICAgICAgTm9uZSwKKyAgICAgICAgQXV0bywKKyAgICAgICAgTGVuZ3RoLAorICAgICAgICBQ
YWdlU2l6ZSwKKyAgICAgICAgT3JpZW50YXRpb24sCisgICAgfTsKKworICAgIGJvb2wgcGFyc2VQ
YWdlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJz
ZVNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKKyAgICBTaXplUGFy
YW1ldGVyVHlwZSBwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0JiBwYXJzZWRWYWx1ZXMs
IENTU1BhcnNlclZhbHVlJiwgU2l6ZVBhcmFtZXRlclR5cGUgcHJldlBhcmFtVHlwZSk7CisKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgcGFyc2VOb25FbGVtZW50U25hcFBv
aW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOworICAgIGJvb2wgcGFy
c2VTY3JvbGxTbmFwRGVzdGluYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KTsKKyAgICBib29sIHBhcnNlU2Nyb2xsU25hcENvb3JkaW5hdGUoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKKyAgICBib29sIHBhcnNlU2Nyb2xsU25hcFBvc2l0aW9u
cyhSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZVgsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVl
WSk7CisjZW5kaWYKKworICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3Qm
KTsKKyAgICBib29sIHBhcnNlRm9udEZhY2VTcmNMb2NhbChDU1NWYWx1ZUxpc3QmKTsKKworICAg
IGJvb2wgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmKTsKKworI2lmIEVOQUJMRShDU1NfR1JJRF9M
QVlPVVQpCisgICAgYm9vbCBwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlv
bihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mIGdyaWRMaW5lTmFtZSk7CisjZW5kaWYKKworICAgIGVudW0gUGFyc2luZ01v
ZGUgeworICAgICAgICBOb3JtYWxNb2RlLAorICAgICAgICBNZWRpYVF1ZXJ5TW9kZSwKKyAgICAg
ICAgU3VwcG9ydHNNb2RlLAorICAgICAgICBOdGhDaGlsZE1vZGUKKyAgICB9OworCisgICAgUGFy
c2luZ01vZGUgbV9wYXJzaW5nTW9kZSB7IE5vcm1hbE1vZGUgfTsKKyAgICBib29sIG1faXM4Qml0
U291cmNlIHsgZmFsc2UgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TENoYXJbXT4gbV9kYXRhU3Rh
cnQ4OworICAgIHN0ZDo6dW5pcXVlX3B0cjxVQ2hhcltdPiBtX2RhdGFTdGFydDE2OworICAgIExD
aGFyKiBtX2N1cnJlbnRDaGFyYWN0ZXI4IHsgbnVsbHB0ciB9OworICAgIFVDaGFyKiBtX2N1cnJl
bnRDaGFyYWN0ZXIxNiB7IG51bGxwdHIgfTsKKyAgICB1bmlvbiB7CisgICAgICAgIExDaGFyKiBw
dHI4OworICAgICAgICBVQ2hhciogcHRyMTY7CisgICAgfSBtX3Rva2VuU3RhcnQgeyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CisgICAgaW50IG1fdG9rZW4geyAwIH07
CisgICAgaW50IG1fbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgbV90b2tlblN0YXJ0TGluZU51
bWJlciB7IDAgfTsKKyAgICBpbnQgbV90b2tlblN0YXJ0Q29sdW1uTnVtYmVyIHsgMCB9OworICAg
IGludCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIgeyAwIH07CisgICAgaW50IG1fY29sdW1uT2Zm
c2V0Rm9yTGluZSB7IDAgfTsKKworICAgIGludCBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyIHsgMCB9
OworICAgIGludCBtX3NoZWV0U3RhcnRDb2x1bW5OdW1iZXIgeyAwIH07CisKKyAgICBib29sIG1f
YWxsb3dJbXBvcnRSdWxlcyB7IHRydWUgfTsKKyAgICBib29sIG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnMgeyB0cnVlIH07CisKKyNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQor
ICAgIGJvb2wgcGFyc2VWaWV3cG9ydFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJzZVZpZXdwb3J0U2hvcnRoYW5kKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEIGZpcnN0LCBDU1NQcm9wZXJ0eUlEIHNlY29uZCwgYm9v
bCBpbXBvcnRhbnQpOworCisgICAgYm9vbCBpblZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9p
blZpZXdwb3J0OyB9CisgICAgYm9vbCBtX2luVmlld3BvcnQgeyBmYWxzZSB9OworI2VuZGlmCisK
KyAgICBib29sIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoKSBjb25z
dDsKKworICAgIGludCAoQ1NTUGFyc2VyOjoqbV9sZXhGdW5jKSh2b2lkKik7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+PiBt
X3JlY3ljbGVkU2VsZWN0b3JWZWN0b3I7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNvdXJj
ZURhdGFMaXN0PiBtX3N1cHBvcnRzUnVsZURhdGFTdGFjazsKKworICAgIC8vIGRlZmluZXMgdW5p
dHMgYWxsb3dlZCBmb3IgYSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdAorICAg
IGVudW0gVW5pdHMgeworICAgICAgICBGVW5rbm93biA9IDB4MDAwMCwKKyAgICAgICAgRkludGVn
ZXIgPSAweDAwMDEsCisgICAgICAgIEZOdW1iZXIgPSAweDAwMDIsIC8vIFJlYWwgTnVtYmVycwor
ICAgICAgICBGUGVyY2VudCA9IDB4MDAwNCwKKyAgICAgICAgRkxlbmd0aCA9IDB4MDAwOCwKKyAg
ICAgICAgRkFuZ2xlID0gMHgwMDEwLAorICAgICAgICBGVGltZSA9IDB4MDAyMCwKKyAgICAgICAg
RkZyZXF1ZW5jeSA9IDB4MDA0MCwKKyAgICAgICAgRlBvc2l0aXZlSW50ZWdlciA9IDB4MDA4MCwK
KyAgICAgICAgRlJlbGF0aXZlID0gMHgwMTAwLAorI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xV
VElPTikgfHwgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCisgICAgICAgIEZSZXNvbHV0
aW9uID0gMHgwMjAwLAorI2VuZGlmCisgICAgICAgIEZOb25OZWcgPSAweDA0MDAKKyAgICB9Owor
CisgICAgZnJpZW5kIGlubGluZSBVbml0cyBvcGVyYXRvcnwoVW5pdHMgYSwgVW5pdHMgYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVbml0cz4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGEpIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGIpKTsKKyAgICB9CisKKyAgICBlbnVtIFJl
bGVhc2VQYXJzZWRDYWxjVmFsdWVDb25kaXRpb24geworICAgICAgICBSZWxlYXNlUGFyc2VkQ2Fs
Y1ZhbHVlLAorICAgICAgICBEb05vdFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUKKyAgICB9OworCisg
ICAgYm9vbCBpc0xvZ2dpbmdFcnJvcnMoKTsKKyAgICB2b2lkIGxvZ0Vycm9yKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOworCisgICAgYm9v
bCB2YWxpZGF0ZUNhbGN1bGF0aW9uVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYsIFVuaXRzKTsK
KworICAgIGJvb2wgc2hvdWxkQWNjZXB0VW5pdExlc3NWYWx1ZXMoQ1NTUGFyc2VyVmFsdWUmLCBV
bml0cywgQ1NTUGFyc2VyTW9kZSk7CisKKyAgICBpbmxpbmUgYm9vbCB2YWxpZGF0ZVVuaXQoVmFs
dWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlLCBVbml0cyB1bml0RmxhZ3MpIHsgcmV0dXJuIHZhbGlk
YXRlVW5pdCh2YWx1ZSwgdW5pdEZsYWdzLCBtX2NvbnRleHQubW9kZSk7IH0KKyAgICBib29sIHZh
bGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsK
KworICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mKTsKKyAgICBpbnQgY29sb3JJbnRGcm9tVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRp
b24mKTsKKyAgICBkb3VibGUgcGFyc2VkRG91YmxlKFZhbHVlV2l0aENhbGN1bGF0aW9uJik7Cisg
ICAgCisgICAgZnJpZW5kIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbkluZm87CisgICAgZnJpZW5k
IGNsYXNzIEZpbHRlck9wZXJhdGlvbkluZm87Cit9OworCitDU1NQcm9wZXJ0eUlEIGNzc1Byb3Bl
cnR5SUQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7CitDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5
SUQoY29uc3QgU3RyaW5nJik7CitDU1NWYWx1ZUlEIGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENT
U1BhcnNlclN0cmluZyYpOworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgY3NzUHJvcGVydHlOYW1l
SU9TQWxpYXNpbmcoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiYgcHJvcGVy
dHlOYW1lQWxpYXMsIHVuc2lnbmVkJiBuZXdMZW5ndGgpOworI2VuZGlmCisKK2NsYXNzIFNob3J0
aGFuZFNjb3BlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBT
aG9ydGhhbmRTY29wZShDU1NQYXJzZXIqIHBhcnNlciwgQ1NTUHJvcGVydHlJRCBwcm9wSWQpIDog
bV9wYXJzZXIocGFyc2VyKQorICAgIHsKKyAgICAgICAgaWYgKCEobV9wYXJzZXItPm1faW5QYXJz
ZVNob3J0aGFuZCsrKSkKKyAgICAgICAgICAgIG1fcGFyc2VyLT5tX2N1cnJlbnRTaG9ydGhhbmQg
PSBwcm9wSWQ7CisgICAgfQorICAgIH5TaG9ydGhhbmRTY29wZSgpCisgICAgeworICAgICAgICBp
ZiAoISgtLW1fcGFyc2VyLT5tX2luUGFyc2VTaG9ydGhhbmQpKQorICAgICAgICAgICAgbV9wYXJz
ZXItPm1fY3VycmVudFNob3J0aGFuZCA9IENTU1Byb3BlcnR5SW52YWxpZDsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQ1NTUGFyc2VyKiBtX3BhcnNlcjsKK307CisKK3N0cnVjdCBDU1NQYXJzZXI6
OkxvY2F0aW9uIHsKKyAgICBpbnQgbGluZU51bWJlcjsKKyAgICBpbnQgY29sdW1uTnVtYmVyOwor
ICAgIENTU1BhcnNlclN0cmluZyB0b2tlbjsKK307CisKK1N0cmluZyBxdW90ZUNTU1N0cmluZyhj
b25zdCBTdHJpbmcmKTsKK1N0cmluZyBxdW90ZUNTU1N0cmluZ0lmTmVlZGVkKGNvbnN0IFN0cmlu
ZyYpOworU3RyaW5nIHF1b3RlQ1NTVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wg
aXNWYWxpZE50aFRva2VuKGNvbnN0IENTU1BhcnNlclN0cmluZyYpOworCit0ZW1wbGF0ZSA8Pgor
aW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpzZXRUb2tlblN0YXJ0PExDaGFyPihMQ2hhciogdG9rZW5T
dGFydCkKK3sKKyAgICBtX3Rva2VuU3RhcnQucHRyOCA9IHRva2VuU3RhcnQ7Cit9CisKK3RlbXBs
YXRlIDw+CitpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFRva2VuU3RhcnQ8VUNoYXI+KFVDaGFy
KiB0b2tlblN0YXJ0KQoreworICAgIG1fdG9rZW5TdGFydC5wdHIxNiA9IHRva2VuU3RhcnQ7Cit9
CisKK2lubGluZSB1bnNpZ25lZCBDU1NQYXJzZXI6OnRva2VuU3RhcnRPZmZzZXQoKQoreworICAg
IGlmIChpczhCaXRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIG1fdG9rZW5TdGFydC5wdHI4IC0g
bV9kYXRhU3RhcnQ4LmdldCgpOworICAgIHJldHVybiBtX3Rva2VuU3RhcnQucHRyMTYgLSBtX2Rh
dGFTdGFydDE2LmdldCgpOworfQorCit1bnNpZ25lZCBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0
ZXJPZmZzZXQoKQoreworICAgIGlmIChpczhCaXRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudENoYXJhY3RlcjggLSBtX2RhdGFTdGFydDguZ2V0KCk7CisgICAgcmV0dXJuIG1fY3Vy
cmVudENoYXJhY3RlcjE2IC0gbV9kYXRhU3RhcnQxNi5nZXQoKTsKK30KKworaW5saW5lIFVDaGFy
IENTU1BhcnNlcjo6dG9rZW5TdGFydENoYXIoKQoreworICAgIGlmIChpczhCaXRTb3VyY2UoKSkK
KyAgICAgICAgcmV0dXJuICptX3Rva2VuU3RhcnQucHRyODsKKyAgICByZXR1cm4gKm1fdG9rZW5T
dGFydC5wdHIxNjsKK30KKworaW5saW5lIGJvb2wgaXNDdXN0b21Qcm9wZXJ0eU5hbWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIHByb3BlcnR5TmFtZS5sZW5ndGgo
KSA+IDIgJiYgcHJvcGVydHlOYW1lLmNoYXJhY3RlckF0KDApID09ICctJyAmJiBwcm9wZXJ0eU5h
bWUuY2hhcmFjdGVyQXQoMSkgPT0gJy0nOworfQorCitpbmxpbmUgaW50IGNzc3l5bGV4KHZvaWQq
IHl5bHZhbCwgQ1NTUGFyc2VyKiBwYXJzZXIpCit7CisgICAgcmV0dXJuIHBhcnNlci0+bGV4KHl5
bHZhbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCShyZXZpc2lvbiAyMDQ4MzkpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJNb2RlLmg6MjA0ODM5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ1NTUGFyc2VyTW9kZV9o
CisjZGVmaW5lIENTU1BhcnNlck1vZGVfaAorCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CisKK2VudW0gQ1NTUGFyc2VyTW9kZSB7Cisg
ICAgQ1NTUXVpcmtzTW9kZSwKKyAgICBDU1NTdHJpY3RNb2RlLAorICAgIC8vIFNWRyBzaG91bGQg
YWx3YXlzIGJlIGluIHN0cmljdCBtb2RlLiBGb3IgU1ZHIGF0dHJpYnV0ZXMsIHRoZSBydWxlcyBk
aWZmZXIgdG8gc3RyaWN0IHNvbWV0aW1lcy4KKyAgICBTVkdBdHRyaWJ1dGVNb2RlCit9OworCitp
bmxpbmUgQ1NTUGFyc2VyTW9kZSBzdHJpY3RUb0NTU1BhcnNlck1vZGUoYm9vbCBpblN0cmljdE1v
ZGUpCit7CisgICAgcmV0dXJuIGluU3RyaWN0TW9kZSA/IENTU1N0cmljdE1vZGUgOiBDU1NRdWly
a3NNb2RlOworfQorCitpbmxpbmUgYm9vbCBpc1N0cmljdFBhcnNlck1vZGUoQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQoreworICAgIHJldHVybiBjc3NQYXJzZXJNb2RlID09IENTU1N0cmlj
dE1vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOworfQorCitzdHJ1Y3Qg
Q1NTUGFyc2VyQ29udGV4dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgQ1NTUGFyc2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwg
PSBVUkwoKSk7CisgICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCYs
IGNvbnN0IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0
eVN0cmluZygpKTsKKworICAgIFVSTCBiYXNlVVJMOworICAgIFN0cmluZyBjaGFyc2V0OworICAg
IENTU1BhcnNlck1vZGUgbW9kZSB7IENTU1N0cmljdE1vZGUgfTsKKyAgICBib29sIGlzSFRNTERv
Y3VtZW50IHsgZmFsc2UgfTsKKyNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorICAgIGJvb2wg
Y3NzR3JpZExheW91dEVuYWJsZWQgeyBmYWxzZSB9OworI2VuZGlmCisjaWYgRU5BQkxFKElPU19U
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07Cisg
ICAgYm9vbCBlbmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUgeyB0cnVlIH07CisgICAg
Ym9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yIHsgZmFsc2UgfTsK
KyAgICBib29sIHNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCB7IGZhbHNlIH07Cit9OworCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmKTsKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
YSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CisKK1dF
QkNPUkVfRVhQT1JUIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENTU1BhcnNlckNvbnRl
eHQoKTsKKworfTsKKworI2VuZGlmIC8vIENTU1BhcnNlck1vZGVfaApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAkocmV2aXNpb24gMjA0ODM5
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoyMDQ4MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKKworI2luY2x1ZGUgIkNTU0N1c3Rv
bVByb3BlcnR5VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1
ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxlVmFsdWUuaCIKKyNp
bmNsdWRlICJTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCit2b2lkIGRlc3Ryb3koY29uc3QgQ1NTUGFyc2VyVmFs
dWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbikKKyAgICAgICAgZGVsZXRlIHZhbHVlLmZ1bmN0aW9uOworICAgIGVsc2UgaWYgKHZhbHVl
LnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkKKyAgICAgICAgZGVsZXRlIHZhbHVl
LnZhbHVlTGlzdDsKKyAgICBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpW
YXJpYWJsZSkKKyAgICAgICAgZGVsZXRlIHZhbHVlLnZhcmlhYmxlOworfQorCitDU1NQYXJzZXJW
YWx1ZUxpc3Q6On5DU1NQYXJzZXJWYWx1ZUxpc3QoKQoreworICAgIGZvciAoYXV0byYgdmFsdWUg
OiBtX3ZhbHVlcykKKyAgICAgICAgZGVzdHJveSh2YWx1ZSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2Vy
VmFsdWVMaXN0OjphZGRWYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAg
bV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKwordm9pZCBDU1NQYXJzZXJWYWx1ZUxpc3Q6Omlu
c2VydFZhbHVlQXQodW5zaWduZWQgaSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorewor
ICAgIG1fdmFsdWVzLmluc2VydChpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyVmFsdWVM
aXN0OjpleHRlbmQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBvdGhlcikKK3sKKyAgICBmb3IgKGF1dG8m
IHZhbHVlIDogb3RoZXIubV92YWx1ZXMpIHsKKyAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgdmFsdWUudW5pdCA9IDA7IC8vIFdlIG1vdmVkIHRoZSBDU1NQYXJzZXJWYWx1
ZSBmcm9tIHRoZSBvdGhlciBsaXN0OyB0aGlzIGFjdHMgbGlrZSBzdGQ6Om1vdmUuCisgICAgfQor
fQorCitib29sIENTU1BhcnNlclZhbHVlTGlzdDo6Y29udGFpbnNWYXJpYWJsZXMoKSBjb25zdAor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgeworICAgICAgICBh
dXRvKiBwYXJzZXJWYWx1ZSA9ICZtX3ZhbHVlc1tpXTsKKyAgICAgICAgaWYgKHBhcnNlclZhbHVl
LT51bml0ID09IENTU1BhcnNlclZhbHVlOjpWYXJpYWJsZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAocGFyc2VyVmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uICYmIHBhcnNlclZhbHVlLT5mdW5jdGlvbi0+YXJncworICAgICAgICAgICAgJiYgcGFy
c2VyVmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5jb250YWluc1ZhcmlhYmxlcygpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChwYXJzZXJWYWx1ZS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6VmFsdWVMaXN0ICYmIHBhcnNlclZhbHVlLT52YWx1ZUxpc3QtPmNvbnRhaW5zVmFy
aWFibGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlclZhbHVlOjpjcmVhdGVDU1NWYWx1
ZSgpCit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKyAgICBpZiAoaWQpCisg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7Cisg
ICAgCisgICAgaWYgKHVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7CisgICAgICAg
IGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlUGFyc2VyT3Bl
cmF0b3IoaVZhbHVlKTsKKyAgICAgICAgcHJpbWl0aXZlVmFsdWUtPnNldFByaW1pdGl2ZVR5cGUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfT1BFUkFUT1IpOworICAgICAgICByZXR1cm4g
V1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7CisgICAgfQorICAgIGlmICh1bml0ID09IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIENTU0Z1bmN0aW9uVmFsdWU6OmNyZWF0
ZShmdW5jdGlvbik7CisgICAgaWYgKHVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhcmlhYmxlKQor
ICAgICAgICByZXR1cm4gQ1NTVmFyaWFibGVWYWx1ZTo6Y3JlYXRlKHZhcmlhYmxlKTsKKyAgICBp
ZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQorICAgICAgICByZXR1cm4gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KCp2YWx1ZUxpc3QpOworCisgICAg
aWYgKHVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2luUXVpcmsoZlZhbHVlLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0VNUyk7CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHBy
aW1pdGl2ZVVuaXQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih1
bml0KTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVVuaXQpIHsKKyAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQ6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BST1BF
UlRZX0lEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WQUxVRV9JRDoKKyAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RyaW5nLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BBUlNFUl9JREVOVElGSUVSKTsKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSOgorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShm
VmFsdWUsIGlzSW50ID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSU5URUdFUiA6IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU1RSSU5HOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkk6CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUjoKKyAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VTklDT0RFX1JBTkdFOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
QVJTRVJfV0hJVEVTUEFDRToKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoc3RyaW5nLCBwcmltaXRpdmVVbml0KTsKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DTToKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RFRzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEOgorICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19NUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUzoKKyAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0tIWjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19W
TUlOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19SRU1TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DSFM6CisgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSOgorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShmVmFsdWUsIHByaW1pdGl2ZVVuaXQpOworICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VTktOT1dOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRS
OgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19SRUNUOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19SR0JDT0xPUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWDoKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19EUENNOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQUlSOgorI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfREFTSEJPQVJEX1JFR0lPTjoKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQVJTRVJfT1BFUkFUT1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BB
UlNFUl9JTlRFR0VSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSURF
TlRJRklFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUl9OQU1FOgor
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQRToKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRk9OVF9GQU1JTFk6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1FVQUQ6CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTEVOR1RIX1JFUEVBVDoKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DQUxDOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DQUxD
X1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0NTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQYWdlUHNldWRv
U2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKQoreworICAg
IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NUeXBlIHBzZXVkb1R5cGU7CisgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBzZXVkb1R5cGVTdHJpbmcsICJmaXJzdCIpKQor
ICAgICAgICBwc2V1ZG9UeXBlID0gQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc0ZpcnN0Owor
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBzZXVkb1R5cGVTdHJp
bmcsICJsZWZ0IikpCisgICAgICAgIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVk
b0NsYXNzTGVmdDsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShw
c2V1ZG9UeXBlU3RyaW5nLCAicmlnaHQiKSkKKyAgICAgICAgcHNldWRvVHlwZSA9IENTU1NlbGVj
dG9yOjpQYWdlUHNldWRvQ2xhc3NSaWdodDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2Vs
ZWN0b3I+KCk7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpQYWdlUHNldWRvQ2xhc3MpOworICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQYWdlUHNl
dWRvVHlwZShwc2V1ZG9UeXBlKTsKKyAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOworfQor
CitDU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVu
dFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBwc2V1
ZG9UeXBlU3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOworICAgIEF0b21p
Y1N0cmluZyBuYW1lID0gcHNldWRvVHlwZVN0cmluZzsKKworICAgIENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50VHlwZSBwc2V1ZG9UeXBlID0gQ1NTU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVu
dFR5cGUobmFtZSk7CisgICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnRVbmtub3duKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2VsZWN0
b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOworICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7CisgICAg
c2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVkb1R5cGUpOwor
ICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3Vz
dG9tTGVnYWN5UHJlZml4ZWQpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShuYW1lID09
ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgIi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIg
aXMgdGhlIG9ubHkgTGVnYWN5UHJlZml4IHBzZXVkbyB0eXBlLiIpOworICAgICAgICBpZiAobmFt
ZSA9PSAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciIpCisgICAgICAgICAgICBuYW1lID0gQXRv
bWljU3RyaW5nKCJwbGFjZWhvbGRlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIH0KKyAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0VmFsdWUobmFtZSk7Cisg
ICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKK0NTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9uSWRl
bnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+KiBwYXJz
ZWRTZWxlY3RvclZlY3RvcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSWRlbnRpZmll
ciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gImN1ZSgiKTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IHNlbGVj
dG9yVmVjdG9yKHBhcnNlZFNlbGVjdG9yVmVjdG9yKTsKKworICAgIGlmICghc2VsZWN0b3JWZWN0
b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0
b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKKyAgICBzZWxlY3Rvci0+
bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUoQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRDdWUpOworICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvclZlY3Rv
cik7CisgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKK30KKyNlbmRpZgorCitDU1NQYXJz
ZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNsb3R0ZWRG
dW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25JZGVudGlmaWVy
LCBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VkU2VsZWN0b3IpCit7CisgICAgQVNTRVJUX1VOVVNF
RChmdW5jdGlvbklkZW50aWZpZXIsIFN0cmluZyhmdW5jdGlvbklkZW50aWZpZXIpID09ICJzbG90
dGVkKCIpOworCisgICAgaWYgKCFwYXJzZWRTZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG93bmVkUGFyc2Vk
U2VsZWN0b3IocGFyc2VkU2VsZWN0b3IpOworCisgICAgZm9yIChhdXRvKiBjb21wb25lbnQgPSBw
YXJzZWRTZWxlY3RvcjsgY29tcG9uZW50OyBjb21wb25lbnQgPSBjb21wb25lbnQtPnRhZ0hpc3Rv
cnkoKSkgeworICAgICAgICBpZiAoY29tcG9uZW50LT5tYXRjaGVzUHNldWRvRWxlbWVudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBzZWxlY3RvclZl
Y3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4+PigpOworICAgIHNlbGVjdG9yVmVjdG9yLT5hcHBlbmQoV1RGTW92ZShvd25lZFBh
cnNlZFNlbGVjdG9yKSk7CisKKyAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxD
U1NQYXJzZXJTZWxlY3Rvcj4oKTsKKyAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2go
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOworICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5z
ZXRQc2V1ZG9FbGVtZW50VHlwZShDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNsb3R0ZWQpOwor
ICAgIHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvclZlY3Rvcik7CisgICAg
cmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKK30KKworQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1Bh
cnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0NsYXNzSG9zdEZ1bmN0aW9uU2VsZWN0b3IoY29uc3Qg
Q1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVjdG9yKiBw
YXJzZWRTZWxlY3RvcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSWRlbnRpZmllciwg
U3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gImhvc3QoIik7CisKKyAgICBpZiAoIXBhcnNl
ZFNlbGVjdG9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gb3duZWRQYXJzZWRTZWxlY3RvcihwYXJzZWRTZWxlY3Rvcik7
CisKKyAgICBmb3IgKGF1dG8qIGNvbXBvbmVudCA9IHBhcnNlZFNlbGVjdG9yOyBjb21wb25lbnQ7
IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIGlmIChjb21w
b25lbnQtPm1hdGNoZXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIHNlbGVjdG9yVmVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+KCk7CisgICAgc2VsZWN0
b3JWZWN0b3ItPmFwcGVuZChXVEZNb3ZlKG93bmVkUGFyc2VkU2VsZWN0b3IpKTsKKworICAgIGF1
dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOworICAg
IHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
OworICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9DbGFzc1R5cGUoQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzSG9zdCk7CisgICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3Io
KnNlbGVjdG9yVmVjdG9yKTsKKyAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOworfQorCitD
U1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xhc3NBbmRD
b21wYXRpYmlsaXR5RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0
cmluZykKK3sKKyAgICBpZiAocHNldWRvVHlwZVN0cmluZy5sZW5ndGgoKSAmJiBwc2V1ZG9UeXBl
U3RyaW5nW3BzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkgLSAxXSA9PSAnKCcpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVt
ZW50IHBzZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRT
dHJpbmcocHNldWRvVHlwZVN0cmluZyk7CisgICAgaWYgKHBzZXVkb1R5cGUucHNldWRvQ2xhc3Mg
IT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93bikgeworICAgICAgICBhdXRvIHNlbGVj
dG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKKyAgICAgICAgc2Vs
ZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7Cisg
ICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9DbGFzc1R5cGUocHNldWRvVHlw
ZS5wc2V1ZG9DbGFzcyk7CisgICAgICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7CisgICAg
fQorICAgIGlmIChwc2V1ZG9UeXBlLmNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50ICE9IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikgeworICAgICAgICBhdXRvIHNlbGVjdG9yID0g
c3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKKyAgICAgICAgc2VsZWN0b3It
Pm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKKyAgICAg
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVkb1R5cGUu
Y29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQpOworICAgICAgICBBdG9taWNTdHJpbmcgbmFtZSA9
IHBzZXVkb1R5cGVTdHJpbmc7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1
ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0NTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJTZWxlY3Rv
cigpCisgICAgOiBtX3NlbGVjdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VsZWN0b3I+KCkpCit7
Cit9CisKK0NTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJTZWxlY3Rvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdRTmFtZSkKKyAgICA6IG1fc2VsZWN0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDU1NT
ZWxlY3Rvcj4odGFnUU5hbWUpKQoreworfQorCitDU1NQYXJzZXJTZWxlY3Rvcjo6fkNTU1BhcnNl
clNlbGVjdG9yKCkKK3sKKyAgICBpZiAoIW1fdGFnSGlzdG9yeSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCAxNj4gdG9EZWxl
dGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvciA9IFdU
Rk1vdmUobV90YWdIaXN0b3J5KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG5leHQgPSBXVEZNb3ZlKHNlbGVjdG9yLT5tX3Rh
Z0hpc3RvcnkpOworICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoV1RGTW92ZShzZWxlY3RvcikpOwor
ICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc2VsZWN0b3Ig
PSBXVEZNb3ZlKG5leHQpOworICAgIH0KK30KKwordm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YWRv
cHRTZWxlY3RvclZlY3RvcihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
Pj4mIHNlbGVjdG9yVmVjdG9yKQoreworICAgIGF1dG8gc2VsZWN0b3JMaXN0ID0gc3RkOjptYWtl
X3VuaXF1ZTxDU1NTZWxlY3Rvckxpc3Q+KCk7CisgICAgc2VsZWN0b3JMaXN0LT5hZG9wdFNlbGVj
dG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKKyAgICBtX3NlbGVjdG9yLT5zZXRTZWxlY3Rvckxp
c3QoV1RGTW92ZShzZWxlY3Rvckxpc3QpKTsKK30KKwordm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6
c2V0TGFuZ0FyZ3VtZW50TGlzdChjb25zdCBWZWN0b3I8Q1NTUGFyc2VyU3RyaW5nPiYgc3RyaW5n
VmVjdG9yKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZ1ZlY3Rvci5pc0VtcHR5
KCksICJObyBDU1MgU2VsZWN0b3IgdGFrZXMgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4iKTsKKyAg
ICBhdXRvIGFyZ3VtZW50TGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPEF0b21pY1N0cmlu
Zz4+KCk7CisgICAgYXJndW1lbnRMaXN0LT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZ1Zl
Y3Rvci5zaXplKCkpOworICAgIGZvciAoY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZUFyZ3Vt
ZW50IDogc3RyaW5nVmVjdG9yKQorICAgICAgICBhcmd1bWVudExpc3QtPmFwcGVuZChsYW5ndWFn
ZUFyZ3VtZW50KTsKKyAgICBtX3NlbGVjdG9yLT5zZXRMYW5nQXJndW1lbnRMaXN0KFdURk1vdmUo
YXJndW1lbnRMaXN0KSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnNldFBzZXVkb0Ns
YXNzVmFsdWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9DbGFzc1N0cmluZykKK3sKKyAg
ICBBU1NFUlQobV9zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
OworCisgICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50IHBzZXVkb1R5
cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcocHNldWRv
Q2xhc3NTdHJpbmcpOworICAgIG1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShwc2V1ZG9U
eXBlLnBzZXVkb0NsYXNzKTsKK30KKworc3RhdGljIGJvb2wgc2VsZWN0b3JMaXN0TWF0Y2hlc1Bz
ZXVkb0VsZW1lbnQoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QpCit7CisgICAg
aWYgKCFzZWxlY3Rvckxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJT
ZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0b3Ip
KSB7CisgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc3ViU2VsZWN0
b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAg
ICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3Qq
IHN1YnNlbGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzZWxlY3Rvckxpc3RNYXRjaGVzUHNldWRvRWxlbWVudChzdWJzZWxlY3Rvckxp
c3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyU2Vs
ZWN0b3I6Om1hdGNoZXNQc2V1ZG9FbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxl
Y3Rvci0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSB8fCBzZWxlY3Rvckxpc3RNYXRjaGVzUHNldWRv
RWxlbWVudChtX3NlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2Vy
U2VsZWN0b3I6Omluc2VydFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGJlZm9yZSwg
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvciwgQ1NTU2VsZWN0b3I6
OlJlbGF0aW9uIGFmdGVyKQoreworICAgIGlmIChtX3RhZ0hpc3RvcnkpCisgICAgICAgIHNlbGVj
dG9yLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUobV90YWdIaXN0b3J5KSk7CisgICAgc2V0UmVsYXRp
b24oYmVmb3JlKTsKKyAgICBzZWxlY3Rvci0+c2V0UmVsYXRpb24oYWZ0ZXIpOworICAgIG1fdGFn
SGlzdG9yeSA9IFdURk1vdmUoc2VsZWN0b3IpOworfQorCit2b2lkIENTU1BhcnNlclNlbGVjdG9y
OjphcHBlbmRUYWdIaXN0b3J5KENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiwgc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvcikKK3sKKyAgICBDU1NQYXJzZXJT
ZWxlY3RvciogZW5kID0gdGhpczsKKyAgICB3aGlsZSAoZW5kLT50YWdIaXN0b3J5KCkpCisgICAg
ICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOworCisgICAgZW5kLT5zZXRSZWxhdGlvbihyZWxh
dGlvbik7CisgICAgZW5kLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsKK30KKwor
dm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YXBwZW5kVGFnSGlzdG9yeShDU1NQYXJzZXJTZWxlY3Rv
ckNvbWJpbmF0b3IgcmVsYXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
c2VsZWN0b3IpCit7CisgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGVuZCA9IHRoaXM7CisgICAgd2hp
bGUgKGVuZC0+dGFnSGlzdG9yeSgpKQorICAgICAgICBlbmQgPSBlbmQtPnRhZ0hpc3RvcnkoKTsK
KworICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiBzZWxlY3RvclJlbGF0aW9uOworICAgIHN3aXRj
aCAocmVsYXRpb24pIHsKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6Q2hp
bGQ6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6Q2hpbGQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpEZXNjZW5k
YW50U3BhY2U6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudDsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQor
ICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpEZXNjZW5kYW50RG91YmxlQ2hp
bGQ6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmlu
YXRvcjo6RGlyZWN0QWRqYWNlbnQ6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxl
Y3Rvcjo6RGlyZWN0QWRqYWNlbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUGFyc2Vy
U2VsZWN0b3JDb21iaW5hdG9yOjpJbmRpcmVjdEFkamFjZW50OgorICAgICAgICBzZWxlY3RvclJl
bGF0aW9uID0gQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBlbmQtPnNldFJlbGF0aW9uKHNlbGVjdG9yUmVsYXRpb24pOworCisjaWYgRU5B
QkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQorICAgIGlmIChyZWxhdGlvbiA9PSBDU1NQYXJzZXJT
ZWxlY3RvckNvbWJpbmF0b3I6OkRlc2NlbmRhbnREb3VibGVDaGlsZCkKKyAgICAgICAgZW5kLT5z
ZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgoKTsKKyNlbmRpZgorCisgICAgZW5kLT5z
ZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsKK30KKwordm9pZCBDU1NQYXJzZXJTZWxl
Y3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ1FOYW1lLCBi
b29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSkKK3sKKyAgICBhdXRvIHNlY29uZCA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgc2Vjb25kLT5tX3NlbGVjdG9yID0g
V1RGTW92ZShtX3NlbGVjdG9yKTsKKyAgICBzZWNvbmQtPm1fdGFnSGlzdG9yeSA9IFdURk1vdmUo
bV90YWdIaXN0b3J5KTsKKyAgICBtX3RhZ0hpc3RvcnkgPSBXVEZNb3ZlKHNlY29uZCk7CisKKyAg
ICBtX3NlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4odGFnUU5hbWUsIHRh
Z0lzRm9yTmFtZXNwYWNlUnVsZSk7CisgICAgbV9zZWxlY3Rvci0+c2V0UmVsYXRpb24oQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgJKHJldmlzaW9uIDIwNDgzOSkJKGZyb20gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oOjIwNDgzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5j
bHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1ZhbHVl
OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworLy8gVGhpcyBzaG91bGQgYmUgYSBTdHJpbmdWaWV3
IGJ1dCBjdXJyZW50bHkgaXQgY2FuJ3QgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYW4gZWxlbWVudCBv
ZiBhIHVuaW9uIGluIENTU1BhcnNlclZhbHVlLgorc3RydWN0IENTU1BhcnNlclN0cmluZyB7Cisg
ICAgdm9pZCBpbml0KExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgewor
ICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczggPSBjaGFyYWN0ZXJzOworICAgICAgICBtX2xlbmd0
aCA9IGxlbmd0aDsKKyAgICAgICAgbV9pczhCaXQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQg
aW5pdChVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
bV9kYXRhLmNoYXJhY3RlcnMxNiA9IGNoYXJhY3RlcnM7CisgICAgICAgIG1fbGVuZ3RoID0gbGVu
Z3RoOworICAgICAgICBtX2lzOEJpdCA9IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgaW5pdChj
b25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOworICAgICAgICBpZiAoIW1fbGVuZ3RoIHx8IHN0cmluZy5pczhCaXQoKSkgeworICAg
ICAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gY29uc3RfY2FzdDxMQ2hhcio+KHN0cmluZy5j
aGFyYWN0ZXJzOCgpKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBjb25zdF9jYXN0PFVDaGFy
Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1f
ZGF0YS5jaGFyYWN0ZXJzOCA9IDA7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgbV9p
czhCaXQgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4g
bV9pczhCaXQ7IH0KKyAgICBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChpczhC
aXQoKSk7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczg7IH0KKyAgICBVQ2hhciogY2hhcmFjdGVy
czE2KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJz
MTY7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBt
X2xlbmd0aCA9IGxlbmd0aDsgfQorCisgICAgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUlu
UGxhY2UoKTsKKworICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7
CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY2hhcmFj
dGVyczhbaV07CisgICAgICAgIHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczE2W2ldOworICAgIH0K
KworICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGlzOEJpdCgpID8gU3RyaW5n
KG1fZGF0YS5jaGFyYWN0ZXJzOCwgbV9sZW5ndGgpIDogU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJz
MTYsIG1fbGVuZ3RoKTsgfQorICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIGlzOEJpdCgpID8gQXRvbWljU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzOCwgbV9sZW5ndGgp
IDogQXRvbWljU3RyaW5nKG1fZGF0YS5jaGFyYWN0ZXJzMTYsIG1fbGVuZ3RoKTsgfQorCisgICAg
dW5pb24geworICAgICAgICBMQ2hhciogY2hhcmFjdGVyczg7CisgICAgICAgIFVDaGFyKiBjaGFy
YWN0ZXJzMTY7CisgICAgfSBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgYm9v
bCBtX2lzOEJpdDsKK307CisKK3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmLCBjb25zdCBjaGFy
ICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CisKK3N0cnVjdCBDU1NQYXJzZXJGdW5jdGlv
bjsKK3N0cnVjdCBDU1NQYXJzZXJWYXJpYWJsZTsKKworc3RydWN0IENTU1BhcnNlclZhbHVlIHsK
KyAgICBDU1NWYWx1ZUlEIGlkOworICAgIGJvb2wgaXNJbnQ7CisgICAgdW5pb24geworICAgICAg
ICBkb3VibGUgZlZhbHVlOworICAgICAgICBpbnQgaVZhbHVlOworICAgICAgICBDU1NQYXJzZXJT
dHJpbmcgc3RyaW5nOworICAgICAgICBDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb247CisgICAg
ICAgIENTU1BhcnNlclZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVM
aXN0KiB2YWx1ZUxpc3Q7CisgICAgfTsKKyAgICBlbnVtIHsKKyAgICAgICAgT3BlcmF0b3IgID0g
MHgxMDAwMDAsCisgICAgICAgIEZ1bmN0aW9uICA9IDB4MTAwMDAxLAorICAgICAgICBWYWx1ZUxp
c3QgPSAweDEwMDAwMiwKKyAgICAgICAgUV9FTVMgICAgID0gMHgxMDAwMDMsCisgICAgICAgIFZh
cmlhYmxlICA9IDB4MTAwMDA0CisgICAgfTsKKyAgICBpbnQgdW5pdDsKKworICAgIHZvaWQgc2V0
RnJvbVZhbHVlTGlzdChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0Pik7CisKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGNyZWF0ZUNTU1ZhbHVlKCk7Cit9OworCit2b2lkIGRlc3Ryb3ko
Y29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKKworY2xhc3MgQ1NTUGFyc2VyVmFsdWVMaXN0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QoKQorICAgICAgICA6IG1fY3VycmVudCgwKQorICAgIHsKKyAgICB9CisgICAgfkNTU1BhcnNl
clZhbHVlTGlzdCgpOworCisgICAgdm9pZCBhZGRWYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYp
OworICAgIHZvaWQgaW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCwgY29uc3QgQ1NTUGFyc2VyVmFsdWUm
KTsKKyAgICB2b2lkIGV4dGVuZChDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBj
dXJyZW50SW5kZXgoKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBDU1NQYXJzZXJWYWx1ZSog
Y3VycmVudCgpIHsgcmV0dXJuIG1fY3VycmVudCA8IG1fdmFsdWVzLnNpemUoKSA/ICZtX3ZhbHVl
c1ttX2N1cnJlbnRdIDogMDsgfQorICAgIENTU1BhcnNlclZhbHVlKiBuZXh0KCkgeyArK21fY3Vy
cmVudDsgcmV0dXJuIGN1cnJlbnQoKTsgfQorICAgIENTU1BhcnNlclZhbHVlKiBwcmV2aW91cygp
CisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAtLW1fY3VycmVudDsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQoKTsKKyAgICB9Cisg
ICAgdm9pZCBzZXRDdXJyZW50SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3ZhbHVlcy5zaXplKCkpOworICAgICAgICBpZiAoaW5kZXggPCBtX3Zh
bHVlcy5zaXplKCkpCisgICAgICAgICAgICBtX2N1cnJlbnQgPSBpbmRleDsKKyAgICB9CisKKyAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92YWx1
ZXMuc2l6ZSgpID8gJm1fdmFsdWVzW2ldIDogMDsgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV92
YWx1ZXMuY2xlYXIoKTsgfQorICAgIAorICAgIFN0cmluZyB0b1N0cmluZygpOworICAgIAorICAg
IGJvb2wgY29udGFpbnNWYXJpYWJsZXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX2N1cnJlbnQ7CisgICAgVmVjdG9yPENTU1BhcnNlclZhbHVlLCA0PiBtX3ZhbHVlczsKK307
CisKK3N0cnVjdCBDU1NQYXJzZXJGdW5jdGlvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQ1NTUGFyc2VyU3RyaW5nIG5hbWU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsKK307CisKK3N0cnVjdCBDU1NQYXJzZXJWYXJp
YWJsZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ1NTUGFy
c2VyU3RyaW5nIG5hbWU7IC8vIFRoZSBjdXN0b20gcHJvcGVydHkgbmFtZQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IGFyZ3M7IC8vIFRoZSBmYWxsYmFjayBhcmdzCit9
OworCitlbnVtIGNsYXNzIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvciB7CisgICAgQ2hpbGQs
CisgICAgRGVzY2VuZGFudFNwYWNlLAorI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkK
KyAgICBEZXNjZW5kYW50RG91YmxlQ2hpbGQsCisjZW5kaWYKKyAgICBEaXJlY3RBZGphY2VudCwK
KyAgICBJbmRpcmVjdEFkamFjZW50Cit9OworCitjbGFzcyBDU1NQYXJzZXJTZWxlY3RvciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIENTU1BhcnNl
clNlbGVjdG9yKiBwYXJzZVBhZ2VQc2V1ZG9TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcm
IHBzZXVkb1R5cGVTdHJpbmcpOworICAgIHN0YXRpYyBDU1NQYXJzZXJTZWxlY3RvciogcGFyc2VQ
c2V1ZG9FbGVtZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKTsK
KyAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvRWxlbWVudEN1ZUZ1bmN0
aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiopOworICAgIHN0YXRpYyBD
U1NQYXJzZXJTZWxlY3RvciogcGFyc2VQc2V1ZG9FbGVtZW50U2xvdHRlZEZ1bmN0aW9uU2VsZWN0
b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNl
bGVjdG9yKik7CisgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNz
SG9zdEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50
aWZpZXIsIENTU1BhcnNlclNlbGVjdG9yKik7CisgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9y
KiBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTZWxlY3RvcihDU1NQYXJz
ZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpOworCisgICAgQ1NTUGFyc2VyU2VsZWN0b3IoKTsK
KyAgICBleHBsaWNpdCBDU1NQYXJzZXJTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJik7Cisg
ICAgfkNTU1BhcnNlclNlbGVjdG9yKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0
b3I+IHJlbGVhc2VTZWxlY3RvcigpIHsgcmV0dXJuIFdURk1vdmUobV9zZWxlY3Rvcik7IH0KKwor
ICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9y
LT5zZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB2YWx1ZSwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3NlbGVjdG9yLT5zZXRB
dHRyaWJ1dGUodmFsdWUsIGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQorICAgIHZvaWQgc2V0QXJndW1l
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRBcmd1bWVudCh2
YWx1ZSk7IH0KKyAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNp
dGl2ZShib29sIGlzQ2FzZUluc2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZVZh
bHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShpc0Nhc2VJbnNlbnNpdGl2ZSk7IH0KKyAgICB2
b2lkIHNldE1hdGNoKENTU1NlbGVjdG9yOjpNYXRjaCB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRN
YXRjaCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlv
biB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbih2YWx1ZSk7IH0KKyAgICB2b2lkIHNl
dEZvclBhZ2UoKSB7IG1fc2VsZWN0b3ItPnNldEZvclBhZ2UoKTsgfQorCisgICAgdm9pZCBhZG9w
dFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
PiYgc2VsZWN0b3JWZWN0b3IpOworICAgIHZvaWQgc2V0TGFuZ0FyZ3VtZW50TGlzdChjb25zdCBW
ZWN0b3I8Q1NTUGFyc2VyU3RyaW5nPiYgc3RyaW5nVmVjdG9yKTsKKworICAgIHZvaWQgc2V0UHNl
dWRvQ2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKTsK
KyAgICBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0NsYXNzVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpOyB9CisgICAgYm9vbCBpc0N1
c3RvbVBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5pc0N1c3RvbVBz
ZXVkb0VsZW1lbnQoKTsgfQorCisgICAgYm9vbCBpc1BzZXVkb0VsZW1lbnRDdWVGdW5jdGlvbigp
IGNvbnN0CisgICAgeworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgcmV0dXJuIG1f
c2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgbV9zZWxl
Y3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1
ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KKworICAgIGJv
b2wgaGFzU2hhZG93RGVzY2VuZGFudCgpIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlc1BzZXVkb0Vs
ZW1lbnQoKSBjb25zdDsKKworICAgIENTU1BhcnNlclNlbGVjdG9yKiB0YWdIaXN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV90YWdIaXN0b3J5LmdldCgpOyB9CisgICAgdm9pZCBzZXRUYWdIaXN0b3J5
KHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IpIHsgbV90YWdIaXN0
b3J5ID0gV1RGTW92ZShzZWxlY3Rvcik7IH0KKyAgICB2b2lkIGNsZWFyVGFnSGlzdG9yeSgpIHsg
bV90YWdIaXN0b3J5LnJlc2V0KCk7IH0KKyAgICB2b2lkIGluc2VydFRhZ0hpc3RvcnkoQ1NTU2Vs
ZWN0b3I6OlJlbGF0aW9uIGJlZm9yZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGFmdGVyKTsKKyAgICB2b2lkIGFwcGVuZFRhZ0hpc3Rv
cnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+KTsKKyAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5h
dG9yLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKKyAgICB2b2lkIHByZXBl
bmRUYWdTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCB0YWdJc0Zvck5hbWVzcGFj
ZVJ1bGUgPSBmYWxzZSk7CisKK3ByaXZhdGU6CisjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVW
RUw0KQorICAgIHZvaWQgc2V0RGVzY2VuZGFudFVzZURvdWJsZUNoaWxkU3ludGF4KCkgeyBtX3Nl
bGVjdG9yLT5zZXREZXNjZW5kYW50VXNlRG91YmxlQ2hpbGRTeW50YXgoKTsgfQorI2VuZGlmCisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IG1fc2VsZWN0b3I7CisgICAgc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBtX3RhZ0hpc3Rvcnk7Cit9OworCitpbmxpbmUg
Ym9vbCBDU1NQYXJzZXJTZWxlY3Rvcjo6aGFzU2hhZG93RGVzY2VuZGFudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlNoYWRvd0Rl
c2NlbmRhbnQ7Cit9CisKK2lubGluZSB2b2lkIENTU1BhcnNlclZhbHVlOjpzZXRGcm9tVmFsdWVM
aXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHZhbHVlTGlzdCkKK3sKKyAg
ICBpZCA9IENTU1ZhbHVlSW52YWxpZDsKKyAgICB0aGlzLT52YWx1ZUxpc3QgPSB2YWx1ZUxpc3Qu
cmVsZWFzZSgpOworICAgIHVuaXQgPSBWYWx1ZUxpc3Q7Cit9CisKK3RlbXBsYXRlPHVuc2lnbmVk
IGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3Qg
Q1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVts
ZW5ndGhdKQoreworICAgIHJldHVybiBXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
Q29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvU1ZHQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL1NWR0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIwNDgzOSkJKGZy
b20gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHA6MjA0ODM5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9TVkdDU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDMyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDcsIDIwMTAgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgSW5jLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkNTU0luaGVyaXRlZFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgor
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNWR1BhaW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbnRyb2xDb2xvclZh
bHVlKENTU1ZhbHVlSUQgaWQpCit7CisgICAgcmV0dXJuIGlkID49IENTU1ZhbHVlQWN0aXZlYm9y
ZGVyICYmIENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpOworfQorCitib29s
IENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCit7CisgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
Km1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOworCisgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CisKKyAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IGZh
bHNlOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CisKKyAgICBzd2l0Y2ggKHBy
b3BJZCkgeworICAgIC8qIFRoZSBjb21tZW50IHRvIHRoZSByaWdodCBkZWZpbmVzIGFsbCB2YWxp
ZCB2YWx1ZSBvZiB0aGVzZQorICAgICAqIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBTVkcgMS4x
LCBBcHBlbmRpeCBOLiBQcm9wZXJ0eSBpbmRleCAqLworICAgIGNhc2UgQ1NTUHJvcGVydHlBbGln
bm1lbnRCYXNlbGluZToKKyAgICAvLyBhdXRvIHwgYmFzZWxpbmUgfCBiZWZvcmUtZWRnZSB8IHRl
eHQtYmVmb3JlLWVkZ2UgfCBtaWRkbGUgfAorICAgIC8vIGNlbnRyYWwgfCBhZnRlci1lZGdlIHwg
dGV4dC1hZnRlci1lZGdlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwKKyAgICAvLyBoYW5n
aW5nIHwgbWF0aGVtYXRpY2FsIHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVB
dXRvIHx8IGlkID09IENTU1ZhbHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwK
KyAgICAgICAgICAoaWQgPj0gQ1NTVmFsdWVCZWZvcmVFZGdlICYmIGlkIDw9IENTU1ZhbHVlTWF0
aGVtYXRpY2FsKSkKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQ6CisgICAgLy8gYmFz
ZWxpbmUgfCBzdXBlciB8IHN1YiB8IDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IHwgaW5oZXJpdAor
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBpZCA9PSBDU1NWYWx1ZVN1YiB8
fAorICAgICAgICAgICBpZCA+PSBDU1NWYWx1ZVN1cGVyKQorICAgICAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZl
ID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQs
IFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVy
dHlEb21pbmFudEJhc2VsaW5lOgorICAgIC8vIGF1dG8gfCB1c2Utc2NyaXB0IHwgbm8tY2hhbmdl
IHwgcmVzZXQtc2l6ZSB8IGlkZW9ncmFwaGljIHwKKyAgICAvLyBhbHBoYWJldGljIHwgaGFuZ2lu
ZyB8IG1hdGhlbWF0aWNhbCB8IGNlbnRyYWwgfCBtaWRkbGUgfAorICAgIC8vIHRleHQtYWZ0ZXIt
ZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBpbmhlcml0CisgICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwKKyAgICAgICAgICAoaWQgPj0gQ1NT
VmFsdWVVc2VTY3JpcHQgJiYgaWQgPD0gQ1NTVmFsdWVSZXNldFNpemUpIHx8CisgICAgICAgICAg
KGlkID49IENTU1ZhbHVlQ2VudHJhbCAmJiBpZCA8PSBDU1NWYWx1ZU1hdGhlbWF0aWNhbCkpCisg
ICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQ1NTUHJvcGVydHlFbmFibGVCYWNrZ3JvdW5kOgorICAgIC8vIGFjY3VtdWxhdGUgfCBu
ZXcgW3hdIFt5XSBbd2lkdGhdIFtoZWlnaHRdIHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBY2N1bXVsYXRlKSAvLyBUT0RPIDogbmV3CisgICAgICAgICAgICB2YWxpZF9wcmlt
aXRpdmUgPSB0cnVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJr
ZXJTdGFydDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXJrZXJFbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CisgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwor
ICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmlu
ZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOworICAgICAgICAgICAgaWYgKHBhcnNlZFZh
bHVlKQorICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFJ1bGU6ICAgICAgICAgICAg
Ly8gbm9uemVybyB8IGV2ZW5vZGQgfCBpbmhlcml0CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGxS
dWxlOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb256ZXJvIHx8IGlkID09IENTU1ZhbHVl
RXZlbm9kZCkKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVy
bGltaXQ+IHwgaW5oZXJpdAorICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWpvaW46
ICAgLy8gbWl0ZXIgfCByb3VuZCB8IGJldmVsIHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVNaXRlciB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kIHx8IGlkID09IENTU1ZhbHVlQmV2
ZWwpCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOiAgICAvLyBidXR0IHwgcm91bmQg
fCBzcXVhcmUgfCBpbmhlcml0CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUJ1dHQgfHwgaWQg
PT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNxdWFyZSkKKyAgICAgICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVN0cm9rZU9wYWNpdHk6ICAgLy8gPG9wYWNpdHktdmFsdWU+IHwgaW5oZXJpdAorICAgIGNh
c2UgQ1NTUHJvcGVydHlGaWxsT3BhY2l0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNp
dHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKKyAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIgfCBGUGVyY2VudCwgU1ZHQXR0cmlidXRlTW9kZSkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQ1NTUHJvcGVydHlTaGFwZVJlbmRlcmluZzoKKyAgICAvLyBhdXRvIHwgb3B0aW1pemVT
cGVlZCB8IGNyaXNwRWRnZXMgfCBnZW9tZXRyaWNQcmVjaXNpb24gfCBpbmhlcml0CisgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8
CisgICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZUNyaXNwZWRnZXMgfHwgaWQgPT0gQ1NTVmFsdWVH
ZW9tZXRyaWNwcmVjaXNpb24pCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvclJlbmRlcmluZzogLy8g
YXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZVF1YWxpdHkgfCBpbmhlcml0CisgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8
CisgICAgICAgICAgICBpZCA9PSBDU1NWYWx1ZU9wdGltaXplcXVhbGl0eSkKKyAgICAgICAgICAg
IHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJ1ZmZlcmVkUmVuZGVyaW5nOiAvLyBhdXRvIHwgZHluYW1pYyB8IHN0YXRpYworICAg
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRHluYW1pYyB8fCBp
ZCA9PSBDU1NWYWx1ZVN0YXRpYykKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yUHJvZmlsZTogLy8g
YXV0byB8IHNSR0IgfCA8bmFtZT4gfCA8dXJpPiBpbmhlcml0CisgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVTcmdiKQorICAgICAgICAgICAgdmFsaWRfcHJp
bWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29s
b3JJbnRlcnBvbGF0aW9uOiAgIC8vIGF1dG8gfCBzUkdCIHwgbGluZWFyUkdCIHwgaW5oZXJpdAor
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzOgorICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlU3JnYiB8fCBpZCA9PSBDU1NW
YWx1ZUxpbmVhcnJnYikKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworCisgICAgLyogU3RhcnQgb2Ygc3VwcG9ydGVkIENTUyBwcm9wZXJ0aWVzIHdp
dGggdmFsaWRhdGlvbi4gVGhpcyBpcyBuZWVkZWQgZm9yIHBhcnNlU2hvcnRIYW5kIHRvIHdvcmsK
KyAgICAgKiBjb3JyZWN0bHkgYW5kIGFsbG93cyBvcHRpbWl6YXRpb24gaW4gYXBwbHlSdWxlKC4u
KQorICAgICAqLworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6ICAgIC8vIHN0YXJ0
IHwgbWlkZGxlIHwgZW5kIHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTdGFy
dCB8fCBpZCA9PSBDU1NWYWx1ZU1pZGRsZSB8fCBpZCA9PSBDU1NWYWx1ZUVuZCkKKyAgICAgICAg
ICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBD
U1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogLy8gYXV0byB8IDxhbmdsZT4gfCBp
bmhlcml0CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pIHsKKyAgICAgICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBGQUxMVEhST1VHSDsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9u
SG9yaXpvbnRhbDogLy8gPGFuZ2xlPiAocmVzdHJpY3RlZCB0byBfZGVnXyBwZXIgU1ZHIDEuMSBz
cGVjKSB8IGluaGVyaXQKKyAgICAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKKyAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwor
CisgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5UGFpbnRPcmRlcjoKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBwYXJzZVBhaW50T3JkZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZpbGw6ICAgICAgICAgICAgICAgICAvLyA8cGFpbnQ+IHwgaW5oZXJpdAor
ICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6ICAgICAgICAgICAgICAgLy8gPHBhaW50PiB8IGlu
aGVyaXQKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKKyAg
ICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVOb25lKCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKKyAgICAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JWYWx1ZShpZCkgfHwgaWQg
PT0gQ1NTVmFsdWVNZW51KQorICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6
OmNyZWF0ZUNvbG9yKFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoaWQp
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgICAgIFJHQkEz
MiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlz
dC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVl
KCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuc3RyaW5nLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZVVSSSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0
cmluZyk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IHBhcnNlU1ZHUGFpbnQoKTsKKworICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQorICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5U3RvcENvbG9yOiAvLyBUT0RPIDogaWNjY29sb3IKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRp
bmdDb2xvcjoKKyAgICAgICAgaWYgKENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUo
aWQpCisgICAgICAgICAgICB8fCAoaWQgPj0gQ1NTVmFsdWVBbGljZWJsdWUgJiYgaWQgPD0gQ1NT
VmFsdWVZZWxsb3dncmVlbikpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpj
cmVhdGVGcm9tU3RyaW5nKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKKyAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKKyAgICAgICAgZWxz
ZSAvLyBUT0RPIDogc3ZnY29sb3IgKGljY0NvbG9yKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVNWR0NvbG9yKCk7CisKKyAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQorICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NT
UHJvcGVydHlWZWN0b3JFZmZlY3Q6IC8vIG5vbmUgfCBub24tc2NhbGluZy1zdHJva2UgfCBpbmhl
cml0CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgaWQgPT0gQ1NTVmFsdWVOb25T
Y2FsaW5nU3Ryb2tlKQorICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6CisgICAgLy8gbHIt
dGIgfCBybF90YiB8IHRiLXJsIHwgbHIgfCBybCB8IHRiIHwgaW5oZXJpdAorICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVMclRiIHx8IGlkID09IENTU1ZhbHVlUmxUYiB8fCBpZCA9PSBDU1NWYWx1
ZVRiUmwgfHwgaWQgPT0gQ1NTVmFsdWVMciB8fCBpZCA9PSBDU1NWYWx1ZVJsIHx8IGlkID09IENT
U1ZhbHVlVGIpCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDogICAgICAgICAvLyA8bGVu
Z3RoPiB8IGluaGVyaXQKKyAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldDoKKyAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxkYXNo
YXJyYXk+IHwgaW5oZXJpdAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQorICAgICAg
ICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOworCisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBDU1NQcm9wZXJ0eUtlcm5pbmc6ICAgICAgICAgICAgICAvLyBhdXRvIHwg
bm9ybWFsIHwgPGxlbmd0aD4gfCBpbmhlcml0CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDogICAgLy8g
PHVyaT4gfCBub25lIHwgaW5oZXJpdAorICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKKyAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkudW5pdCk7CisgICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCisgICAg
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OgorICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hh
ZG93KCptX3ZhbHVlTGlzdCwgcHJvcElkKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dWYWx1ZUxp
c3QpIHsKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUoc2hhZG93
VmFsdWVMaXN0KSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hc2tUeXBlOiAvLyBsdW1pbmFuY2UgfCBhbHBoYSB8IGluaGVyaXQKKyAg
ICAgICAgaWYgKGlkID09IENTU1ZhbHVlTHVtaW5hbmNlIHx8IGlkID09IENTU1ZhbHVlQWxwaGEp
CisgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOworICAgICAgICBicmVhazsKKwor
ICAgIC8qIHNob3J0aGFuZCBwcm9wZXJ0aWVzICovCisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtl
cjoKKyAgICB7CisgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Cisg
ICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICBpZiAoIXBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlNYXJrZXJTdGFydCwgaW1wb3J0YW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAgICAg
ICAgIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoMSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVz
Lmxhc3QoKS52YWx1ZSgpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlck1p
ZCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TWFy
a2VyRW5kLCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUN4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlDeToKKyAgICBjYXNlIENTU1Byb3BlcnR5UjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Ung6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlZOgorICAgICAgICB2YWxpZF9wcmlt
aXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCB8IEZQZXJjZW50KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IElmIHlvdSBjcmFzaCBoZXJlLCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEgY3NzIHByb3BlcnR5
IGFuZCBhcmUgbm90IGhhbmRsaW5nIGl0CisgICAgICAgIC8vIGluIGVpdGhlciB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQgb3IgdGhlIG9uZSBpbiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUKKyAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSgwLCAidW5pbXBsZW1lbnRlZCBwcm9wZXJ0eUlEOiAlZCIsIHBy
b3BJZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmFsaWRfcHJp
bWl0aXZlKSB7CisgICAgICAgIGlmIChpZCAhPSAwKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCk7
CisgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24u
dmFsdWUoKS5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhD
YWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQorICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5R
dWlyayh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19FTVMpOworICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxh
dGlvbikpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7CisgICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7CisgICAgfQorICAgIGlmICghcGFyc2VkVmFsdWUgfHwgKG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkgJiYgIWluU2hvcnRoYW5kKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocGFyc2VkVmFsdWUpLCBpbXBvcnRhbnQp
OworICAgIHJldHVybiB0cnVlOworfQorCitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6
OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBy
ZXQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBib29sIHZhbGlkX3By
aW1pdGl2ZSA9IHRydWU7CisgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CisgICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQ
ZXJjZW50IHwgRk5vbk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7CisgICAgICAgIGlmICghdmFsaWRf
cHJpbWl0aXZlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
ZGUgZG9lc24ndCBoYW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCisgICAgICAgIGlmICh2YWx1ZS0+
aWQgIT0gMCkKKyAgICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0tIWikKKyAgICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIHZhbHVlLT51bml0KSk7CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsK
KyAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykKKyAgICAgICAgICAgIHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKKyAgICB9CisgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiByZXQ7Cit9CisKK1JlZlB0cjxTVkdQYWludD4g
Q1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKK3sKKyAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFu
c3BhcmVudDsKKyAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCksIGMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gU1ZHUGFpbnQ6
OmNyZWF0ZUNvbG9yKENvbG9yKGMpKTsKK30KKworUmVmUHRyPFNWR0NvbG9yPiBDU1NQYXJzZXI6
OnBhcnNlU1ZHQ29sb3IoKQoreworICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50Owor
ICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBTVkdDb2xvcjo6Y3JlYXRlRnJv
bUNvbG9yKENvbG9yKGMpKTsKK30KKworUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpw
YXJzZVBhaW50T3JkZXIoKQoreworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisKKyAgICBWZWN0b3I8Q1NTVmFsdWVJRD4gcGFpbnRUeXBlTGlzdDsK
KyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpbGw7CisgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzdHJva2U7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtYXJrZXJz
OworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
RmlsbCAmJiAhZmlsbCkKKyAgICAgICAgICAgIGZpbGwgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVTdHJva2UgJiYgIXN0cm9rZSkKKyAgICAgICAgICAgIHN0cm9rZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7CisgICAgICAgIGVsc2UgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU1hcmtlcnMgJiYgIW1hcmtlcnMpCisgICAgICAgICAgICBt
YXJrZXJzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHBhaW50
VHlwZUxpc3QuYXBwZW5kKHZhbHVlLT5pZCk7CisgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBwYXJzaW5nIHdlIHNlcmlhbGl6ZSB0aGUg
cGFpbnQtb3JkZXIgbGlzdC4gU2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvCisgICAgLy8gcG9w
IGEgbGFzdCBsaXN0IGl0ZW1zIGZyb20gQ1NTVmFsdWVMaXN0IHdpdGhvdXQgYmlnZ2VyIGNvc3Qs
IHdlIGNyZWF0ZSB0aGUKKyAgICAvLyBsaXN0IGFmdGVyIHBhcnNpbmcuIAorICAgIENTU1ZhbHVl
SUQgZmlyc3RQYWludE9yZGVyVHlwZSA9IHBhaW50VHlwZUxpc3QuYXQoMCk7CisgICAgYXV0byBw
YWludE9yZGVyTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAg
ICBzd2l0Y2ggKGZpcnN0UGFpbnRPcmRlclR5cGUpIHsKKyAgICBjYXNlIENTU1ZhbHVlRmlsbDoK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBDU1NWYWx1ZVN0cm9rZToKKyAgICAgICAg
cGFpbnRPcmRlckxpc3QtPmFwcGVuZChmaXJzdFBhaW50T3JkZXJUeXBlID09IENTU1ZhbHVlRmls
bCA/IGZpbGwucmVsZWFzZU5vbk51bGwoKSA6IHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgaWYgKHBhaW50VHlwZUxpc3Quc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgaWYgKHBh
aW50VHlwZUxpc3QuYXQoMSkgPT0gQ1NTVmFsdWVNYXJrZXJzKQorICAgICAgICAgICAgICAgIHBh
aW50T3JkZXJMaXN0LT5hcHBlbmQobWFya2Vycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlTWFya2VyczoKKyAgICAgICAgcGFp
bnRPcmRlckxpc3QtPmFwcGVuZChtYXJrZXJzLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBp
ZiAocGFpbnRUeXBlTGlzdC5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBpZiAocGFpbnRUeXBl
TGlzdC5hdCgxKSA9PSBDU1NWYWx1ZVN0cm9rZSkKKyAgICAgICAgICAgICAgICBwYWludE9yZGVy
TGlzdC0+YXBwZW5kKHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdURk1vdmUocGFpbnRPcmRlckxpc3QpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHJldmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsOCBAQCBhdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQgaW5pdGlhbD10cnVlLCBjCiAKIG5ld0Jsb2NrSW5zaWRlSW5s
aW5lTW9kZWxFbmFibGVkIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZy
YW1lcz0xCiAKK25ld0NTU1BhcnNlckVuYWJsZWQgaW5pdGlhbD1mYWxzZQorCiBodHRwRXF1aXZF
bmFibGVkIGluaXRpYWw9dHJ1ZQogCiAjIFNvbWUgcG9ydHMgKGUuZy4gaU9TKSBtaWdodCBjaG9v
c2UgdG8gZGlzcGxheSBhdHRhY2htZW50cyBpbmxpbmUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0
aGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQ4NDIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OCBAQAorMjAxNi0wOC0yMyAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgcHJlZiBmb3IgZW5hYmxpbmcgbmV3IENTUyBwYXJzaW5nIGFuZCBtb3ZlIHBhcnNlciBm
aWxlcyBpbnRvIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTA5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1By
ZWZlcmVuY2VzU2V0TmV3Q1NTUGFyc2VyRW5hYmxlZCk6CisgICAgICAgIChXS1ByZWZlcmVuY2Vz
R2V0TmV3Q1NTUGFyc2VyRW5hYmxlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisK
IDIwMTYtMDgtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMjA0MjQzLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCShyZXZpc2lvbiAyMDQ4NDIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDcgQEAKICAgICBtYWNybyhFbmFibGVJbmhlcml0
VVJJUXVlcnlDb21wb25lbnQsIGVuYWJsZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudCwgQm9vbCwg
Ym9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKFNlcnZpY2VDb250cm9sc0VuYWJsZWQs
IHNlcnZpY2VDb250cm9sc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAg
ICBtYWNybyhOZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZCwgbmV3QmxvY2tJbnNpZGVJ
bmxpbmVNb2RlbEVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKKyAgICBtYWNy
byhOZXdDU1NQYXJzZXJFbmFibGVkLCBuZXdDU1NQYXJzZXJFbmFibGVkLCBCb29sLCBib29sLCBm
YWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oSFRUUEVxdWl2RW5hYmxlZCwgaHR0cEVxdWl2RW5h
YmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCwgbW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFs
c2UsICIiLCAiIikgXAogICAgIG1hY3JvKFNoYWRvd0RPTUVuYWJsZWQsIHNoYWRvd0RPTUVuYWJs
ZWQsIEJvb2wsIGJvb2wsIHRydWUsICJTaGFkb3cgRE9NIiwgIkhUTUwgU2hhZG93IERPTSBwcm90
b3R5cGUiKSBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyMDQ4NDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjEsNiAr
MTI2MSwxNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXROZXdCbG9ja0luc2lkZUlubGluCiAgICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm5ld0Jsb2NrSW5zaWRlSW5saW5lTW9kZWxF
bmFibGVkKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldE5ld0NTU1BhcnNlckVuYWJsZWQo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldE5ld0NTU1BhcnNlckVuYWJsZWQoZmxhZyk7Cit9CisKK2Jv
b2wgV0tQcmVmZXJlbmNlc0dldE5ld0NTU1BhcnNlckVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bmV3
Q1NTUGFyc2VyRW5hYmxlZCgpOworfQorCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhlbENT
U09NRWxlbWVudE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYs
IGJvb2wgZmxhZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTdWJwaXhlbENT
U09NRWxlbWVudE1ldHJpY3NFbmFibGVkKGZsYWcpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHJl
dmlzaW9uIDIwNDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDEwIEBAIFdL
X0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZXdCbG9ja0kKIFdLX0VYUE9SVCBib29sIFdL
UHJlZmVyZW5jZXNHZXROZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmKTsKIAogLy8gRGVmYXVsdHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZl
cmVuY2VzU2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dL
X0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYpOworCisvLyBEZWZhdWx0cyB0byBmYWxzZS4KIFdLX0VYUE9SVCB2b2lkIFdLUHJl
ZmVyZW5jZXNTZXRTdWJwaXhlbENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFN1YnBpeGVsQ1NT
T01FbGVtZW50TWV0cmljc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIw
NDg0MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA5Myw3ICszMDkzLDggQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZQogICAgIHNldHRpbmdzLnNldFNpbXBsZUxpbmVMYXlvdXREZWJ1
Z0JvcmRlcnNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tl
eTo6c2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWRLZXkoKSkpOwogICAgIAogICAg
IHNldHRpbmdzLnNldE5ld0Jsb2NrSW5zaWRlSW5saW5lTW9kZWxFbmFibGVkKHN0b3JlLmdldEJv
b2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bmV3QmxvY2tJbnNpZGVJbmxpbmVNb2Rl
bEVuYWJsZWRLZXkoKSkpOwotICAgIAorICAgIHNldHRpbmdzLnNldE5ld0NTU1BhcnNlckVuYWJs
ZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpuZXdDU1NQYXJz
ZXJFbmFibGVkS2V5KCkpKTsKKwogICAgIHNldHRpbmdzLnNldFN1YnBpeGVsQ1NTT01FbGVtZW50
TWV0cmljc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
OjpzdWJwaXhlbENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkS2V5KCkpKTsKIAogICAgIHNldHRp
bmdzLnNldFVzZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3Ioc3RvcmUu
Z2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp1c2VMZWdhY3lUZXh0QWxpZ25Q
b3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yS2V5KCkpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>