<?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>175396</bug_id>
          
          <creation_ts>2017-08-09 14:28:16 -0700</creation_ts>
          <short_desc>Support compiling catch in the FTL</short_desc>
          <delta_ts>2017-09-27 12:50:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174590</dependson>
    
    <dependson>176060</dependson>
          <blocked>175397</blocked>
    
    <blocked>176336</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1337132</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-09 14:28:16 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342129</commentid>
    <comment_count>1</comment_count>
      <attachid>319011</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-24 12:41:31 -0700</bug_when>
    <thetext>Created attachment 319011
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342254</commentid>
    <comment_count>2</comment_count>
      <attachid>319039</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-24 16:57:04 -0700</bug_when>
    <thetext>Created attachment 319039
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342263</commentid>
    <comment_count>3</comment_count>
      <attachid>319044</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-24 17:17:53 -0700</bug_when>
    <thetext>Created attachment 319044
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342321</commentid>
    <comment_count>4</comment_count>
      <attachid>319063</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-24 22:16:05 -0700</bug_when>
    <thetext>Created attachment 319063
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342563</commentid>
    <comment_count>5</comment_count>
      <attachid>319111</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-25 16:22:08 -0700</bug_when>
    <thetext>Created attachment 319111
WIP

Not using EntrySwitch for catch yet, but much of it is wired through the DFG at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342602</commentid>
    <comment_count>6</comment_count>
      <attachid>319124</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-25 18:10:04 -0700</bug_when>
    <thetext>Created attachment 319124
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342609</commentid>
    <comment_count>7</comment_count>
      <attachid>319127</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-25 18:33:34 -0700</bug_when>
    <thetext>Created attachment 319127
WIP

A bunch of the try/catch microbenchmarks run. I&apos;m running the full test suite now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342611</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-25 19:01:31 -0700</bug_when>
    <thetext>Attachment 319127 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:265:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:287:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:292:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:293:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:300:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:309:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp:67:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLState.cpp:83:  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: 9 in 33 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>1342646</commentid>
    <comment_count>9</comment_count>
      <attachid>319127</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-26 05:40:51 -0700</bug_when>
    <thetext>Comment on attachment 319127
WIP

Attachment 319127 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/4385073

New failing tests:
microbenchmarks/delta-blue-try-catch.js.ftl-eager-no-cjit
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager-no-cjit
stress/typedarray-bad-getter.js.ftl-eager-no-cjit-b3o1
stress/tail-call-recognize.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/unicode-escape-sequences.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-shorthand-construction.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager
stress/activation-sink-default-value-tdz-error.js.ftl-eager-no-cjit
stress/typedarray-access-monomorphic-neutered.js.ftl-eager
stress/typedarray-access-monomorphic-neutered.js.ftl-eager-no-cjit-b3o1
stress/const-tdz.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/exception-expression-offset.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/parser-error-messages.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-proto-func-property-getter-except.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords.js.default
stress/activation-sink-default-value-tdz-error.js.ftl-eager-no-cjit-b3o1
stress/typedarray-access-monomorphic-neutered.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-datetimeformat.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/es6-function-properties.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager
stress/typedarray-functions-with-neutered.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/typedarray-prototype.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-proto-func-length-getter-except.js.layout-ftl-eager-no-cjit
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/regress-150513.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/resolve-arguments-from-scope.js.layout-ftl-eager-no-cjit
stress/const-tdz.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-numberformat.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords_sm.js.default
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-all-the-places-broken.js.layout-ftl-eager-no-cjit
stress/typedarray-bad-getter.js.ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.default
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout-ftl-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-no-put-stack-validate
jsc-layout-tests.yaml/js/script-tests/intl-collator.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit
stress/activation-sink-default-value-tdz-error.js.ftl-eager
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-validate-sampling-profiler
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-no-inline-validate
stress/typedarray-access-neutered.js.ftl-eager
stress/class-syntax-super-in-eval.js.ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/basic-strict-mode.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-b3o1
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager
stress/eval-func-decl-in-global-of-eval.js.ftl-eager-no-cjit-b3o1
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager
stress/tail-call-recognize.js.ftl-eager-no-cjit
stress/typedarray-access-neutered.js.ftl-eager-no-cjit-b3o1
stress/typedarray-bad-getter.js.ftl-eager
stress/class-syntax-super-in-eval.js.ftl-eager-no-cjit-b3o1
stress/const-semantics.js.ftl-eager
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Miscellaneous/HasOnlyWritableDataPropertiesCache.js.default
stress/const-semantics.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/date-toLocaleString.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arrowfunction-syntax-errors.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager-no-cjit
microbenchmarks/delta-blue-try-catch.js.ftl-eager-no-cjit-b3o1
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/statement-list-item-syntax-errors.js.layout-ftl-eager-no-cjit
stress/tail-call-recognize.js.ftl-eager
stress/const-semantics.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/setPrototypeOf.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/class-syntax-super.js.layout-ftl-eager-no-cjit
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager-no-cjit
stress/eval-func-decl-in-global-of-eval.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/symbol-abstract-relational-comparison.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/date-proto-generic-invocation.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Lib/construct.js.default
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/reserved-words.js.layout-ftl-eager-no-cjit
stress/typedarray-access-neutered.js.ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/class-syntax-name.js.layout-ftl-eager-no-cjit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342649</commentid>
    <comment_count>10</comment_count>
      <attachid>319127</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-26 07:37:41 -0700</bug_when>
    <thetext>Comment on attachment 319127
WIP

Attachment 319127 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/4385462

New failing tests:
microbenchmarks/delta-blue-try-catch.js.ftl-eager-no-cjit
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager-no-cjit
stress/typedarray-bad-getter.js.ftl-eager-no-cjit-b3o1
stress/tail-call-recognize.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/unicode-escape-sequences.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-shorthand-construction.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager
stress/activation-sink-default-value-tdz-error.js.ftl-eager-no-cjit
stress/typedarray-access-monomorphic-neutered.js.ftl-eager
stress/typedarray-access-monomorphic-neutered.js.ftl-eager-no-cjit-b3o1
stress/const-tdz.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/exception-expression-offset.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/parser-error-messages.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-proto-func-property-getter-except.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords.js.default
stress/activation-sink-default-value-tdz-error.js.ftl-eager-no-cjit-b3o1
stress/typedarray-access-monomorphic-neutered.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-datetimeformat.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/es6-function-properties.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager
stress/typedarray-functions-with-neutered.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/typedarray-prototype.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-proto-func-length-getter-except.js.layout-ftl-eager-no-cjit
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/regress-150513.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/resolve-arguments-from-scope.js.layout-ftl-eager-no-cjit
stress/const-tdz.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-numberformat.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords_sm.js.default
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-all-the-places-broken.js.layout-ftl-eager-no-cjit
stress/typedarray-bad-getter.js.ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.default
jsc-layout-tests.yaml/js/script-tests/regress-150434.js.layout-ftl-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-no-put-stack-validate
jsc-layout-tests.yaml/js/script-tests/intl-collator.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit
stress/activation-sink-default-value-tdz-error.js.ftl-eager
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-validate-sampling-profiler
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-no-inline-validate
stress/typedarray-access-neutered.js.ftl-eager
stress/class-syntax-super-in-eval.js.ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/basic-strict-mode.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-no-cjit-b3o1
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager
stress/eval-func-decl-in-global-of-eval.js.ftl-eager-no-cjit-b3o1
stress/eval-func-decl-block-with-var-sinthesize.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager
stress/tail-call-recognize.js.ftl-eager-no-cjit
stress/typedarray-access-neutered.js.ftl-eager-no-cjit-b3o1
stress/typedarray-bad-getter.js.ftl-eager
stress/class-syntax-super-in-eval.js.ftl-eager-no-cjit-b3o1
stress/const-semantics.js.ftl-eager
stress/eval-func-decl-in-eval-within-with-scope.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Miscellaneous/HasOnlyWritableDataPropertiesCache.js.default
stress/const-semantics.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/date-toLocaleString.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arrowfunction-syntax-errors.js.layout-ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager-no-cjit
microbenchmarks/delta-blue-try-catch.js.ftl-eager-no-cjit-b3o1
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager
jsc-layout-tests.yaml/js/script-tests/statement-list-item-syntax-errors.js.layout-ftl-eager-no-cjit
stress/tail-call-recognize.js.ftl-eager
stress/const-semantics.js.ftl-eager-no-cjit
stress/const-tdz.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/setPrototypeOf.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/class-syntax-super.js.layout-ftl-eager-no-cjit
stress/activation-sink-osrexit-default-value-tdz-error.js.ftl-eager-no-cjit
stress/eval-func-decl-in-global-of-eval.js.ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/symbol-abstract-relational-comparison.js.layout-ftl-eager-no-cjit
stress/typedarray-functions-with-neutered.js.ftl-eager-no-cjit
stress/eval-func-decl-in-eval-within-block-with-let.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/date-proto-generic-invocation.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Lib/construct.js.default
stress/eval-func-decl-within-eval-with-reassign-to-var.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/reserved-words.js.layout-ftl-eager-no-cjit
stress/typedarray-access-neutered.js.ftl-eager-no-cjit
stress/eval-func-decl-block-with-var-and-remove.js.ftl-eager-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/class-syntax-name.js.layout-ftl-eager-no-cjit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342953</commentid>
    <comment_count>11</comment_count>
      <attachid>319211</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-28 14:53:54 -0700</bug_when>
    <thetext>Created attachment 319211
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342956</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-28 14:56:43 -0700</bug_when>
    <thetext>Attachment 319211 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:265:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:287:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:292:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:293:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:300:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:309:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLState.cpp:83:  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/JavaScriptCore/ftl/FTLOSREntry.cpp:174:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:446:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:447:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:448:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 11 in 35 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>1343002</commentid>
    <comment_count>13</comment_count>
      <attachid>319222</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-28 17:38:29 -0700</bug_when>
    <thetext>Created attachment 319222
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343005</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-28 17:42:41 -0700</bug_when>
    <thetext>Attachment 319222 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:167:  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/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:289:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:311:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:316:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:317:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:324:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:333:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOSREntry.cpp:343:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCommonData.cpp:200:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:446:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:447:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:448:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 38 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>1343030</commentid>
    <comment_count>15</comment_count>
      <attachid>319231</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-28 19:19:31 -0700</bug_when>
    <thetext>Created attachment 319231
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343333</commentid>
    <comment_count>16</comment_count>
      <attachid>319312</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-29 17:12:35 -0700</bug_when>
    <thetext>Created attachment 319312
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343337</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-29 17:16:03 -0700</bug_when>
    <thetext>Attachment 319312 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:168:  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/JavaScriptCore/dfg/DFGCommonData.cpp:200:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:445:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:446:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:447:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 40 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>1344187</commentid>
    <comment_count>18</comment_count>
      <attachid>319312</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-31 16:28:06 -0700</bug_when>
    <thetext>Comment on attachment 319312
patch

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

r=me with comments

&gt; JSTests/microbenchmarks/fake-iterators-that-throw-when-finished.js:76
&gt; -    if (true)
&gt; +    if (false)

lol

&gt; Source/JavaScriptCore/b3/air/AirGenerate.cpp:226
&gt; +                jit.emitFunctionPrologue();
&gt; +                if (code.frameSize()) {
&gt; +                    AllowMacroScratchRegisterUsageIf allowScratch(jit, isARM64());
&gt; +                    jit.addPtr(CCallHelpers::TrustedImm32(-code.frameSize()), MacroAssembler::stackPointerRegister);
&gt; +                }
&gt; +                
&gt; +                jit.emitSave(code.calleeSaveRegisterAtOffsetList());

Why not have Code set up default prologue generators that do this?

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1014
&gt; +        // In SSA, this is the argument speculation that we&apos;ve locked in for an entrypoint block.
&gt; +        //
&gt; +        // We must speculate on the argument types at each entrypoint even if operations involving
&gt; +        // arguments get killed. For example:
&gt; +        //
&gt; +        //     function foo(x) {
&gt; +        //        var tmp = x + 1;
&gt; +        //     }
&gt; +        //
&gt; +        // Assume that x is always int during profiling. The ArithAdd for &quot;x + 1&quot; will be dead and will
&gt; +        // have a proven check for the edge to &quot;x&quot;. So, we will not insert a Check node and we will
&gt; +        // kill the GetStack for &quot;x&quot;. But, we must do the int check in the progolue, because that&apos;s the
&gt; +        // thing we used to allow DCE of ArithAdd. Otherwise the add could be impure:
&gt; +        //
&gt; +        //     var o = {
&gt; +        //         valueOf: function() { do side effects; }
&gt; +        //     };
&gt; +        //     foo(o);
&gt; +        //
&gt; +        // If we DCE the ArithAdd and we remove the int check on x, then this won&apos;t do the side
&gt; +        // effects.
&gt; +        //
&gt; +        // By convention, entrypoint index 0 is used for the CodeBlock&apos;s op_enter entrypoint.
&gt; +        // So argumentFormats[0] are the argument formats for the normal call entrypoint.
&gt; +        Vector&lt;Vector&lt;FlushFormat&gt;&gt; argumentFormats;
&gt; +
&gt; +        // This maps an entrypoint index to a particular op_catch bytecode offset. By convention,
&gt; +        // it&apos;ll never have zero as a key because we use zero to mean the op_enter entrypoint.
&gt; +        HashMap&lt;unsigned, unsigned&gt; entrypointIndexToCatchBytecodeOffset;
&gt; +
&gt; +        unsigned numberOfEntrypoints { UINT_MAX };
&gt; +    };
&gt; +    std::unique_ptr&lt;SSAData&gt; m_ssaData;

There&apos;s a lot of stuff in Graph that is SSA-only and it&apos;s not in a structure like this.  Any reason why this can&apos;t just be directly on Graph?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345258</commentid>
    <comment_count>19</comment_count>
      <attachid>319312</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-04 14:43:14 -0700</bug_when>
    <thetext>Comment on attachment 319312
patch

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

&gt;&gt; Source/JavaScriptCore/b3/air/AirGenerate.cpp:226
&gt;&gt; +                jit.emitSave(code.calleeSaveRegisterAtOffsetList());
&gt; 
&gt; Why not have Code set up default prologue generators that do this?

I don&apos;t follow exactly what you&apos;re proposing here. Do you want Code to add a default generator for each index in its own HashMap? Or do you want it to have functions that know how to adjust SP and spill callee saves?

&gt;&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1014
&gt;&gt; +    std::unique_ptr&lt;SSAData&gt; m_ssaData;
&gt; 
&gt; There&apos;s a lot of stuff in Graph that is SSA-only and it&apos;s not in a structure like this.  Any reason why this can&apos;t just be directly on Graph?

Filip and I spoke offline. I may do this in a follow up patch for all the SSA data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345264</commentid>
    <comment_count>20</comment_count>
      <attachid>319863</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-04 15:30:40 -0700</bug_when>
    <thetext>Created attachment 319863
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345265</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-04 15:33:16 -0700</bug_when>
    <thetext>Attachment 319863 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:169:  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/JavaScriptCore/dfg/DFGCommonData.cpp:200:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:443:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:444:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:445:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 38 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>1345267</commentid>
    <comment_count>22</comment_count>
      <attachid>319864</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-04 16:06:56 -0700</bug_when>
    <thetext>Created attachment 319864
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345268</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-04 16:09:35 -0700</bug_when>
    <thetext>Attachment 319864 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:169:  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/JavaScriptCore/dfg/DFGCommonData.cpp:200:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:443:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:444:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:445:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 38 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>1345310</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-04 20:19:44 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #19)
&gt; Comment on attachment 319312 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319312&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/b3/air/AirGenerate.cpp:226
&gt; &gt;&gt; +                jit.emitSave(code.calleeSaveRegisterAtOffsetList());
&gt; &gt; 
&gt; &gt; Why not have Code set up default prologue generators that do this?
&gt; 
&gt; I don&apos;t follow exactly what you&apos;re proposing here. Do you want Code to add a
&gt; default generator for each index in its own HashMap? Or do you want it to
&gt; have functions that know how to adjust SP and spill callee saves?

I want a Code to add a default generator for each index. Then it doesn’t even need to be a hashmap. It would just be a vector. Maybe we should then combine it with the other entry point indexed vectors (like m_entrypointLabels) and have it be a vector of structs. 

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1014
&gt; &gt;&gt; +    std::unique_ptr&lt;SSAData&gt; m_ssaData;
&gt; &gt; 
&gt; &gt; There&apos;s a lot of stuff in Graph that is SSA-only and it&apos;s not in a structure like this.  Any reason why this can&apos;t just be directly on Graph?
&gt; 
&gt; Filip and I spoke offline. I may do this in a follow up patch for all the
&gt; SSA data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345312</commentid>
    <comment_count>25</comment_count>
      <attachid>319864</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-04 20:21:37 -0700</bug_when>
    <thetext>Comment on attachment 319864
patch for landing

Clearing flags on attachment: 319864

Committed r221602: &lt;http://trac.webkit.org/changeset/221602&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345313</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-04 20:21:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345314</commentid>
    <comment_count>27</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-04 20:27:07 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #24)
&gt; (In reply to Saam Barati from comment #19)
&gt; &gt; Comment on attachment 319312 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=319312&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/b3/air/AirGenerate.cpp:226
&gt; &gt; &gt;&gt; +                jit.emitSave(code.calleeSaveRegisterAtOffsetList());
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not have Code set up default prologue generators that do this?
&gt; &gt; 
&gt; &gt; I don&apos;t follow exactly what you&apos;re proposing here. Do you want Code to add a
&gt; &gt; default generator for each index in its own HashMap? Or do you want it to
&gt; &gt; have functions that know how to adjust SP and spill callee saves?
&gt; 
&gt; I want a Code to add a default generator for each index. Then it doesn’t
&gt; even need to be a hashmap. It would just be a vector. Maybe we should then
&gt; combine it with the other entry point indexed vectors (like
&gt; m_entrypointLabels) and have it be a vector of structs. 

Ok. I&apos;ll look into this in a followup. What makes it a bit tricky is that Air doesn&apos;t know about all the entrypoints in the vector until after LowerEntrySwitch. However, I want this API to be callable even before we emit B3 code.

&gt; 
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1014
&gt; &gt; &gt;&gt; +    std::unique_ptr&lt;SSAData&gt; m_ssaData;
&gt; &gt; &gt; 
&gt; &gt; &gt; There&apos;s a lot of stuff in Graph that is SSA-only and it&apos;s not in a structure like this.  Any reason why this can&apos;t just be directly on Graph?
&gt; &gt; 
&gt; &gt; Filip and I spoke offline. I may do this in a follow up patch for all the
&gt; &gt; SSA data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353676</commentid>
    <comment_count>28</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:50:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694123&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319011</attachid>
            <date>2017-08-24 12:41:31 -0700</date>
            <delta_ts>2017-08-24 16:57:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>8121</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYg
KzQyNiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBF
bnRyeVN3aXRjaDoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAg
IGNhc2UgQ2hlY2tCYWRDZWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJy
YW5jaDoKICAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2Ug
UmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw2ICsxNTI2LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBjYXNlIEVudHJ5U3dp
dGNoOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjIxMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ4
LDYgKzEwNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhM
b2NhbHNGb3JDYXRjaE9TUkVudHJ5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+
IG1faW5kZXhpbmdDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZh
bHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVN3
aXRjaERhdGE+IG1fZW50cnlTd2l0Y2hEYXRhOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
dHJpbmdTdHJ1Y3R1cmU7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzeW1ib2xTdHJ1Y3R1cmU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
MSw2ICszNzEsMTQgQEAgaW5saW5lIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50
YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCisgICAg
Y2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJt
aW5hbC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAg
ICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQogCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2Fz
ZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAzLDYgKzIwMywxMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9v
bCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgRW50cnlTd2l0Y2hEYXRhIHsKKyAgICBF
bnRyeVN3aXRjaERhdGEoKSA9IGRlZmF1bHQ7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBjYXNl
czsKK307CisKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZhckFyZ09m
ZnNldDsKIH07CkBAIC0xMjk3LDEyICsxMzAyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG9wKCkgPT0gU3dpdGNoOwogICAgIH0KIAorICAgIGJvb2wgaXNFbnRyeVN3aXRjaCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnRyeVN3aXRjaDsKKyAgICB9CisKICAg
ICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAg
ICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNo
OgorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAg
ICAgY2FzZSBUYWlsQ2FsbDoKICAgICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKQEAgLTEzNjQs
NiArMTM3NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvLmFzPFN3aXRjaERhdGEqPigpOwogICAgIH0KKworICAgIEVudHJ5
U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Vu
dHJ5U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8RW50cnlTd2l0Y2hEYXRh
Kj4oKTsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCiAgICAgewpA
QCAtMTM3NCw2ICsxMzkxLDggQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAg
ICAgIGNhc2UgU3dpdGNoOgogICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXMu
c2l6ZSgpICsgMTsKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIHJldHVy
biBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMzg2LDcgKzE0MDUsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXNbaW5kZXhdLnRhcmdldC5i
bG9jazsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ID09IHN3aXRjaERhdGEoKS0+
Y2FzZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmZhbGxUaHJv
dWdoLmJsb2NrOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNFbnRyeVN3aXRjaCgp
KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF07CiAK
ICAgICAgICAgc3dpdGNoIChpbmRleCkgewogICAgICAgICBjYXNlIDA6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
Myw2ICszOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
SnVtcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEJyYW5jaCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFN3aXRjaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEVudHJ5U3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oVGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKERpcmVjdFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgog
ICAgICAgICBjYXNlIFVwc2lsb246CiAgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5z
ZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBTU0EuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmNs
ZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAgICAgIG1fZ3JhcGguY2xlYXJDUFNDRkdEYXRhKCk7CisK
KyAgICAgICAgeworCisgICAgICAgIH0KKwogICAgICAgICBtX2dyYXBoLmVuc3VyZVNTQURvbWlu
YXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjIxMTUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2Ug
U3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2Fz
ZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
MjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTA2LDYgKzYxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKICAg
ICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgUGhp
OgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgYXBwbHlDb3VudHMoZGF0YS0+ZmFsbFRocm91Z2gpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEVudHJ5U3dpdGNoOiB7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIHRlcm1pbmFsLCAiVW5leHBlY3RlZCBFbnRyeVN3aXRjaCBpbiBDUFMgZm9ybS4iKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBicmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319039</attachid>
            <date>2017-08-24 16:57:04 -0700</date>
            <delta_ts>2017-08-24 17:17:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33357</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDgg
KzIyMSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAK
ICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJl
IHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjIxMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw2ICs0MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNo
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6
CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRj
aDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0
VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcElu
TG9vcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE1LDggKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5wcmludCgiREZH
IGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2lu
dFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3Vu
aWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAi
XG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3Vt
ZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAg
aWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50
cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMg
Zm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAg
ZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMp
CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtl
eS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTM4LDYgKzkz
OCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxv
Y2spOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMgaXMgd3Jvbmcgbm93IQogICAgICAgICBpZiAo
bV9lbnRyeXBvaW50cy5zaXplKCkgPD0gNCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBt
X2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5
NTcsNyBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAg
ICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Jsb2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQg
bV9udW1FbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBtX2VudHJ5cG9pbnRzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsK
IApAQCAtOTkxLDggKzk5NSw4IEBAIHB1YmxpYzoKICAgICAvLyBlZmZlY3RzLgogICAgIEhhc2hN
YXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1ZlY3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7
CiAgICAgCi0gICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMg
aXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAgIFZl
Y3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7CisgICAgLy8gSW4gQ1BTLCB0aGlz
IGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9u
IHRoYXQgd2UndmUgbG9ja2VkIGluIGZvciBhbiBlbnRyeXBvaW50IGJsb2NrLgorICAgIFZlY3Rv
cjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBtX2FyZ3VtZW50Rm9ybWF0czsKIAogICAgIFNlZ21lbnRl
ZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9u
czsKQEAgLTEwNDgsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZs
b3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFw
PEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CisgICAgQmFnPEVudHJ5U3dp
dGNoRGF0YT4gbV9lbnRyeVN3aXRjaERhdGE7CiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cmluZ1N0cnVjdHVyZTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NiArOTMsMzEgQEAgc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFicwogCiB2
b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKKyAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpID09IDEpOyAvLyBPT1BTOiBtYXliZSBkZWJ1ZyBhc3NlcnQgaGVyZQorCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICBpZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7CisgICAgICAg
ICAgICAvLyBXZSBib290c3RyYXAgdGhlIGVudHJ5cG9pbnRzIGJlbG93LgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhl
YWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKKyAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
KytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFy
KCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFp
bC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChCYXNpY0Js
b2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xMDAsNjkgKzEyNSw3NCBAQCB2b2lkIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkOwogCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpCiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKIAotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVu
IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gdGhlIEZUTCwgd2UgbmVlZCB0byBj
aGFuZ2UKLSAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIGRvIGhlcmU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAgICAgICAgICAgICAgICBmb3JtYXQg
PSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50
cy5maW5kKGVudHJ5cG9pbnQpLT52YWx1ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICBhdXRvIHNldEFyZ3VtZW50Rm9ybWF0ID0gWyZd
IChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgRmx1c2hGb3JtYXQgZm9ybWF0KSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUo
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
U3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJn
dW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CisgICAgICAgICAgICAgICAgdmFs
dWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVUb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IFdlIGNvdWxkIGdvIHR3byB3YXlzIGhlcmUuIE1vcmUg
YWNjdXJhdGUgdG8gbWFjaGluZSBzdGF0ZSwgSSB0aGluayB3ZSBjYW4gc2F5CisgICAgICAgICAg
ICAgICAgLy8gaGVhcCB0b3AgaGVyZS4gQnV0IHdlIGNhbiBhbHNvIHNheSBjbGVhciBiL2Mgbm9i
b2R5IHNob3VsZCBiZSByZWFkaW5nIGFuIGFyZ3VtZW50IHlldC4KKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT09QUzogc2FtZSBjb21tZW50IGFzIG9zciBhdmFpbGFiaWxp
dHkgY2FsY3VsYXRvcidzIGFzc3VtcHRpb24gb2YgdGhpcyEKKyAgICAgICAgICAgIE5vZGUqIGVu
dHJ5U3dpdGNoID0gZW50cnlwb2ludC0+dGVybWluYWwoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkpOworICAgICAgICAgICAgRW50cnlT
d2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBlbnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRh
KCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50
cnlwb2ludEluZGV4IDwgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5zaXplKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZW50cnlT
d2l0Y2hEYXRhLT5jYXNlc1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVu
dEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTsgKSB7CisgICAg
ICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGFyZ3VtZW50Rm9ybWF0c1thcmd1
bWVudF07CisgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50Rm9ybWF0KHN1Y2Nlc3Nvci0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZm9ybWF0KTsKKworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5h
cmd1bWVudChpKS5jbGVhcigpOworCisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
OworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlW2ldOworICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQoZW50cnlwb2ludC0+dmFsdWVzQXRIZWFk
LmFyZ3VtZW50KGkpLCBmb3JtYXQpOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
bG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5s
b2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICBpZiAo
bV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBib290c3Ry
YXBwZWQgdGhlIGVudHJ5cG9pbnRzIGFib3ZlLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgYmxv
Y2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7Ci0g
ICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKLSAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFp
bCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgewotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5sb2NhbChp
KS5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgfQogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC0zNzEsNiArNDAxLDE0IEBA
IGlubGluZSBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVQKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsK
ICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAgIGNhc2UgRW50cnlTd2l0
Y2g6IHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gdGVybWluYWwtPmVudHJ5U3dp
dGNoRGF0YSgpOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXSk7CisgICAgICAgIHJldHVybiBj
aGFuZ2VkOworICAgIH0KIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIxMTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
Myw2ICsyMDMsMTEgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRh
YmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgRW50cnlTd2l0Y2hEYXRh
KCkgPSBkZWZhdWx0OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gY2FzZXM7Cit9OworCiBzdHJ1
Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7CiB9OwpAQCAt
MTI5NywxMiArMTMwMiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcCgpID09IFN3aXRj
aDsKICAgICB9CiAKKyAgICBib29sIGlzRW50cnlTd2l0Y2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gRW50cnlTd2l0Y2g7CisgICAgfQorCiAgICAgYm9vbCBpc1Rlcm1p
bmFsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEp1bXA6
CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGFpbENh
bGw6CiAgICAgICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkBAIC0xMzY0LDYgKzEzNzUsMTIgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoaXNTd2l0Y2goKSk7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxTd2l0Y2hEYXRhKj4oKTsKICAgICB9CisKKyAgICBFbnRyeVN3aXRjaERhdGEqIGVu
dHJ5U3dpdGNoRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbnRyeVN3aXRjaCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEVudHJ5U3dpdGNoRGF0YSo+KCk7CisgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQogICAgIHsKQEAgLTEzNzQsNiArMTM5
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICBjYXNlIFN3aXRj
aDoKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSArIDE7Cisg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgp
LT5jYXNlcy5zaXplKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQpAQCAtMTM4Niw3ICsxNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IHJldHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XS50YXJnZXQuYmxvY2s7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaC5ibG9jazsKLSAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzRW50cnlTd2l0Y2goKSkKKyAgICAgICAgICAg
IHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXNbaW5kZXhdOwogCiAgICAgICAgIHN3aXRj
aCAoaW5kZXgpIHsKICAgICAgICAgY2FzZSAwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEp1bXAsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhCcmFuY2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnRyeVN3aXRjaCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhEaXJlY3RUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywzMCBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAg
ICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuZmlsbChBdmFpbGFi
aWxpdHk6OnVuYXZhaWxhYmxlKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
bV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAg
ICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KAotICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLAotICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CisKKyAgICAgICAgLy8gT09QUzogdGhp
cyBmZWVscyBhIGJpdCB1Z2x5LCBidXQgSSBkb24ndCB0aGluayB3ZSB3YW50IHRoaXMgcnVsZSBm
b3IgZ2VuZXJhbCBFbnRyeVN3aXRjaCBub2RlcworICAgICAgICAvLyBiZWNhdWUgaW1hZ2luZSB0
aGVyZSBpcyBhbiBFbnRyeVN3aXRjaCBpbiBhIHJhbmRvbSBsb2NhdGlvbiBpbiB0aGUgZ3JhcGgs
IHN1cmVseSB3ZSBkb24ndCB3YW50CisgICAgICAgIC8vIHRvIHNheSB0aGF0IGFsbCBpdHMgY2hp
bGRyZW4gaGF2ZSB0aGlzIGFyZ3VtZW50IHNwZWN1bGF0aW9uIGF0IHRoZSBoZWFkLiBUaGV5IG1h
eSBoYXZlIGNoYW5nZWQKKyAgICAgICAgLy8gdGhlIHZhbHVlIG9mIHRoYXQgc3RhY2sgc2xvdCEK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9ncmFwaC5i
bG9jaygwKS0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsK
KyAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAgICAgICAgICBy
b290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkg
PSBBdmFpbGFiaWxpdHkoZmx1c2hlZEF0KTsKICAgICAgICAgfQogCisgICAgICAgIHsKKyAgICAg
ICAgICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9IHJvb3QtPnRlcm1pbmFsKCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlTd2l0Y2goKSk7Cisg
ICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9IHJvb3RFbnRyeVN3
aXRjaC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5
cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8IGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXMu
c2l6ZSgpOyArK2VudHJ5cG9pbnRJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA9IGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXNbZW50cnlwb2ludEluZGV4XTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMg
PSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFy
Z3VtZW50LS07ICkgeworICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0g
Rmx1c2hlZEF0KGFyZ3VtZW50Rm9ybWF0c1thcmd1bWVudF0sIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmls
aXR5KGZsdXNoZWRBdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHBy
b2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgogICAgICAgICAKICAgICAgICAg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIGNhbGN1bGF0b3IobV9ncmFwaCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTIsNiArMTA5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBVcHNpbG9uOgogICAgICAg
ICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8gU1NBLgog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJERkdCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTU1LDYgKzU2
LDM4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVu
dHMoKTsKICAgICAgICAgbV9ncmFwaC5jbGVhckNQU0NGR0RhdGEoKTsKKworICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCBCYXNpY0Jsb2NrKiwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IGVudHJ5cG9pbnRJbmRleFRv
QXJndW1lbnRzQmxvY2s7CisKKyAgICAgICAgeworICAgICAgICAgICAgbV9ncmFwaC5tX251bUVu
dHJ5cG9pbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKTsKKworICAgICAgICAgICAg
QmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAgICAgQmFz
aWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCwgMS4wZik7CisKKyAgICAg
ICAgICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gbV9ncmFwaC5tX2VudHJ5
U3dpdGNoRGF0YS5hZGQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludElu
ZGV4ID0gMDsgZW50cnlwb2ludEluZGV4IDwgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRzOyArK2Vu
dHJ5cG9pbnRJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9sZFJvb3QgPSBt
X2dyYXBoLm1fZW50cnlwb2ludHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrLmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJv
b3QpOworICAgICAgICAgICAgICAgIGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXMuYXBwZW5kKG9sZFJv
b3QpOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkUm9vdC0+cHJlZGVjZXNz
b3JzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgb2xkUm9vdC0+cHJlZGVjZXNzb3JzLmFw
cGVuZChuZXdSb290KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50Rm9ybWF0cy5yZXNpemUobV9ncmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKworICAgICAg
ICAgICAgY29uc3QgYm9vbCBleGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luIHsgQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZXhpdE9LIH07CisgICAgICAg
ICAgICBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNO
b25lLCBFbnRyeVN3aXRjaCwgb3JpZ2luLCBPcEluZm8oZW50cnlTd2l0Y2hEYXRhKSk7CisKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5jbGVhcigpOworICAgICAgICAgICAgbV9n
cmFwaC5tX2VudHJ5cG9pbnRzLmFwcGVuZChuZXdSb290KTsKKworICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NB
RG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTM4Mywy
MyArNDE2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRzIGluIERGRyBTU0E6Ci0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50
cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50Rm9ybWF0cy5yZXNpemUoYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEZsdXNoRm9ybWF0
IGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotCi0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9h
cmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFw
aC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAgICAgICAgIGFyZ3VtZW50c1tp
XSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMgZm9y
IHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICBmb3IgKGF1dG8mIHBhaXIg
OiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9s
ZFJvb3QgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVu
dHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQob2xkUm9vdCktPnZhbHVl
OworICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7CisgICAg
ICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudHMu
c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9hcmd1bWVudE1h
cHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bm9kZSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnVuY2hlY2tlZEFwcGVuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRz
IGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSA9IFdURk1v
dmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtX2dy
YXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIyMTE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTAsNiArMzEwLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0
U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNl
IFN3aXRjaDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgUmV0dXJuOgogICAgIGNh
c2UgVGFpbENhbGw6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwNiw2ICs2MTA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFBo
aToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEx
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTEgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGFwcGx5Q291bnRzKGRhdGEtPmZhbGxUaHJvdWdoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCB0ZXJtaW5hbCwgIlVuZXhwZWN0ZWQgRW50cnlTd2l0Y2ggaW4gQ1BTIGZvcm0uIik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcg
QEAgcHVibGljOgogICAgICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KIAogICAgICAgICBWQUxJ
REFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguaXNFbnRyeXBvaW50KG1fZ3JhcGguYmxv
Y2soMCkpKTsKKyAgICAgICAgVkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmJs
b2NrKDApID09IG1fZ3JhcGgubV9lbnRyeXBvaW50c1swXSk7CiAKICAgICAgICAgLy8gVmFsaWRh
dGUgdGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIGFsbCBlbnRyeXBvaW50
cyBhcmUgZGVhZC4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9ncmFw
aC5tX2VudHJ5cG9pbnRzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsy
NDUsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJv
dW5kczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAg
ICAgY2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBUeXBlT2Y6CiAgICAgY2FzZSBQdXRCeUlkOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDggQEAgcHVibGljOgogICAgICAg
ICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0
aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAg
ICAgIG1fcHJvbG9ndWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBw
cm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRy
eXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBt
X2hhbmRsZUV4Y2VwdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgewpAQCAtMTc0LDggKzE3NSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
QmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2ls
eSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRG
cmVxdWVuY3koMSk7CiAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3Vl
LCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwotICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRz
KG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBj
YWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlh
bGl6ZUNvbnN0YW50cyhtX3Byb2MsIHByb2xvZ3VlKTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFi
bGVzKCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUp
ICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CkBAIC0yNTcsNTEgKzI1OCw3NiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2lj
QmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJn
dW1lbnRzLgotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAg
ICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5m
aW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0g
bV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0
J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAg
ICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3QgcHV0IGluCi0gICAgICAgICAgICAgICAgLy8gcGxh
Y2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBi
ZWZvcmUgaXQuIFRoaXMKLSAgICAgICAgICAgICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAg
ICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgu
bV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSks
IG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1
ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFs
dWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9
IG1fZ3JhcGguYmxvY2soMCktPnRlcm1pbmFsKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlTd2l0Y2goKSk7CisgICAgICAgICAgICAvL0VudHJ5
U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gcm9vdEVudHJ5U3dpdGNoLT5lbnRyeVN3aXRj
aERhdGEoKTsKKyAgICAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dy
YXBoLm1fbnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxF
bnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBhZGQgZXhwbGFpbmVyIGhlcmUuCisgICAgICAgICAgICAgICAgc3VjY2Vz
c29yc1tpXSA9IGZpcnN0REZHQmFzaWNCbG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7CisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlv
bnMpOworCisgICAgICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICAgICAgbV9vcmln
aW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOworCisg
ICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5jbGVhcigpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KTsgaS0tOykgeworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFy
Z3VtZW50KGkpID0KKyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy9hdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlw
b2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGdldCBub24gbnVsbHB0ciBub2RlIGhlcmUuCisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAv
L05vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICAgICAgLy9tX291dC5zZXRP
cmlnaW4obm9kZSk7CisKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiB3ZSBl
dmVuIGRvIHRoaXMgYW55bW9yZSBnaXZlbiBFbnRyeVN3aXRjaD8KKyAgICAgICAgICAgICAgICAv
L2lmIChub2RlKSB7CisgICAgICAgICAgICAgICAgLy8gICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOwor
ICAgICAgICAgICAgICAgIC8vICAgIAorICAgICAgICAgICAgICAgIC8vICAgIC8vIFRoaXMgaXMg
YSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NF
IG9uIHRoZQorICAgICAgICAgICAgICAgIC8vICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1
bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAg
ICAgICAgICAgICAgICAvLyAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQg
ZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAg
IC8vICAgIC8vIHNob3VsZCBob2xkIHRydWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsK
KyAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbMF1baV0pIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5v
ZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9vdXQuanVtcChmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9
Ci0gICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RERkdCYXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0aW9ucywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAg
ICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+
ZXhjZXB0aW9uSGFuZGxlcjsKQEAgLTkzOCw2ICs5NjQsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIERGRzo6U3dpdGNoOgogICAgICAgICAgICAgY29tcGlsZVN3aXRjaCgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIGNv
bXBpbGVFbnRyeVN3aXRjaCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgREZH
OjpSZXR1cm46CiAgICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTc3ODcsNiArNzgxNiwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBzd2l0Y2gga2luZCIpOwogICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUVudHJ5U3dpdGNoKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxMQmFzaWNC
bG9jaz4gc3VjY2Vzc29yczsKKyAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IG1fbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzKQorICAgICAgICAgICAgc3VjY2Vz
c29ycy5hcHBlbmQobG93QmxvY2soc3VjY2Vzc29yKSk7CisgICAgICAgIG1fb3V0LmVudHJ5U3dp
dGNoKHN1Y2Nlc3NvcnMpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVSZXR1cm4oKQog
ICAgIHsKQEAgLTE0NjM4LDcgKzE0Njc1LDYgQEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7
CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgCi0gICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1
ZTsKICAgICBMQmFzaWNCbG9jayBtX2hhbmRsZUV4Y2VwdGlvbnM7CiAgICAgSGFzaE1hcDxERkc6
OkJhc2ljQmxvY2sqLCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
MSw2ICs4NjEsMjAgQEAgdm9pZCBPdXRwdXQ6OmFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaQog
ICAgICAgICB2YWx1ZS52YWx1ZSgpLT5hczxCMzo6VXBzaWxvblZhbHVlPigpLT5zZXRQaGkocGhp
KTsKIH0KIAordm9pZCBPdXRwdXQ6OnNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkIG51bUVudHJ5
cG9pbnRzKQoreworICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhudW1FbnRyeXBvaW50cyk7
Cit9CisKK3ZvaWQgT3V0cHV0OjplbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+
JiBjYXNlcykKK3sKKyAgICBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRW50cnlT
d2l0Y2gsIG9yaWdpbigpKTsKKyAgICBmb3IgKExCYXNpY0Jsb2NrIGJsb2NrIDogY2FzZXMpIHsK
KyAgICAgICAgLy8gT09QUzogZnJlcXVlbmNpZXMgaGVyZQorICAgICAgICBtX2Jsb2NrLT5hcHBl
bmRTdWNjZXNzb3IoRnJlcXVlbnRlZEJsb2NrKGJsb2NrKSk7CisgICAgfQorfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjIxMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDI5
LDYgKzQyOSw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgc2V0TnVt
RW50cnlwb2ludHModW5zaWduZWQpOworICAgIHZvaWQgZW50cnlTd2l0Y2goY29uc3QgVmVjdG9y
PExCYXNpY0Jsb2NrPiYpOworCiAgICAgdm9pZCByZXQoTFZhbHVlKTsKIAogICAgIHZvaWQgdW5y
ZWFjaGFibGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319044</attachid>
            <date>2017-08-24 17:17:53 -0700</date>
            <delta_ts>2017-08-24 22:16:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>38117</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDgg
KzIyMSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAK
ICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJl
IHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjIxMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw2ICs0MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNo
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6
CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRj
aDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0
VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcElu
TG9vcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE1LDggKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5wcmludCgiREZH
IGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2lu
dFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3Vu
aWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAi
XG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3Vt
ZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAg
aWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50
cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMg
Zm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAg
ZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMp
CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtl
eS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTM4LDYgKzkz
OCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxv
Y2spOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMgaXMgd3Jvbmcgbm93IQogICAgICAgICBpZiAo
bV9lbnRyeXBvaW50cy5zaXplKCkgPD0gNCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBt
X2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5
NTcsNyBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAg
ICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Jsb2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQg
bV9udW1FbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBtX2VudHJ5cG9pbnRzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsK
IApAQCAtOTkxLDggKzk5NSw4IEBAIHB1YmxpYzoKICAgICAvLyBlZmZlY3RzLgogICAgIEhhc2hN
YXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1ZlY3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7
CiAgICAgCi0gICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMg
aXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAgIFZl
Y3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7CisgICAgLy8gSW4gQ1BTLCB0aGlz
IGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9u
IHRoYXQgd2UndmUgbG9ja2VkIGluIGZvciBhbiBlbnRyeXBvaW50IGJsb2NrLgorICAgIFZlY3Rv
cjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBtX2FyZ3VtZW50Rm9ybWF0czsKIAogICAgIFNlZ21lbnRl
ZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9u
czsKQEAgLTEwNDgsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZs
b3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFw
PEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CisgICAgQmFnPEVudHJ5U3dp
dGNoRGF0YT4gbV9lbnRyeVN3aXRjaERhdGE7CiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cmluZ1N0cnVjdHVyZTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NiArOTMsMzEgQEAgc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFicwogCiB2
b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKKyAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpID09IDEpOyAvLyBPT1BTOiBtYXliZSBkZWJ1ZyBhc3NlcnQgaGVyZQorCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICBpZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7CisgICAgICAg
ICAgICAvLyBXZSBib290c3RyYXAgdGhlIGVudHJ5cG9pbnRzIGJlbG93LgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhl
YWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKKyAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
KytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFy
KCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFp
bC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChCYXNpY0Js
b2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xMDAsNjkgKzEyNSw3NCBAQCB2b2lkIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkOwogCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpCiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKIAotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVu
IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gdGhlIEZUTCwgd2UgbmVlZCB0byBj
aGFuZ2UKLSAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIGRvIGhlcmU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAgICAgICAgICAgICAgICBmb3JtYXQg
PSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50
cy5maW5kKGVudHJ5cG9pbnQpLT52YWx1ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICBhdXRvIHNldEFyZ3VtZW50Rm9ybWF0ID0gWyZd
IChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgRmx1c2hGb3JtYXQgZm9ybWF0KSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUo
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
U3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJn
dW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CisgICAgICAgICAgICAgICAgdmFs
dWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVUb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IFdlIGNvdWxkIGdvIHR3byB3YXlzIGhlcmUuIE1vcmUg
YWNjdXJhdGUgdG8gbWFjaGluZSBzdGF0ZSwgSSB0aGluayB3ZSBjYW4gc2F5CisgICAgICAgICAg
ICAgICAgLy8gaGVhcCB0b3AgaGVyZS4gQnV0IHdlIGNhbiBhbHNvIHNheSBjbGVhciBiL2Mgbm9i
b2R5IHNob3VsZCBiZSByZWFkaW5nIGFuIGFyZ3VtZW50IHlldC4KKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT09QUzogc2FtZSBjb21tZW50IGFzIG9zciBhdmFpbGFiaWxp
dHkgY2FsY3VsYXRvcidzIGFzc3VtcHRpb24gb2YgdGhpcyEKKyAgICAgICAgICAgIE5vZGUqIGVu
dHJ5U3dpdGNoID0gZW50cnlwb2ludC0+dGVybWluYWwoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkpOworICAgICAgICAgICAgRW50cnlT
d2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBlbnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRh
KCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50
cnlwb2ludEluZGV4IDwgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5zaXplKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZW50cnlT
d2l0Y2hEYXRhLT5jYXNlc1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVu
dEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTsgKSB7CisgICAg
ICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGFyZ3VtZW50Rm9ybWF0c1thcmd1
bWVudF07CisgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50Rm9ybWF0KHN1Y2Nlc3Nvci0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZm9ybWF0KTsKKworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5h
cmd1bWVudChpKS5jbGVhcigpOworCisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
OworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlW2ldOworICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQoZW50cnlwb2ludC0+dmFsdWVzQXRIZWFk
LmFyZ3VtZW50KGkpLCBmb3JtYXQpOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
bG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5s
b2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICBpZiAo
bV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBib290c3Ry
YXBwZWQgdGhlIGVudHJ5cG9pbnRzIGFib3ZlLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgYmxv
Y2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7Ci0g
ICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKLSAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFp
bCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgewotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5sb2NhbChp
KS5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgfQogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC0zNzEsNiArNDAxLDE0IEBA
IGlubGluZSBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVQKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsK
ICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAgIGNhc2UgRW50cnlTd2l0
Y2g6IHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gdGVybWluYWwtPmVudHJ5U3dp
dGNoRGF0YSgpOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXSk7CisgICAgICAgIHJldHVybiBj
aGFuZ2VkOworICAgIH0KIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDIy
MTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdy
YXBoLCBOb2RlKgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQ291bnRFeGVjdXRp
b246CiAgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIERvdWJsZVJlcDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIw
MywxMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9
OwogCitzdHJ1Y3QgRW50cnlTd2l0Y2hEYXRhIHsKKyAgICBFbnRyeVN3aXRjaERhdGEoKSA9IGRl
ZmF1bHQ7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBDYWxs
VmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMjk3LDEy
ICsxMzAyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwogICAg
IH0KIAorICAgIGJvb2wgaXNFbnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gb3AoKSA9PSBFbnRyeVN3aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAg
ICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVudHJ5
U3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKICAg
ICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKQEAgLTEzNjQsNiArMTM3NSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFz
PFN3aXRjaERhdGEqPigpOwogICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0
Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCiAgICAgewpAQCAtMTM3NCw2ICsxMzkxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgogICAg
ICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+
Y2FzZXMuc2l6ZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KQEAgLTEzODYsNyArMTQwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0gICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0Y2gg
KGluZGV4KSB7CiAgICAgICAgIGNhc2UgMDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW50cnlTd2l0Y2gsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgbWFjcm8oRGlyZWN0VGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFy
QXJncykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMjExNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMzAgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAg
ICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmZpbGwoQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAg
ICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdCgKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSwKLSAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMg
ZmVlbHMgYSBiaXQgdWdseSwgYnV0IEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0aGlzIHJ1bGUgZm9y
IGdlbmVyYWwgRW50cnlTd2l0Y2ggbm9kZXMKKyAgICAgICAgLy8gYmVjYXVlIGltYWdpbmUgdGhl
cmUgaXMgYW4gRW50cnlTd2l0Y2ggaW4gYSByYW5kb20gbG9jYXRpb24gaW4gdGhlIGdyYXBoLCBz
dXJlbHkgd2UgZG9uJ3Qgd2FudAorICAgICAgICAvLyB0byBzYXkgdGhhdCBhbGwgaXRzIGNoaWxk
cmVuIGhhdmUgdGhpcyBhcmd1bWVudCBzcGVjdWxhdGlvbiBhdCB0aGUgaGVhZC4gVGhleSBtYXkg
aGF2ZSBjaGFuZ2VkCisgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGF0IHN0YWNrIHNsb3QhCisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGguYmxv
Y2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICAgICAgcm9v
dC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0g
QXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CiAgICAgICAgIH0KIAorICAgICAgICB7CisgICAgICAg
ICAgICBOb2RlKiByb290RW50cnlTd2l0Y2ggPSByb290LT50ZXJtaW5hbCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocm9vdEVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkpOworICAg
ICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSByb290RW50cnlTd2l0
Y2gtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBv
aW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBlbnRyeVN3aXRjaERhdGEtPmNhc2VzLnNp
emUoKTsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBlbnRyeVN3aXRjaERhdGEtPmNhc2VzW2VudHJ5cG9pbnRJbmRleF07CisgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNoRm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0g
bV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1
bWVudC0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZs
dXNoZWRBdChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZh
aWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0
eShmbHVzaGVkQXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9j
ZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAgCiAgICAgICAgIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yKG1fZ3JhcGgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDkyLDYgKzEwOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAg
ICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2
IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAg
ICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiU1NBIGNvbnZlcnNpb24iKQotICAgICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKICAgICB7CiAgICAgfQpAQCAtNTUsNiArNTUsNDEg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygp
OwogICAgICAgICBtX2dyYXBoLmNsZWFyQ1BTQ0ZHRGF0YSgpOworCisgICAgICAgIEhhc2hNYXA8
dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1
bWVudHNCbG9jazsKKworICAgICAgICB7CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtRW50cnlw
b2ludHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpOworCisgICAgICAgICAgICBCbG9j
a0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxLjBmKTsKKworICAgICAgICAg
ICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0
Y2hEYXRhLmFkZCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgg
PSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHM7ICsrZW50cnlw
b2ludEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3Jh
cGgubV9lbnRyeXBvaW50c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIGVudHJ5
cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2suYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7
CisgICAgICAgICAgICAgICAgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7
CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRSb290LT5wcmVkZWNlc3NvcnMu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBvbGRSb290LT5wcmVkZWNlc3NvcnMuYXBwZW5k
KG5ld1Jvb3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRGb3JtYXRzLnJlc2l6ZShtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworCisgICAgICAgICAg
ICBjb25zdCBib29sIGV4aXRPSyA9IGZhbHNlOworICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmln
aW4geyBDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBleGl0T0sgfTsKKyAgICAgICAgICAg
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IEVudHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRyeVN3aXRjaERhdGEpKTsKKworICAgICAg
ICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmNsZWFyKCk7CisgICAgICAgICAgICBtX2dyYXBo
Lm1fZW50cnlwb2ludHMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUyBwcmV2ZW50IGNyZWF0
aW5nIHRoaXMgdHdpY2UKKyAgICAgICAgbV9jYWxjdWxhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxT
U0FDYWxjdWxhdG9yPihtX2dyYXBoKTsKKwogICAgICAgICBtX2dyYXBoLmVuc3VyZVNTQURvbWlu
YXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC02Nyw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX2NhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsK
KyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2Fs
Y3VsYXRvci0+bmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIEFTU0VSVChzc2FWYXJpYWJsZS0+
aW5kZXgoKSA9PSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpKTsKICAgICAgICAgICAgIG1f
dmFyaWFibGVGb3JTU0FJbmRleC5hcHBlbmQoJnZhcmlhYmxlKTsKICAgICAgICAgICAgIG1fc3Nh
VmFyaWFibGVGb3JWYXJpYWJsZS5hZGQoJnZhcmlhYmxlLCBzc2FWYXJpYWJsZSk7CkBAIC0xMDMs
NyArMTM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGlu
Zy5hZGQobm9kZSwgY2hpbGROb2RlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9jYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAg
ICBtX2NhbGN1bGF0b3ItPm5ld0RlZigKICAgICAgICAgICAgICAgICAgICAgbV9zc2FWYXJpYWJs
ZUZvclZhcmlhYmxlLmdldCh2YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xMTIsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNy
ZWF0ZXMgdGhlIFBoaSdzIGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCiAgICAgICAgIC8vIHlldC4g
V2Ugd2lsbCBsYXRlciBrbm93IHdoZXJlIHRvIGluc2VydCBiYXNlZCBvbiB3aGVyZSBTU0FDYWxj
dWxhdG9yIHRlbGxzIHVzIHRvLgotICAgICAgICBtX2NhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisg
ICAgICAgIG1fY2FsY3VsYXRvci0+Y29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5v
ZGUqIHsKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92
YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKQEAgLTE2Nyw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAiLCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1f
Z3JhcGgsIG1fdmFyaWFibGVGb3JTU0FJbmRleFtpXSksICJcbiIpOwogICAgICAgICAgICAgZGF0
YUxvZygiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBtX2Nh
bGN1bGF0b3IsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIs
ICptX2NhbGN1bGF0b3IsICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBE
byB0aGUgYnVsayBvZiB0aGUgU1NBIGNvbnZlcnNpb24uIEZvciBlYWNoIGJsb2NrLCB0aGlzIHRy
YWNrcyB0aGUgb3BlcmFuZC0+Tm9kZQpAQCAtMjIwLDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBi
bG9jayAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJp
YWJsZUZvclZhcmlhYmxlLmdldCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OkRlZiogZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2Nr
LCBzc2FWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiog
ZGVmID0gbV9jYWxjdWxhdG9yLT5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIHRvIGluc2VydCBhIFBoaSwgdGhlbiB3ZSB3b24ndCBo
YXZlIGEgcmVhY2hpbmcgZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBoZWFkLgpA
QCAtMjQ2LDcgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIHZhbHVlRm9yT3BlcmFu
ZCB3aXRoIHRob3NlIFBoaXMuIEZvciBQaGlzIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMgdGhh
dCBhcmUgbm90CiAgICAgICAgICAgICAvLyBmbHVzaGVkLCB3ZSBhbHNvIGluc2VydCBhIE1vdkhp
bnQuCiAgICAgICAgICAgICBzaXplX3QgcGhpSW5zZXJ0aW9uUG9pbnQgPSAwOwotICAgICAgICAg
ICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9y
QmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogbV9jYWxjdWxhdG9yLT5waGlzRm9yQmxvY2soYmxvY2spKSB7CiAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtw
aGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52
YWx1ZSgpKTsKQEAgLTM0Niw3ICszODEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBOb2RlT3Jp
Z2luIHVwc2lsb25PcmlnaW4gPSB0ZXJtaW5hbC5ub2RlLT5vcmlnaW47CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3Vj
Y2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JC
bG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRv
cjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9j
aykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUo
KTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlh
YmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5p
bmRleCgpXTsKQEAgLTM4MywyMyArNDE4LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2Nr
LT5zc2EgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAg
ICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRz
IGluIERGRyBTU0E6Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzUzOTYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9p
bnRzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2Vu
dHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUoYXJndW1lbnRzLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotCi0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAg
Zm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAg
ICAgICAgIGFyZ3VtZW50c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRz
IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIG9sZFJvb3QgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgQXJndW1l
bnRzVmVjdG9yJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZp
bmQob2xkUm9vdCktPnZhbHVlOworICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1
bWVudEZvcm1hdHM7CisgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShhcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRz
LnVuY2hlY2tlZEFwcGVuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0KTsKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBs
b2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlw
b2ludEluZGV4XSA9IFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewpAQCAtNDExLDcgKzQ0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
U1NBQ2FsY3VsYXRvciBtX2NhbGN1bGF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQUNhbGN1
bGF0b3I+IG1fY2FsY3VsYXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAg
ICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+
IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZTsKICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9h
cmd1bWVudE1hcHBpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1w
OgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0
Y2g6CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVj
dFRhaWxDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTA2
LDYgKzYxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBj
YXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBj
YXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYXBwbHlD
b3VudHMoZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOiB7Cisg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIHRlcm1pbmFsLCAiVW5leHBlY3RlZCBF
bnRyeVN3aXRjaCBpbiBDUFMgZm9ybS4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGluIHJl
bGVhc2UgYnVpbGRzLgogCiAgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9n
cmFwaC5pc0VudHJ5cG9pbnQobV9ncmFwaC5ibG9jaygwKSkpOworICAgICAgICBWQUxJREFURSgo
bV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguYmxvY2soMCkgPT0gbV9ncmFwaC5tX2VudHJ5cG9p
bnRzWzBdKTsKIAogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMg
YXQgdGhlIGhlYWQgb2YgYWxsIGVudHJ5cG9pbnRzIGFyZSBkZWFkLgogICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFN3aXRjaDoKICAgICBjYXNlIFR5
cGVPZjoKICAgICBjYXNlIFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MCw3ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVu
Y3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0
RnJlcXVlbmN5KDEpOwogICAgICAgICAKLSAgICAgICAgbV9wcm9sb2d1ZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHByb2xvZ3VlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIG1faGFuZGxlRXhjZXB0aW9ucyA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0xNzQsOCAr
MTc1LDggQEAgcHVibGljOgogICAgICAgICAvLyBCYWNrIHRvIHByb2xvZ3VlIGZyZXF1ZW5jeSBm
b3IgYW55IGJvY2tzIHRoYXQgZ2V0IHNuZWFraWx5IGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0
aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIG1faGFuZGxlRXhjZXB0aW9ucyk7Ci0gICAg
ICAgIG1fb3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBtX3Byb2xvZ3VlKTsKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8ocHJvbG9ndWUsIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxh
dGlvbnMpOworICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgcHJvbG9n
dWUpOwogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKIAogICAgICAgICBzaXplX3Qgc2l6
ZU9mQ2FwdHVyZWQgPSBzaXplb2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKQEAgLTI1Nyw1MSArMjU4LDc2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGZpcnN0REZHQmFzaWNCbG9jayA9IGxvd0Jsb2NrKG1fZ3JhcGguYmxv
Y2soMCkpOwotICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCi0gICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0t
OykgewotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkg
PQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9u
b2RlID0gbnVsbHB0cjsKLSAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4o
MCksIENvZGVPcmlnaW4oMCksIHRydWUpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dy
YXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVl
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYXJndW1lbnRzW2ldOwotICAgICAg
ICAgICAgbV9vdXQuc2V0T3JpZ2luKG5vZGUpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVy
YW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxv
d3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQotICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9h
ZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBw
dXQgaW4KLSAgICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1l
bnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcwotICAgICAgICAgICAg
ICAgIC8vIHNob3VsZCBob2xkIHRydWUuCi0gICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVu
dFZhbHVlcy5hZGQobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgewotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFu
OgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1Zh
bHVlOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9y
IGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgTm9kZSogcm9vdEVudHJ5U3dpdGNoID0gbV9ncmFwaC5ibG9jaygwKS0+dGVybWluYWwo
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvb3RFbnRyeVN3aXRjaC0+aXNFbnRyeVN3
aXRjaCgpKTsKKyAgICAgICAgICAgIC8vRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEg
PSByb290RW50cnlTd2l0Y2gtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICAgICAgVmVjdG9y
PExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzKG1fZ3JhcGgubV9udW1FbnRyeXBvaW50cyk7CisgICAg
ICAgICAgICBzdWNjZXNzb3JzWzBdID0gY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9u
czsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2dyYXBoLm1fbnVtRW50
cnlwb2ludHM7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBleHBsYWluZXIg
aGVyZS4KKyAgICAgICAgICAgICAgICBzdWNjZXNzb3JzW2ldID0gZmlyc3RERkdCYXNpY0Jsb2Nr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNz
b3JzKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNhbGxFbnRyeXBvaW50QXJndW1lbnRT
cGVjdWxhdGlvbnMsIG1faGFuZGxlRXhjZXB0aW9ucyk7CisKKyAgICAgICAgICAgIG1fbm9kZSA9
IG51bGxwdHI7CisgICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigw
KSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50
cy4KKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CisgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQorICAgICAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL2F1dG8m
IGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2dyYXBo
LmJsb2NrKDApKS0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgLy8gT09QUzog
Z2V0IG5vbiBudWxscHRyIG5vZGUgaGVyZS4KKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bnVsbHB0cjsKKworICAgICAgICAgICAgICAgIC8vTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsK
KyAgICAgICAgICAgICAgICAvL21fb3V0LnNldE9yaWdpbihub2RlKTsKKworICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBt
X291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gT09QUzogY2FuIHdlIGV2ZW4gZG8gdGhpcyBhbnltb3JlIGdpdmVuIEVu
dHJ5U3dpdGNoPworICAgICAgICAgICAgICAgIC8vaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAvLyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7CisgICAgICAgICAgICAgICAgLy8gICAgCisgICAg
ICAgICAgICAgICAgLy8gICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2
ZSBvbmUuIEl0IGFsbG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCisgICAgICAgICAgICAgICAgLy8g
ICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgorICAgICAgICAgICAgICAgIC8vICAgIC8vIHBsYWNl
IG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vzbid0IGhhdmUgYW55IGVmZmVjdHMgYmVm
b3JlIGl0LiBUaGlzCisgICAgICAgICAgICAgICAgLy8gICAgLy8gc2hvdWxkIGhvbGQgdHJ1ZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgIG1fbG9hZGVkQXJndW1l
bnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIC8vfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9y
bWF0c1swXVtpXSkgeworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBu
b2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29s
ZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1
c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtX291dC5qdW1wKGZp
cnN0REZHQmFzaWNCbG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXQuanVtcChmaXJzdERG
R0Jhc2ljQmxvY2spOworCiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVFeGNlcHRp
b25zLCBmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD4gZXhjZXB0aW9uSGFuZGxlciA9IHN0YXRlLT5leGNlcHRpb25IYW5kbGVyOwpAQCAtOTM4LDYg
Kzk2NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZHOjpTd2l0Y2g6CiAgICAgICAgICAg
ICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6
OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVudHJ5U3dpdGNoKCk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVybjoKICAgICAgICAgICAgIGNvbXBp
bGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzc4Nyw2ICs3ODE2LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHN3aXRjaCBraW5kIik7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRW50cnlTd2l0Y2goKQor
ICAgIHsKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzOworICAgICAgICBm
b3IgKERGRzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ub2RlLT5lbnRyeVN3aXRjaERhdGEo
KS0+Y2FzZXMpCisgICAgICAgICAgICBzdWNjZXNzb3JzLmFwcGVuZChsb3dCbG9jayhzdWNjZXNz
b3IpKTsKKyAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7CisgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZVJldHVybigpCiAgICAgewpAQCAtMTQ2MzgsNyArMTQ2NzUsNiBA
QCBwcml2YXRlOgogICAgIE91dHB1dCBtX291dDsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICAKLSAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOwogICAgIExCYXNpY0Jsb2NrIG1faGFuZGxl
RXhjZXB0aW9uczsKICAgICBIYXNoTWFwPERGRzo6QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBt
X2Jsb2NrczsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5j
cHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2MSwyMCBAQCB2b2lkIE91dHB1dDo6
YWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpCiAgICAgICAgIHZhbHVlLnZhbHVlKCktPmFzPEIz
OjpVcHNpbG9uVmFsdWU+KCktPnNldFBoaShwaGkpOwogfQogCit2b2lkIE91dHB1dDo6c2V0TnVt
RW50cnlwb2ludHModW5zaWduZWQgbnVtRW50cnlwb2ludHMpCit7CisgICAgbV9wcm9jLnNldE51
bUVudHJ5cG9pbnRzKG51bUVudHJ5cG9pbnRzKTsKK30KKwordm9pZCBPdXRwdXQ6OmVudHJ5U3dp
dGNoKGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mIGNhc2VzKQoreworICAgIG1fYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3JpZ2luKCkpOworICAgIGZvciAo
TEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykgeworICAgICAgICAvLyBPT1BTOiBmcmVxdWVuY2ll
cyBoZXJlCisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxvY2so
YmxvY2spKTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDkgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCBzZXROdW1FbnRyeXBvaW50cyh1bnNpZ25lZCk7CisgICAg
dm9pZCBlbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+Jik7CisKICAgICB2b2lk
IHJldChMVmFsdWUpOwogCiAgICAgdm9pZCB1bnJlYWNoYWJsZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319063</attachid>
            <date>2017-08-24 22:16:05 -0700</date>
            <delta_ts>2017-08-25 16:22:08 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>38117</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDgg
KzIyMSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAK
ICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJl
IHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjIxMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw2ICs0MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNo
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6
CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRj
aDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0
VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcElu
TG9vcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE1LDggKzUxNSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5wcmludCgiREZH
IGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2lu
dFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3Vu
aWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAi
XG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3Vt
ZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAg
aWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50
cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMg
Zm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAg
ZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMp
CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtl
eS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTM4LDYgKzkz
OCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxv
Y2spOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMgaXMgd3Jvbmcgbm93IQogICAgICAgICBpZiAo
bV9lbnRyeXBvaW50cy5zaXplKCkgPD0gNCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBt
X2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5
NTcsNyBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAg
ICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Jsb2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQg
bV9udW1FbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBtX2VudHJ5cG9pbnRzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsK
IApAQCAtOTkxLDggKzk5NSw4IEBAIHB1YmxpYzoKICAgICAvLyBlZmZlY3RzLgogICAgIEhhc2hN
YXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1ZlY3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7
CiAgICAgCi0gICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMg
aXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAgIFZl
Y3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7CisgICAgLy8gSW4gQ1BTLCB0aGlz
IGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9u
IHRoYXQgd2UndmUgbG9ja2VkIGluIGZvciBhbiBlbnRyeXBvaW50IGJsb2NrLgorICAgIFZlY3Rv
cjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBtX2FyZ3VtZW50Rm9ybWF0czsKIAogICAgIFNlZ21lbnRl
ZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9u
czsKQEAgLTEwNDgsNiArMTA1Miw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZs
b3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFw
PEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CisgICAgQmFnPEVudHJ5U3dp
dGNoRGF0YT4gbV9lbnRyeVN3aXRjaERhdGE7CiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cmluZ1N0cnVjdHVyZTsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NiArOTMsMzEgQEAgc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFicwogCiB2
b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKKyAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpID09IDEpOyAvLyBPT1BTOiBtYXliZSBkZWJ1ZyBhc3NlcnQgaGVyZQorCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICBpZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7CisgICAgICAg
ICAgICAvLyBXZSBib290c3RyYXAgdGhlIGVudHJ5cG9pbnRzIGJlbG93LgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhl
YWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKKyAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
KytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFy
KCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFp
bC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCiAgICAgZm9yIChCYXNpY0Js
b2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xMDAsNjkgKzEyNSw3NCBAQCB2b2lkIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAgICAgICAgIGVudHJ5
cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRj
aGVkOwogCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpCiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKIAotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVu
IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gdGhlIEZUTCwgd2UgbmVlZCB0byBj
aGFuZ2UKLSAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIGRvIGhlcmU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAgICAgICAgICAgICAgICBmb3JtYXQg
PSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50
cy5maW5kKGVudHJ5cG9pbnQpLT52YWx1ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICBhdXRvIHNldEFyZ3VtZW50Rm9ybWF0ID0gWyZd
IChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgRmx1c2hGb3JtYXQgZm9ybWF0KSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUo
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
U3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJn
dW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CisgICAgICAgICAgICAgICAgdmFs
dWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVUb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIC8vIE9PUFM6IFdlIGNvdWxkIGdvIHR3byB3YXlzIGhlcmUuIE1vcmUg
YWNjdXJhdGUgdG8gbWFjaGluZSBzdGF0ZSwgSSB0aGluayB3ZSBjYW4gc2F5CisgICAgICAgICAg
ICAgICAgLy8gaGVhcCB0b3AgaGVyZS4gQnV0IHdlIGNhbiBhbHNvIHNheSBjbGVhciBiL2Mgbm9i
b2R5IHNob3VsZCBiZSByZWFkaW5nIGFuIGFyZ3VtZW50IHlldC4KKyAgICAgICAgICAgICAgICBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT09QUzogc2FtZSBjb21tZW50IGFzIG9zciBhdmFpbGFiaWxp
dHkgY2FsY3VsYXRvcidzIGFzc3VtcHRpb24gb2YgdGhpcyEKKyAgICAgICAgICAgIE5vZGUqIGVu
dHJ5U3dpdGNoID0gZW50cnlwb2ludC0+dGVybWluYWwoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkpOworICAgICAgICAgICAgRW50cnlT
d2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBlbnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRh
KCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50
cnlwb2ludEluZGV4IDwgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5zaXplKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZW50cnlT
d2l0Y2hEYXRhLT5jYXNlc1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVu
dEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTsgKSB7CisgICAg
ICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGFyZ3VtZW50Rm9ybWF0c1thcmd1
bWVudF07CisgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50Rm9ybWF0KHN1Y2Nlc3Nvci0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZm9ybWF0KTsKKworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5h
cmd1bWVudChpKS5jbGVhcigpOworCisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
OworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlW2ldOworICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQoZW50cnlwb2ludC0+dmFsdWVzQXRIZWFk
LmFyZ3VtZW50KGkpLCBmb3JtYXQpOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
bG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5s
b2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICBpZiAo
bV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBib290c3Ry
YXBwZWQgdGhlIGVudHJ5cG9pbnRzIGFib3ZlLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgYmxv
Y2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7Ci0g
ICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKLSAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFp
bCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgewotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5sb2NhbChp
KS5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgfQogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC0zNzEsNiArNDAxLDE0IEBA
IGlubGluZSBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVQKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsK
ICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAgIGNhc2UgRW50cnlTd2l0
Y2g6IHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gdGVybWluYWwtPmVudHJ5U3dp
dGNoRGF0YSgpOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXSk7CisgICAgICAgIHJldHVybiBj
aGFuZ2VkOworICAgIH0KIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDIy
MTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdy
YXBoLCBOb2RlKgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQ291bnRFeGVjdXRp
b246CiAgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIERvdWJsZVJlcDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIw
MywxMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9
OwogCitzdHJ1Y3QgRW50cnlTd2l0Y2hEYXRhIHsKKyAgICBFbnRyeVN3aXRjaERhdGEoKSA9IGRl
ZmF1bHQ7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBDYWxs
VmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMjk3LDEy
ICsxMzAyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwogICAg
IH0KIAorICAgIGJvb2wgaXNFbnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gb3AoKSA9PSBFbnRyeVN3aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAg
ICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVudHJ5
U3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKICAg
ICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKQEAgLTEzNjQsNiArMTM3NSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFz
PFN3aXRjaERhdGEqPigpOwogICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0
Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCiAgICAgewpAQCAtMTM3NCw2ICsxMzkxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgogICAg
ICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+
Y2FzZXMuc2l6ZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KQEAgLTEzODYsNyArMTQwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0gICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0Y2gg
KGluZGV4KSB7CiAgICAgICAgIGNhc2UgMDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW50cnlTd2l0Y2gsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgbWFjcm8oRGlyZWN0VGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFy
QXJncykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMjExNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsMzAgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAg
ICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmZpbGwoQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOykgewotICAgICAgICAg
ICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdCgKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSwKLSAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMg
ZmVlbHMgYSBiaXQgdWdseSwgYnV0IEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0aGlzIHJ1bGUgZm9y
IGdlbmVyYWwgRW50cnlTd2l0Y2ggbm9kZXMKKyAgICAgICAgLy8gYmVjYXVlIGltYWdpbmUgdGhl
cmUgaXMgYW4gRW50cnlTd2l0Y2ggaW4gYSByYW5kb20gbG9jYXRpb24gaW4gdGhlIGdyYXBoLCBz
dXJlbHkgd2UgZG9uJ3Qgd2FudAorICAgICAgICAvLyB0byBzYXkgdGhhdCBhbGwgaXRzIGNoaWxk
cmVuIGhhdmUgdGhpcyBhcmd1bWVudCBzcGVjdWxhdGlvbiBhdCB0aGUgaGVhZC4gVGhleSBtYXkg
aGF2ZSBjaGFuZ2VkCisgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGF0IHN0YWNrIHNsb3QhCisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGguYmxv
Y2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICAgICAgcm9v
dC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0g
QXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CiAgICAgICAgIH0KIAorICAgICAgICB7CisgICAgICAg
ICAgICBOb2RlKiByb290RW50cnlTd2l0Y2ggPSByb290LT50ZXJtaW5hbCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocm9vdEVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkpOworICAg
ICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSByb290RW50cnlTd2l0
Y2gtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBv
aW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBlbnRyeVN3aXRjaERhdGEtPmNhc2VzLnNp
emUoKTsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBlbnRyeVN3aXRjaERhdGEtPmNhc2VzW2VudHJ5cG9pbnRJbmRleF07CisgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNoRm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0g
bV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1
bWVudC0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZs
dXNoZWRBdChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZh
aWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0
eShmbHVzaGVkQXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9j
ZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAgCiAgICAgICAgIExv
Y2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBjYWxjdWxhdG9yKG1fZ3JhcGgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDkyLDYgKzEwOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAg
ICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2
IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAg
ICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiU1NBIGNvbnZlcnNpb24iKQotICAgICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKICAgICB7CiAgICAgfQpAQCAtNTUsNiArNTUsNDEg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygp
OwogICAgICAgICBtX2dyYXBoLmNsZWFyQ1BTQ0ZHRGF0YSgpOworCisgICAgICAgIEhhc2hNYXA8
dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1
bWVudHNCbG9jazsKKworICAgICAgICB7CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtRW50cnlw
b2ludHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpOworCisgICAgICAgICAgICBCbG9j
a0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxLjBmKTsKKworICAgICAgICAg
ICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0
Y2hEYXRhLmFkZCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgg
PSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHM7ICsrZW50cnlw
b2ludEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3Jh
cGgubV9lbnRyeXBvaW50c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIGVudHJ5
cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2suYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7
CisgICAgICAgICAgICAgICAgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7
CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRSb290LT5wcmVkZWNlc3NvcnMu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBvbGRSb290LT5wcmVkZWNlc3NvcnMuYXBwZW5k
KG5ld1Jvb3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRGb3JtYXRzLnJlc2l6ZShtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworCisgICAgICAgICAg
ICBjb25zdCBib29sIGV4aXRPSyA9IGZhbHNlOworICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmln
aW4geyBDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBleGl0T0sgfTsKKyAgICAgICAgICAg
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IEVudHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRyeVN3aXRjaERhdGEpKTsKKworICAgICAg
ICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmNsZWFyKCk7CisgICAgICAgICAgICBtX2dyYXBo
Lm1fZW50cnlwb2ludHMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUyBwcmV2ZW50IGNyZWF0
aW5nIHRoaXMgdHdpY2UKKyAgICAgICAgbV9jYWxjdWxhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxT
U0FDYWxjdWxhdG9yPihtX2dyYXBoKTsKKwogICAgICAgICBtX2dyYXBoLmVuc3VyZVNTQURvbWlu
YXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC02Nyw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX2NhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsK
KyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2Fs
Y3VsYXRvci0+bmV3VmFyaWFibGUoKTsKICAgICAgICAgICAgIEFTU0VSVChzc2FWYXJpYWJsZS0+
aW5kZXgoKSA9PSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpKTsKICAgICAgICAgICAgIG1f
dmFyaWFibGVGb3JTU0FJbmRleC5hcHBlbmQoJnZhcmlhYmxlKTsKICAgICAgICAgICAgIG1fc3Nh
VmFyaWFibGVGb3JWYXJpYWJsZS5hZGQoJnZhcmlhYmxlLCBzc2FWYXJpYWJsZSk7CkBAIC0xMDMs
NyArMTM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGlu
Zy5hZGQobm9kZSwgY2hpbGROb2RlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9jYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAg
ICBtX2NhbGN1bGF0b3ItPm5ld0RlZigKICAgICAgICAgICAgICAgICAgICAgbV9zc2FWYXJpYWJs
ZUZvclZhcmlhYmxlLmdldCh2YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xMTIsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNy
ZWF0ZXMgdGhlIFBoaSdzIGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCiAgICAgICAgIC8vIHlldC4g
V2Ugd2lsbCBsYXRlciBrbm93IHdoZXJlIHRvIGluc2VydCBiYXNlZCBvbiB3aGVyZSBTU0FDYWxj
dWxhdG9yIHRlbGxzIHVzIHRvLgotICAgICAgICBtX2NhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisg
ICAgICAgIG1fY2FsY3VsYXRvci0+Y29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5v
ZGUqIHsKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92
YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICAKQEAgLTE2Nyw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAiLCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1f
Z3JhcGgsIG1fdmFyaWFibGVGb3JTU0FJbmRleFtpXSksICJcbiIpOwogICAgICAgICAgICAgZGF0
YUxvZygiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBtX2Nh
bGN1bGF0b3IsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIs
ICptX2NhbGN1bGF0b3IsICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBE
byB0aGUgYnVsayBvZiB0aGUgU1NBIGNvbnZlcnNpb24uIEZvciBlYWNoIGJsb2NrLCB0aGlzIHRy
YWNrcyB0aGUgb3BlcmFuZC0+Tm9kZQpAQCAtMjIwLDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBi
bG9jayAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJp
YWJsZUZvclZhcmlhYmxlLmdldCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OkRlZiogZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2Nr
LCBzc2FWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiog
ZGVmID0gbV9jYWxjdWxhdG9yLT5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIHRvIGluc2VydCBhIFBoaSwgdGhlbiB3ZSB3b24ndCBo
YXZlIGEgcmVhY2hpbmcgZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBoZWFkLgpA
QCAtMjQ2LDcgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIHZhbHVlRm9yT3BlcmFu
ZCB3aXRoIHRob3NlIFBoaXMuIEZvciBQaGlzIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMgdGhh
dCBhcmUgbm90CiAgICAgICAgICAgICAvLyBmbHVzaGVkLCB3ZSBhbHNvIGluc2VydCBhIE1vdkhp
bnQuCiAgICAgICAgICAgICBzaXplX3QgcGhpSW5zZXJ0aW9uUG9pbnQgPSAwOwotICAgICAgICAg
ICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9y
QmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogbV9jYWxjdWxhdG9yLT5waGlzRm9yQmxvY2soYmxvY2spKSB7CiAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtw
aGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52
YWx1ZSgpKTsKQEAgLTM0Niw3ICszODEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBOb2RlT3Jp
Z2luIHVwc2lsb25PcmlnaW4gPSB0ZXJtaW5hbC5ub2RlLT5vcmlnaW47CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3Vj
Y2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JC
bG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRv
cjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9j
aykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUo
KTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlh
YmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5p
bmRleCgpXTsKQEAgLTM4MywyMyArNDE4LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2Nr
LT5zc2EgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAg
ICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRz
IGluIERGRyBTU0E6Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzUzOTYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9p
bnRzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2Vu
dHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUoYXJndW1lbnRzLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotCi0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAg
Zm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAg
ICAgICAgIGFyZ3VtZW50c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRz
IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIG9sZFJvb3QgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgQXJndW1l
bnRzVmVjdG9yJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZp
bmQob2xkUm9vdCktPnZhbHVlOworICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1
bWVudEZvcm1hdHM7CisgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShhcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRz
LnVuY2hlY2tlZEFwcGVuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0KTsKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBs
b2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlw
b2ludEluZGV4XSA9IFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewpAQCAtNDExLDcgKzQ0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
U1NBQ2FsY3VsYXRvciBtX2NhbGN1bGF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQUNhbGN1
bGF0b3I+IG1fY2FsY3VsYXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAg
ICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+
IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZTsKICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9h
cmd1bWVudE1hcHBpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjIxMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1w
OgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0
Y2g6CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVj
dFRhaWxDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTA2
LDYgKzYxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBj
YXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBj
YXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYXBwbHlD
b3VudHMoZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOiB7Cisg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIHRlcm1pbmFsLCAiVW5leHBlY3RlZCBF
bnRyeVN3aXRjaCBpbiBDUFMgZm9ybS4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGluIHJl
bGVhc2UgYnVpbGRzLgogCiAgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9n
cmFwaC5pc0VudHJ5cG9pbnQobV9ncmFwaC5ibG9jaygwKSkpOworICAgICAgICBWQUxJREFURSgo
bV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguYmxvY2soMCkgPT0gbV9ncmFwaC5tX2VudHJ5cG9p
bnRzWzBdKTsKIAogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMg
YXQgdGhlIGhlYWQgb2YgYWxsIGVudHJ5cG9pbnRzIGFyZSBkZWFkLgogICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFN3aXRjaDoKICAgICBjYXNlIFR5
cGVPZjoKICAgICBjYXNlIFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MCw3ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVu
Y3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0
RnJlcXVlbmN5KDEpOwogICAgICAgICAKLSAgICAgICAgbV9wcm9sb2d1ZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHByb2xvZ3VlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIG1faGFuZGxlRXhjZXB0aW9ucyA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0xNzQsOCAr
MTc1LDggQEAgcHVibGljOgogICAgICAgICAvLyBCYWNrIHRvIHByb2xvZ3VlIGZyZXF1ZW5jeSBm
b3IgYW55IGJvY2tzIHRoYXQgZ2V0IHNuZWFraWx5IGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0
aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIG1faGFuZGxlRXhjZXB0aW9ucyk7Ci0gICAg
ICAgIG1fb3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBtX3Byb2xvZ3VlKTsKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8ocHJvbG9ndWUsIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxh
dGlvbnMpOworICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgcHJvbG9n
dWUpOwogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKIAogICAgICAgICBzaXplX3Qgc2l6
ZU9mQ2FwdHVyZWQgPSBzaXplb2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKQEAgLTI1Nyw1MSArMjU4LDc2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGZpcnN0REZHQmFzaWNCbG9jayA9IGxvd0Jsb2NrKG1fZ3JhcGguYmxv
Y2soMCkpOwotICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCi0gICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0t
OykgewotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkg
PQotICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9u
b2RlID0gbnVsbHB0cjsKLSAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4o
MCksIENvZGVPcmlnaW4oMCksIHRydWUpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dy
YXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVl
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYXJndW1lbnRzW2ldOwotICAgICAg
ICAgICAgbV9vdXQuc2V0T3JpZ2luKG5vZGUpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVy
YW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxv
d3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQotICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9h
ZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBw
dXQgaW4KLSAgICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1l
bnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcwotICAgICAgICAgICAg
ICAgIC8vIHNob3VsZCBob2xkIHRydWUuCi0gICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVu
dFZhbHVlcy5hZGQobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgewotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFu
OgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1Zh
bHVlOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9y
IGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgTm9kZSogcm9vdEVudHJ5U3dpdGNoID0gbV9ncmFwaC5ibG9jaygwKS0+dGVybWluYWwo
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvb3RFbnRyeVN3aXRjaC0+aXNFbnRyeVN3
aXRjaCgpKTsKKyAgICAgICAgICAgIC8vRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEg
PSByb290RW50cnlTd2l0Y2gtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICAgICAgVmVjdG9y
PExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzKG1fZ3JhcGgubV9udW1FbnRyeXBvaW50cyk7CisgICAg
ICAgICAgICBzdWNjZXNzb3JzWzBdID0gY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9u
czsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2dyYXBoLm1fbnVtRW50
cnlwb2ludHM7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGFkZCBleHBsYWluZXIg
aGVyZS4KKyAgICAgICAgICAgICAgICBzdWNjZXNzb3JzW2ldID0gZmlyc3RERkdCYXNpY0Jsb2Nr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNz
b3JzKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNhbGxFbnRyeXBvaW50QXJndW1lbnRT
cGVjdWxhdGlvbnMsIG1faGFuZGxlRXhjZXB0aW9ucyk7CisKKyAgICAgICAgICAgIG1fbm9kZSA9
IG51bGxwdHI7CisgICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigw
KSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50
cy4KKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CisgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQorICAgICAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL2F1dG8m
IGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2dyYXBo
LmJsb2NrKDApKS0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgLy8gT09QUzog
Z2V0IG5vbiBudWxscHRyIG5vZGUgaGVyZS4KKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bnVsbHB0cjsKKworICAgICAgICAgICAgICAgIC8vTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsK
KyAgICAgICAgICAgICAgICAvL21fb3V0LnNldE9yaWdpbihub2RlKTsKKworICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBt
X291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gT09QUzogY2FuIHdlIGV2ZW4gZG8gdGhpcyBhbnltb3JlIGdpdmVuIEVu
dHJ5U3dpdGNoPworICAgICAgICAgICAgICAgIC8vaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAvLyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7CisgICAgICAgICAgICAgICAgLy8gICAgCisgICAg
ICAgICAgICAgICAgLy8gICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2
ZSBvbmUuIEl0IGFsbG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCisgICAgICAgICAgICAgICAgLy8g
ICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgorICAgICAgICAgICAgICAgIC8vICAgIC8vIHBsYWNl
IG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vzbid0IGhhdmUgYW55IGVmZmVjdHMgYmVm
b3JlIGl0LiBUaGlzCisgICAgICAgICAgICAgICAgLy8gICAgLy8gc2hvdWxkIGhvbGQgdHJ1ZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAgIG1fbG9hZGVkQXJndW1l
bnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIC8vfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9y
bWF0c1swXVtpXSkgeworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBu
b2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29s
ZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1
c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtX291dC5qdW1wKGZp
cnN0REZHQmFzaWNCbG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXQuanVtcChmaXJzdERG
R0Jhc2ljQmxvY2spOworCiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVFeGNlcHRp
b25zLCBmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD4gZXhjZXB0aW9uSGFuZGxlciA9IHN0YXRlLT5leGNlcHRpb25IYW5kbGVyOwpAQCAtOTM4LDYg
Kzk2NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZHOjpTd2l0Y2g6CiAgICAgICAgICAg
ICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6
OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVudHJ5U3dpdGNoKCk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVybjoKICAgICAgICAgICAgIGNvbXBp
bGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzc4Nyw2ICs3ODE2LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHN3aXRjaCBraW5kIik7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRW50cnlTd2l0Y2goKQor
ICAgIHsKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzOworICAgICAgICBm
b3IgKERGRzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ub2RlLT5lbnRyeVN3aXRjaERhdGEo
KS0+Y2FzZXMpCisgICAgICAgICAgICBzdWNjZXNzb3JzLmFwcGVuZChsb3dCbG9jayhzdWNjZXNz
b3IpKTsKKyAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7CisgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZVJldHVybigpCiAgICAgewpAQCAtMTQ2MzgsNyArMTQ2NzUsNiBA
QCBwcml2YXRlOgogICAgIE91dHB1dCBtX291dDsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICAKLSAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOwogICAgIExCYXNpY0Jsb2NrIG1faGFuZGxl
RXhjZXB0aW9uczsKICAgICBIYXNoTWFwPERGRzo6QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBt
X2Jsb2NrczsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5j
cHAJKHJldmlzaW9uIDIyMTE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2MSwyMCBAQCB2b2lkIE91dHB1dDo6
YWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpCiAgICAgICAgIHZhbHVlLnZhbHVlKCktPmFzPEIz
OjpVcHNpbG9uVmFsdWU+KCktPnNldFBoaShwaGkpOwogfQogCit2b2lkIE91dHB1dDo6c2V0TnVt
RW50cnlwb2ludHModW5zaWduZWQgbnVtRW50cnlwb2ludHMpCit7CisgICAgbV9wcm9jLnNldE51
bUVudHJ5cG9pbnRzKG51bUVudHJ5cG9pbnRzKTsKK30KKwordm9pZCBPdXRwdXQ6OmVudHJ5U3dp
dGNoKGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mIGNhc2VzKQoreworICAgIG1fYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3JpZ2luKCkpOworICAgIGZvciAo
TEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykgeworICAgICAgICAvLyBPT1BTOiBmcmVxdWVuY2ll
cyBoZXJlCisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxvY2so
YmxvY2spKTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCShyZXZpc2lvbiAyMjExNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDkgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCBzZXROdW1FbnRyeXBvaW50cyh1bnNpZ25lZCk7CisgICAg
dm9pZCBlbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+Jik7CisKICAgICB2b2lk
IHJldChMVmFsdWUpOwogCiAgICAgdm9pZCB1bnJlYWNoYWJsZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319111</attachid>
            <date>2017-08-25 16:22:08 -0700</date>
            <delta_ts>2017-08-25 18:10:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>39763</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDgg
KzIyMSw2IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAK
ICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJl
IHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjIxMjA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw2ICs0MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNo
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6
CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRj
aDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0
VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcElu
TG9vcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChk
YXRhLT5jYXNlc1tpXS52YWx1ZSwgY29udGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
KTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3Vn
aCk7CiAgICAgfQorICAgIGlmIChub2RlLT5pc0VudHJ5U3dpdGNoKCkpIHsKKyAgICAgICAgRW50
cnlTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgQnJhbmNoVGFyZ2V0KGRhdGEtPmNhc2VzW2ldKSk7CisgICAg
fQogICAgIENsb2JiZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CiAgICAgYWRk
UmVhZHNBbmRXcml0ZXMoKnRoaXMsIG5vZGUsIHJlYWRzLCB3cml0ZXMpOwpAQCAtNTE1LDggKzUy
MCwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0
LnByaW50KCJcbiIpOwogICAgIG91dC5wcmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklU
VHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOwogICAgIG91dC5wcmlu
dCgiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zv
cm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBj
b3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKLSAgICBpZiAobV9mb3JtID09
IFNTQSkKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHM6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXgg
PCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIs
IGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5
cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0
byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1w
KHBhaXIudmFsdWUpLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtOTM4LDYgKzkzOCw5IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxvY2spOworCisgICAgICAgIC8vIE9PUFM6
IHRoaXMgaXMgd3Jvbmcgbm93IQogICAgICAgICBpZiAobV9lbnRyeXBvaW50cy5zaXplKCkgPD0g
NCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJs
b2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gbV9lbnRyeXBvaW50VG9Bcmd1bWVu
dHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5NTcsNyBAQCBwdWJsaWM6CiAgICAgQ29k
ZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Js
b2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQgbV9udW1FbnRyeXBvaW50cyB7IFVJTlRf
TUFYIH07CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBtX2VudHJ5cG9pbnRzOwogICAgIFZl
Y3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIApAQCAtOTkxLDggKzk5NSw4IEBAIHB1
YmxpYzoKICAgICAvLyBlZmZlY3RzLgogICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEFyZ3VtZW50
c1ZlY3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7CiAgICAgCi0gICAgLy8gSW4gQ1BTLCB0
aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0
aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1
bWVudEZvcm1hdHM7CisgICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0Es
IHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluIGZv
ciBhbiBlbnRyeXBvaW50IGJsb2NrLgorICAgIFZlY3RvcjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBt
X2FyZ3VtZW50Rm9ybWF0czsKIAogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0Rh
dGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1l
bnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKQEAgLTEwNDgsNiArMTA1Miw3IEBA
IHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heExvY2Fsc0ZvckNhdGNo
T1NSRW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dJbmRleGluZz4gbV9pbmRleGluZ0Nh
Y2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFwPEFic3RyYWN0VmFsdWU+PiBtX2Fic3Ry
YWN0VmFsdWVzQ2FjaGU7CisgICAgQmFnPEVudHJ5U3dpdGNoRGF0YT4gbV9lbnRyeVN3aXRjaERh
dGE7CiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cmluZ1N0cnVjdHVyZTsKICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lv
biAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOCArOTEsNTUgQEAgc3RhdGljIHZvaWQg
c2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFicwogICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBw
ZW5kKE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5vZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKIH0K
IAorc3RhdGljIHZvaWQgc2V0QXJndW1lbnRGb3JtYXQoR3JhcGgmIGdyYXBoLCBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSwgRmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAg
IHZhbHVlLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZs
dXNoZWRDZWxsOgorICAgICAgICB2YWx1ZS5zZXRUeXBlKGdyYXBoLCBTcGVjQ2VsbCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIHZhbHVlLm1ha2VC
eXRlY29kZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdf
Q1JBU0goZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKwogdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
aW5pdGlhbGl6ZSgpCiB7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsgLy8gT09Q
UzogbWF5YmUgZGVidWcgYXNzZXJ0IGhlcmUKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgu
aXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICAgICAgLy8gV2UgYm9vdHN0cmFwIHRoZSBl
bnRyeXBvaW50cyBiZWxvdy4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgIGJsb2NrLT5jZmFTaG91
bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7
CisgICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBibG9j
ay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7
CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwgPSBTdHJ1Y3R1
cmVzQXJlV2F0Y2hlZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFs
dWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyAr
K2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsK
KyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgu
bV9lbnRyeXBvaW50cykgewogICAgICAgICBlbnRyeXBvaW50LT5jZmFTaG91bGRSZXZpc2l0ID0g
dHJ1ZTsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwpAQCAtMTAw
LDE1ICsxNDcsMTkgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIGVudHJ5cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCA9IFN0cnVj
dHVyZXNBcmVXYXRjaGVkOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGVBdFRhaWwgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKIAotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQogICAgICAgICAgICAgZW50cnlwb2lu
dC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAKLSAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIGVudHJ5
cG9pbnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdlCi0gICAgICAgICAgICAgICAgLy8g
d2hhdCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5cG9pbnQt
PnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAvLyBPT1BTOiBXZSBjb3VsZCBnbyB0d28gd2F5cyBoZXJlLiBNb3JlIGFjY3VyYXRlIHRvIG1h
Y2hpbmUgc3RhdGUsIEkgdGhpbmsgd2UgY2FuIHNheQorICAgICAgICAgICAgICAgIC8vIGhlYXAg
dG9wIGhlcmUuIEJ1dCB3ZSBjYW4gYWxzbyBzYXkgY2xlYXIgYi9jIG5vYm9keSBzaG91bGQgYmUg
cmVhZGluZyBhbiBhcmd1bWVudCB5ZXQuCisgICAgICAgICAgICAgICAgLy8gT3Igc2hvdWxkIHdl
IGNsZWFyKCk/CisgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3Jt
YXQ7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9B
cmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWVbaV07CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlKQogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKQEAg
LTExNiw1MyArMTY3LDE3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
KQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7
CiAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5h
cmd1bWVudChpKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBlbnRy
eXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQm9vbGVhbik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAg
ICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBl
KG1fZ3JhcGgsIFNwZWNDZWxsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVz
QXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VCeXRlY29kZVRvcCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbnVsbHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzZXRBcmd1bWVudEZvcm1hdChtX2dy
YXBoLCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSksIGZvcm1hdCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVu
dHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKICAgICAgICAg
ICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICAg
ICAgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzRW50cnlwb2ludChibG9jaykp
IHsKLSAgICAgICAgICAgIC8vIFdlIGJvb3RzdHJhcHBlZCB0aGUgZW50cnlwb2ludHMgYWJvdmUu
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChibG9j
ay0+aXNSZWFjaGFibGUpOwotICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNl
OwotICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwotICAgICAgICBibG9jay0+
Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0SGVhZCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAgICAgICBibG9jay0+
Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuYXJn
dW1lbnQoaSkuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1l
bnQoaSkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7Ci0gICAgICAgICAgICBibG9j
ay0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9CiAgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKQEAgLTM3MSw2ICszODYsMjcgQEAgaW5saW5lIGJvb2wgSW5QbGFjZUFic3RyYWN0
U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBk
YXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAg
ICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICAvLyBPT1BTOiBzYW1l
IGNvbW1lbnQgYXMgb3NyIGF2YWlsYWJpbGl0eSBjYWxjdWxhdG9yJ3MgYXNzdW1wdGlvbiBvZiB0
aGlzISBTaG91bGQgdGhpcyBiZSBldmVyeSBzaW5nbGUgRW50cnlTd2l0Y2g/IE9yIHNob3VsZCBp
dCBqdXN0IGJlIHRoZSByb290IEVudHJ5U3dpdGNoPyBTaG91bGQgd2UgZXZlbiBhc3N1bWUgdGhl
IHJvb3QgaGFzIGFuIEVudHJ5U3dpdGNoPworICAgICAgICBOb2RlKiBlbnRyeVN3aXRjaCA9IHRl
cm1pbmFsOworICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9IGVudHJ5
U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5
cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8IGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXMu
c2l6ZSgpOyArK2VudHJ5cG9pbnRJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogc3Vj
Y2Vzc29yID0gZW50cnlTd2l0Y2hEYXRhLT5jYXNlc1tlbnRyeXBvaW50SW5kZXhdOworICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPEZsdXNoRm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0gbV9ncmFw
aC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07ICkg
eworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGFyZ3VtZW50Rm9ybWF0c1th
cmd1bWVudF07CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQobV9ncmFwaCwgc3Vj
Y2Vzc29yLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmb3JtYXQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gdGVy
bWluYWwtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXSk7Cisg
ICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNh
c2UgVGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgRXhpdE1vZGUgbWF5RXhp
dEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNh
c2UgQ291bnRFeGVjdXRpb246CiAgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6
CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIERvdWJs
ZVJlcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMjEy
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAzLDYgKzIwMywxMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRV
c2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgRW50cnlTd2l0Y2hEYXRhIHsKKyAgICBFbnRyeVN3
aXRjaERhdGEoKSA9IGRlZmF1bHQ7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBjYXNlczsKK307
CisKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsK
IH07CkBAIC0xMjk3LDEyICsxMzAyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wKCkg
PT0gU3dpdGNoOwogICAgIH0KIAorICAgIGJvb2wgaXNFbnRyeVN3aXRjaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnRyeVN3aXRjaDsKKyAgICB9CisKICAgICBib29s
IGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNh
c2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgorICAg
ICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbDoKICAgICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKQEAgLTEzNjQsNiArMTM3
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvLmFzPFN3aXRjaERhdGEqPigpOwogICAgIH0KKworICAgIEVudHJ5U3dpdGNo
RGF0YSogZW50cnlTd2l0Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VudHJ5U3dp
dGNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsK
KyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCiAgICAgewpAQCAtMTM3
NCw2ICsxMzkxLDggQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNh
c2UgU3dpdGNoOgogICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgp
ICsgMTsKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBlbnRy
eVN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEzODYsNyArMTQwNSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0LmJs
b2NrOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gc3dpdGNoRGF0YSgpLT5j
YXNlcy5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+ZmFsbFRocm91
Z2guYmxvY2s7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0VudHJ5U3dpdGNoKCkp
CisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XTsKIAog
ICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgICAgIGNhc2UgMDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzkz
LDYgKzM5Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhK
dW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
RW50cnlTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZXR1cm4sIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oRGlyZWN0VGFpbENhbGwsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlSGFzVmFyQXJncykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShy
ZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTUg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgu
YmxvY2soMCk7CiAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxz
LmZpbGwoQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0t
OykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdCgKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSwKLSAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1l
bnQpID0gQXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CisKKyAgICAgICAgLy8gT09QUzogdGhpcyBm
ZWVscyBhIGJpdCB1Z2x5LCBidXQgSSBkb24ndCB0aGluayB3ZSB3YW50IHRoaXMgcnVsZSBmb3Ig
Z2VuZXJhbCBFbnRyeVN3aXRjaCBub2RlcworICAgICAgICAvLyBiZWNhdWUgaW1hZ2luZSB0aGVy
ZSBpcyBhbiBFbnRyeVN3aXRjaCBpbiBhIHJhbmRvbSBsb2NhdGlvbiBpbiB0aGUgZ3JhcGgsIHN1
cmVseSB3ZSBkb24ndCB3YW50CisgICAgICAgIC8vIHRvIHNheSB0aGF0IGFsbCBpdHMgY2hpbGRy
ZW4gaGF2ZSB0aGlzIGFyZ3VtZW50IHNwZWN1bGF0aW9uIGF0IHRoZSBoZWFkLiBUaGV5IG1heSBo
YXZlIGNoYW5nZWQKKyAgICAgICAgLy8gdGhlIHZhbHVlIG9mIHRoYXQgc3RhY2sgc2xvdCEKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9ncmFwaC5ibG9j
aygwKS0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgIC8vRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIC8v
cm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQp
ID0gQXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1h
ZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3Jk
ZXIuCkBAIC04NiwxMCArOTAsMjggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9h
dmFpbGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0g
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNz
b3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogcm9vdEVudHJ5U3dpdGNoID0gYmxvY2stPnRlcm1p
bmFsKCk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvb3RFbnRyeVN3aXRj
aC0+aXNFbnRyeVN3aXRjaCgpKTsKKyAgICAgICAgICAgICAgICAgICAgRW50cnlTd2l0Y2hEYXRh
KiBlbnRyeVN3aXRjaERhdGEgPSByb290RW50cnlTd2l0Y2gtPmVudHJ5U3dpdGNoRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVu
dHJ5cG9pbnRJbmRleCA8IGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2VudHJ5cG9p
bnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZW50cnlTd2l0Y2hEYXRhLT5jYXNlc1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNoRm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0g
bV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXpl
KCk7IGFyZ3VtZW50LS07ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRB
dCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50
KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShmbHVzaGVkQXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLnBydW5l
QnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1Y2Nlc3Nvci0+
YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOTIsNiArMTA5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBVcHNpbG9uOgogICAgICAgICAgICAgLy8g
VGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8gU1NBLgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIy
MTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9j
a0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5z
ZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAgY2xh
c3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIAogcHVibGljOgogICAgIFNTQUNv
bnZlcnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJTU0Eg
Y29udmVyc2lvbiIpCi0gICAgICAgICwgbV9jYWxjdWxhdG9yKGdyYXBoKQogICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgIHsKICAgICB9CkBAIC01NSw2ICs1NSw0MSBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CiAgICAg
ICAgIG1fZ3JhcGguY2xlYXJDUFNDRkdEYXRhKCk7CisKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgQmFzaWNCbG9jayosIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Js
b2NrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9udW1FbnRyeXBvaW50cyA9
IG1fZ3JhcGgubV9lbnRyeXBvaW50cy5zaXplKCk7CisKKyAgICAgICAgICAgIEJsb2NrSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5l
d1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIDEuMGYpOworCisgICAgICAgICAgICBFbnRy
eVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEu
YWRkKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVu
dHJ5cG9pbnRJbmRleCA8IG1fZ3JhcGgubV9udW1FbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvbGRSb290ID0gbV9ncmFwaC5tX2Vu
dHJ5cG9pbnRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgZW50cnlwb2ludElu
ZGV4VG9Bcmd1bWVudHNCbG9jay5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290KTsKKyAgICAg
ICAgICAgICAgICBlbnRyeVN3aXRjaERhdGEtPmNhc2VzLmFwcGVuZChvbGRSb290KTsKKworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZFJvb3QtPnByZWRlY2Vzc29ycy5pc0VtcHR5
KCkpOworICAgICAgICAgICAgICAgIG9sZFJvb3QtPnByZWRlY2Vzc29ycy5hcHBlbmQobmV3Um9v
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1h
dHMucmVzaXplKG1fZ3JhcGgubV9udW1FbnRyeXBvaW50cyk7CisKKyAgICAgICAgICAgIGNvbnN0
IGJvb2wgZXhpdE9LID0gZmFsc2U7CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENv
ZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGV4aXRPSyB9OworICAgICAgICAgICAgbmV3Um9v
dC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgRW50cnlT
d2l0Y2gsIG9yaWdpbiwgT3BJbmZvKGVudHJ5U3dpdGNoRGF0YSkpOworCisgICAgICAgICAgICBt
X2dyYXBoLm1fZW50cnlwb2ludHMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRy
eXBvaW50cy5hcHBlbmQobmV3Um9vdCk7CisKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTIHByZXZlbnQgY3JlYXRpbmcgdGhp
cyB0d2ljZQorICAgICAgICBtX2NhbGN1bGF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFNTQUNhbGN1
bGF0b3I+KG1fZ3JhcGgpOworCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygp
OwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTY3LDcgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUuaXNSb290KCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9y
LT5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNzYVZhcmlhYmxlLT5pbmRleCgp
ID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOwogICAgICAgICAgICAgbV92YXJpYWJs
ZUZvclNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOwogICAgICAgICAgICAgbV9zc2FWYXJpYWJs
ZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZhcmlhYmxlKTsKQEAgLTEwMyw3ICsxMzgs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChu
b2RlLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgIG1fY2Fs
Y3VsYXRvci0+bmV3RGVmKAogICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFy
aWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTExMiw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICAvLyBEZWNpZGUgd2hlcmUgUGhpcyBhcmUgdG8gYmUgaW5zZXJ0ZWQuIFRoaXMgY3JlYXRlcyB0
aGUgUGhpJ3MgYnV0IGRvZXNuJ3QgaW5zZXJ0IHRoZW0KICAgICAgICAgLy8geWV0LiBXZSB3aWxs
IGxhdGVyIGtub3cgd2hlcmUgdG8gaW5zZXJ0IGJhc2VkIG9uIHdoZXJlIFNTQUNhbGN1bGF0b3Ig
dGVsbHMgdXMgdG8uCi0gICAgICAgIG1fY2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAg
bV9jYWxjdWxhdG9yLT5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewog
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIApAQCAt
MTY3LDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICIsIGksICI6ICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwg
bV92YXJpYWJsZUZvclNTQUluZGV4W2ldKSwgIlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJc
biIpOwotICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1fY2FsY3VsYXRv
ciwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRvcjogIiwgKm1fY2Fs
Y3VsYXRvciwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIERvIHRoZSBi
dWxrIG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRo
ZSBvcGVyYW5kLT5Ob2RlCkBAIC0yMjAsNyArMjU1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJsb2NrICIs
ICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlhYmxlRm9y
VmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZh
cmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBt
X2NhbGN1bGF0b3ItPnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZGVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhhdmUgYSBy
ZWFjaGluZyBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGhlYWQuCkBAIC0yNDYs
NyArMjgxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gdmFsdWVGb3JPcGVyYW5kIHdpdGgg
dGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0aGF0IGFyZSBu
b3QKICAgICAgICAgICAgIC8vIGZsdXNoZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92SGludC4KICAg
ICAgICAgICAgIHNpemVfdCBwaGlJbnNlcnRpb25Qb2ludCA9IDA7Ci0gICAgICAgICAgICBmb3Ig
KFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhi
bG9jaykpIHsKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBt
X2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhibG9jaykpIHsKICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkp
OwpAQCAtMzQ2LDcgKzM4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBz
aWxvbk9yaWdpbiA9IHRlcm1pbmFsLm5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IG1fY2FsY3VsYXRvci0+cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBw
aGlEZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCld
OwpAQCAtMzgzLDIzICs0MTgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnNzYSA9
IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZH
IFNTQToKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTM5NgotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2lu
dFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dy
YXBoLm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
Rmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7Ci0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZSk7Ci0gICAgICAgICAgICBmb3JtYXQg
PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldID0gZm9ybWF0OwotICAgICAgICAgICAg
YXJndW1lbnRzW2ldID0gbm9kZTsgLy8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFy
Z3VtZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgIGZvciAo
YXV0byYgcGFpciA6IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2spIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OworICAgICAgICAgICAgQmFz
aWNCbG9jayogb2xkUm9vdCA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICBBcmd1bWVudHNWZWN0
b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRS
b290KS0+dmFsdWU7CisgICAgICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9y
bWF0czsKKyAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFyZ3VtZW50cy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2FyZ3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMudW5jaGVj
a2VkQXBwZW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQpOworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRo
ZSBhcmd1bWVudHMgZm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5k
ZXhdID0gV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBA
IC00MTEsNyArNDQ0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTU0FDYWxj
dWxhdG9yIG1fY2FsY3VsYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBQ2FsY3VsYXRvcj4g
bV9jYWxjdWxhdG9yOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICBIYXNo
TWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FW
YXJpYWJsZUZvclZhcmlhYmxlOwogICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX2FyZ3VtZW50
TWFwcGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEp1bXA6CiAgICAg
Y2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAg
ICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENh
bGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMDYsNiArNjEw
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2UgRW50
cnlTd2l0Y2g6CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhk
YXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6IHsKKyAgICAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgdGVybWluYWwsICJVbmV4cGVjdGVkIEVudHJ5U3dp
dGNoIGluIENQUyBmb3JtLiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTIw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaW4gcmVsZWFzZSBi
dWlsZHMuCiAKICAgICAgICAgVkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmlz
RW50cnlwb2ludChtX2dyYXBoLmJsb2NrKDApKSk7CisgICAgICAgIFZBTElEQVRFKChtX2dyYXBo
LmJsb2NrKDApKSwgbV9ncmFwaC5ibG9jaygwKSA9PSBtX2dyYXBoLm1fZW50cnlwb2ludHNbMF0p
OwogCiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUg
aGVhZCBvZiBhbGwgZW50cnlwb2ludHMgYXJlIGRlYWQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50cykgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjIxMjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAg
ICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgVHlwZU9mOgog
ICAgIGNhc2UgUHV0QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2
MCw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3Ig
YWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVu
Y3koMSk7CiAgICAgICAgIAotICAgICAgICBtX3Byb2xvZ3VlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgcHJvbG9ndWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zID0gbV9vdXQu
bmV3QmxvY2soKTsKICAgICAgICAgbV9oYW5kbGVFeGNlcHRpb25zID0gbV9vdXQubmV3QmxvY2so
KTsKIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTE3NCw4ICsxNzUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIEJhY2sgdG8gcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbnkg
Ym9ja3MgdGhhdCBnZXQgc25lYWtpbHkgY3JlYXRlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29k
ZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgbV9oYW5kbGVFeGNlcHRpb25zKTsKLSAgICAgICAgbV9v
dXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIG1fcHJvbG9ndWUpOworICAgICAgICBtX291
dC5hcHBlbmRUbyhwcm9sb2d1ZSwgY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyk7
CisgICAgICAgIG1fb3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBwcm9sb2d1ZSk7CiAg
ICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogCiAgICAgICAgIHNpemVfdCBzaXplT2ZDYXB0
dXJlZCA9IHNpemVvZihKU1ZhbHVlKSAqIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwpAQCAt
MjU3LDUxICsyNTgsNzYgQEAgcHVibGljOgogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgTEJh
c2ljQmxvY2sgZmlyc3RERkdCYXNpY0Jsb2NrID0gbG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSk7
Ci0gICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KLSAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
Y2xlYXIoKTsKLSAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9Ci0gICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKLSAgICAgICAgfQotICAgICAgICBtX25vZGUgPSBu
dWxscHRyOwotICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29k
ZU9yaWdpbigwKSwgdHJ1ZSk7Ci0gICAgICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9l
bnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBt
X291dC5zZXRPcmlnaW4obm9kZSk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm1hY2hpbmVMb2NhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFsbG93cyB1cyB0
byBkbyBDU0Ugb24gdGhlCi0gICAgICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFy
Z3VtZW50cy4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgot
ICAgICAgICAgICAgICAgIC8vIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vz
bid0IGhhdmUgYW55IGVmZmVjdHMgYmVmb3JlIGl0LiBUaGlzCi0gICAgICAgICAgICAgICAgLy8g
c2hvdWxkIGhvbGQgdHJ1ZS4KLSAgICAgICAgICAgICAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVz
LmFkZChub2RlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldKSB7Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9k
ZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1l
bnQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICB7CisgICAgICAgICAgICBO
b2RlKiByb290RW50cnlTd2l0Y2ggPSBtX2dyYXBoLmJsb2NrKDApLT50ZXJtaW5hbCgpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm9vdEVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNoKCkp
OworICAgICAgICAgICAgLy9FbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9IHJvb3RF
bnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICBWZWN0b3I8TEJhc2lj
QmxvY2s+IHN1Y2Nlc3NvcnMobV9ncmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAg
IHN1Y2Nlc3NvcnNbMF0gPSBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fZ3JhcGgubV9udW1FbnRyeXBvaW50
czsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gT09QUzogYWRkIGV4cGxhaW5lciBoZXJlLgor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NvcnNbaV0gPSBmaXJzdERGR0Jhc2ljQmxvY2s7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fb3V0LmVudHJ5U3dpdGNoKHN1Y2Nlc3NvcnMpOwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0
aW9ucywgbV9oYW5kbGVFeGNlcHRpb25zKTsKKworICAgICAgICAgICAgbV9ub2RlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2Rl
T3JpZ2luKDApLCB0cnVlKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgorICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CisgICAgICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vYXV0byYgYXJndW1l
bnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2so
MCkpLT52YWx1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBnZXQgbm9u
IG51bGxwdHIgbm9kZSBoZXJlLgorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBudWxscHRy
OworCisgICAgICAgICAgICAgICAgLy9Ob2RlKiBub2RlID0gYXJndW1lbnRzW2ldOworICAgICAg
ICAgICAgICAgIC8vbV9vdXQuc2V0T3JpZ2luKG5vZGUpOworCisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0Lmxv
YWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBjYW4gd2UgZXZlbiBkbyB0aGlzIGFueW1vcmUgZ2l2ZW4gRW50cnlTd2l0
Y2g/CisgICAgICAgICAgICAgICAgLy9pZiAobm9kZSkgeworICAgICAgICAgICAgICAgIC8vICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bWFjaGluZUxvY2FsKTsKKyAgICAgICAgICAgICAgICAvLyAgICAKKyAgICAgICAgICAg
ICAgICAvLyAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4g
SXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAvLyBw
cmltb3JkaWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9j
YWwgdGhhdCBnb3QgcHV0IGluCisgICAgICAgICAgICAgICAgLy8gICAgLy8gcGxhY2Ugb2YgdGhl
IG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQu
IFRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgbV9sb2FkZWRBcmd1bWVudFZhbHVl
cy5hZGQobm9kZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzWzBd
W2ldKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlz
Tm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNW
YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3Jt
YXQgZm9yIGFyZ3VtZW50Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RERkdC
YXNpY0Jsb2NrKTsKICAgICAgICAgfQotICAgICAgICBtX291dC5qdW1wKGZpcnN0REZHQmFzaWNC
bG9jayk7CisKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhtX2hhbmRsZUV4Y2VwdGlvbnMsIGZp
cnN0REZHQmFzaWNCbG9jayk7CiAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNl
cHRpb25IYW5kbGVyID0gc3RhdGUtPmV4Y2VwdGlvbkhhbmRsZXI7CkBAIC05MzgsNiArOTY0LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBERkc6OlN3aXRjaDoKICAgICAgICAgICAgIGNvbXBp
bGVTd2l0Y2goKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6RW50cnlT
d2l0Y2g6CisgICAgICAgICAgICBjb21waWxlRW50cnlTd2l0Y2goKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIERGRzo6UmV0dXJuOgogICAgICAgICAgICAgY29tcGlsZVJldHVy
bigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03Nzg3LDYgKzc4MTYsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNo
IGtpbmQiKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnRyeVN3aXRjaCgpCisgICAgewor
ICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnM7CisgICAgICAgIGZvciAoREZH
OjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX25vZGUtPmVudHJ5U3dpdGNoRGF0YSgpLT5jYXNl
cykKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKGxvd0Jsb2NrKHN1Y2Nlc3NvcikpOwor
ICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNzb3JzKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlUmV0dXJuKCkKICAgICB7CkBAIC0xNDYzOCw3ICsxNDY3NSw2IEBAIHByaXZh
dGU6CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIAotICAg
IExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRp
b25zOwogICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tz
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2
aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NjEsNiArODYxLDIwIEBAIHZvaWQgT3V0cHV0OjphZGRJbmNv
bWluZ1RvUGhpKExWYWx1ZSBwaGkKICAgICAgICAgdmFsdWUudmFsdWUoKS0+YXM8QjM6OlVwc2ls
b25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7CiB9CiAKK3ZvaWQgT3V0cHV0OjpzZXROdW1FbnRyeXBv
aW50cyh1bnNpZ25lZCBudW1FbnRyeXBvaW50cykKK3sKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlw
b2ludHMobnVtRW50cnlwb2ludHMpOworfQorCit2b2lkIE91dHB1dDo6ZW50cnlTd2l0Y2goY29u
c3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgY2FzZXMpCit7CisgICAgbV9ibG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVudHJ5U3dpdGNoLCBvcmlnaW4oKSk7CisgICAgZm9yIChMQmFzaWNC
bG9jayBibG9jayA6IGNhc2VzKSB7CisgICAgICAgIC8vIE9PUFM6IGZyZXF1ZW5jaWVzIGhlcmUK
KyAgICAgICAgbV9ibG9jay0+YXBwZW5kU3VjY2Vzc29yKEZyZXF1ZW50ZWRCbG9jayhibG9jaykp
OworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJl
dmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyOSw2ICs0MjksOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICB2b2lkIHNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkKTsKKyAgICB2b2lkIGVu
dHJ5U3dpdGNoKGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mKTsKKwogICAgIHZvaWQgcmV0KExW
YWx1ZSk7CiAKICAgICB2b2lkIHVucmVhY2hhYmxlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319124</attachid>
            <date>2017-08-25 18:10:04 -0700</date>
            <delta_ts>2017-08-25 18:33:34 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>58156</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxT
cGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUg
YW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiAr
MTY4LDE3IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9p
bnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50cnlwb2lu
dHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRM
aXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNl
dDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBjbGFzcyBE
aXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdhc21Cb3Vu
ZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7CiAKK3R5
cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENvZGUm
KTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQcm9sb2d1
ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhl
IGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCiAv
LyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRp
bmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2YgQWlyLgpA
QCAtMTY1LDcgKzE2OSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsgfQogICAg
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlwb2ludChC
YXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW50
cnlwb2ludEluZGV4KEJhc2ljQmxvY2sqKSBjb25zdDsKKyAgICB2b2lkIHNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgsIFJlZlB0cjxQcm9sb2d1ZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogV2UgYWxsb3cgdGhpcyB0
byBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgd2Ugc2V0IG1fZW50cnlwb2ludHMganVzdCBmb3IgY29u
dmVuaWVuY2UgdG8gdXNlcnMgb2YgdGhpcyBBUEkuCisgICAgICAgIG1fZW50cnlwb2ludEluZGV4
VG9HZW5lcmF0b3Iuc2V0KGVudHJ5cG9pbnRJbmRleCwgZ2VuZXJhdG9yKTsKKyAgICB9CisgICAg
UmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQo
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlw
b2ludEluZGV4VG9HZW5lcmF0b3IuZ2V0KGVudHJ5cG9pbnRJbmRleCk7CisgICAgfQorCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGJ5IGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CiAgICAgdm9pZCBzZXRFbnRyeXBvaW50cyhWZWN0b3ImJiB2ZWN0b3IpCkBA
IC0zNTMsNiArMzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5
cG9pbnRzOyAvLyBUaGlzIGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4K
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9lbnRyeXBvaW50SW5k
ZXhUb0dlbmVyYXRvcjsKICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yPiBtX3dh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwxNyArMjA4LDIyIEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCiAKLSAgICAgICAg
aWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZW50cnlwb2ludEluZGV4ID0gY29kZS5lbnRyeXBvaW50SW5kZXgoYmxvY2sp
KSB7CiAgICAgICAgICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fz
c2VtYmxlci0+c3RhcnRFbnRyeXBvaW50KGppdCk7IAogCi0gICAgICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3Jh
dGNoKGppdCwgaXNBUk02NCgpKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFJlZlB0cjxQcm9sb2d1ZUdlbmVyYXRv
cj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjb2RlLnByb2xvZ3VlR2VuZXJhdG9yRm9yRW50cnlwb2lu
dCgqZW50cnlwb2ludEluZGV4KTsKKyAgICAgICAgICAgIGlmIChwcm9sb2d1ZUdlbmVyYXRvcikK
KyAgICAgICAgICAgICAgICBwcm9sb2d1ZUdlbmVyYXRvci0+cnVuKGppdCwgY29kZSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
KTsKKyAgICAgICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0
LCBpc0FSTTY0KCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQu
ZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAKICAgICAg
ICAgICAgIGlmIChkaXNhc3NlbWJsZXIpCiAgICAgICAgICAgICAgICAgZGlzYXNzZW1ibGVyLT5l
bmRFbnRyeXBvaW50KGppdCk7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjIx
MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUzLDYgKzE4NTMsOSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAor
ICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBSZXR1cm46
CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIy
MTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjEsOCArMjIxLDYgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIAogICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50OwogICAgIAotICAg
IC8vIFRoZXNlIGZpZWxkcyBhcmUgcmVzZXJ2ZWQgZm9yIE5hdHVyYWxMb29wcy4KLSAgICAKICAg
ICBzdHJ1Y3QgU1NBRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzNCw5ICs1MjM0
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IFN1cHBvcnQgY2F0Y2ggaW4gdGhlIEZUTC4KLSAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1Mzk2CisgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKICAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMjEyMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDYgKzQyNiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0
Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgRm9y
Y2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgz
LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSnVt
cDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIEVudHJ5U3dp
dGNoOgogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6CiAgICAgY2FzZSBEaXJl
Y3RUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw2ICsxNTI2LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAg
ICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBjYXNlIENoZWNrVGllclVw
SW5Mb29wOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDExIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0
KGRhdGEtPmNhc2VzW2ldLnZhbHVlLCBjb250ZXh0KSwgIjoiLCBkYXRhLT5jYXNlc1tpXS50YXJn
ZXQpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJkZWZhdWx0OiIsIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICB9CisgICAgaWYgKG5vZGUtPmlzRW50cnlTd2l0Y2goKSkgeworICAgICAgICBF
bnRyeVN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBCcmFuY2hUYXJnZXQoZGF0YS0+Y2FzZXNbaV0pKTsKKyAg
ICB9CiAgICAgQ2xvYmJlclNldCByZWFkczsKICAgICBDbG9iYmVyU2V0IHdyaXRlczsKICAgICBh
ZGRSZWFkc0FuZFdyaXRlcygqdGhpcywgbm9kZSwgcmVhZHMsIHdyaXRlcyk7CkBAIC01MTUsOCAr
NTIwLDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICBv
dXQucHJpbnQoIlxuIik7CiAgICAgb3V0LnByaW50KCJERkcgZm9yICIsIENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAiOlxuIik7CiAgICAgb3V0LnBy
aW50KCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1f
Zm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsgUmVm
IGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50U3RhdGUsICJcbiIpOwotICAgIGlmIChtX2Zvcm0g
PT0gU1NBKQotICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0czogIiwgbGlzdER1
bXAobV9hcmd1bWVudEZvcm1hdHMpLCAiXG4iKTsKKyAgICBpZiAobV9mb3JtID09IFNTQSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRl
eCA8IG1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKytlbnRyeXBvaW50SW5kZXgpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0cyBmb3IgZW50cnlwb2ludCBpbmRleDog
IiwgZW50cnlwb2ludEluZGV4LCAiIDogIiwgbGlzdER1bXAobV9hcmd1bWVudEZvcm1hdHNbZW50
cnlwb2ludEluZGV4XSksICJcbiIpOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZm9yIChh
dXRvIHBhaXIgOiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cykKICAgICAgICAgICAgIG91dC5wcmlu
dCgiICBBcmd1bWVudHMgZm9yIGJsb2NrIyIsIHBhaXIua2V5LT5pbmRleCwgIjogIiwgbGlzdER1
bXAocGFpci52YWx1ZSksICJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MzgsNiArOTM4LDkgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgeworICAgICAg
ICByZXR1cm4gbV9lbnRyeXBvaW50cy5jb250YWlucyhibG9jayk7CisKKyAgICAgICAgLy8gT09Q
UzogdGhpcyBpcyB3cm9uZyBub3chCiAgICAgICAgIGlmIChtX2VudHJ5cG9pbnRzLnNpemUoKSA8
PSA0KSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fZW50cnlwb2ludHMuY29udGFpbnMo
YmxvY2spOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9pbnRUb0FyZ3Vt
ZW50cy5jb250YWlucyhibG9jaykpOwpAQCAtOTU0LDYgKzk1Nyw5IEBAIHB1YmxpYzoKICAgICBD
b2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPEJhc2lj
QmxvY2s+LCA4PiBtX2Jsb2NrczsKKyAgICB1bnNpZ25lZCBtX251bUVudHJ5cG9pbnRzIHsgVUlO
VF9NQVggfTsKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIGhhdmUgdGhpcyBwZXIgaW5s
aW5lIGNhbGwgZnJhbWUgYmVjYXVzZSB3ZSBkb24ndCBpbmxpbmUgb3BfY2F0Y2ggYXMgYW4gZW50
cnlwb2ludC4KKyAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVu
c2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1f
ZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OwogICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gbV9lbnRyeXBvaW50czsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hp
bGRyZW47CiAKQEAgLTk5MSw4ICs5OTcsOCBAQCBwdWJsaWM6CiAgICAgLy8gZWZmZWN0cy4KICAg
ICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBBcmd1bWVudHNWZWN0b3I+IG1fZW50cnlwb2ludFRvQXJn
dW1lbnRzOwogICAgIAotICAgIC8vIEluIENQUywgdGhpcyBpcyBtZWFuaW5nbGVzcy4gSW4gU1NB
LCB0aGlzIGlzIHRoZSBhcmd1bWVudCBzcGVjdWxhdGlvbiB0aGF0IHdlJ3ZlIGxvY2tlZCBpbi4K
LSAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IG1fYXJndW1lbnRGb3JtYXRzOworICAgIC8vIEluIENQ
UywgdGhpcyBpcyBtZWFuaW5nbGVzcy4gSW4gU1NBLCB0aGlzIGlzIHRoZSBhcmd1bWVudCBzcGVj
dWxhdGlvbiB0aGF0IHdlJ3ZlIGxvY2tlZCBpbiBmb3IgYW4gZW50cnlwb2ludCBibG9jay4KKyAg
ICBWZWN0b3I8VmVjdG9yPEZsdXNoRm9ybWF0Pj4gbV9hcmd1bWVudEZvcm1hdHM7CiAKICAgICBT
ZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0Rh
dGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQ
b3NpdGlvbnM7CkBAIC0xMDQ4LDYgKzEwNTQsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworICAgIEJhZzxF
bnRyeVN3aXRjaERhdGE+IG1fZW50cnlTd2l0Y2hEYXRhOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJpbmdTdHJ1Y3R1cmU7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzeW1ib2xTdHJ1
Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDggKzkxLDU1IEBAIHN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVB
YnMKICAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChOb2RlQWJzdHJhY3RWYWx1ZVBhaXIg
eyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldEFyZ3VtZW50
Rm9ybWF0KEdyYXBoJiBncmFwaCwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEZsdXNoRm9ybWF0IGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRmx1c2hlZEludDMyOgor
ICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgdmFsdWUu
c2V0VHlwZShncmFwaCwgU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgorICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKGdyYXBoLCBudWxscHRyLCAiQmFk
IGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CisKIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogeworICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9l
bnRyeXBvaW50cy5zaXplKCkgPT0gMSk7IC8vIE9PUFM6IG1heWJlIGRlYnVnIGFzc2VydCBoZXJl
CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgIGlmIChtX2dyYXBoLmlzRW50cnlwb2ludChibG9jaykpIHsKKyAg
ICAgICAgICAgIC8vIFdlIGJvb3RzdHJhcCB0aGUgZW50cnlwb2ludHMgYmVsb3cuCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFj
aGFibGUpOworICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgICAg
ICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhRm91bmRD
b25zdGFudHMgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0
ZUF0SGVhZCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOworICAgICAgICBibG9jay0+Y2ZhU3RydWN0
dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50
cygpOyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSku
Y2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+
dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKEJh
c2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKICAgICAgICAg
ZW50cnlwb2ludC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgICAgIGVudHJ5cG9pbnQt
PmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKQEAgLTEwMCwxNSArMTQ3LDE5IEBAIHZvaWQgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICBlbnRyeXBvaW50LT5jZmFTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKICAgICAgICAg
ZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJlc0Fy
ZVdhdGNoZWQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52
YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChp
KS5jbGVhcigpOwogCi0gICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdoZW4gc3VwcG9ydGluZyBtdWx0aXBsZSBlbnRyeXBvaW50cyBpbiB0aGUgRlRMLCB3ZSBuZWVk
IHRvIGNoYW5nZQotICAgICAgICAgICAgICAgIC8vIHdoYXQgd2UgZG8gaGVyZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAgICAgICAgICAgIGZv
cm1hdCA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV07Ci0gICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSAgeworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gT09QUzogV2UgY291bGQgZ28gdHdv
IHdheXMgaGVyZS4gTW9yZSBhY2N1cmF0ZSB0byBtYWNoaW5lIHN0YXRlLCBJIHRoaW5rIHdlIGNh
biBzYXkKKyAgICAgICAgICAgICAgICAvLyBoZWFwIHRvcCBoZXJlLiBCdXQgd2UgY2FuIGFsc28g
c2F5IGNsZWFyIGIvYyBub2JvZHkgc2hvdWxkIGJlIHJlYWRpbmcgYW4gYXJndW1lbnQgeWV0Lgor
ICAgICAgICAgICAgICAgIC8vIE9yIHNob3VsZCB3ZSBjbGVhcigpPworICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCkt
PnZhbHVlW2ldOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CkBAIC0xMTYsNTMgKzE2NywxNyBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAg
ICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52
YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAg
ICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0
ZWNvZGVUb3AoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2gg
Zm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQobV9ncmFwaCwgZW50cnlwb2ludC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLCBmb3JtYXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhl
YWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFp
bC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICBp
ZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBib290
c3RyYXBwZWQgdGhlIGVudHJ5cG9pbnRzIGFib3ZlLgotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAg
YmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUhhc1Zp
c2l0ZWQgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7
Ci0gICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1
cmVzQXJlV2F0Y2hlZDsKLSAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0
VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5sb2Nh
bChpKS5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5j
bGVhcigpOwotICAgICAgICB9Ci0gICAgfQogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC0zNzEsNiArMzg2LDI3
IEBAIGlubGluZSBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVQKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2Nr
KTsKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorICAgIGNhc2UgRW50cnlT
d2l0Y2g6IHsKKyAgICAgICAgLy8gT09QUzogc2FtZSBjb21tZW50IGFzIG9zciBhdmFpbGFiaWxp
dHkgY2FsY3VsYXRvcidzIGFzc3VtcHRpb24gb2YgdGhpcyEgU2hvdWxkIHRoaXMgYmUgZXZlcnkg
c2luZ2xlIEVudHJ5U3dpdGNoPyBPciBzaG91bGQgaXQganVzdCBiZSB0aGUgcm9vdCBFbnRyeVN3
aXRjaD8gU2hvdWxkIHdlIGV2ZW4gYXNzdW1lIHRoZSByb290IGhhcyBhbiBFbnRyeVN3aXRjaD8K
KyAgICAgICAgTm9kZSogZW50cnlTd2l0Y2ggPSB0ZXJtaW5hbDsKKyAgICAgICAgRW50cnlTd2l0
Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBlbnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRhKCk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50
SW5kZXggPCBlbnRyeVN3aXRjaERhdGEtPmNhc2VzLnNpemUoKTsgKytlbnRyeXBvaW50SW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGVudHJ5U3dpdGNoRGF0YS0+
Y2FzZXNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZv
cm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlw
b2ludEluZGV4XTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVu
dEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKKyAgICAgICAgICAgICAgICBGbHVzaEZv
cm1hdCBmb3JtYXQgPSBhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdOworICAgICAgICAgICAgICAg
IHNldEFyZ3VtZW50Rm9ybWF0KG1fZ3JhcGgsIHN1Y2Nlc3Nvci0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KSwgZm9ybWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIEVudHJ5U3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5lbnRyeVN3aXRjaERhdGEoKTsK
KyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0pOworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAg
ICB9CiAKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSoK
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNh
c2UgSnVtcDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNh
c2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBEb3VibGVSZXA6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsMTEgQEAgc3Ry
dWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0
IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgRW50cnlTd2l0Y2hEYXRhKCkgPSBkZWZhdWx0OworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gY2FzZXM7Cit9OworCiBzdHJ1Y3QgQ2FsbFZhcmFyZ3NEYXRh
IHsKICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7CiB9OwpAQCAtMTI5NywxMiArMTMwMiwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcCgpID09IFN3aXRjaDsKICAgICB9CiAKKyAgICBi
b29sIGlzRW50cnlTd2l0Y2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0g
RW50cnlTd2l0Y2g7CisgICAgfQorCiAgICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNhc2UgQnJh
bmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAg
ICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGFpbENhbGw6CiAgICAgICAgIGNhc2Ug
RGlyZWN0VGFpbENhbGw6CkBAIC0xMzY0LDYgKzEzNzUsMTIgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoaXNTd2l0Y2goKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxTd2l0Y2hEYXRh
Kj4oKTsKICAgICB9CisKKyAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNFbnRyeVN3aXRjaCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3BJbmZvLmFzPEVudHJ5U3dpdGNoRGF0YSo+KCk7CisgICAgfQogICAgIAogICAgIHVuc2lnbmVk
IG51bVN1Y2Nlc3NvcnMoKQogICAgIHsKQEAgLTEzNzQsNiArMTM5MSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAyOwogICAgICAgICBjYXNlIFN3aXRjaDoKICAgICAgICAgICAgIHJl
dHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSArIDE7CisgICAgICAgIGNhc2UgRW50cnlT
d2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUo
KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBA
IC0xMzg2LDcgKzE0MDUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRj
aERhdGEoKS0+Y2FzZXNbaW5kZXhdLnRhcmdldC5ibG9jazsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGluZGV4ID09IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKTsKICAgICAgICAgICAg
IHJldHVybiBzd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoLmJsb2NrOwotICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNFbnRyeVN3aXRjaCgpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5
U3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF07CiAKICAgICAgICAgc3dpdGNoIChpbmRleCkgewog
ICAgICAgICBjYXNlIDA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSnVtcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKEJyYW5jaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFN3aXRjaCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudHJ5U3dpdGNoLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
VGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3Jv
KERpcmVjdFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwogICAgICAgICByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFp
bGFibGUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBtX2dyYXBoLm1fYXJn
dW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgIEZsdXNoZWRB
dCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50Rm9ybWF0c1thcmd1bWVudF0sCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShmbHVzaGVk
QXQpOworCisgICAgICAgIC8vIE9PUFM6IHRoaXMgZmVlbHMgYSBiaXQgdWdseSwgYnV0IEkgZG9u
J3QgdGhpbmsgd2Ugd2FudCB0aGlzIHJ1bGUgZm9yIGdlbmVyYWwgRW50cnlTd2l0Y2ggbm9kZXMK
KyAgICAgICAgLy8gYmVjYXVlIGltYWdpbmUgdGhlcmUgaXMgYW4gRW50cnlTd2l0Y2ggaW4gYSBy
YW5kb20gbG9jYXRpb24gaW4gdGhlIGdyYXBoLCBzdXJlbHkgd2UgZG9uJ3Qgd2FudAorICAgICAg
ICAvLyB0byBzYXkgdGhhdCBhbGwgaXRzIGNoaWxkcmVuIGhhdmUgdGhpcyBhcmd1bWVudCBzcGVj
dWxhdGlvbiBhdCB0aGUgaGVhZC4gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkCisgICAgICAgIC8vIHRo
ZSB2YWx1ZSBvZiB0aGF0IHN0YWNrIHNsb3QhCisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGguYmxvY2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICAvL0ZsdXNoZWRBdCBmbHVz
aGVkQXQgPSBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICAvL3Jvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShmbHVzaGVkQXQp
OworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJn
dW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nl
c3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgpAQCAtODYsMTAgKzkwLDI4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdFRhaWwgPSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OwogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1
Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1lcmdlKGNhbGN1bGF0b3Iu
bV9hdmFpbGFiaWxpdHkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChibG9jayA9PSBtX2dyYXBoLmJsb2NrKDApKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHJvb3RFbnRyeVN3aXRjaCA9IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlTd2l0Y2goKSk7CisgICAg
ICAgICAgICAgICAgICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gcm9vdEVu
dHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBlbnRyeVN3aXRj
aERhdGEtPmNhc2VzLnNpemUoKTsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXNb
ZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxG
bHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNb
ZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KGFy
Z3VtZW50Rm9ybWF0c1thcmd1bWVudF0sIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxpdHko
Zmx1c2hlZEF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0t
OykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+
c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29y
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4uZm9yRXhpdCk7CiAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIy
MTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDYgKzEwOTIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAg
IGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1
bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1
YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBo
KQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQotICAgICAgICAsIG1f
Y2FsY3VsYXRvcihncmFwaCkKICAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKICAgICB7
CiAgICAgfQpAQCAtNTUsNiArNTUsNDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9n
cmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwogICAgICAgICBtX2dyYXBoLmNsZWFyQ1BTQ0ZHRGF0
YSgpOworCisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6OkludEhh
c2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVk
Pj4gZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jazsKKworICAgICAgICB7CisgICAgICAg
ICAgICBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6
ZSgpOworCisgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFw
aCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgwLCAxLjBmKTsKKworICAgICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERh
dGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0Y2hEYXRhLmFkZCgpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2dyYXBoLm1f
bnVtRW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogb2xkUm9vdCA9IG1fZ3JhcGgubV9lbnRyeXBvaW50c1tlbnRyeXBvaW50SW5kZXhd
OworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2suYWRkKGVu
dHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7CisgICAgICAgICAgICAgICAgZW50cnlTd2l0Y2hEYXRh
LT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChvbGRSb290LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBvbGRS
b290LT5wcmVkZWNlc3NvcnMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAgICAgICAgaWYg
KG9sZFJvb3QtPmlzQ2F0Y2hFbnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghIWVudHJ5cG9pbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRy
eXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xk
Um9vdC0+Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNhc2VzWzBdID09
IG1fZ3JhcGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5vcm1hbCBjYWxs
IGVudHJ5cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCisKKyAgICAgICAgICAg
IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMucmVzaXplKG1fZ3JhcGgubV9udW1FbnRyeXBvaW50
cyk7CisKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0gZmFsc2U7CisgICAgICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGV4aXRP
SyB9OworICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLCBTcGVjTm9uZSwgRW50cnlTd2l0Y2gsIG9yaWdpbiwgT3BJbmZvKGVudHJ5U3dpdGNo
RGF0YSkpOworCisgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludHMuY2xlYXIoKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5hcHBlbmQobmV3Um9vdCk7CisKKyAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBP
T1BTIHByZXZlbnQgY3JlYXRpbmcgdGhpcyB0d2ljZQorICAgICAgICBtX2NhbGN1bGF0b3IgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNTQUNhbGN1bGF0b3I+KG1fZ3JhcGgpOworCiAgICAgICAgIG1fZ3Jh
cGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKQEAgLTY3LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUu
aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRv
ci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNz
YVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLT5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgQVNT
RVJUKHNzYVZhcmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkp
OwogICAgICAgICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOwog
ICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZh
cmlhYmxlKTsKQEAgLTEwMyw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVm
KAorICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci0+bmV3RGVmKAogICAgICAgICAgICAgICAg
ICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxk
Tm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMiw3ICsxNTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBEZWNpZGUgd2hlcmUgUGhpcyBhcmUgdG8gYmUg
aW5zZXJ0ZWQuIFRoaXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRvZXNuJ3QgaW5zZXJ0IHRoZW0K
ICAgICAgICAgLy8geWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hlcmUgdG8gaW5zZXJ0IGJhc2Vk
IG9uIHdoZXJlIFNTQUNhbGN1bGF0b3IgdGVsbHMgdXMgdG8uCi0gICAgICAgIG1fY2FsY3VsYXRv
ci5jb21wdXRlUGhpcygKKyAgICAgICAgbV9jYWxjdWxhdG9yLT5jb21wdXRlUGhpcygKICAgICAg
ICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlLCBCYXNpY0Js
b2NrKiBibG9jaykgLT4gTm9kZSogewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCld
OwogICAgICAgICAgICAgICAgIApAQCAtMTY3LDcgKzIwOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGksICI6ICIsIFZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgbV92YXJpYWJsZUZvclNTQUluZGV4W2ldKSwgIlxuIik7
CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNh
bGN1bGF0b3I6ICIsIG1fY2FsY3VsYXRvciwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJT
U0EgY2FsY3VsYXRvcjogIiwgKm1fY2FsY3VsYXRvciwgIlxuIik7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIERvIHRoZSBidWxrIG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVh
Y2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBvcGVyYW5kLT5Ob2RlCkBAIC0yMjAsNyArMjYyLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcg
bGl2ZSB2YXJpYWJsZSAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIHZhcmlhYmxl
KSwgIiBhdCBoZWFkIG9mIGJsb2NrICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFy
aWFibGUgPSBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsKLSAgICAgICAg
ICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3IucmVhY2hp
bmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3ItPnJlYWNoaW5nRGVmQXRIZWFkKGJs
b2NrLCBzc2FWYXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgUGhp
LCB0aGVuIHdlIHdvbid0IGhhdmUgYSByZWFjaGluZyBkZWYKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGF0IGhlYWQuCkBAIC0yNDYsNyArMjg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
Ly8gdmFsdWVGb3JPcGVyYW5kIHdpdGggdGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNzb2NpYXRlZCB3
aXRoIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QKICAgICAgICAgICAgIC8vIGZsdXNoZWQsIHdlIGFs
c28gaW5zZXJ0IGEgTW92SGludC4KICAgICAgICAgICAgIHNpemVfdCBwaGlJbnNlcnRpb25Qb2lu
dCA9IDA7Ci0gICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9j
YWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhibG9jaykp
IHsKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJp
YWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlv
blBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwpAQCAtMzQ2LDcgKzM4OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IHRlcm1pbmFsLm5vZGUtPm9yaWdp
bjsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVt
U3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7
Ci0gICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2Fs
Y3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAg
Zm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci0+cGhpc0ZvckJs
b2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5k
ZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwpAQCAtMzgzLDIzICs0MjUsMjEgQEAgcHVibGljOgog
ICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NB
RGF0YT4oYmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVs
dGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNTQToKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvJiBhcmd1bWVu
dHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygw
KSktPnZhbHVlOwotICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZShhcmd1
bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFs
dWU7Ci0KLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJn
dW1lbnRzW2ldKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZSk7Ci0gICAgICAgICAgICBmb3JtYXQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ld
ID0gZm9ybWF0OwotICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gbm9kZTsgLy8gUmVjb3JkIHRo
ZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgZXhpdCBw
cm9maWxpbmcuCisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGVudHJ5cG9pbnRJbmRleFRvQXJn
dW1lbnRzQmxvY2spIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBh
aXIua2V5OworICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IHBhaXIudmFsdWU7Cisg
ICAgICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBv
aW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290KS0+dmFsdWU7CisgICAgICAgICAgICBWZWN0b3I8
Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKKyAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50cy5zaXplKCkpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ld
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlKTsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudEZvcm1hdHMudW5jaGVja2VkQXBwZW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5mb3JtYXQpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG5vZGU7IC8vIFJlY29y
ZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBiZW5lZml0IG9mIGV4
aXQgcHJvZmlsaW5nLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdID0gV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOwogCiAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC00MTEsNyArNDUxLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBTU0FDYWxjdWxhdG9yIG1fY2FsY3VsYXRvcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1NBQ2FsY3VsYXRvcj4gbV9jYWxjdWxhdG9yOwogICAgIEluc2VydGlvblNldCBt
X2luc2VydGlvblNldDsKICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlOwogICAgIEhhc2hNYXA8
Tm9kZSosIE5vZGUqPiBtX2FyZ3VtZW50TWFwcGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6Cisg
ICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxs
OgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxMDYsNiArNjEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGNhc2UgTGFz
dE5vZGVUeXBlOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBQaGk6CiAgICAgY2Fz
ZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
RW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgdGVybWlu
YWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAKICAgICAgICAgVkFMSURBVEUoKG1fZ3Jh
cGguYmxvY2soMCkpLCBtX2dyYXBoLmlzRW50cnlwb2ludChtX2dyYXBoLmJsb2NrKDApKSk7Cisg
ICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5ibG9jaygwKSA9PSBt
X2dyYXBoLm1fZW50cnlwb2ludHNbMF0pOwogCiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxs
IGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2ludHMgYXJlIGRlYWQu
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBv
aW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUGhpOgogICAg
IGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2Ug
RXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFNraXBTY29w
ZToKICAgICBjYXNlIEdldEdsb2JhbE9iamVjdDoKQEAgLTI0NSw2ICsyNDYsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBTd2l0Y2g6
CiAgICAgY2FzZSBUeXBlT2Y6CiAgICAgY2FzZSBQdXRCeUlkOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIs
NiArMTQyLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAg
ICAgICB9KTsKIAogICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciA9IHN0ZDo6
bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CisKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVl
OwogICAgICAgICByZXR1cm47CkBAIC0xNTIsOSArMTUzLDE5IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXIpKTsKIAogICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gYml0d2lz
ZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5iM0Nv
ZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAg
IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGF0ZS5wcm9j
LT5lbnRyeXBvaW50TGFiZWwoMCkpKTsKICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjNC
eXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogCisgICAgaWYgKCFz
dGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJ
bmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgeworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlw
b2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjYXRjaEJ5dGVjb2Rl
T2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1h
dD4mIGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5
cG9pbnRJbmRleF07CisgICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jYXRjaE9TUkVudHJ5LmFw
cGVuZCgKKyAgICAgICAgICAgICAgICBDYXRjaE9TUkVudHJ5IHsgc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbChl
bnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxlQWRkcmVzcygpLCBhcmd1bWVudEZvcm1hdHMsIGNh
dGNoQnl0ZWNvZGVPZmZzZXQgfSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoQjM6OkFp
cjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2RlKCkuZGlzYXNz
ZW1ibGVyKCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDIy
MTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMu
aCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQu
aCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Lmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMzksMTEgKzQwLDE5IEBAIGNsYXNzIFRyYWNrZWRS
ZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgRlRMIHsKIAorc3RydWN0IENhdGNoT1NSRW50cnkgewor
ICAgIHZvaWQqIG1hY2hpbmVDb2RlQWRkcmVzczsKKyAgICBWZWN0b3I8REZHOjpGbHVzaEZvcm1h
dD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVPZmZzZXQ7Cit9
OworCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklUQ29kZSB7CiBwdWJsaWM6CiAgICAg
SklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAKKyAgICAvLyBPT1BTOiBhZGQgaGVscGVycyBm
b3IgYWRkaW5nIGFuZCBsb29raW5nIHVwIGNhdGNoIG9zciBlbnRyeXMuCisKICAgICBDb2RlUHRy
IGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkKiBleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRlOwogICAgIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CkBAIC03Miw2ICs4
MSw4IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNjcmlw
dG9yczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93
UGF0aHM7CisgICAgVmVjdG9yPENhdGNoT1NSRW50cnk+IGNhdGNoT1NSRW50cnk7CisgICAgU2Ny
YXRjaEJ1ZmZlciogY2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAgICAKIHByaXZhdGU6CiAgICAgQ29k
ZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAs
NyArMTYwLDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVlbmN5
IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZy
ZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMgPSBt
X291dC5uZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBtX291dC5uZXdC
bG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMTc0LDggKzE3
NSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9y
IGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXphdGlv
biBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwotICAgICAg
ICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRp
b25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIHByb2xvZ3Vl
KTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVP
ZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7
CkBAIC0yNTcsNTEgKzI1OCw3NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJsb2Nr
KDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgotICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5jbGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJh
bmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0K
LSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fbm9k
ZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDAp
LCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFw
aC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAg
ICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFu
ZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxsb3dz
IHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxvYWQg
b2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3QgcHV0
IGluCi0gICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3VtZW50
IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQuIFRoaXMKLSAgICAgICAgICAgICAg
ICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1lbnRW
YWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUp
LCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1
ZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBh
cmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHsKKyAgICAgICAg
ICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9IG1fZ3JhcGguYmxvY2soMCktPnRlcm1pbmFsKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlTd2l0
Y2goKSk7CisgICAgICAgICAgICAvL0VudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0g
cm9vdEVudHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAgICAgIFZlY3RvcjxM
QmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworICAgICAg
ICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnM7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9ncmFwaC5tX251bUVudHJ5
cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBhZGQgZXhwbGFpbmVyIGhl
cmUuCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9IGZpcnN0REZHQmFzaWNCbG9jazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29y
cyk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjYWxsRW50cnlwb2ludEFyZ3VtZW50U3Bl
Y3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOworCisgICAgICAgICAgICBtX25vZGUgPSBu
dWxscHRyOworICAgICAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCks
IENvZGVPcmlnaW4oMCksIHRydWUpOworCisgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMu
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOworICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KKyAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9hdXRvJiBh
cmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5i
bG9jaygwKSktPnZhbHVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGdl
dCBub24gbnVsbHB0ciBub2RlIGhlcmUuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG51
bGxwdHI7CisKKyAgICAgICAgICAgICAgICAvL05vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07Cisg
ICAgICAgICAgICAgICAgLy9tX291dC5zZXRPcmlnaW4obm9kZSk7CisKKyAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9v
dXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIE9PUFM6IGNhbiB3ZSBldmVuIGRvIHRoaXMgYW55bW9yZSBnaXZlbiBFbnRy
eVN3aXRjaD8KKyAgICAgICAgICAgICAgICAvL2lmIChub2RlKSB7CisgICAgICAgICAgICAgICAg
Ly8gICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIC8vICAgIAorICAgICAg
ICAgICAgICAgIC8vICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUg
b25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vICAg
IC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBH
ZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAvLyBwbGFjZSBv
ZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9y
ZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vICAgIC8vIHNob3VsZCBob2xkIHRydWUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBtX2xvYWRlZEFyZ3VtZW50
VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAvL30KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1h
dHNbMF1baV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9k
ZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVh
bihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFs
dWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNo
IGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQuanVtcChmaXJz
dERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RERkdC
YXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0aW9u
cywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+
IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKQEAgLTUxMCw2ICs1
MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAg
ICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKKyAgICAgICAgICAgIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0
U3RhY2s6CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2soKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtOTM4LDYgKzk2Nyw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZHOjpTd2l0Y2g6
CiAgICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVudHJ5U3dpdGNo
KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVybjoKICAgICAg
ICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUxOCw2ICsx
NTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZv
ck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7CiAgICAgICAgIHNldEpT
VmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5r
ZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFeHRyYWN0
Q2F0Y2hMb2NhbCgpCisgICAgeworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2Z0bFN0YXRlLmppdENvZGUtPmNhdGNoT1NSRW50
cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCkpKSk7
CisgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CkBAIC03Nzg3
LDYgKzc4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVFbnRyeVN3aXRjaCgpCisgICAgeworICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nl
c3NvcnM7CisgICAgICAgIGZvciAoREZHOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX25vZGUt
PmVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlcykKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnMuYXBwZW5k
KGxvd0Jsb2NrKHN1Y2Nlc3NvcikpOworICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNz
b3JzKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKICAgICB7CkBAIC0x
NDYzOCw3ICsxNDY4NCw2IEBAIHByaXZhdGU6CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIFByb2Nl
ZHVyZSYgbV9wcm9jOwogICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJh
c2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOwogICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2Nr
KiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiAr
MTA3LDc3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Cit2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0ZUTCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkZUTEpJVCk7CisgICAgRlRMOjpKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRD
b2RlKCktPmZ0bCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGppdENvZGUpOworCisgICAgQ2F0Y2hP
U1JFbnRyeSBvc3JFbnRyeTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChjb25z
dCBDYXRjaE9TUkVudHJ5JiBtYXliZUVudHJ5IDogaml0Q29kZS0+Y2F0Y2hPU1JFbnRyeSkgewor
ICAgICAgICBpZiAobWF5YmVFbnRyeS5jYXRjaEJ5dGVjb2RlT2Zmc2V0ID09IGJ5dGVjb2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG9zckVudHJ5ID0g
bWF5YmVFbnRyeTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICghZm91bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gV2UncmUgb25seSBh
bGxvd2VkIHRvIE9TUiBlbnRlciBpZiB3ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21wYXRpYmxlIGFy
Z3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG9zckVudHJ5LmFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKS5qc1ZhbHVlKCk7CisgICAgICAgIHN3aXRjaCAob3NyRW50cnkuYXJndW1l
bnRGb3JtYXRzW2FyZ3VtZW50XSkgeworICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZEludDMyOgor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRD
ZWxsOgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Rmx1
c2hlZEJvb2xlYW46CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQm9vbGVhbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgREZHOjpEZWFkRmx1c2g6CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBhcmd1bWVu
dCBpcyBub3QgYWxpdmUuIFRoZXJlZm9yZSwgaXQncyBhbGxvd2VkIHRvIGJlIGFueSB0eXBlLgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSlNWYWx1ZToKKyAg
ICAgICAgICAgIC8vIEFuIGFyZ3VtZW50IGlzIHRyaXZpYWxseSBhIEpTVmFsdWUuCisgICAgICAg
ICAgICBicmVhazsgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVT
aXplRm9yQ2hlY2sgPSBqaXRDb2RlLT5jb21tb24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhl
Y3V0aW9uQW5kRXhpdCgpOworICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0
eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXpl
Rm9yQ2hlY2spLm9mZnNldCgpXSkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVChJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCldLnUub3Bjb2RlKSA9PSBvcF9jYXRjaCk7Cisg
ICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFs
dWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlv
bnMoKVtleGVjLT5ieXRlY29kZU9mZnNldCgpICsgM10udS5wb2ludGVyKTsKKyAgICBKU1ZhbHVl
KiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oaml0Q29kZS0+Y2F0Y2hP
U1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7Cisg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
eworICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNMb2Nh
bCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhQnVmZmVyW2luZGV4XSA9IGV4
ZWMtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgKytp
bmRleDsKKyAgICB9KTsKKworICAgIGRhdGFMb2dMbigiUGVyZm9ybWluZyBGVEwgT1NSIEVudHJ5
IGF0IGNhdGNoISIpOworCisgICAgaml0Q29kZS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0
aXZlTGVuZ3RoKHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KTsKKworICAgIHJldHVybiBvc3JFbnRy
eS5tYWNoaW5lQ29kZUFkZHJlc3M7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAog
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuaAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeSgKICAgICBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9j
aywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKICAg
ICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CiAKK3ZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4
ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYxLDYgKzg2MSwxNiBAQCB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaShMVmFsdWUg
cGhpCiAgICAgICAgIHZhbHVlLnZhbHVlKCktPmFzPEIzOjpVcHNpbG9uVmFsdWU+KCktPnNldFBo
aShwaGkpOwogfQogCit2b2lkIE91dHB1dDo6ZW50cnlTd2l0Y2goY29uc3QgVmVjdG9yPExCYXNp
Y0Jsb2NrPiYgY2FzZXMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FzZXMuc2l6ZSgpID09IG1f
cHJvYy5udW1FbnRyeXBvaW50cygpKTsKKyAgICBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRW50cnlTd2l0Y2gsIG9yaWdpbigpKTsKKyAgICBmb3IgKExCYXNpY0Jsb2NrIGJsb2Nr
IDogY2FzZXMpIHsKKyAgICAgICAgLy8gT09QUzogZnJlcXVlbmNpZXMgaGVyZQorICAgICAgICBt
X2Jsb2NrLT5hcHBlbmRTdWNjZXNzb3IoRnJlcXVlbnRlZEJsb2NrKGJsb2NrKSk7CisgICAgfQor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjIx
MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDI5LDYgKzQyOSw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAg
IHZvaWQgZW50cnlTd2l0Y2goY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYpOworCiAgICAgdm9p
ZCByZXQoTFZhbHVlKTsKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC02NSw2ICs2NiwyOCBAQCBT
dGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIGZpbmFsaXplciA9IHN0YXRpY19jYXN0PEpJ
VEZpbmFsaXplcio+KGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIuZ2V0KCkpOwogCiAgICAgcHJvYyA9
IHN0ZDo6bWFrZV91bmlxdWU8UHJvY2VkdXJlPigpOworICAgIHByb2MtPnNldE51bUVudHJ5cG9p
bnRzKGdyYXBoLm1fbnVtRW50cnlwb2ludHMpOworCisgICAgLy8gT09QUyA6bWF5YmUgYWJzdHJh
Y3QgdmlhIEIzOjpQcm9jZWR1cmUKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNp
emUgPSBncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLm1fY29kZUJsb2NrOwor
CisgICAgICAgIFJlZlB0cjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1
ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JG
dW5jdGlvbj4oW2V4aXRGcmFtZVNpemUsIGNvZGVCbG9ja10gKENDYWxsSGVscGVycyYgaml0LCBC
Mzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBmdGxGcmFtZVNpemUg
PSBjb2RlLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0g
c3RkOjptYXgoZXhpdEZyYW1lU2l6ZSwgZnRsRnJhbWVTaXplKTsKKyAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1lU2l6ZSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICB9KTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IGdyYXBoLm1fZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkKKyAgICAgICAgICAgIHByb2MtPmNvZGUoKS5z
ZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoY2F0Y2hFbnRyeXBvaW50SW5kZXgsIGNhdGNoUHJvbG9n
dWVHZW5lcmF0b3IpOworCisgICAgICAgIGlmIChncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NS
RW50cnkpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0ZDo6
bWF4KCpncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnksIDF1KTsgLy8gTWFrZSBzdXJl
IHdlIGFsd2F5cyBhbGxvY2F0ZSBhIG5vbi1udWxsIGNhdGNoT1NSRW50cnlCdWZmZXIuCisgICAg
ICAgICAgICBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyID0gZ3JhcGgubV92bS5zY3JhdGNo
QnVmZmVyRm9yU2l6ZShzaXplb2YoSlNWYWx1ZSkgKiBudW1iZXJPZkxpdmVMb2NhbHMpOworICAg
ICAgICB9CisgICAgfQogCiAgICAgcHJvYy0+c2V0T3JpZ2luUHJpbnRlcigKICAgICAgICAgW10g
KFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKICNp
bmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgorI2lu
Y2x1ZGUgIkZUTE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVk
ZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTE1
MzMsMTAgKzE1MzQsMTUgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRl
cgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIENv
ZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVwbGFj
ZW1lbnQoKTsKLSAgICBpZiAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSAhPSBKSVRD
b2RlOjpERkdKSVQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNoYXIqPihERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJl
cGxhY2VtZW50LCBieXRlY29kZUluZGV4KSk7CisgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNl
bWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBv
cHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIGNhc2UgSklUQ29kZTo6
RlRMSklUOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KEZUTDo6cHJlcGFyZUNh
dGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKQEAg
LTE1NDYsOCArMTU1MiwxNSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVu
dGVyCiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAg
IENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
REZHSklUKQorCisgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7
CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVu
dCwgYnl0ZWNvZGVJbmRleCkpOworICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KEZUTDo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywg
b3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CiAKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcio+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVJbmRleCAr
IDNdLnUucG9pbnRlcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319127</attachid>
            <date>2017-08-25 18:33:34 -0700</date>
            <delta_ts>2017-08-28 14:53:54 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>60970</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxT
cGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUg
YW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiAr
MTY4LDE3IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9p
bnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50cnlwb2lu
dHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRM
aXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNl
dDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBjbGFzcyBE
aXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdhc21Cb3Vu
ZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7CiAKK3R5
cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENvZGUm
KTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQcm9sb2d1
ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhl
IGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCiAv
LyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRp
bmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2YgQWlyLgpA
QCAtMTY1LDcgKzE2OSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsgfQogICAg
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlwb2ludChC
YXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW50
cnlwb2ludEluZGV4KEJhc2ljQmxvY2sqKSBjb25zdDsKKyAgICB2b2lkIHNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgsIFJlZlB0cjxQcm9sb2d1ZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogV2UgYWxsb3cgdGhpcyB0
byBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgd2Ugc2V0IG1fZW50cnlwb2ludHMganVzdCBmb3IgY29u
dmVuaWVuY2UgdG8gdXNlcnMgb2YgdGhpcyBBUEkuCisgICAgICAgIG1fZW50cnlwb2ludEluZGV4
VG9HZW5lcmF0b3Iuc2V0KGVudHJ5cG9pbnRJbmRleCwgZ2VuZXJhdG9yKTsKKyAgICB9CisgICAg
UmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQo
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlw
b2ludEluZGV4VG9HZW5lcmF0b3IuZ2V0KGVudHJ5cG9pbnRJbmRleCk7CisgICAgfQorCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGJ5IGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CiAgICAgdm9pZCBzZXRFbnRyeXBvaW50cyhWZWN0b3ImJiB2ZWN0b3IpCkBA
IC0zNTMsNiArMzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5
cG9pbnRzOyAvLyBUaGlzIGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4K
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9lbnRyeXBvaW50SW5k
ZXhUb0dlbmVyYXRvcjsKICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yPiBtX3dh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwyMSArMjA4LDI4IEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCiAKLSAgICAgICAg
aWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZW50cnlwb2ludEluZGV4ID0gY29kZS5lbnRyeXBvaW50SW5kZXgoYmxvY2sp
KSB7CisgICAgICAgICAgICBBU1NFUlQoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKKwogICAg
ICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZXIt
PnN0YXJ0RW50cnlwb2ludChqaXQpOyAKIAotICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7Ci0gICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IGlzQVJNNjQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBw
cm9sb2d1ZUdlbmVyYXRvciA9IGNvZGUucHJvbG9ndWVHZW5lcmF0b3JGb3JFbnRyeXBvaW50KCpl
bnRyeXBvaW50SW5kZXgpKQorICAgICAgICAgICAgICAgIHByb2xvZ3VlR2VuZXJhdG9yLT5ydW4o
aml0LCBjb2RlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIGlzQVJNNjQoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKIAogICAgICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAg
ICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCi0gICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBBU1NFUlQoIWNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg1Myw2ICsxODUzLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAgICAg
ICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDggKzIyMSw2IEBA
IHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKICAgICBmbG9h
dCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHJlc2VydmVk
IGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjIxMjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyMzQsOSArNTIzNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5t
b2RlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhdGNoIGluIHRoZSBG
VEwuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTM5NgorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRM
Rm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gp
OwogICAgICAgICAgICAgfQogCkBAIC02NDM1LDggKzY0MzMsNiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSgpCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBt
X2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCi0gICAgbV9ncmFwaC5tX2Nwc0NGRyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q1BTQ0ZHPihtX2dyYXBoKTsKLSAgICAKICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICBpZiAoIWJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCShy
ZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw3IEBAIHVzaW5nIFNTQUNGRyA9IENGRzsKIHRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxULCBDUFNDRkc+Ojp2YWx1ZT46OnR5cGU+CiBDUFNDRkcmIHNlbGVjdENGRyhHcmFw
aCYgZ3JhcGgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ3JhcGgubV9jcHNDRkcpOwotICAgIHJl
dHVybiAqZ3JhcGgubV9jcHNDRkc7CisgICAgcmV0dXJuIGdyYXBoLmVuc3VyZUNQU0NGRygpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8VCwgU1NBQ0ZHPjo6dmFsdWU+Ojp0eXBlPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIyMTIwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MjYsNiArNDI2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIFN3aXRjaDoK
KyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNyBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBKdW1wOgog
ICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRh
aWxDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI2LDYgKzE1MjYsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgIGNh
c2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2OCw2ICszNjgsMTEgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0
YS0+Y2FzZXNbaV0udmFsdWUsIGNvbnRleHQpLCAiOiIsIGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IiwgZGF0YS0+ZmFsbFRocm91Z2gp
OwogICAgIH0KKyAgICBpZiAobm9kZS0+aXNFbnRyeVN3aXRjaCgpKSB7CisgICAgICAgIEVudHJ5
U3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPmVudHJ5U3dpdGNoRGF0YSgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIEJyYW5jaFRhcmdldChkYXRhLT5jYXNlc1tpXSkpOworICAgIH0K
ICAgICBDbG9iYmVyU2V0IHJlYWRzOwogICAgIENsb2JiZXJTZXQgd3JpdGVzOwogICAgIGFkZFJl
YWRzQW5kV3JpdGVzKCp0aGlzLCBub2RlLCByZWFkcywgd3JpdGVzKTsKQEAgLTUxNSw4ICs1MjAs
MTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgIG91dC5w
cmludCgiXG4iKTsKICAgICBvdXQucHJpbnQoIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKICAgICBvdXQucHJpbnQo
IiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3Jt
LCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlmaWNhdGlvblN0YXRlLCAiOyBSZWYgY291
bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwgIlxuIik7Ci0gICAgaWYgKG1fZm9ybSA9PSBT
U0EpCi0gICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudCBmb3JtYXRzOiAiLCBsaXN0RHVtcCht
X2FyZ3VtZW50Rm9ybWF0cyksICJcbiIpOworICAgIGlmIChtX2Zvcm0gPT0gU1NBKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50cnlwb2ludEluZGV4IDwg
bV9hcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyArK2VudHJ5cG9pbnRJbmRleCkKKyAgICAgICAgICAg
IG91dC5wcmludCgiICBBcmd1bWVudCBmb3JtYXRzIGZvciBlbnRyeXBvaW50IGluZGV4OiAiLCBl
bnRyeXBvaW50SW5kZXgsICIgOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBv
aW50SW5kZXhdKSwgIlxuIik7CisgICAgfQogICAgIGVsc2UgewogICAgICAgICBmb3IgKGF1dG8g
cGFpciA6IG1fZW50cnlwb2ludFRvQXJndW1lbnRzKQogICAgICAgICAgICAgb3V0LnByaW50KCIg
IEFyZ3VtZW50cyBmb3IgYmxvY2sjIiwgcGFpci5rZXktPmluZGV4LCAiOiAiLCBsaXN0RHVtcChw
YWlyLnZhbHVlKSwgIlxuIik7CkBAIC04MjQsNiArODMxLDcgQEAgdm9pZCBHcmFwaDo6aW52YWxp
ZGF0ZUNGRygpCiAgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CiAg
ICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gbnVsbHB0cjsKICAgICBtX2JhY2t3YXJkc0NGRyA9
IG51bGxwdHI7CisgICAgbV9jcHNDRkcgPSBudWxscHRyOwogfQogCiB2b2lkIEdyYXBoOjppbnZh
bGlkYXRlTm9kZUxpdmVuZXNzKCkKQEAgLTE1NDMsNiArMTU1MSwxNCBAQCB2b2lkIEdyYXBoOjps
b2dBc3NlcnRpb25GYWlsdXJlKAogICAgIGxvZ0RGR0Fzc2VydGlvbkZhaWx1cmUoKnRoaXMsIHRv
Q1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG5c
biIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNzZXJ0aW9uKTsKIH0KIAorQ1BTQ0ZHJiBHcmFw
aDo6ZW5zdXJlQ1BTQ0ZHKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2Zvcm0gIT0gU1NBICYm
ICFtX2lzSW5TU0FDb252ZXJzaW9uKTsKKyAgICBpZiAoIW1fY3BzQ0ZHKQorICAgICAgICBtX2Nw
c0NGRyA9IHN0ZDo6bWFrZV91bmlxdWU8Q1BTQ0ZHPigqdGhpcyk7CisgICAgcmV0dXJuICptX2Nw
c0NGRzsKK30KKwogQ1BTRG9taW5hdG9ycyYgR3JhcGg6OmVuc3VyZUNQU0RvbWluYXRvcnMoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1faXNJblNTQUNvbnZlcnNp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjIx
MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MTksNiArOTE5LDcgQEAgcHVibGljOgogICAgIEJhY2t3YXJkc0NGRyYgZW5zdXJl
QmFja3dhcmRzQ0ZHKCk7CiAgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgZW5zdXJlQmFja3dhcmRz
RG9taW5hdG9ycygpOwogICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBlbnN1cmVDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcygpOworICAgIENQU0NGRyYgZW5zdXJlQ1BTQ0ZHKCk7CiAK
ICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgb25seSBtYWtlcyBzZW5zZSB0byBjYWxsIGFmdGVyIGJ5
dGVjb2RlIHBhcnNpbmcKICAgICAvLyBiZWNhdXNlIGl0IHF1ZXJpZXMgdGhlIG1faGFzRXhjZXB0
aW9uSGFuZGxlcnMgYm9vbGVhbiB3aG9zZSB2YWx1ZQpAQCAtOTM4LDYgKzkzOSw5IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxvY2spOworCisgICAg
ICAgIC8vIE9PUFM6IHRoaXMgaXMgd3Jvbmcgbm93IQogICAgICAgICBpZiAobV9lbnRyeXBvaW50
cy5zaXplKCkgPD0gNCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2VudHJ5cG9pbnRz
LmNvbnRhaW5zKGJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gbV9lbnRyeXBv
aW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5NTgsOSBAQCBwdWJs
aWM6CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAgICAgVmVjdG9yPFJl
ZlB0cjxCYXNpY0Jsb2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQgbV9udW1FbnRyeXBv
aW50cyB7IFVJTlRfTUFYIH07CisgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYXZlIHRo
aXMgcGVyIGlubGluZSBjYWxsIGZyYW1lIGJlY2F1c2Ugd2UgZG9uJ3QgaW5saW5lIG9wX2NhdGNo
IGFzIGFuIGVudHJ5cG9pbnQuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFdURjo6
SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5z
aWduZWQ+PiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldDsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE+IG1fZW50cnlwb2ludHM7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBt
X3ZhckFyZ0NoaWxkcmVuOwogCkBAIC05OTEsOCArOTk4LDggQEAgcHVibGljOgogICAgIC8vIGVm
ZmVjdHMuCiAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgQXJndW1lbnRzVmVjdG9yPiBtX2VudHJ5
cG9pbnRUb0FyZ3VtZW50czsKICAgICAKLSAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVhbmluZ2xl
c3MuIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBs
b2NrZWQgaW4uCi0gICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0czsKKyAg
ICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVhbmluZ2xlc3MuIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJn
dW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQg
YmxvY2suCisgICAgVmVjdG9yPFZlY3RvcjxGbHVzaEZvcm1hdD4+IG1fYXJndW1lbnRGb3JtYXRz
OwogCiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFi
bGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBt
X2FyZ3VtZW50UG9zaXRpb25zOwpAQCAtMTA0OCw2ICsxMDU1LDcgQEAgcHVibGljOgogICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Rmxvd0luZGV4aW5nPiBtX2luZGV4aW5nQ2FjaGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsK
KyAgICBCYWc8RW50cnlTd2l0Y2hEYXRhPiBtX2VudHJ5U3dpdGNoRGF0YTsKIAogICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RyaW5nU3RydWN0dXJlOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3ltYm9sU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw4ICs5MSw1NSBAQCBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZl
Y3RvcjxOb2RlQWJzCiAgICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0
VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJhY3RWYWx1ZSgpIH0pOwogfQogCitzdGF0aWMgdm9pZCBz
ZXRBcmd1bWVudEZvcm1hdChHcmFwaCYgZ3JhcGgsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBGbHVz
aEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEZsdXNo
ZWRJbnQzMjoKKyAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgdmFsdWUuc2V0VHlwZShT
cGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAg
ICAgIHZhbHVlLnNldFR5cGUoZ3JhcGgsIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgdmFsdWUubWFrZUJ5dGVjb2RlVG9wKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChncmFwaCwgbnVs
bHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworCiB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsK
KyAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOyAvLyBPT1BTOiBtYXliZSBkZWJ1ZyBh
c3NlcnQgaGVyZQorCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBpZiAobV9ncmFwaC5pc0VudHJ5cG9pbnQoYmxv
Y2spKSB7CisgICAgICAgICAgICAvLyBXZSBib290c3RyYXAgdGhlIGVudHJ5cG9pbnRzIGJlbG93
LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxz
ZTsKKyAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2st
PmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKKyAgICAgICAgYmxvY2st
PmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFy
Z3VtZW50KGkpLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3Vt
ZW50KGkpLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAg
ICAgYmxvY2stPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7
CiAgICAgICAgIGVudHJ5cG9pbnQtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgICAgICBl
bnRyeXBvaW50LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CkBAIC0xMDAsMTUgKzE0NywxOSBAQCB2
b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgZW50cnlwb2lu
dC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7
CiAgICAgICAgIGVudHJ5cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9IFN0
cnVjdHVyZXNBcmVXYXRjaGVkOwogCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpCiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwu
YXJndW1lbnQoaSkuY2xlYXIoKTsKIAotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0Owot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXaGVuIHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gdGhlIEZU
TCwgd2UgbmVlZCB0byBjaGFuZ2UKLSAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIGRvIGhlcmU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKLSAgICAgICAg
ICAgICAgICBmb3JtYXQgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldOwotICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IFdlIGNv
dWxkIGdvIHR3byB3YXlzIGhlcmUuIE1vcmUgYWNjdXJhdGUgdG8gbWFjaGluZSBzdGF0ZSwgSSB0
aGluayB3ZSBjYW4gc2F5CisgICAgICAgICAgICAgICAgLy8gaGVhcCB0b3AgaGVyZS4gQnV0IHdl
IGNhbiBhbHNvIHNheSBjbGVhciBiL2Mgbm9ib2R5IHNob3VsZCBiZSByZWFkaW5nIGFuIGFyZ3Vt
ZW50IHlldC4KKyAgICAgICAgICAgICAgICAvLyBPciBzaG91bGQgd2UgY2xlYXIoKT8KKyAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKGVu
dHJ5cG9pbnQpLT52YWx1ZVtpXTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwpAQCAtMTE2LDUzICsxNjcsMTcg
QEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0g
ICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEZsdXNoZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICAgICAgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUobV9ncmFwaCwgU3BlY0Nl
bGwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQo
aSkubWFrZUJ5dGVjb2RlVG9wKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAi
QmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50Rm9ybWF0KG1fZ3JhcGgsIGVudHJ5cG9pbnQt
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKSwgZm9ybWF0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgZW50cnlwb2ludC0+
dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52
YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
LSAgICAgICAgaWYgKG1fZ3JhcGguaXNFbnRyeXBvaW50KGJsb2NrKSkgewotICAgICAgICAgICAg
Ly8gV2UgYm9vdHN0cmFwcGVkIHRoZSBlbnRyeXBvaW50cyBhYm92ZS4KLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
Ci0gICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7Ci0gICAgICAgIGJsb2Nr
LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7Ci0gICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50
cyA9IGZhbHNlOwotICAgICAgICBibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFk
ID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7Ci0gICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGVBdFRhaWwgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgewotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigp
OwotICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwot
ICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0
SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwu
bG9jYWwoaSkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gU1NBKSB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpAQCAtMzcx
LDYgKzM4NiwyNyBAQCBpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUCiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldLnRh
cmdldC5ibG9jayk7CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKKyAgICBj
YXNlIEVudHJ5U3dpdGNoOiB7CisgICAgICAgIC8vIE9PUFM6IHNhbWUgY29tbWVudCBhcyBvc3Ig
YXZhaWxhYmlsaXR5IGNhbGN1bGF0b3IncyBhc3N1bXB0aW9uIG9mIHRoaXMhIFNob3VsZCB0aGlz
IGJlIGV2ZXJ5IHNpbmdsZSBFbnRyeVN3aXRjaD8gT3Igc2hvdWxkIGl0IGp1c3QgYmUgdGhlIHJv
b3QgRW50cnlTd2l0Y2g/IFNob3VsZCB3ZSBldmVuIGFzc3VtZSB0aGUgcm9vdCBoYXMgYW4gRW50
cnlTd2l0Y2g/CisgICAgICAgIE5vZGUqIGVudHJ5U3dpdGNoID0gdGVybWluYWw7CisgICAgICAg
IEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gZW50cnlTd2l0Y2gtPmVudHJ5U3dp
dGNoRGF0YSgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsg
ZW50cnlwb2ludEluZGV4IDwgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5zaXplKCk7ICsrZW50cnlw
b2ludEluZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBlbnRyeVN3
aXRjaERhdGEtPmNhc2VzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3Jt
YXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTsgKSB7CisgICAgICAgICAgICAg
ICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XTsKKyAgICAg
ICAgICAgICAgICBzZXRBcmd1bWVudEZvcm1hdChtX2dyYXBoLCBzdWNjZXNzb3ItPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZvcm1hdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0
Y2hEYXRhKCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7CisgICAgfQogCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjIx
MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3Jh
cGgsIE5vZGUqCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlv
bjoKICAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIEJyYW5j
aDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNhc2UgRG91YmxlUmVwOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAz
LDExIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07
CiAKK3N0cnVjdCBFbnRyeVN3aXRjaERhdGEgeworICAgIEVudHJ5U3dpdGNoRGF0YSgpID0gZGVm
YXVsdDsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGNhc2VzOworfTsKKwogc3RydWN0IENhbGxW
YXJhcmdzRGF0YSB7CiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OwogfTsKQEAgLTEyOTcsMTIg
KzEzMDIsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3AoKSA9PSBTd2l0Y2g7CiAgICAg
fQogCisgICAgYm9vbCBpc0VudHJ5U3dpdGNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBvcCgpID09IEVudHJ5U3dpdGNoOworICAgIH0KKwogICAgIGJvb2wgaXNUZXJtaW5hbCgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBKdW1wOgogICAgICAg
ICBjYXNlIEJyYW5jaDoKICAgICAgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIGNhc2UgRW50cnlT
d2l0Y2g6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIFRhaWxDYWxsOgogICAg
ICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpAQCAtMTM2NCw2ICsxMzc1LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKGlzU3dpdGNoKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8
U3dpdGNoRGF0YSo+KCk7CiAgICAgfQorCisgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRj
aERhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW50cnlTd2l0Y2goKSk7CisgICAgICAg
IHJldHVybiBtX29wSW5mby5hczxFbnRyeVN3aXRjaERhdGEqPigpOworICAgIH0KICAgICAKICAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkKICAgICB7CkBAIC0xMzc0LDYgKzEzOTEsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAg
ICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkgKyAxOworICAgICAgICBj
YXNlIEVudHJ5U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIGVudHJ5U3dpdGNoRGF0YSgpLT5j
YXNlcy5zaXplKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQpAQCAtMTM4Niw3ICsxNDA1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJl
dHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XS50YXJnZXQuYmxvY2s7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaC5ibG9jazsKLSAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzRW50cnlTd2l0Y2goKSkKKyAgICAgICAgICAgIHJl
dHVybiBlbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXNbaW5kZXhdOwogCiAgICAgICAgIHN3aXRjaCAo
aW5kZXgpIHsKICAgICAgICAgY2FzZSAwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEp1bXAsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhCcmFuY2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnRyeVN3aXRjaCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwK
ICAgICBtYWNybyhEaXJlY3RUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTIwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDExICs1NywxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuZmlsbChBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAg
ICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxp
dHkoZmx1c2hlZEF0KTsKKworICAgICAgICAvLyBPT1BTOiB0aGlzIGZlZWxzIGEgYml0IHVnbHks
IGJ1dCBJIGRvbid0IHRoaW5rIHdlIHdhbnQgdGhpcyBydWxlIGZvciBnZW5lcmFsIEVudHJ5U3dp
dGNoIG5vZGVzCisgICAgICAgIC8vIGJlY2F1ZSBpbWFnaW5lIHRoZXJlIGlzIGFuIEVudHJ5U3dp
dGNoIGluIGEgcmFuZG9tIGxvY2F0aW9uIGluIHRoZSBncmFwaCwgc3VyZWx5IHdlIGRvbid0IHdh
bnQKKyAgICAgICAgLy8gdG8gc2F5IHRoYXQgYWxsIGl0cyBjaGlsZHJlbiBoYXZlIHRoaXMgYXJn
dW1lbnQgc3BlY3VsYXRpb24gYXQgdGhlIGhlYWQuIFRoZXkgbWF5IGhhdmUgY2hhbmdlZAorICAg
ICAgICAvLyB0aGUgdmFsdWUgb2YgdGhhdCBzdGFjayBzbG90IQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2dyYXBoLmJsb2NrKDApLT52YWx1ZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICAgICAgLy9GbHVz
aGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgLy9yb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxpdHko
Zmx1c2hlZEF0KTsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1f
bG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVu
dCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KQEAgLTg2LDEwICs5
MCwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShj
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoYmxvY2sgPT0gbV9ncmFwaC5ibG9jaygwKSkgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiByb290RW50cnlTd2l0Y2ggPSBibG9jay0+dGVybWluYWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm9vdEVudHJ5U3dpdGNoLT5pc0VudHJ5U3dpdGNo
KCkpOworICAgICAgICAgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0
YSA9IHJvb3RFbnRyeVN3aXRjaC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50cnlwb2ludEluZGV4IDwg
ZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5zaXplKCk7ICsrZW50cnlwb2ludEluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBlbnRyeVN3aXRjaERh
dGEtPmNhc2VzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1l
bnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTsg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZs
dXNoZWRBdChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZh
aWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vz
c29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZv
ckV4aXQpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jbGVhcigp
OwogICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmFkZChuZXdSb290LCBu
ZXdBcmd1bWVudHMpOwogCi0gICAgICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5p
cXVlPENQU0NGRz4obV9ncmFwaCk7Ci0KKyAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7
CiAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAgICAgbV9ncmFwaC5r
aWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDYgKzEwOTIsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6
CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdldCBp
bnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3Jh
cGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQotICAg
ICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAgICAgLCBtX2luc2VydGlvblNldChncmFw
aCkKICAgICB7CiAgICAgfQpAQCAtNTUsNiArNTUsNDggQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwogICAgICAgICBtX2dyYXBoLmNsZWFy
Q1BTQ0ZHRGF0YSgpOworCisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBX
VEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jazsKKworICAgICAgICB7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMgPSBtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpOworCisgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25T
ZXQobV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCAxLjBmKTsKKworICAgICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRy
eVN3aXRjaERhdGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0Y2hEYXRhLmFkZCgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBt
X2dyYXBoLm1fbnVtRW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3JhcGgubV9lbnRyeXBvaW50c1tlbnRyeXBv
aW50SW5kZXhdOworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxv
Y2suYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7CisgICAgICAgICAgICAgICAgZW50cnlT
d2l0Y2hEYXRhLT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7CisKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvbGRSb290LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
ICAgICBvbGRSb290LT5wcmVkZWNlc3NvcnMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAg
ICAgICAgaWYgKG9sZFJvb3QtPmlzQ2F0Y2hFbnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghIWVudHJ5cG9pbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVudHJ5cG9pbnRJ
bmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNh
c2VzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5v
cm1hbCBjYWxsIGVudHJ5cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCisKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMucmVzaXplKG1fZ3JhcGgubV9udW1F
bnRyeXBvaW50cyk7CisKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0gZmFsc2U7Cisg
ICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4o
MCksIGV4aXRPSyB9OworICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgRW50cnlTd2l0Y2gsIG9yaWdpbiwgT3BJbmZvKGVu
dHJ5U3dpdGNoRGF0YSkpOworCisgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludHMuY2xl
YXIoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5hcHBlbmQobmV3Um9vdCk7
CisKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBPT1BTIHByZXZlbnQgY3JlYXRpbmcgdGhpcyB0d2ljZQorICAgICAgICBtX2NhbGN1
bGF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFNTQUNhbGN1bGF0b3I+KG1fZ3JhcGgpOworCiAgICAg
ICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKQEAgLTY3LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
dmFyaWFibGUuaXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1f
Y2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLT5uZXdWYXJpYWJsZSgpOwogICAgICAg
ICAgICAgQVNTRVJUKHNzYVZhcmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRl
eC5zaXplKCkpOwogICAgICAgICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFwcGVuZCgmdmFy
aWFibGUpOwogICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFi
bGUsIHNzYVZhcmlhYmxlKTsKQEAgLTEwMyw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NhbGN1bGF0
b3IubmV3RGVmKAorICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci0+bmV3RGVmKAogICAgICAg
ICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxv
Y2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMiw3ICsx
NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBEZWNpZGUgd2hlcmUgUGhpcyBh
cmUgdG8gYmUgaW5zZXJ0ZWQuIFRoaXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRvZXNuJ3QgaW5z
ZXJ0IHRoZW0KICAgICAgICAgLy8geWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hlcmUgdG8gaW5z
ZXJ0IGJhc2VkIG9uIHdoZXJlIFNTQUNhbGN1bGF0b3IgdGVsbHMgdXMgdG8uCi0gICAgICAgIG1f
Y2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgbV9jYWxjdWxhdG9yLT5jb21wdXRlUGhp
cygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxl
LCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewogICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUt
PmluZGV4KCldOwogICAgICAgICAgICAgICAgIApAQCAtMTY3LDcgKzIwOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5k
ZXguc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGksICI6ICIs
IFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgbV92YXJpYWJsZUZvclNTQUluZGV4W2ld
KSwgIlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxv
ZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1fY2FsY3VsYXRvciwgIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJTU0EgY2FsY3VsYXRvcjogIiwgKm1fY2FsY3VsYXRvciwgIlxuIik7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIERvIHRoZSBidWxrIG9mIHRoZSBTU0EgY29udmVyc2lv
bi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBvcGVyYW5kLT5Ob2RlCkBAIC0yMjAs
NyArMjYyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29u
c2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgs
IHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJsb2NrICIsICpibG9jaywgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsK
LSAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0
b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3ItPnJlYWNoaW5nRGVm
QXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZGVm
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5z
ZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhhdmUgYSByZWFjaGluZyBkZWYKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGF0IGhlYWQuCkBAIC0yNDYsNyArMjg4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgLy8gdmFsdWVGb3JPcGVyYW5kIHdpdGggdGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNz
b2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QKICAgICAgICAgICAgIC8vIGZsdXNo
ZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92SGludC4KICAgICAgICAgICAgIHNpemVfdCBwaGlJbnNl
cnRpb25Qb2ludCA9IDA7Ci0gICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9j
ayhibG9jaykpIHsKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBo
aUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwpAQCAtMzQ2LDcgKzM4OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IHRlcm1pbmFsLm5v
ZGUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNz
b3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURl
ZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci0+
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwpAQCAtMzgzLDIzICs0MjUsMjEgQEAg
cHVibGljOgogICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNC
bG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNTQToKLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRv
JiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFw
aC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnJl
c2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJndW1l
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gRmx1
c2hlZEpTVmFsdWU7Ci0KLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGlu
Zy5nZXQoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZSk7Ci0gICAgICAgICAgICBmb3JtYXQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+Zm9ybWF0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRG
b3JtYXRzW2ldID0gZm9ybWF0OwotICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gbm9kZTsgLy8g
UmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGJlbmVmaXQg
b2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGVudHJ5cG9pbnRJ
bmRleFRvQXJndW1lbnRzQmxvY2spIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJ
bmRleCA9IHBhaXIua2V5OworICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IHBhaXIu
dmFsdWU7CisgICAgICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgu
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290KS0+dmFsdWU7CisgICAgICAgICAg
ICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50cy5zaXplKCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJn
dW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlKTsKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMudW5jaGVja2VkQXBwZW5kKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5mb3JtYXQpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG5vZGU7
IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBiZW5l
Zml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFw
aC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdID0gV1RGTW92ZShhcmd1bWVudEZv
cm1hdHMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0g
U1NBOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC00MTEsNyArNDUxLDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTU0FDYWxjdWxhdG9yIG1fY2FsY3VsYXRvcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U1NBQ2FsY3VsYXRvcj4gbV9jYWxjdWxhdG9yOwogICAgIEluc2Vy
dGlvblNldCBtX2luc2VydGlvblNldDsKICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlOwogICAg
IEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX2FyZ3VtZW50TWFwcGluZzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMjEyMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBT
d2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNl
IFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIy
MTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMDYsNiArNjEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAg
IGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBQaGk6
CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgRW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgdGVybWluYWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAKICAgICAgICAgVkFMSURB
VEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmlzRW50cnlwb2ludChtX2dyYXBoLmJsb2Nr
KDApKSk7CisgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5ibG9j
aygwKSA9PSBtX2dyYXBoLm1fZW50cnlwb2ludHNbMF0pOwogCiAgICAgICAgIC8vIFZhbGlkYXRl
IHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2ludHMg
YXJlIGRlYWQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgu
bV9lbnRyeXBvaW50cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTEx
LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
UGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgor
ICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNl
IFNraXBTY29wZToKICAgICBjYXNlIEdldEdsb2JhbE9iamVjdDoKQEAgLTI0NSw2ICsyNDYsNyBA
QCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoK
ICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2Fz
ZSBTd2l0Y2g6CiAgICAgY2FzZSBUeXBlT2Y6CiAgICAgY2FzZSBQdXRCeUlkOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMjEyMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDIsNiArMTQyLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50
OjpSZQogICAgICAgICB9KTsKIAogICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVm
ZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWls
ZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CkBAIC0xNTIsOSArMTUzLDE5IEBAIHZvaWQgY29t
cGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKIAogICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKLSAgICAgICAgc3RhdGUuZmluYWxp
emVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihz
dGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCkpKTsKICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0
aWFsaXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogCisg
ICAgaWYgKCFzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2Vu
dHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgICAgICB1bnNpZ25lZCBjYXRj
aEJ5dGVjb2RlT2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxG
bHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3Jt
YXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jYXRjaE9T
UkVudHJ5LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBDYXRjaE9TUkVudHJ5IHsgc3RhdGUuZmlu
YWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnByb2MtPmVudHJ5cG9p
bnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxlQWRkcmVzcygpLCBhcmd1bWVudEZv
cm1hdHMsIGNhdGNoQnl0ZWNvZGVPZmZzZXQgfSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBp
ZiAoQjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2Rl
KCkuZGlzYXNzZW1ibGVyKCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0
YUZpbGUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5
cHJvZHVjdHMuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRmx1
c2hGb3JtYXQuaCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExP
U1JFeGl0LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMzksMTEgKzQwLDE5IEBAIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgRlRMIHsKIAorc3RydWN0IENhdGNoT1NS
RW50cnkgeworICAgIHZvaWQqIG1hY2hpbmVDb2RlQWRkcmVzczsKKyAgICBWZWN0b3I8REZHOjpG
bHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVP
ZmZzZXQ7Cit9OworCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklUQ29kZSB7CiBwdWJs
aWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAKKyAgICAvLyBPT1BTOiBhZGQg
aGVscGVycyBmb3IgYWRkaW5nIGFuZCBsb29raW5nIHVwIGNhdGNoIG9zciBlbnRyeXMuCisKICAg
ICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKICAgICB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CkBA
IC03Miw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4g
b3NyRXhpdDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4
aXREZXNjcmlwdG9yczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+
IGxhenlTbG93UGF0aHM7CisgICAgVmVjdG9yPENhdGNoT1NSRW50cnk+IGNhdGNoT1NSRW50cnk7
CisgICAgU2NyYXRjaEJ1ZmZlciogY2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAgICAKIHByaXZhdGU6
CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIxMjA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsNyArMTYwLDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUg
ZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgICAgIG1f
b3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxh
dGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBt
X291dC5uZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAt
MTc0LDggKzE3NSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVx
dWVuY3kgZm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0
aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRsZUV4Y2VwdGlvbnMp
OwotICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlwb2ludEFyZ3VtZW50
U3BlY3VsYXRpb25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2Ms
IHByb2xvZ3VlKTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAgICAgICAgc2l6
ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNo
aW5lTG9jYWw7CkBAIC0yNTcsNTEgKzI1OCw3NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsK
IAogICAgICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBsb3dCbG9jayhtX2dy
YXBoLmJsb2NrKDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgotICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3Vt
ZW50KGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRK
U1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICB9Ci0gICAg
ICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2Rl
T3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRz
ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkp
LT52YWx1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsK
LSAgICAgICAgICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NG
b3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSkgewotICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4g
SXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmltb3Jk
aWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhh
dCBnb3QgcHV0IGluCi0gICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNl
dEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQuIFRoaXMKLSAgICAg
ICAgICAgICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAgICAgIG1fbG9hZGVk
QXJndW1lbnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0p
IHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNW
YWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Qm9vbGVhbjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwo
anNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSlNWYWx1ZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9y
bWF0IGZvciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9IG1fZ3JhcGguYmxvY2soMCktPnRl
cm1pbmFsKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlz
RW50cnlTd2l0Y2goKSk7CisgICAgICAgICAgICAvL0VudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0
Y2hEYXRhID0gcm9vdEVudHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAgICAg
IFZlY3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMp
OworICAgICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVj
dWxhdGlvbnM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9ncmFwaC5t
X251bUVudHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBhZGQgZXhw
bGFpbmVyIGhlcmUuCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9IGZpcnN0REZHQmFz
aWNCbG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2go
c3VjY2Vzc29ycyk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjYWxsRW50cnlwb2ludEFy
Z3VtZW50U3BlY3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOworCisgICAgICAgICAgICBt
X25vZGUgPSBudWxscHRyOworICAgICAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVP
cmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOworCisgICAgICAgICAgICAvLyBDaGVjayBB
cmd1bWVudHMuCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOworICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KKyAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly9hdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQo
bV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIC8v
IE9PUFM6IGdldCBub24gbnVsbHB0ciBub2RlIGhlcmUuCisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAvL05vZGUqIG5vZGUgPSBhcmd1bWVu
dHNbaV07CisgICAgICAgICAgICAgICAgLy9tX291dC5zZXRPcmlnaW4obm9kZSk7CisKKyAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBqc1Zh
bHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiB3ZSBldmVuIGRvIHRoaXMgYW55bW9yZSBn
aXZlbiBFbnRyeVN3aXRjaD8KKyAgICAgICAgICAgICAgICAvL2lmIChub2RlKSB7CisgICAgICAg
ICAgICAgICAgLy8gICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIC8vICAg
IAorICAgICAgICAgICAgICAgIC8vICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBl
ZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAg
ICAgIC8vICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0
aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAv
LyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZl
Y3RzIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vICAgIC8vIHNob3VsZCBob2xk
IHRydWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBtX2xvYWRl
ZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAvL30K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1
bWVudEZvcm1hdHNbMF1baV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1Zh
bHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlz
Tm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVl
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAi
QmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQu
anVtcChmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Zmlyc3RERkdCYXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxl
RXhjZXB0aW9ucywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94PENDYWxsSGVscGVy
czo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKQEAg
LTUxMCw2ICs1MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxv
Y2FsOgogICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKKyAgICAgICAgICAg
IGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2soKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtOTM4LDYgKzk2Nyw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZH
OjpTd2l0Y2g6CiAgICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVu
dHJ5U3dpdGNoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVy
bjoKICAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTUxOCw2ICsxNTUwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7CiAgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9k
ZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVFeHRyYWN0Q2F0Y2hMb2NhbCgpCisgICAgeworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2Z0bFN0YXRlLmppdENvZGUtPmNh
dGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+Y2F0Y2hPU1JFbnRyeUlu
ZGV4KCkpKSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7
CkBAIC03Nzg3LDYgKzc4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVFbnRyeVN3aXRjaCgpCisgICAgeworICAgICAgICBWZWN0b3I8TEJhc2ljQmxv
Y2s+IHN1Y2Nlc3NvcnM7CisgICAgICAgIGZvciAoREZHOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBtX25vZGUtPmVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlcykKKyAgICAgICAgICAgIHN1Y2Nlc3Nv
cnMuYXBwZW5kKGxvd0Jsb2NrKHN1Y2Nlc3NvcikpOworICAgICAgICBtX291dC5lbnRyeVN3aXRj
aChzdWNjZXNzb3JzKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKICAg
ICB7CkBAIC0xNDYzOCw3ICsxNDY4NCw2IEBAIHByaXZhdGU6CiAgICAgT3V0cHV0IG1fb3V0Owog
ICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7
CiAgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOwogICAgIEhhc2hNYXA8REZHOjpC
YXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDIyMTIwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNiArMTA3LDc3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIGlmICgh
T3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkZUTEpJVCk7CisgICAgRlRMOjpKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJs
b2NrLT5qaXRDb2RlKCktPmZ0bCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGppdENvZGUpOworCisg
ICAgQ2F0Y2hPU1JFbnRyeSBvc3JFbnRyeTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
Zm9yIChjb25zdCBDYXRjaE9TUkVudHJ5JiBtYXliZUVudHJ5IDogaml0Q29kZS0+Y2F0Y2hPU1JF
bnRyeSkgeworICAgICAgICBpZiAobWF5YmVFbnRyeS5jYXRjaEJ5dGVjb2RlT2Zmc2V0ID09IGJ5
dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG9z
ckVudHJ5ID0gbWF5YmVFbnRyeTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gV2Un
cmUgb25seSBhbGxvd2VkIHRvIE9TUiBlbnRlciBpZiB3ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21w
YXRpYmxlIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG9zckVudHJ5LmFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpKS5qc1ZhbHVlKCk7CisgICAgICAgIHN3aXRjaCAob3NyRW50
cnkuYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgeworICAgICAgICBjYXNlIERGRzo6Rmx1c2hl
ZEludDMyOgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6
OkZsdXNoZWRDZWxsOgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERGRzo6Rmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQm9vbGVhbigp
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgREZHOjpEZWFkRmx1c2g6CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
ZSBhcmd1bWVudCBpcyBub3QgYWxpdmUuIFRoZXJlZm9yZSwgaXQncyBhbGxvd2VkIHRvIGJlIGFu
eSB0eXBlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSlNW
YWx1ZToKKyAgICAgICAgICAgIC8vIEFuIGFyZ3VtZW50IGlzIHRyaXZpYWxseSBhIEpTVmFsdWUu
CisgICAgICAgICAgICBicmVhazsgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWdu
ZWQgZnJhbWVTaXplRm9yQ2hlY2sgPSBqaXRDb2RlLT5jb21tb24ucmVxdWlyZWRSZWdpc3RlckNv
dW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOworICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3Rh
Y2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZnJhbWVTaXplRm9yQ2hlY2spLm9mZnNldCgpXSkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIEFTU0VSVChJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoZXhlYy0+Y29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCldLnUub3Bjb2RlKSA9PSBv
cF9jYXRjaCk7IC8vIE9PUFMKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZm
ZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oZXhlYy0+Y29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkgKyAzXS51LnBv
aW50ZXIpOworICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihqaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kKS5pc0xvY2FsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRh
dGFCdWZmZXJbaW5kZXhdID0gZXhlYy0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNW
YWx1ZSgpOworICAgICAgICArK2luZGV4OworICAgIH0pOworCisgICAgZGF0YUxvZ0xuKCJQZXJm
b3JtaW5nIEZUTCBPU1IgRW50cnkgYXQgY2F0Y2ghIik7CisKKyAgICBqaXRDb2RlLT5jYXRjaE9T
UkVudHJ5QnVmZmVyLT5zZXRBY3RpdmVMZW5ndGgoc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpOwor
CisgICAgcmV0dXJuIG9zckVudHJ5Lm1hY2hpbmVDb2RlQWRkcmVzczsKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIEV4ZWNTdGF0ZSosIENv
ZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LAogICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKIAordm9pZCogcHJl
cGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAko
cmV2aXNpb24gMjIxMjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjEsNiArODYxLDE2IEBAIHZvaWQgT3V0cHV0OjphZGRJ
bmNvbWluZ1RvUGhpKExWYWx1ZSBwaGkKICAgICAgICAgdmFsdWUudmFsdWUoKS0+YXM8QjM6OlVw
c2lsb25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7CiB9CiAKK3ZvaWQgT3V0cHV0OjplbnRyeVN3aXRj
aChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiBjYXNlcykKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChjYXNlcy5zaXplKCkgPT0gbV9wcm9jLm51bUVudHJ5cG9pbnRzKCkpOworICAgIG1fYmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3JpZ2luKCkpOworICAgIGZv
ciAoTEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykgeworICAgICAgICAvLyBPT1BTOiBmcmVxdWVu
Y2llcyBoZXJlCisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxv
Y2soYmxvY2spKTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCShyZXZpc2lvbiAyMjEyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2lj
QmxvY2s+Jik7CisKICAgICB2b2lkIHJldChMVmFsdWUpOwogCiAgICAgdm9pZCB1bnJlYWNoYWJs
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9u
IDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTY1LDYgKzY3
LDI4IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgZmluYWxpemVyID0gc3RhdGlj
X2Nhc3Q8SklURmluYWxpemVyKj4oZ3JhcGgubV9wbGFuLmZpbmFsaXplci5nZXQoKSk7CiAKICAg
ICBwcm9jID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9jZWR1cmU+KCk7CisgICAgcHJvYy0+c2V0TnVt
RW50cnlwb2ludHMoZ3JhcGgubV9udW1FbnRyeXBvaW50cyk7CisKKyAgICAvLyBPT1BTIDptYXli
ZSBhYnN0cmFjdCB2aWEgQjM6OlByb2NlZHVyZQorICAgIHsKKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKKworICAgICAgICBSZWZQdHI8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRU
YXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFtjb2RlQmxvY2tdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCgpKTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICB9KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IGdyYXBoLm1fZW50cnlw
b2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2F0Y2hFbnRyeXBvaW50SW5kZXggIT0gMCk7CisgICAgICAgICAgICBwcm9j
LT5jb2RlKCkuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KGNhdGNoRW50cnlwb2ludEluZGV4LCBj
YXRjaFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChncmFwaC5t
X21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnkpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG51bWJl
ck9mTGl2ZUxvY2FscyA9IHN0ZDo6bWF4KCpncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50
cnksIDF1KTsgLy8gTWFrZSBzdXJlIHdlIGFsd2F5cyBhbGxvY2F0ZSBhIG5vbi1udWxsIGNhdGNo
T1NSRW50cnlCdWZmZXIuCisgICAgICAgICAgICBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVy
ID0gZ3JhcGgubV92bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoSlNWYWx1ZSkgKiBudW1i
ZXJPZkxpdmVMb2NhbHMpOworICAgICAgICB9CisgICAgfQogCiAgICAgcHJvYy0+c2V0T3JpZ2lu
UHJpbnRlcigKICAgICAgICAgW10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2lu
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDIyMTIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJFcnJv
ckhhbmRsaW5nU2NvcGUuaCIKICNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uRnV6ei5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXIuaCIKQEAgLTE1MzMsMTAgKzE1MzQsMTUgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25UcnlPU1JFbnRlcgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBleGVj
LT5jb2RlQmxvY2soKS0+cmVwbGFjZW1lbnQoKTsKLSAgICBpZiAob3B0aW1pemVkUmVwbGFjZW1l
bnQtPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihERkc6OnByZXBhcmVDYXRjaE9TUkVu
dHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KSk7CisgICAgc3dp
dGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2Rl
OjpERkdKSVQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJl
Q2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkp
OworICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcio+KEZUTDo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1l
bnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdWludDMy
X3QgYnl0ZWNvZGVJbmRleCkKQEAgLTE1NDYsOCArMTU1MiwxNSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxhY2VtZW50LT5q
aXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorCisgICAgc3dpdGNoIChvcHRpbWl6ZWRSZXBs
YWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVj
LCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIGNhc2UgSklUQ29k
ZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KEZUTDo6cHJlcGFy
ZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgp
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjb2RlQmxvY2st
PmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKClbYnl0ZWNvZGVJbmRleCArIDNdLnUucG9pbnRlcik7Cg==
</data>
<flag name="commit-queue"
          id="339474"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319211</attachid>
            <date>2017-08-28 14:53:54 -0700</date>
            <delta_ts>2017-08-28 17:38:29 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>66095</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxT
cGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUg
YW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiAr
MTY4LDE3IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9p
bnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50cnlwb2lu
dHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRM
aXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTI2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNl
dDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBjbGFzcyBE
aXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdhc21Cb3Vu
ZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7CiAKK3R5
cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENvZGUm
KTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQcm9sb2d1
ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhl
IGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCiAv
LyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRp
bmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2YgQWlyLgpA
QCAtMTY1LDcgKzE2OSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsgfQogICAg
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlwb2ludChC
YXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW50
cnlwb2ludEluZGV4KEJhc2ljQmxvY2sqKSBjb25zdDsKKyAgICB2b2lkIHNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgsIFJlZlB0cjxQcm9sb2d1ZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogV2UgYWxsb3cgdGhpcyB0
byBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgd2Ugc2V0IG1fZW50cnlwb2ludHMganVzdCBmb3IgY29u
dmVuaWVuY2UgdG8gdXNlcnMgb2YgdGhpcyBBUEkuCisgICAgICAgIG1fZW50cnlwb2ludEluZGV4
VG9HZW5lcmF0b3Iuc2V0KGVudHJ5cG9pbnRJbmRleCwgZ2VuZXJhdG9yKTsKKyAgICB9CisgICAg
UmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQo
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlw
b2ludEluZGV4VG9HZW5lcmF0b3IuZ2V0KGVudHJ5cG9pbnRJbmRleCk7CisgICAgfQorCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGJ5IGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CiAgICAgdm9pZCBzZXRFbnRyeXBvaW50cyhWZWN0b3ImJiB2ZWN0b3IpCkBA
IC0zNTMsNiArMzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5
cG9pbnRzOyAvLyBUaGlzIGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4K
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9lbnRyeXBvaW50SW5k
ZXhUb0dlbmVyYXRvcjsKICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yPiBtX3dh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwyMSArMjA4LDI4IEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCiAKLSAgICAgICAg
aWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZW50cnlwb2ludEluZGV4ID0gY29kZS5lbnRyeXBvaW50SW5kZXgoYmxvY2sp
KSB7CisgICAgICAgICAgICBBU1NFUlQoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKKwogICAg
ICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZXIt
PnN0YXJ0RW50cnlwb2ludChqaXQpOyAKIAotICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7Ci0gICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IGlzQVJNNjQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBw
cm9sb2d1ZUdlbmVyYXRvciA9IGNvZGUucHJvbG9ndWVHZW5lcmF0b3JGb3JFbnRyeXBvaW50KCpl
bnRyeXBvaW50SW5kZXgpKQorICAgICAgICAgICAgICAgIHByb2xvZ3VlR2VuZXJhdG9yLT5ydW4o
aml0LCBjb2RlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIGlzQVJNNjQoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKIAogICAgICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAg
ICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCi0gICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBBU1NFUlQoIWNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYwLDcgKzI2MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgLy8gREZHIGV4ZWN1dGlvbi4KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAg
ICAKKwogICAgIGNhc2UgS2lsbFN0YWNrOiB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIGhp
bnQgdGVsbGluZyB1cyB0aGF0IHRoZSBPU1Igc3RhdGUgb2YgdGhlIGxvY2FsIGlzIG5vIGxvbmdl
ciBpbnNpZGUgdGhlCiAgICAgICAgIC8vIGZsdXNoZWQgZGF0YS4KQEAgLTI3Myw3ICsyNzMsMzMg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBu
b24tY2xlYXIgdmFsdWUuCiAgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAK
KworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9h
cmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVu
dCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxl
cygpLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRGb3Jt
YXRzW2FyZ3VtZW50XSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAg
ICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAg
dmFsdWUuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVU
b3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZv
ciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFy
Z3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9l
cywgaXQgc2hvdWxkIHR1cm4KQEAgLTE4NTMsNiArMTg3OSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFJldHVybjoKICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjIxMjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMSw4ICsyMjEsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCi0gICAgLy8gVGhl
c2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIAogICAgIHN0cnVj
dCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjM0LDkgKzUyMzQsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U3VwcG9ydCBjYXRjaCBpbiB0aGUgRlRMLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgewogICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIApAQCAtNjQzNSw4ICs2NDMz
LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIG1fZ3JhcGguZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIAot
ICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9ncmFwaCk7
Ci0gICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsNyBAQCB1c2lu
ZyBTU0FDRkcgPSBDRkc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgQ1BTQ0ZHPjo6dmFsdWU+Ojp0eXBlPgog
Q1BTQ0ZHJiBzZWxlY3RDRkcoR3JhcGgmIGdyYXBoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGdy
YXBoLm1fY3BzQ0ZHKTsKLSAgICByZXR1cm4gKmdyYXBoLm1fY3BzQ0ZHOworICAgIHJldHVybiBn
cmFwaC5lbnN1cmVDUFNDRkcoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFNTQUNGRz46OnZhbHVl
Pjo6dHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFRo
cm93OgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgpAQCAt
NDM4LDYgKzQzOSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAg
IGNhc2UgUHV0SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJv
b2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICAvLyBUaGVyZSBhcmUg
Y2VydGFpbiBub2RlcyB3aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcg
dG8gZG8gd2l0aCB3aGF0IHRoZXkKICAgICAvLyBub3JtYWxseSBjbG9iYmVyLgogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFB1dEhp
bnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBj
YXNlIE1vdkhpbnQ6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgpA
QCAtMTgzLDYgKzE4NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAg
Y2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgog
ICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiAr
MTUyNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBz
aWxvbjoKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2Fz
ZSBDaGVja1RpZXJVcEluTG9vcDoKQEAgLTIwMTEsNiArMjAxMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAg
ICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3Vt
ZW50czoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKICAg
ICAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwgY29udGV4dCksICI6IiwgZGF0
YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDoi
LCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQorICAgIGlmIChub2RlLT5pc0VudHJ5U3dpdGNo
KCkpIHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+ZW50cnlTd2l0Y2hE
YXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgQnJhbmNoVGFyZ2V0KGRhdGEt
PmNhc2VzW2ldKSk7CisgICAgfQogICAgIENsb2JiZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNl
dCB3cml0ZXM7CiAgICAgYWRkUmVhZHNBbmRXcml0ZXMoKnRoaXMsIG5vZGUsIHJlYWRzLCB3cml0
ZXMpOwpAQCAtNTE1LDggKzUyMCwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5wcmludCgiREZHIGZvciAi
LCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpc
biIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRl
LCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0
aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsK
LSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZv
cm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAgaWYgKG1f
Zm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAw
OyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50cnlwb2lu
dEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMgZm9yIGVu
dHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1wKG1fYXJn
dW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAgZWxzZSB7
CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMpCiAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtleS0+aW5k
ZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKQEAgLTgyNCw2ICs4MzEsNyBA
QCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzID0gbnVsbHB0cjsKICAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxscHRyOwog
ICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2Nwc0NGRyA9IG51bGxwdHI7CiB9
CiAKIHZvaWQgR3JhcGg6OmludmFsaWRhdGVOb2RlTGl2ZW5lc3MoKQpAQCAtMTU0Myw2ICsxNTUx
LDE0IEBAIHZvaWQgR3JhcGg6OmxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAgICAgbG9nREZHQXNzZXJ0
aW9uRmFpbHVyZSgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2lu
dGVyRHVtcChibG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24p
OwogfQogCitDUFNDRkcmIEdyYXBoOjplbnN1cmVDUFNDRkcoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1faXNJblNTQUNvbnZlcnNpb24pOworICAgIGlmICghbV9j
cHNDRkcpCisgICAgICAgIG1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+KCp0aGlz
KTsKKyAgICByZXR1cm4gKm1fY3BzQ0ZHOworfQorCiBDUFNEb21pbmF0b3JzJiBHcmFwaDo6ZW5z
dXJlQ1BTRG9taW5hdG9ycygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtICE9IFNTQSAm
JiAhbV9pc0luU1NBQ29udmVyc2lvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxOSw2ICs5MTksNyBAQCBwdWJsaWM6CiAgICAg
QmFja3dhcmRzQ0ZHJiBlbnN1cmVCYWNrd2FyZHNDRkcoKTsKICAgICBCYWNrd2FyZHNEb21pbmF0
b3JzJiBlbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCk7CiAgICAgQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMmIGVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CisgICAgQ1BTQ0ZH
JiBlbnN1cmVDUFNDRkcoKTsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2VzIHNl
bnNlIHRvIGNhbGwgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2luZwogICAgIC8vIGJlY2F1c2UgaXQgcXVl
cmllcyB0aGUgbV9oYXNFeGNlcHRpb25IYW5kbGVycyBib29sZWFuIHdob3NlIHZhbHVlCkBAIC05
MzgsNiArOTM5LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbnRyeXBvaW50KEJhc2ljQmxv
Y2sqIGJsb2NrKSBjb25zdAogICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9p
c0luU1NBQ29udmVyc2lvbiwgIlRoaXMgaXMgbm90IHdyaXR0ZW4gdG8gd29yayBkdXJpbmcgU1NB
IGNvbnZlcnNpb24uIik7CisKKyAgICAgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2VudHJ5cG9pbnRzLmNvbnRhaW5zKHRoaXMtPmJsb2NrKDApKSk7CisgICAgICAgICAgICBy
ZXR1cm4gYmxvY2sgPT0gdGhpcy0+YmxvY2soMCk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAo
bV9lbnRyeXBvaW50cy5zaXplKCkgPD0gNCkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBt
X2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKQEAgLTk1NCw2ICs5
NjMsOCBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAg
ICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Jsb2NrPiwgOD4gbV9ibG9ja3M7CisgICAgdW5zaWduZWQg
bV9udW1FbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dW5zaWduZWQ+PiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNl
dDsKICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG1fZW50cnlwb2ludHM7CiAgICAgVmVjdG9y
PEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogCkBAIC05OTEsOCArMTAwMiw4IEBAIHB1Ymxp
YzoKICAgICAvLyBlZmZlY3RzLgogICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1Zl
Y3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7CiAgICAgCi0gICAgLy8gSW4gQ1BTLCB0aGlz
IGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRoaXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9u
IHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVu
dEZvcm1hdHM7CisgICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRo
aXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluIGZvciBh
biBlbnRyeXBvaW50IGJsb2NrLgorICAgIFZlY3RvcjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBtX2Fy
Z3VtZW50Rm9ybWF0czsKIAogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEs
IDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQ
b3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKQEAgLTEwNDgsNiArMTA1OSw3IEBAIHB1
YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heExvY2Fsc0ZvckNhdGNoT1NS
RW50cnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFwPEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0
VmFsdWVzQ2FjaGU7CisgICAgQmFnPEVudHJ5U3dpdGNoRGF0YT4gbV9lbnRyeVN3aXRjaERhdGE7
CiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cmluZ1N0cnVjdHVyZTsKICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAy
MjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOCArOTEsNTUgQEAgc3RhdGljIHZvaWQgc2V0
TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFicwogICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5k
KE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5vZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKIH0KIAor
c3RhdGljIHZvaWQgc2V0QXJndW1lbnRGb3JtYXQoR3JhcGgmIGdyYXBoLCBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSwgRmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIHZh
bHVlLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsdXNo
ZWRDZWxsOgorICAgICAgICB2YWx1ZS5zZXRUeXBlKGdyYXBoLCBTcGVjQ2VsbCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIHZhbHVlLm1ha2VCeXRl
Y29kZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JB
U0goZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKKwogdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZSgpCiB7CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsgLy8gT09QUzog
bWF5YmUgZGVidWcgYXNzZXJ0IGhlcmUKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNF
bnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICAgICAgLy8gV2UgYm9vdHN0cmFwIHRoZSBlbnRy
eXBvaW50cyBiZWxvdy4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgIGJsb2NrLT5jZmFTaG91bGRS
ZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7Cisg
ICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBibG9jay0+
Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7Cisg
ICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kp
IHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9l
bnRyeXBvaW50cykgewogICAgICAgICBlbnRyeXBvaW50LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1
ZTsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwpAQCAtMTAwLDE1
ICsxNDcsMTUgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAg
ICAgIGVudHJ5cG9pbnQtPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCA9IFN0cnVjdHVy
ZXNBcmVXYXRjaGVkOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGVBdFRhaWwgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKIAotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNB
dFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQogICAgICAgICAgICAgZW50cnlwb2ludC0+
dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAKLSAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIGVudHJ5cG9p
bnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdlCi0gICAgICAgICAgICAgICAgLy8gd2hh
dCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1
Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tp
XTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZh
bHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbHVz
aEZvcm1hdCBmb3JtYXQ7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9l
bnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWVbaV07CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVk
SlNWYWx1ZTsKQEAgLTExNiw1MyArMTYzLDE3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6
OmluaXRpYWxpemUoKQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNDZWxsKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgZW50cnlw
b2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VCeXRlY29kZVRvcCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbnVsbHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzZXRBcmd1bWVu
dEZvcm1hdChtX2dyYXBoLCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSksIGZv
cm1hdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kp
IHsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigp
OwogICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzRW50cnlw
b2ludChibG9jaykpIHsKLSAgICAgICAgICAgIC8vIFdlIGJvb3RzdHJhcHBlZCB0aGUgZW50cnlw
b2ludHMgYWJvdmUuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2
aXNpdCA9IGZhbHNlOwotICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwotICAg
ICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPmNm
YVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwotICAg
ICAgICBibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJlc0Fy
ZVdhdGNoZWQ7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNB
dFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
Ci0gICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7Ci0gICAg
ICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7Ci0gICAgICAgIH0K
LSAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3MSw2ICszODIsMTQgQEAgaW5saW5lIGJvb2wgSW5Q
bGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShi
YXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKICAgICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICBF
bnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2lj
QmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQog
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqCiAgICAg
Y2FzZSBMYXp5SlNDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBN
b3ZIaW50OgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2Fz
ZSBTZXRMb2NhbDoKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbToKQEAgLTc4LDYg
Kzc5LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgY2FzZSBKdW1w
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBVbnJl
YWNoYWJsZToKICAgICBjYXNlIERvdWJsZVJlcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMywxMSBAQCBzdHJ1Y3QgU3dp
dGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgRW50cnlT
d2l0Y2hEYXRhIHsKKyAgICBFbnRyeVN3aXRjaERhdGEoKSA9IGRlZmF1bHQ7CisgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAg
IGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMjk3LDEyICsxMzAyLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwogICAgIH0KIAorICAgIGJvb2wgaXNF
bnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnRyeVN3
aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAg
ICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBj
YXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICAgICAgY2FzZSBEaXJlY3RU
YWlsQ2FsbDoKQEAgLTEzNjQsNiArMTM3NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChp
c1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFN3aXRjaERhdGEqPigpOwog
ICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8u
YXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3Vj
Y2Vzc29ycygpCiAgICAgewpAQCAtMTM3NCw2ICsxMzkxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgogICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoK
KyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEzODYs
NyArMTQwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgp
LT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0gICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hE
YXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgICAg
IGNhc2UgMDoKQEAgLTI1NzQsNiArMjU5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29wSW5mby5hczxCdWNrZXRPd25lclR5cGU+KCk7CiAgICAgfQogCisgICAgdW5zaWduZWQgZW50
cnlwb2ludEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCgpID09IEluaXRpYWxpemVF
bnRyeXBvaW50QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHVuc2lnbmVk
PigpOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEp1bXAsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhCcmFuY2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnRyeVN3aXRjaCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhEaXJlY3RUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzKSBcCkBAIC00NDEsNiArNDQyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICAvKiBOb2RlcyBmb3IgRE9NIEpJVCAqL1wKICAgICBtYWNybyhDYWxsRE9NR2V0
dGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2FsbERP
TSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIC8qIE1ldGFkYXRhIG5v
ZGUgdGhhdCBpbml0aWFsaXplcyBhcmd1bWVudCBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGVudHJ5
cG9pbnQgaW4gdGhlIHByb2dyYW0uIFwKKyAgICAgKiBDdXJyZW50bHksIHdlIG9ubHkgdXNlIHRo
aXMgZm9yIHRoZSBibG9ja3MgYW4gRW50cnlTd2l0Y2ggYnJhbmNoZXMgdG8gYXQgdGhlIHJvb3Qg
b2YgXAorICAgICAqIHRoZSBwcm9ncmFtLiAgXAorICAgICAqLyBcCisgICAgbWFjcm8oSW5pdGlh
bGl6ZUVudHJ5cG9pbnRBcmd1bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpCiAKIC8vIFRoaXMgZW51
bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5
cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0
aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDEyICs1Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwogICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZC5tX2xvY2Fscy5maWxsKEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnNp
emUoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBG
bHVzaGVkQXQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1thcmd1
bWVudF0sCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKTsKLSAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxz
LmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShmbHVzaGVkQXQpOwotICAgICAgICB9
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9ncmFw
aC5ibG9jaygwKS0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQp
CisgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1
bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAKICAgICAgICAg
Ly8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tz
IGluIHJldmVyc2UgcG9zdG9yZGVyLgogICAgICAgICAKQEAgLTg2LDEwICs4MywxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNj
ZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1f
YXZhaWxhYmlsaXR5KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vz
c29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZv
ckV4aXQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5OSw2ICsyMDAsMTYgQEAgdm9pZCBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9p
bnRBcmd1bWVudHM6IHsKKyAgICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+
ZW50cnlwb2ludEluZGV4KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFy
Z3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4
XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXpl
KCk7IGFyZ3VtZW50LS07ICkgeworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZs
dXNoZWRBdChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMuYXJn
dW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jbGVhcigpOwog
ICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmFkZChuZXdSb290LCBuZXdB
cmd1bWVudHMpOwogCi0gICAgICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVl
PENQU0NGRz4obV9ncmFwaCk7Ci0KKyAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CiAg
ICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKICAgICAgICAgbV9ncmFwaC5raWxs
VW5yZWFjaGFibGVCbG9ja3MoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDYgKzEwOTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNl
cnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0xMTU1LDYgKzExNTYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgICAgIGNh
c2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKKyAgICAgICAgY2FzZSBJbml0aWFsaXpl
RW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgb25seSBwcmV0ZW5kcyB0byBw
cm9kdWNlIGEgdmFsdWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3Jh
cGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQotICAg
ICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAgICAgLCBtX2luc2VydGlvblNldChncmFw
aCkKICAgICB7CiAgICAgfQpAQCAtNTUsNiArNTUsNTUgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwogICAgICAgICBtX2dyYXBoLmNsZWFy
Q1BTQ0ZHRGF0YSgpOworCisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBX
VEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jazsKKworICAgICAgICB7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMgPSBtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpOworCisgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25T
ZXQobV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCAxLjBmKTsKKworICAgICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRy
eVN3aXRjaERhdGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0Y2hEYXRhLmFkZCgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBt
X2dyYXBoLm1fbnVtRW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3JhcGgubV9lbnRyeXBvaW50c1tlbnRyeXBv
aW50SW5kZXhdOworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxv
Y2suYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7CisgICAgICAgICAgICAgICAgZW50cnlT
d2l0Y2hEYXRhLT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7CisKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvbGRSb290LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
ICAgICBvbGRSb290LT5wcmVkZWNlc3NvcnMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAg
ICAgICAgaWYgKG9sZFJvb3QtPmlzQ2F0Y2hFbnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghIWVudHJ5cG9pbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVudHJ5cG9pbnRJ
bmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBvbGRSb290LT5hdCgwKS0+b3JpZ2luOwor
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgIDAsIFNwZWNOb25lLCBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cywgb3JpZ2lu
LCBPcEluZm8oZW50cnlwb2ludEluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIEV4aXRPSywg
b3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG9sZFJvb3Qp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRj
aERhdGEtPmNhc2VzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1
bWUgdGhlIG5vcm1hbCBjYWxsIGVudHJ5cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxp
c3QuCisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMucmVzaXplKG1fZ3Jh
cGgubV9udW1FbnRyeXBvaW50cyk7CisKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0g
ZmFsc2U7CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENv
ZGVPcmlnaW4oMCksIGV4aXRPSyB9OworICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgRW50cnlTd2l0Y2gsIG9yaWdpbiwg
T3BJbmZvKGVudHJ5U3dpdGNoRGF0YSkpOworCisgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlw
b2ludHMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5hcHBlbmQo
bmV3Um9vdCk7CisKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBPT1BTIHByZXZlbnQgY3JlYXRpbmcgdGhpcyB0d2ljZQorICAgICAg
ICBtX2NhbGN1bGF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFNTQUNhbGN1bGF0b3I+KG1fZ3JhcGgp
OworCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogICAgICAgICAKICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTY3LDcgKzExNiw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmICghdmFyaWFibGUuaXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJp
YWJsZSA9IG1fY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLT5uZXdWYXJpYWJsZSgp
OwogICAgICAgICAgICAgQVNTRVJUKHNzYVZhcmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVG
b3JTU0FJbmRleC5zaXplKCkpOwogICAgICAgICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFw
cGVuZCgmdmFyaWFibGUpOwogICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFk
ZCgmdmFyaWFibGUsIHNzYVZhcmlhYmxlKTsKQEAgLTEwMyw3ICsxNTIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci0+bmV3RGVm
KAogICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlh
YmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTExMiw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBEZWNpZGUgd2hl
cmUgUGhpcyBhcmUgdG8gYmUgaW5zZXJ0ZWQuIFRoaXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRv
ZXNuJ3QgaW5zZXJ0IHRoZW0KICAgICAgICAgLy8geWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hl
cmUgdG8gaW5zZXJ0IGJhc2VkIG9uIHdoZXJlIFNTQUNhbGN1bGF0b3IgdGVsbHMgdXMgdG8uCi0g
ICAgICAgIG1fY2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgbV9jYWxjdWxhdG9yLT5j
b21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNz
YVZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewogICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3Nh
VmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIApAQCAtMTY3LDcgKzIxNiw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIs
IGksICI6ICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgbV92YXJpYWJsZUZvclNT
QUluZGV4W2ldKSwgIlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAg
ICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1fY2FsY3VsYXRvciwgIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRvcjogIiwgKm1fY2FsY3VsYXRvciwgIlxuIik7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIERvIHRoZSBidWxrIG9mIHRoZSBTU0Eg
Y29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBvcGVyYW5kLT5Ob2Rl
CkBAIC0yMjAsNyArMjY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
KG1fZ3JhcGgsIHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJsb2NrICIsICpibG9jaywgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZh
cmlhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBt
X2NhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlhYmxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3ItPnJl
YWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghZGVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcmVxdWly
ZWQgdG8gaW5zZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhhdmUgYSByZWFjaGluZyBkZWYKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGhlYWQuCkBAIC0yNDYsNyArMjk1LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgLy8gdmFsdWVGb3JPcGVyYW5kIHdpdGggdGhvc2UgUGhpcy4gRm9y
IFBoaXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QKICAgICAgICAgICAg
IC8vIGZsdXNoZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92SGludC4KICAgICAgICAgICAgIHNpemVf
dCBwaGlJbnNlcnRpb25Qb2ludCA9IDA7Ci0gICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6
OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3ItPnBo
aXNGb3JCbG9jayhibG9jaykpIHsKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5k
ZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwpAQCAtMzQ2LDcgKzM5
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IHRl
cm1pbmFsLm5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
SW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3Nv
cihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpE
ZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7
CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2Fs
Y3VsYXRvci0+cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxl
KCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwpAQCAtMzgzLDIzICs0
MzIsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0ZDo6bWFrZV91bmlx
dWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
RklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNTQToKLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOwotICAg
ICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZp
bmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRG
b3JtYXRzLnJlc2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0ID0gRmx1c2hlZEpTVmFsdWU7Ci0KLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3Vt
ZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZSk7Ci0gICAgICAgICAgICBmb3JtYXQgPSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+Zm9ybWF0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRGb3JtYXRzW2ldID0gZm9ybWF0OwotICAgICAgICAgICAgYXJndW1lbnRzW2ldID0g
bm9kZTsgLy8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3VtZW50cyBmb3IgdGhl
IGJlbmVmaXQgb2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGVu
dHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2spIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OworICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9v
dCA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9
IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290KS0+dmFsdWU7Cisg
ICAgICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKKyAgICAgICAg
ICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50cy5zaXpl
KCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2FyZ3VtZW50TWFwcGlu
Zy5nZXQoYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
KTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMudW5jaGVja2VkQXBwZW5kKG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tp
XSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMgZm9y
IHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdID0gV1RGTW92ZShh
cmd1bWVudEZvcm1hdHMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fZ3JhcGgu
bV9mb3JtID0gU1NBOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC00MTEsNyArNDU4LDcg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTU0FDYWxjdWxhdG9yIG1fY2FsY3Vs
YXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1NBQ2FsY3VsYXRvcj4gbV9jYWxjdWxhdG9yOwog
ICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICBIYXNoTWFwPFZhcmlhYmxlQWNj
ZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJsZUZvclZhcmlh
YmxlOwogICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX2FyZ3VtZW50TWFwcGluZzsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAg
ICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoK
ICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkBAIC0zOTgsNiAr
Mzk5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBBdG9taWNzSXNM
b2NrRnJlZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY5Niw2ICs1Njk2LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQXRvbWljc1N1YjoK
ICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBJZGVudGl0eVdpdGhQcm9maWxlOgorICAg
IGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAgY2FzZSBFbnRyeVN3aXRj
aDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJ1bmV4cGVjdGVkIG5v
ZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTA2LDYgKzYxMDYsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAgIGNh
c2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBQaGk6CiAgICAgY2Fz
ZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
RW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgdGVybWlu
YWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAKICAgICAgICAgVkFMSURBVEUoKG1fZ3Jh
cGguYmxvY2soMCkpLCBtX2dyYXBoLmlzRW50cnlwb2ludChtX2dyYXBoLmJsb2NrKDApKSk7Cisg
ICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5ibG9jaygwKSA9PSBt
X2dyYXBoLm1fZW50cnlwb2ludHNbMF0pOwogCiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxs
IGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2ludHMgYXJlIGRlYWQu
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBv
aW50cykgewpAQCAtNTQ5LDYgKzU1MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6Cisg
ICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhInVuZXhwZWN0ZWQgbm9kZSB0eXBlIGlu
IENQUyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CkBAIC02MzksNiArNjQyLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIHRoaW5ncyBoZXJlLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNDcxCiAgICAgICAgIAorICAgICAg
ICBWQUxJREFURSgoKSwgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsKKwogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sp
CkBAIC03ODAsNiArNzg1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgpIHsgfQor
CiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlKQogICAgIHsKICAg
ICAgICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjIxMjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTEsNiArMTExLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEV4
dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2Fz
ZSBMb29wSGludDoKICAgICBjYXNlIFNraXBTY29wZToKICAgICBjYXNlIEdldEdsb2JhbE9iamVj
dDoKQEAgLTI0NSw2ICsyNDYsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2Ug
RW50cnlTd2l0Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBUeXBlT2Y6CiAgICAgY2Fz
ZSBQdXRCeUlkOgpAQCAtMzAwLDYgKzMwMiw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9y
OgogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlw
b2ludEFyZ3VtZW50czoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lv
biAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0
ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICB9KTsKIAogICAgIHN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFs
bG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CkBAIC0xNTIsOSArMTUzLDE5
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgY29k
ZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSks
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKIAogICAgIHN0YXRlLmdlbmVy
YXRlZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKLSAgICAgICAg
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+
bG9jYXRpb25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCkpKTsKICAgICBzdGF0ZS5q
aXRDb2RlLT5pbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1
Y3RzKCkpOwogCisgICAgaWYgKCFzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hC
eXRlY29kZU9mZnNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0
ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgICAgICB1
bnNpZ25lZCBjYXRjaEJ5dGVjb2RlT2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1f
YXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICBzdGF0ZS5qaXRD
b2RlLT5jYXRjaE9TUkVudHJ5LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBDYXRjaE9TUkVudHJ5
IHsgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnBy
b2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBhcmd1bWVudEZvcm1hdHMsIGNhdGNoQnl0ZWNvZGVPZmZzZXQgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBpZiAoQjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0
ZS5wcm9jLT5jb2RlKCkuZGlzYXNzZW1ibGVyKCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91
dCA9IFdURjo6ZGF0YUZpbGUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5j
bHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNp
bmNsdWRlICJGVExPU1JFeGl0LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMzksMTEgKzQw
LDE5IEBAIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgRlRMIHsKIAorc3Ry
dWN0IENhdGNoT1NSRW50cnkgeworICAgIHZvaWQqIG1hY2hpbmVDb2RlQWRkcmVzczsKKyAgICBW
ZWN0b3I8REZHOjpGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGNh
dGNoQnl0ZWNvZGVPZmZzZXQ7Cit9OworCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklU
Q29kZSB7CiBwdWJsaWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAKKyAgICAv
LyBPT1BTOiBhZGQgaGVscGVycyBmb3IgYWRkaW5nIGFuZCBsb29raW5nIHVwIGNhdGNoIG9zciBl
bnRyeXMuCisKICAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVy
cmlkZTsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQp
IG92ZXJyaWRlOwogICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkg
b3ZlcnJpZGU7CkBAIC03Miw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8
T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0
b3IsIDg+IG9zckV4aXREZXNjcmlwdG9yczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExh
enlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7CisgICAgVmVjdG9yPENhdGNoT1NSRW50cnk+IGNh
dGNoT1NSRW50cnk7CisgICAgU2NyYXRjaEJ1ZmZlciogY2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAg
ICAKIHByaXZhdGU6CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIx
MjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1
c2UgcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUu
CiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJv
bG9ndWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJn
dW1lbnRTcGVjdWxhdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4
Y2VwdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewpAQCAtMTc0LDggKzE3NSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBw
cm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVk
IGluIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3ko
MSk7CiAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRs
ZUV4Y2VwdGlvbnMpOwotICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywg
bV9wcm9sb2d1ZSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlw
b2ludEFyZ3VtZW50U3BlY3VsYXRpb25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0
YW50cyhtX3Byb2MsIHByb2xvZ3VlKTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAK
ICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFw
aC5tX25leHRNYWNoaW5lTG9jYWw7CkBAIC0yNTcsNTEgKzI1OCw3NiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9KTsKIAogICAgICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBs
b3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgot
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSwgMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLmFyZ3VtZW50KGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hl
ZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAg
ICAgICB9Ci0gICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9k
ZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0
byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3Jh
cGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFy
Z3VtZW50c1tpXTsKLSAgICAgICAgICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9h
ZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZSkgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFu
ZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZm
ZWN0aXZlIG9uZS4gSXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAg
ICAvLyBwcmltb3JkaWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUg
R2V0TG9jYWwgdGhhdCBnb3QgcHV0IGluCi0gICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhl
IG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQu
IFRoaXMKLSAgICAgICAgICAgICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAg
ICAgIG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVu
dEZvcm1hdHNbaV0pIHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlz
Tm90SW50MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2Rl
LCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJC
YWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9IG1fZ3JhcGgu
YmxvY2soMCktPnRlcm1pbmFsKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50
cnlTd2l0Y2gtPmlzRW50cnlTd2l0Y2goKSk7CisgICAgICAgICAgICAvL0VudHJ5U3dpdGNoRGF0
YSogZW50cnlTd2l0Y2hEYXRhID0gcm9vdEVudHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsK
KyAgICAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVt
RW50cnlwb2ludHMpOworICAgICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50
QXJndW1lbnRTcGVjdWxhdGlvbnM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBP
T1BTOiBhZGQgZXhwbGFpbmVyIGhlcmUuCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9
IGZpcnN0REZHQmFzaWNCbG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQu
ZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjYWxs
RW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOworCisg
ICAgICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICAgICAgbV9vcmlnaW4gPSBOb2Rl
T3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOworCisgICAgICAgICAg
ICAvLyBDaGVjayBBcmd1bWVudHMuCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVh
cigpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkp
ID0KKyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy9hdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAg
ICAgICAgICAgIC8vIE9PUFM6IGdldCBub24gbnVsbHB0ciBub2RlIGhlcmUuCisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAvL05vZGUqIG5v
ZGUgPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICAgICAgLy9tX291dC5zZXRPcmlnaW4obm9k
ZSk7CisKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiB3ZSBldmVuIGRvIHRo
aXMgYW55bW9yZSBnaXZlbiBFbnRyeVN3aXRjaD8KKyAgICAgICAgICAgICAgICAvL2lmIChub2Rl
KSB7CisgICAgICAgICAgICAgICAgLy8gICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVy
YW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAg
ICAgICAgIC8vICAgIAorICAgICAgICAgICAgICAgIC8vICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBi
dXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQor
ICAgICAgICAgICAgICAgIC8vICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRo
aXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAgICAgICAgICAg
ICAgICAvLyAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24ndCBo
YXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vICAgIC8v
IHNob3VsZCBob2xkIHRydWUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHNbMF1baV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZs
dXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Cisg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90
Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9vdXQuanVtcChmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAg
IG1fb3V0Lmp1bXAoZmlyc3RERkdCYXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG1faGFuZGxlRXhjZXB0aW9ucywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94
PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9u
SGFuZGxlcjsKQEAgLTUxMCw2ICs1MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgogICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2Fs
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2so
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTM4LDYgKzk2Nyw5IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgREZHOjpTd2l0Y2g6CiAgICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAg
ICAgY29tcGlsZUVudHJ5U3dpdGNoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBERkc6OlJldHVybjoKICAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTE0OCw2ICsxMTgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRI
aW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoK
KyAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBAIC0xNTE4LDYg
KzE1NTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRs
Rm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKICAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxp
bmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJh
Y3RDYXRjaExvY2FsKCkKKyAgICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1fZnRsU3RhdGUuaml0Q29kZS0+Y2F0Y2hPU1JF
bnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2Fk
NjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKSkp
KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKQEAgLTc3
ODcsNiArNzgyNiwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCBzd2l0Y2gga2luZCIpOwogICAgIH0KKworICAgIHZvaWQgY29t
cGlsZUVudHJ5U3dpdGNoKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gc3Vj
Y2Vzc29yczsKKyAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IG1fbm9k
ZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzKQorICAgICAgICAgICAgc3VjY2Vzc29ycy5hcHBl
bmQobG93QmxvY2soc3VjY2Vzc29yKSk7CisgICAgICAgIG1fb3V0LmVudHJ5U3dpdGNoKHN1Y2Nl
c3NvcnMpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVSZXR1cm4oKQogICAgIHsKQEAg
LTE0NjM4LDcgKzE0Njg1LDYgQEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgUHJv
Y2VkdXJlJiBtX3Byb2M7CiAgICAgCi0gICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKICAgICBM
QmFzaWNCbG9jayBtX2hhbmRsZUV4Y2VwdGlvbnM7CiAgICAgSGFzaE1hcDxERkc6OkJhc2ljQmxv
Y2sqLCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2
ICsxMDcsNzcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK3ZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvRlRMKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6RlRMSklUKTsKKyAgICBGVEw6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZnRsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CisKKyAgICBDYXRj
aE9TUkVudHJ5IG9zckVudHJ5OworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBmb3IgKGNv
bnN0IENhdGNoT1NSRW50cnkmIG1heWJlRW50cnkgOiBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5KSB7
CisgICAgICAgIGlmIChtYXliZUVudHJ5LmNhdGNoQnl0ZWNvZGVPZmZzZXQgPT0gYnl0ZWNvZGVJ
bmRleCkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgb3NyRW50cnkg
PSBtYXliZUVudHJ5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBXZSdyZSBvbmx5
IGFsbG93ZWQgdG8gT1NSIGVudGVyIGlmIHdlJ3ZlIHByb3ZlbiB3ZSBoYXZlIGNvbXBhdGlibGUg
YXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgb3NyRW50cnkuYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgeworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkUih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpLmpzVmFsdWUoKTsKKyAgICAgICAgc3dpdGNoIChvc3JFbnRyeS5hcmd1
bWVudEZvcm1hdHNbYXJndW1lbnRdKSB7CisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6
CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Rmx1c2hl
ZENlbGw6CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpG
bHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNCb29sZWFuKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBERkc6OkRlYWRGbHVzaDoKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIGFyZ3Vt
ZW50IGlzIG5vdCBhbGl2ZS4gVGhlcmVmb3JlLCBpdCdzIGFsbG93ZWQgdG8gYmUgYW55IHR5cGUu
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRKU1ZhbHVlOgor
ICAgICAgICAgICAgLy8gQW4gYXJndW1lbnQgaXMgdHJpdmlhbGx5IGEgSlNWYWx1ZS4KKyAgICAg
ICAgICAgIGJyZWFrOyAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFt
ZVNpemVGb3JDaGVjayA9IGppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JF
eGVjdXRpb25BbmRFeGl0KCk7CisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFj
aXR5Rm9yKCZleGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNp
emVGb3JDaGVjaykub2Zmc2V0KCldKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gQVNTRVJUKEludGVycHJldGVyOjpnZXRPcGNvZGVJRChleGVjLT5jb2RlQmxvY2soKS0+aW5z
dHJ1Y3Rpb25zKClbZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKV0udS5vcGNvZGUpID09IG9wX2NhdGNo
KTsgLy8gT09QUworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0
YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihleGVjLT5jb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKClbZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSArIDNdLnUucG9pbnRlcik7
CisgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGpp
dENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgdW5zaWduZWQg
aW5kZXggPSAwOworICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQmIHByb2ZpbGUpIHsKKyAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29w
ZXJhbmQpLmlzTG9jYWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YUJ1ZmZl
cltpbmRleF0gPSBleGVjLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7
CisgICAgICAgICsraW5kZXg7CisgICAgfSk7CisKKyAgICAvL2RhdGFMb2dMbigiUGVyZm9ybWlu
ZyBGVEwgT1NSIEVudHJ5IGF0IGNhdGNoISIpOworCisgICAgaml0Q29kZS0+Y2F0Y2hPU1JFbnRy
eUJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KTsKKworICAg
IHJldHVybiBvc3JFbnRyeS5tYWNoaW5lQ29kZUFkZHJlc3M7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICBFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CiAKK3ZvaWQqIHByZXBhcmVD
YXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlz
aW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2MSwxNiBAQCB2b2lkIE91dHB1dDo6YWRkSW5jb21p
bmdUb1BoaShMVmFsdWUgcGhpCiAgICAgICAgIHZhbHVlLnZhbHVlKCktPmFzPEIzOjpVcHNpbG9u
VmFsdWU+KCktPnNldFBoaShwaGkpOwogfQogCit2b2lkIE91dHB1dDo6ZW50cnlTd2l0Y2goY29u
c3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgY2FzZXMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2Fz
ZXMuc2l6ZSgpID09IG1fcHJvYy5udW1FbnRyeXBvaW50cygpKTsKKyAgICBtX2Jsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRW50cnlTd2l0Y2gsIG9yaWdpbigpKTsKKyAgICBmb3IgKExC
YXNpY0Jsb2NrIGJsb2NrIDogY2FzZXMpIHsKKyAgICAgICAgLy8gT09QUzogZnJlcXVlbmNpZXMg
aGVyZQorICAgICAgICBtX2Jsb2NrLT5hcHBlbmRTdWNjZXNzb3IoRnJlcXVlbnRlZEJsb2NrKGJs
b2NrKSk7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDI5LDYgKzQyOSw4IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHZvaWQgZW50cnlTd2l0Y2goY29uc3QgVmVjdG9yPExCYXNpY0Jsb2Nr
PiYpOworCiAgICAgdm9pZCByZXQoTFZhbHVlKTsKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAyMjEy
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJGVExGb3JPU1JF
bnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC02NSw2ICs2NywyOCBA
QCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIGZpbmFsaXplciA9IHN0YXRpY19jYXN0
PEpJVEZpbmFsaXplcio+KGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIuZ2V0KCkpOwogCiAgICAgcHJv
YyA9IHN0ZDo6bWFrZV91bmlxdWU8UHJvY2VkdXJlPigpOworICAgIHByb2MtPnNldE51bUVudHJ5
cG9pbnRzKGdyYXBoLm1fbnVtRW50cnlwb2ludHMpOworCisgICAgLy8gT09QUyA6bWF5YmUgYWJz
dHJhY3QgdmlhIEIzOjpQcm9jZWR1cmUKKyAgICB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZ3JhcGgubV9jb2RlQmxvY2s7CisKKyAgICAgICAgUmVmUHRyPEIzOjpBaXI6OlByb2xv
Z3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbY29kZUJsb2NrXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9m
ZnNldExpc3QoKSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNv
ZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBncmFwaC5tX2VudHJ5cG9pbnRJ
bmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlzKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhdGNoRW50cnlwb2ludEluZGV4ICE9IDApOworICAgICAgICAgICAgcHJvYy0+Y29k
ZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChjYXRjaEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQ
cm9sb2d1ZUdlbmVyYXRvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3JhcGgubV9tYXhM
b2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7CisgICAgICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxp
dmVMb2NhbHMgPSBzdGQ6Om1heCgqZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5LCAx
dSk7IC8vIE1ha2Ugc3VyZSB3ZSBhbHdheXMgYWxsb2NhdGUgYSBub24tbnVsbCBjYXRjaE9TUkVu
dHJ5QnVmZmVyLgorICAgICAgICAgICAgaml0Q29kZS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IGdy
YXBoLm1fdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZM
aXZlTG9jYWxzKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHByb2MtPnNldE9yaWdpblByaW50
ZXIoCiAgICAgICAgIFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5k
bGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkZ1enouaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkZyYW1lVHJh
Y2Vycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCkBAIC0xNTMzLDEwICsxNTM0LDE1IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHJ5T1NSRW50ZXIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CiAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gZXhlYy0+Y29k
ZUJsb2NrKCktPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxhY2VtZW50LT5q
aXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShl
eGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIHN3aXRjaCAo
b3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6REZH
SklUOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNo
T1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIq
PihGVEw6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBi
eXRlY29kZUluZGV4KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBudWxscHRyOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5
dGVjb2RlSW5kZXgpCkBAIC0xNTQ2LDggKzE1NTIsMTUgQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25UcnlPU1JFbnRlcgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpOwotICAgIGlmIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKworICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1l
bnQtPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0
aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBjYXNlIEpJVENvZGU6OkZU
TEpJVDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihGVEw6OnByZXBhcmVDYXRj
aE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY29kZUJsb2NrLT5lbnN1
cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgp
OwogICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
W2J5dGVjb2RlSW5kZXggKyAzXS51LnBvaW50ZXIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319222</attachid>
            <date>2017-08-28 17:38:29 -0700</date>
            <delta_ts>2017-08-28 19:19:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>75639</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxT
cGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUg
YW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiAr
MTY4LDE3IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9p
bnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50cnlwb2lu
dHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRM
aXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTI2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNl
dDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBjbGFzcyBE
aXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdhc21Cb3Vu
ZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7CiAKK3R5
cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENvZGUm
KTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQcm9sb2d1
ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhl
IGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCiAv
LyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRp
bmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2YgQWlyLgpA
QCAtMTY1LDcgKzE2OSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsgfQogICAg
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlwb2ludChC
YXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW50
cnlwb2ludEluZGV4KEJhc2ljQmxvY2sqKSBjb25zdDsKKyAgICB2b2lkIHNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgsIFJlZlB0cjxQcm9sb2d1ZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogV2UgYWxsb3cgdGhpcyB0
byBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgd2Ugc2V0IG1fZW50cnlwb2ludHMganVzdCBmb3IgY29u
dmVuaWVuY2UgdG8gdXNlcnMgb2YgdGhpcyBBUEkuCisgICAgICAgIG1fZW50cnlwb2ludEluZGV4
VG9HZW5lcmF0b3Iuc2V0KGVudHJ5cG9pbnRJbmRleCwgZ2VuZXJhdG9yKTsKKyAgICB9CisgICAg
UmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQo
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlw
b2ludEluZGV4VG9HZW5lcmF0b3IuZ2V0KGVudHJ5cG9pbnRJbmRleCk7CisgICAgfQorCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGJ5IGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CiAgICAgdm9pZCBzZXRFbnRyeXBvaW50cyhWZWN0b3ImJiB2ZWN0b3IpCkBA
IC0zNTMsNiArMzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5
cG9pbnRzOyAvLyBUaGlzIGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4K
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9lbnRyeXBvaW50SW5k
ZXhUb0dlbmVyYXRvcjsKICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yPiBtX3dh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwyMSArMjA4LDI4IEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCiAKLSAgICAgICAg
aWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZW50cnlwb2ludEluZGV4ID0gY29kZS5lbnRyeXBvaW50SW5kZXgoYmxvY2sp
KSB7CisgICAgICAgICAgICBBU1NFUlQoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKKwogICAg
ICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZXIt
PnN0YXJ0RW50cnlwb2ludChqaXQpOyAKIAotICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7Ci0gICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IGlzQVJNNjQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBw
cm9sb2d1ZUdlbmVyYXRvciA9IGNvZGUucHJvbG9ndWVHZW5lcmF0b3JGb3JFbnRyeXBvaW50KCpl
bnRyeXBvaW50SW5kZXgpKQorICAgICAgICAgICAgICAgIHByb2xvZ3VlR2VuZXJhdG9yLT5ydW4o
aml0LCBjb2RlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIGlzQVJNNjQoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKIAogICAgICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAg
ICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCi0gICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBBU1NFUlQoIWNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYwLDcgKzI2MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgLy8gREZHIGV4ZWN1dGlvbi4KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAg
ICAKKwogICAgIGNhc2UgS2lsbFN0YWNrOiB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIGhp
bnQgdGVsbGluZyB1cyB0aGF0IHRoZSBPU1Igc3RhdGUgb2YgdGhlIGxvY2FsIGlzIG5vIGxvbmdl
ciBpbnNpZGUgdGhlCiAgICAgICAgIC8vIGZsdXNoZWQgZGF0YS4KQEAgLTI3Myw3ICsyNzMsMzMg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBu
b24tY2xlYXIgdmFsdWUuCiAgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAK
KworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9h
cmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVu
dCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxl
cygpLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRGb3Jt
YXRzW2FyZ3VtZW50XSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAg
ICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAg
dmFsdWUuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVU
b3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZv
ciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFy
Z3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9l
cywgaXQgc2hvdWxkIHR1cm4KQEAgLTE4NTMsNiArMTg3OSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFJldHVybjoKICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjIxMjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMSw4ICsyMjEsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCi0gICAgLy8gVGhl
c2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIAogICAgIHN0cnVj
dCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjM0LDkgKzUyMzQsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U3VwcG9ydCBjYXRjaCBpbiB0aGUgRlRMLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgewogICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIApAQCAtNjQzNSw4ICs2NDMz
LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIG1fZ3JhcGguZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIAot
ICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9ncmFwaCk7
Ci0gICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsNyBAQCB1c2lu
ZyBTU0FDRkcgPSBDRkc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgQ1BTQ0ZHPjo6dmFsdWU+Ojp0eXBlPgog
Q1BTQ0ZHJiBzZWxlY3RDRkcoR3JhcGgmIGdyYXBoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGdy
YXBoLm1fY3BzQ0ZHKTsKLSAgICByZXR1cm4gKmdyYXBoLm1fY3BzQ0ZHOworICAgIHJldHVybiBn
cmFwaC5lbnN1cmVDUFNDRkcoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFNTQUNGRz46OnZhbHVl
Pjo6dHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFRo
cm93OgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgpAQCAt
NDM4LDYgKzQzOSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAg
IGNhc2UgUHV0SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJv
b2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICAvLyBUaGVyZSBhcmUg
Y2VydGFpbiBub2RlcyB3aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcg
dG8gZG8gd2l0aCB3aGF0IHRoZXkKICAgICAvLyBub3JtYWxseSBjbG9iYmVyLgogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFB1dEhp
bnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJ
KHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBDb21tb25EYXRh
OjpzaHJpbmtUb0ZpdCgpCiAgICAgY29kZU9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKICAgICB3ZWFr
UmVmZXJlbmNlcy5zaHJpbmtUb0ZpdCgpOwogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7
CisgICAgY2F0Y2hFbnRyeXBvaW50cy5zaHJpbmtUb0ZpdCgpOwogfQogCiBzdGF0aWMgU3RhdGlj
TG9jayBwY0NvZGVCbG9ja01hcExvY2s7CkBAIC0xOTMsNiArMTk0LDE3IEBAIHZvaWQgQ29tbW9u
RGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCku
dmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAordm9pZCBDb21tb25E
YXRhOjpmaW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKQoreworICAgIHN0ZDo6c29ydChjYXRjaEVu
dHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNoRW50cnlwb2ludHMuZW5kKCksCisgICAgICAgIFtdIChj
b25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBhLCBjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBi
KSB7IHJldHVybiBhLmJ5dGVjb2RlSW5kZXggPCBiLmJ5dGVjb2RlSW5kZXg7IH0pOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgKyAxIDwgY2F0Y2hF
bnRyeXBvaW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKGNhdGNoRW50cnlwb2ludHNb
aV0uYnl0ZWNvZGVJbmRleCA8PSBjYXRjaEVudHJ5cG9pbnRzW2kgKyAxXS5ieXRlY29kZUluZGV4
KTsKKyNlbmRpZgorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBs
YWNlbWVudC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2Fs
bEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21w
aWxhdGlvbi5oIgpAQCAtOTAsNiArOTEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKENvZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVh
a3BvaW50KHZvaWQqIGFkZHJlc3MpOwogCisgICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hP
U1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50cnlwb2ludHMu
c2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgW10gKGNvbnN0IENhdGNoRW50cnlw
b2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmJ5dGVjb2RlSW5kZXg7IH0pOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IHZvaWQqIG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRz
KQorICAgIHsKKyAgICAgICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBvaW50
RGF0YSB7IG1hY2hpbmVDb2RlLCAgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpLCBieXRlY29kZUlu
ZGV4IH0pOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisK
ICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQs
IHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpOwpAQCAtMTA2LDExICsxMjEsMTMgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7CiAg
ICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOworICAg
IFZlY3RvcjxDYXRjaEVudHJ5cG9pbnREYXRhPiBjYXRjaEVudHJ5cG9pbnRzOwogICAgIEJhZzxD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwogICAgIEJhZzxBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2Vt
ZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NS
RW50cnlCdWZmZXI7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRp
b247CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsg
Ly8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2
LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0
TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBJ
bml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAg
Y2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgpAQCAtMTgzLDYgKzE4NCw3IEBAIGJvb2wg
ZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2Fz
ZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBj
YXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgY2FzZSBFbnRy
eVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKQEAg
LTIwMTEsNiArMjAxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9j
YWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjEy
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5j
YXNlc1tpXS52YWx1ZSwgY29udGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgfQorICAgIGlmIChub2RlLT5pc0VudHJ5U3dpdGNoKCkpIHsKKyAgICAgICAgRW50cnlTd2l0
Y2hEYXRhKiBkYXRhID0gbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgQnJhbmNoVGFyZ2V0KGRhdGEtPmNhc2VzW2ldKSk7CisgICAgfQogICAg
IENsb2JiZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CiAgICAgYWRkUmVhZHNB
bmRXcml0ZXMoKnRoaXMsIG5vZGUsIHJlYWRzLCB3cml0ZXMpOwpAQCAtNTE1LDggKzUyMCwxMCBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50
KCJcbiIpOwogICAgIG91dC5wcmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZSht
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBG
aXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7
IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBz
dGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkK
LSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJn
dW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2Fy
Z3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0
LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5
cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJ
bmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWly
IDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJn
dW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIu
dmFsdWUpLCAiXG4iKTsKQEAgLTgyNCw2ICs4MzEsNyBAQCB2b2lkIEdyYXBoOjppbnZhbGlkYXRl
Q0ZHKCkKICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gbnVsbHB0cjsKICAgICBt
X2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxscHRyOwogICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVs
bHB0cjsKKyAgICBtX2Nwc0NGRyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgR3JhcGg6OmludmFsaWRh
dGVOb2RlTGl2ZW5lc3MoKQpAQCAtMTU0Myw2ICsxNTUxLDE0IEBAIHZvaWQgR3JhcGg6OmxvZ0Fz
c2VydGlvbkZhaWx1cmUoCiAgICAgbG9nREZHQXNzZXJ0aW9uRmFpbHVyZSgqdGhpcywgdG9DU3Ry
aW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiks
IGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24pOwogfQogCitDUFNDRkcmIEdyYXBoOjpl
bnN1cmVDUFNDRkcoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1f
aXNJblNTQUNvbnZlcnNpb24pOworICAgIGlmICghbV9jcHNDRkcpCisgICAgICAgIG1fY3BzQ0ZH
ID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY3BzQ0ZH
OworfQorCiBDUFNEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlQ1BTRG9taW5hdG9ycygpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NBQ29udmVyc2lvbik7
CkBAIC0xNjEwLDIxICsxNjI2LDE3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3Jh
cGg6Om1ldGgKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIGlmIChu
b2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAgICAgIFZhbHVlUHJvZmls
ZSogcmVzdWx0ID0gWyZdICgpIC0+IFZhbHVlUHJvZmlsZSogewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkuaXNB
cmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxv
Y2FsKCkudG9Bcmd1bWVudCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1hdGNoIFNldEFyZ3VtZW50IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU4NDEKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0g
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpICE9IGFyZ3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1
bWVudCk7Ci0gICAgICAgICAgICAgICAgfSgpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgOiBtX2VudHJ5cG9pbnRUb0Fy
Z3VtZW50cy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudCBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3
ZWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTg0MQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gT09QUzog
dGhpcyBpc24ndCBxdWl0ZSBjb3JyZWN0IGZvciBjYXRjaCBzaW5jZSB3ZSB2YWx1ZSBwcm9maWxl
IHNlcGFyYXRlbHkhCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUg
PSBhcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Tm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAm
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTE5LDYgKzkx
OSw3IEBAIHB1YmxpYzoKICAgICBCYWNrd2FyZHNDRkcmIGVuc3VyZUJhY2t3YXJkc0NGRygpOwog
ICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJhY2t3YXJkc0RvbWluYXRvcnMoKTsKICAg
ICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5zdXJlQ29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXMoKTsKKyAgICBDUFNDRkcmIGVuc3VyZUNQU0NGRygpOwogCiAgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIG9ubHkgbWFrZXMgc2Vuc2UgdG8gY2FsbCBhZnRlciBieXRlY29kZSBwYXJzaW5nCiAg
ICAgLy8gYmVjYXVzZSBpdCBxdWVyaWVzIHRoZSBtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xl
YW4gd2hvc2UgdmFsdWUKQEAgLTkzOCw2ICs5MzksMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFtX2lzSW5TU0FDb252ZXJzaW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRl
biB0byB3b3JrIGR1cmluZyBTU0EgY29udmVyc2lvbi4iKTsKKworICAgICAgICBpZiAobV9mb3Jt
ID09IFNTQSkgeworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2ludHMuY29udGFpbnModGhpcy0+YmxvY2so
MCkpKTsKKyAgICAgICAgICAgIHJldHVybiBibG9jayA9PSB0aGlzLT5ibG9jaygwKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChtX2VudHJ5cG9pbnRzLnNpemUoKSA8PSA0KSB7CiAgICAgICAg
ICAgICBib29sIHJlc3VsdCA9IG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxvY2spOwogICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jb250YWlucyhi
bG9jaykpOwpAQCAtOTU0LDYgKzk2Myw4IEBAIHB1YmxpYzoKICAgICBDb2RlQmxvY2sqIG1fcHJv
ZmlsZWRCbG9jazsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPEJhc2ljQmxvY2s+LCA4PiBtX2Js
b2NrczsKKyAgICB1bnNpZ25lZCBtX251bUVudHJ5cG9pbnRzIHsgVUlOVF9NQVggfTsKKyAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1fZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OwogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbV9lbnRy
eXBvaW50czsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAKQEAgLTk5
MSw4ICsxMDAyLDggQEAgcHVibGljOgogICAgIC8vIGVmZmVjdHMuCiAgICAgSGFzaE1hcDxCYXNp
Y0Jsb2NrKiwgQXJndW1lbnRzVmVjdG9yPiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50czsKICAgICAK
LSAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVhbmluZ2xlc3MuIEluIFNTQSwgdGhpcyBpcyB0aGUg
YXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4uCi0gICAgVmVjdG9yPEZs
dXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0czsKKyAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVh
bmluZ2xlc3MuIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3
ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQgYmxvY2suCisgICAgVmVjdG9yPFZlY3Rv
cjxGbHVzaEZvcm1hdD4+IG1fYXJndW1lbnRGb3JtYXRzOwogCiAgICAgU2VnbWVudGVkVmVjdG9y
PFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwpAQCAt
MTA0OCw2ICsxMDU5LDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1f
bWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd0luZGV4
aW5nPiBtX2luZGV4aW5nQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dNYXA8QWJzdHJh
Y3RWYWx1ZT4+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKKyAgICBCYWc8RW50cnlTd2l0Y2hEYXRh
PiBtX2VudHJ5U3dpdGNoRGF0YTsKIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RyaW5nU3Ry
dWN0dXJlOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3ltYm9sU3RydWN0dXJlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwy
OCBAQCBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzCiAgICAgICAgIHZh
bHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJh
Y3RWYWx1ZSgpIH0pOwogfQogCitzdGF0aWMgdm9pZCBzZXRBcmd1bWVudEZvcm1hdChHcmFwaCYg
Z3JhcGgsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgdmFsdWUu
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbHVzaGVk
Qm9vbGVhbjoKKyAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHZhbHVlLnNldFR5cGUoZ3JhcGgs
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAg
ICAgICAgdmFsdWUubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIERGR19DUkFTSChncmFwaCwgbnVsbHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQg
Zm9yIGFyZ3VtZW50Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCiB2b2lkIEluUGxh
Y2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGVu
dHJ5cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKQEAgLTEwMCwxNSArMTIyLDE1IEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICBlbnRyeXBv
aW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hl
ZDsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0g
U3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChpKS5jbGVhcigpOwogCi0gICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdoZW4gc3VwcG9ydGluZyBtdWx0aXBsZSBlbnRyeXBvaW50cyBpbiB0aGUg
RlRMLCB3ZSBuZWVkIHRvIGNoYW5nZQotICAgICAgICAgICAgICAgIC8vIHdoYXQgd2UgZG8gaGVy
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV07Ci0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSAgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0OwogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRv
QXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlW2ldOwogICAgICAgICAgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CkBA
IC0xMTYsMjYgKzEzOCwxMSBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KCkKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQobV9n
cmFwaCwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLCBmb3JtYXQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAg
ICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
ICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwpAQCAtMTYzLDYg
KzE3MCw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgfQorCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3MSw2ICszNzksMTQgQEAgaW5saW5lIGJvb2wgSW5Q
bGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShi
YXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKICAgICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICBF
bnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2lj
QmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQog
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNiBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICBjb21tb24uc2hyaW5r
VG9GaXQoKTsKICAgICBvc3JFbnRyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4aXQuc2hyaW5r
VG9GaXQoKTsKLSAgICBjYXRjaEVudHJ5cG9pbnRzLnNocmlua1RvRml0KCk7CiAgICAgc3BlY3Vs
YXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnByZXBhcmVBbmRT
aHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CkBAIC0yNDMs
NyArMjQyLDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAgICBh
dXRvIGNvbXBhcmF0b3IgPSBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gYS5tX2J5dGVjb2RlSW5kZXggPCBiLm1fYnl0ZWNvZGVJbmRleDsKICAgICB9
OwotICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNoRW50cnlwb2lu
dHMuZW5kKCksIGNvbXBhcmF0b3IpOwogICAgIHN0ZDo6c29ydChvc3JFbnRyeS5iZWdpbigpLCBv
c3JFbnRyeS5lbmQoKSwgY29tcGFyYXRvcik7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0y
NTEsNyArMjQ5LDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBvc3JWZWN0b3Iuc2l6ZSgpOyArK2kp
CiAgICAgICAgICAgICBBU1NFUlQob3NyVmVjdG9yW2ldLm1fYnl0ZWNvZGVJbmRleCA8PSBvc3JW
ZWN0b3JbaSArIDFdLm1fYnl0ZWNvZGVJbmRleCk7CiAgICAgfTsKLSAgICB2ZXJpZnlJc1NvcnRl
ZChjYXRjaEVudHJ5cG9pbnRzKTsKICAgICB2ZXJpZnlJc1NvcnRlZChvc3JFbnRyeSk7CiAjZW5k
aWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lv
biAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDggQEAgcHVibGljOgogICAgICAgICAgICAgZ2V0T1NS
RW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCi0gICAgQ2F0Y2hFbnRyeXBvaW50RGF0
YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2lu
dERhdGEsIHVuc2lnbmVkPigKLSAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50
cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgW10gKGNvbnN0IENh
dGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm1fYnl0ZWNvZGVJbmRleDsg
fSk7Ci0gICAgfQotCiAgICAgdm9pZCBmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7CiAKLSAgICB2
b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBtYWNoaW5lQ29kZU9mZnNldCwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0
cykKLSAgICB7Ci0gICAgICAgIGNhdGNoRW50cnlwb2ludHMuYXBwZW5kKENhdGNoRW50cnlwb2lu
dERhdGEgeyBieXRlY29kZUluZGV4LCBtYWNoaW5lQ29kZU9mZnNldCwgV1RGTW92ZShhcmd1bWVu
dEZvcm1hdHMpIH0pOwotICAgIH0KLSAgICAKICAgICB1bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNv
bnN0IE9TUkV4aXQmIGV4aXQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBvc3JF
eGl0LnNpemUoKTsKQEAgLTE0NiwxMiArMTM0LDEwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAg
Q29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBvc3JFbnRy
eTsKLSAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50RGF0YT4gY2F0Y2hFbnRyeXBvaW50czsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxE
Rkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgREZHOjpW
YXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmll
ZEdyYXBoIG1pbmlmaWVkREZHOwotICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZm
ZXI7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICB1aW50OF90IG5ldmVyRXhlY3V0ZWRFbnRy
eSB7IDEgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNp
Y0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMg
cmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5hcHBlbmRDYXRjaEVudHJ5
cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNldE9mKGJsb2Nr
SGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2RlLT5jb21tb24u
YXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGJsb2NrSGVhZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1
bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFz
aWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpt
YWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JD
YXRjaE9TUkVudHJ5KSB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0
ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtl
IHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4K
LSAgICAgICAgbV9qaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKKyAgICAg
ICAgbV9qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCktPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJl
dmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwo
R3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CiAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRy
eXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBGbHVzaDoKICAg
ICBjYXNlIFBoYW50b206CkBAIC03OCw2ICs3OSw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdy
YXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgogICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNh
c2UgQnJhbmNoOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBEb3VibGVSZXA6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIxMjYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
Myw2ICsyMDMsMTEgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRh
YmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgRW50cnlTd2l0Y2hEYXRh
KCkgPSBkZWZhdWx0OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gY2FzZXM7Cit9OworCiBzdHJ1
Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7CiB9OwpAQCAt
MTI5NywxMiArMTMwMiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcCgpID09IFN3aXRj
aDsKICAgICB9CiAKKyAgICBib29sIGlzRW50cnlTd2l0Y2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gRW50cnlTd2l0Y2g7CisgICAgfQorCiAgICAgYm9vbCBpc1Rlcm1p
bmFsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEp1bXA6
CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGFpbENh
bGw6CiAgICAgICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkBAIC0xMzY0LDYgKzEzNzUsMTIgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoaXNTd2l0Y2goKSk7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxTd2l0Y2hEYXRhKj4oKTsKICAgICB9CisKKyAgICBFbnRyeVN3aXRjaERhdGEqIGVu
dHJ5U3dpdGNoRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbnRyeVN3aXRjaCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEVudHJ5U3dpdGNoRGF0YSo+KCk7CisgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQogICAgIHsKQEAgLTEzNzQsNiArMTM5
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICBjYXNlIFN3aXRj
aDoKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSArIDE7Cisg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hE
YXRhKCktPmNhc2VzLnNpemUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9CkBAIC0xMzg2LDcgKzE0MDUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXNbaW5kZXhdLnRhcmdldC5ibG9jazsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ID09IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoLmJsb2Nr
OwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNFbnRyeVN3aXRjaCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF07CiAKICAgICAgICAg
c3dpdGNoIChpbmRleCkgewogICAgICAgICBjYXNlIDA6CkBAIC0yNTc0LDYgKzI1OTQsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8QnVja2V0T3duZXJUeXBlPigpOwog
ICAgIH0KIAorICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCgpCisgICAgeworICAgICAgICBB
U1NFUlQob3AoKSA9PSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cyk7CisgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczx1bnNpZ25lZD4oKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGls
ZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIyMTI2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oRW50cnlTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhS
ZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oRGlyZWN0VGFpbENhbGwsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtNDQxLDYgKzQ0MiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogTm9kZXMgZm9yIERPTSBKSVQg
Ki9cCiAgICAgbWFjcm8oQ2FsbERPTUdldHRlciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENhbGxET00sIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICAvKiBNZXRhZGF0YSBub2RlIHRoYXQgaW5pdGlhbGl6ZXMgYXJndW1lbnQgc3Rh
dGUgZm9yIGEgcGFydGljdWxhciBlbnRyeXBvaW50IGluIHRoZSBwcm9ncmFtLiBcCisgICAgICog
Q3VycmVudGx5LCB3ZSBvbmx5IHVzZSB0aGlzIGZvciB0aGUgYmxvY2tzIGFuIEVudHJ5U3dpdGNo
IGJyYW5jaGVzIHRvIGF0IHRoZSByb290IG9mIFwKKyAgICAgKiB0aGUgcHJvZ3JhbS4gIFwKKyAg
ICAgKi8gXAorICAgIG1hY3JvKEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzLCBOb2RlTXVz
dEdlbmVyYXRlKQogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNy
ZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJz
ZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJ
ZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEyNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuZmlsbChBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAg
ICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxp
dHkoZmx1c2hlZEF0KTsKLSAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGguYmxvY2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5Ojp1
bmF2YWlsYWJsZSgpOwogCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmlj
aWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAg
CkBAIC04NiwxMCArODMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFp
bGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLnBydW5lQnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1
Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
OTksNiArMjAwLDE2IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUK
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAg
ICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CisgICAgICAgIHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOworICAgICAgICBjb25z
dCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1l
bnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKKyAgICAgICAgICAg
IEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50
XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShm
bHVzaGVkQXQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjIxMjYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCwxNiArMzM4LDE3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKIH0KIAogdm9pZCogcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Cit7IAorICAgIC8vIE9PUFMKKyAgICAvL2lmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RG
RygpKQorICAgIC8vICAgIHJldHVybiBudWxscHRyOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
LSAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpGVExKSVQpOwogCi0gICAgREZHOjpDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5
cG9pbnQgPSBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CisgICAgQ29tbW9uRGF0YSogZGZnQ29tbW9uID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvbW1vbik7CisgICAgREZH
OjpDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5cG9pbnQgPSBkZmdDb21tb24tPmNhdGNo
T1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBpZiAoIWNh
dGNoRW50cnlwb2ludCkgewogICAgICAgICAvLyBUaGlzIGNhbiBiZSBudWxsIHVuZGVyIHNvbWUg
Y2lyY3Vtc3RhbmNlcy4gVGhlIG1vc3QgY29tbW9uIGlzIHRoYXQgd2UgZGlkbid0CiAgICAgICAg
IC8vIGNvbXBpbGUgdGhpcyBvcF9jYXRjaCBhcyBhbiBlbnRyeXBvaW50IHNpbmNlIGl0IGhhZCBu
ZXZlciBleGVjdXRlZCB3aGVuIHN0YXJ0aW5nCkBAIC0zNTYsOSArMzU3LDkgQEAgdm9pZCogcHJl
cGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleAogICAgIH0KIAogICAgIC8vIFdlJ3JlIG9u
bHkgYWxsb3dlZCB0byBPU1IgZW50ZXIgaWYgd2UndmUgcHJvdmVuIHdlIGhhdmUgY29tcGF0aWJs
ZSBhcmd1bWVudCB0eXBlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBjYXRjaEVudHJ5cG9pbnQtPm1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVu
dCkgeworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50
cnlwb2ludC0+YXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkUih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCkpLmpzVmFsdWUoKTsKLSAgICAgICAgc3dpdGNoIChjYXRjaEVudHJ5cG9pbnQt
Pm1fYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgeworICAgICAgICBzd2l0Y2ggKGNhdGNoRW50
cnlwb2ludC0+YXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgewogICAgICAgICBjYXNlIERGRzo6
Rmx1c2hlZEludDMyOgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zODIsMTMgKzM4MywxMyBAQCB2b2lkKiBwcmVw
YXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lz
dGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7CisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9y
Q2hlY2sgPSBkZmdDb21tb24tPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4
aXQoKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4ZWMt
PnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrKS5v
ZmZzZXQoKV0pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoSW50ZXJw
cmV0ZXI6OmdldE9wY29kZUlEKGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVtleGVj
LT5ieXRlY29kZU9mZnNldCgpXS51Lm9wY29kZSkgPT0gb3BfY2F0Y2gpOwogICAgIFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIqPihleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbZXhlYy0+
Ynl0ZWNvZGVPZmZzZXQoKSArIDNdLnUucG9pbnRlcik7Ci0gICAgSlNWYWx1ZSogZGF0YUJ1ZmZl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZm
ZXItPmRhdGFCdWZmZXIoKSk7CisgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNMb2NhbCgpKQpAQCAtMzk3LDkgKzM5OCw4IEBA
IHZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgKytpbmRl
eDsKICAgICB9KTsKIAotICAgIGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXItPnNldEFjdGl2
ZUxlbmd0aChzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCk7Ci0KLSAgICByZXR1cm4gaml0Q29kZS0+
ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChjYXRjaEVudHJ5cG9pbnQtPm1fbWFjaGluZUNvZGVP
ZmZzZXQpOworICAgIGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVu
Z3RoKHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KTsKKyAgICByZXR1cm4gY2F0Y2hFbnRyeXBvaW50
LT5tYWNoaW5lQ29kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMjIxMjYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMSArNzEsMTEgQEAgaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2Rl
SQogfQogCiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7Ci0gICAgdW5zaWduZWQgbV9ieXRl
Y29kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CiAgICAgLy8gV2Ug
dXNlIHRoaXMgd2hlbiBkb2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1
bWVudHMKICAgICAvLyBhcmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0
IGEgY2F0Y2ggYmxvY2suCi0gICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0
czsKKyAgICB2b2lkKiBtYWNoaW5lQ29kZTsKKyAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3Vt
ZW50Rm9ybWF0czsKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKIAogLy8gUmV0dXJu
cyBhIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlciB0aGF0IHRoZSBPU1IgZW50cnkgdGh1bmsgd2ls
bCByZWNvZ25pemUgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIx
MjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY2xlYXIoKTsKICAgICAgICAg
bV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5hZGQobmV3Um9vdCwgbmV3QXJndW1lbnRz
KTsKIAotICAgICAgICBtX2dyYXBoLm1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+
KG1fZ3JhcGgpOwotCisgICAgICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygpOwogICAgICAgICBt
X2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hh
YmxlQmxvY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEy
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBj
YXNlIFVwc2lsb246CiAgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50
aWwgd2UgZ28gaW50byBTU0EuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTE1NSw2ICsxMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgICAgICBjYXNlIE51a2VT
dHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CisgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9p
bnRBcmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBh
IHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCYXNpY0Js
b2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgpAQCAtNDQsNyArNDUsNiBAQCBjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKLSAgICAgICAgLCBt
X2NhbGN1bGF0b3IoZ3JhcGgpCiAgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAg
ewogICAgIH0KQEAgLTU1LDYgKzU1LDU1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgbV9ncmFwaC5jbGVhckNQU0NGR0Rh
dGEoKTsKKworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBCYXNpY0Jsb2NrKiwgV1RGOjpJbnRI
YXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25l
ZD4+IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2s7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNp
emUoKTsKKworICAgICAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQo
bV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gYmxvY2tJbnNlcnRp
b25TZXQuaW5zZXJ0KDAsIDEuMGYpOworCisgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVu
dHJ5U3dpdGNoRGF0YSA9IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEuYWRkKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8
IG1fZ3JhcGgubV9udW1FbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBvbGRSb290ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzW2VudHJ5
cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNC
bG9jay5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290KTsKKyAgICAgICAgICAgICAgICBlbnRy
eVN3aXRjaERhdGEtPmNhc2VzLmFwcGVuZChvbGRSb290KTsKKworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG9sZFJvb3QtPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIG9sZFJvb3QtPnByZWRlY2Vzc29ycy5hcHBlbmQobmV3Um9vdCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAob2xkUm9vdC0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCEhZW50cnlwb2ludEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5hZGQoZW50cnlwb2lu
dEluZGV4LCBvbGRSb290LT5ieXRlY29kZUJlZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG9sZFJvb3QtPmF0KDApLT5vcmlnaW47
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgMCwgU3BlY05vbmUsIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzLCBvcmln
aW4sIE9wSW5mbyhlbnRyeXBvaW50SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgRXhpdE9L
LCBvcmlnaW4pOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUob2xkUm9v
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dp
dGNoRGF0YS0+Y2FzZXNbMF0gPT0gbV9ncmFwaC5ibG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFz
c3VtZSB0aGUgbm9ybWFsIGNhbGwgZW50cnlwb2ludCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUg
bGlzdC4KKworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9n
cmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKworICAgICAgICAgICAgY29uc3QgYm9vbCBleGl0T0sg
PSBmYWxzZTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29kZU9yaWdpbigwKSwg
Q29kZU9yaWdpbigwKSwgZXhpdE9LIH07CisgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2Rl
KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBFbnRyeVN3aXRjaCwgb3JpZ2lu
LCBPcEluZm8oZW50cnlTd2l0Y2hEYXRhKSk7CisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRy
eXBvaW50cy5jbGVhcigpOworICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmFwcGVu
ZChuZXdSb290KTsKKworICAgICAgICAgICAgYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUyBwcmV2ZW50IGNyZWF0aW5nIHRoaXMgdHdpY2UK
KyAgICAgICAgbV9jYWxjdWxhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTU0FDYWxjdWxhdG9yPiht
X2dyYXBoKTsKKwogICAgICAgICBtX2dyYXBoLmVuc3VyZVNTQURvbWluYXRvcnMoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC02Nyw3ICsxMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
c3NhVmFyaWFibGUgPSBtX2NhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci0+bmV3VmFy
aWFibGUoKTsKICAgICAgICAgICAgIEFTU0VSVChzc2FWYXJpYWJsZS0+aW5kZXgoKSA9PSBtX3Zh
cmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVGb3JTU0FJ
bmRleC5hcHBlbmQoJnZhcmlhYmxlKTsKICAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJp
YWJsZS5hZGQoJnZhcmlhYmxlLCBzc2FWYXJpYWJsZSk7CkBAIC0xMDMsNyArMTUyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hp
bGROb2RlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgbV9jYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3It
Pm5ld0RlZigKICAgICAgICAgICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmdl
dCh2YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xMTIsNyArMTYxLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gRGVj
aWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlIFBoaSdz
IGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCiAgICAgICAgIC8vIHlldC4gV2Ugd2lsbCBsYXRlciBr
bm93IHdoZXJlIHRvIGluc2VydCBiYXNlZCBvbiB3aGVyZSBTU0FDYWxjdWxhdG9yIHRlbGxzIHVz
IHRvLgotICAgICAgICBtX2NhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgIG1fY2FsY3Vs
YXRvci0+Y29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUlu
ZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKQEAgLTE2Nyw3ICsy
MTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAiLCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIG1fdmFyaWFi
bGVGb3JTU0FJbmRleFtpXSksICJcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBtX2NhbGN1bGF0b3IsICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsICptX2NhbGN1bGF0b3Is
ICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBEbyB0aGUgYnVsayBvZiB0
aGUgU1NBIGNvbnZlcnNpb24uIEZvciBlYWNoIGJsb2NrLCB0aGlzIHRyYWNrcyB0aGUgb3BlcmFu
ZC0+Tm9kZQpAQCAtMjIwLDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxvY2ss
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxl
LmdldCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiog
ZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9jYWxjdWxh
dG9yLT5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWRlZikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJl
IHJlcXVpcmVkIHRvIGluc2VydCBhIFBoaSwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcmVhY2hpbmcg
ZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBoZWFkLgpAQCAtMjQ2LDcgKzI5NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIHZhbHVlRm9yT3BlcmFuZCB3aXRoIHRob3NlIFBo
aXMuIEZvciBQaGlzIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMgdGhhdCBhcmUgbm90CiAgICAg
ICAgICAgICAvLyBmbHVzaGVkLCB3ZSBhbHNvIGluc2VydCBhIE1vdkhpbnQuCiAgICAgICAgICAg
ICBzaXplX3QgcGhpSW5zZXJ0aW9uUG9pbnQgPSAwOwotICAgICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7
CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxh
dG9yLT5waGlzRm9yQmxvY2soYmxvY2spKSB7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxl
KCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKQEAgLTM0
Niw3ICszOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25Pcmln
aW4gPSB0ZXJtaW5hbC5ub2RlLT5vcmlnaW47CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTsp
IHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5z
dWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJs
b2NrKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gcGhpRGVmLT52
YXJpYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKQEAgLTM4
MywyMyArNDMyLDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1h
a2VfdW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogCi0gICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRzIGluIERGRyBTU0E6Ci0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3Vt
ZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50Rm9ybWF0cy5yZXNpemUoYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotCi0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAgICAgICAgIGFyZ3VtZW50
c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMg
Zm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IG9sZFJvb3QgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgQXJndW1lbnRzVmVjdG9yJiBhcmd1
bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQob2xkUm9vdCktPnZh
bHVlOworICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7Cisg
ICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVu
dHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9hcmd1bWVu
dE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnVuY2hlY2tlZEFwcGVu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1l
bnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSA9IFdU
Rk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBt
X2dyYXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtNDExLDcg
KzQ1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU1NBQ2FsY3VsYXRvciBt
X2NhbGN1bGF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQUNhbGN1bGF0b3I+IG1fY2FsY3Vs
YXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAgSGFzaE1hcDxWYXJp
YWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fc3NhVmFyaWFibGVG
b3JWYXJpYWJsZTsKICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9hcmd1bWVudE1hcHBpbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJh
bmNoOgogICAgIGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBS
ZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpAQCAt
Mzk4LDYgKzM5OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOgogICAgIGNhc2UgQXRv
bWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NDMsNyArNTY0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVn
IHRhZ0dQUiA9IHRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYXlsb2Fk
LmdwcigpOwogCi0gICAgICAgIEpTVmFsdWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihtX2ppdC5qaXRDb2RlKCktPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlb
bm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCldOworICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVp
bnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JF
bnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CiAg
ICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBH
UFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIs
IFRhZ09mZnNldCksIHRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3ModGVtcEdQUiwgUGF5bG9hZE9mZnNldCksIHBheWxvYWRHUFIpOwpAQCAtNTY5Niw2
ICs1Njk2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBJZGVudGl0
eVdpdGhQcm9maWxlOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6Cisg
ICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTk5LDcgKzU5
OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDogewotICAgICAgICBKU1ZhbHVl
KiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jYXRj
aE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgp
XTsKKyAgICAgICAgSlNWYWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1f
aml0LmppdENvZGUoKS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlb
bm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCldOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICBtX2pp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdHIpLCB0ZW1wR1BSKTsKQEAgLTYx
MDYsNiArNjEwNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAg
IGNhc2UgRW50cnlTd2l0Y2g6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50
czoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBFeHRyYWN0T1NS
RW50cnlMb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzMSw2ICsx
OTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogICAgIH0K
IAogICAgIG1faml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBvaW50cygpOworICAgIG1f
aml0LmppdENvZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cygpOwogCiAgICAg
QVNTRVJUKG9zckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIx
MjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgdGVybWluYWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAKICAgICAgICAgVkFM
SURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmlzRW50cnlwb2ludChtX2dyYXBoLmJs
b2NrKDApKSk7CisgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5i
bG9jaygwKSA9PSBtX2dyYXBoLm1fZW50cnlwb2ludHNbMF0pOwogCiAgICAgICAgIC8vIFZhbGlk
YXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2lu
dHMgYXJlIGRlYWQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3Jh
cGgubV9lbnRyeXBvaW50cykgewpAQCAtNTQ5LDYgKzU1MCw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAgICAgICAgIGNhc2UgRW50
cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhInVuZXhwZWN0ZWQg
bm9kZSB0eXBlIGluIENQUyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CkBAIC02MzksNiArNjQyLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIHRoaW5ncyBoZXJlLgogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNDcxCiAgICAg
ICAgIAorICAgICAgICBWQUxJREFURSgoKSwgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9
PSAxKTsKKyAgICAgICAgVkFMSURBVEUoKCksIG1fZ3JhcGgubV9lbnRyeXBvaW50c1swXSA9PSBt
X2dyYXBoLmJsb2NrKDApKTsKKwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
ICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC03NDAsNiArNzQ2LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSA9PSBtX2dyYXBoLm1f
bnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+ZW50cnlwb2ludEluZGV4KCkgPCBtX2dyYXBo
Lm1fbnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKQEAgLTc4MCw2ICs3OTQsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA8
IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKKyAgICB2
b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KCkgeyB9CisKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBkYXRhTG9nRigiQCV1Iiwg
bm9kZS0+aW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEs
NyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQ
aGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6Cisg
ICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNhc2Ug
U2tpcFNjb3BlOgogICAgIGNhc2UgR2V0R2xvYmFsT2JqZWN0OgpAQCAtMjQ1LDYgKzI0Niw3IEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgog
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNl
IFN3aXRjaDoKICAgICBjYXNlIFR5cGVPZjoKICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC0zMDAsNiAr
MzAyLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBBdG9taWNzSXNM
b2NrRnJlZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2
ICsxNDIsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAg
ICAgIH0pOwogCiAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKwogICAgIGlmIChzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmRpZEZh
aWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7
CiAgICAgICAgIHJldHVybjsKQEAgLTE1Miw5ICsxNTMsMTggQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBiaXR3aXNl
X2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnByb2Mt
PmVudHJ5cG9pbnRMYWJlbCgwKSkpOwogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVCM0J5
cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKKyAgICBmb3IgKGF1
dG8gcGFpciA6IHN0YXRlLmdyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zm
c2V0KSB7CisgICAgICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVPZmZzZXQgPSBwYWlyLnZhbHVl
OworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAg
VmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHMgPSBzdGF0ZS5ncmFwaC5tX2FyZ3Vt
ZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KAorICAgICAgICAgICAgY2F0Y2hCeXRlY29kZU9mZnNl
dCwgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnBy
b2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOworICAgIH0KKyAgICBzdGF0ZS5qaXRDb2RlLT5j
b21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisKICAgICBpZiAoQjM6OkFpcjo6RGlz
YXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2RlKCkuZGlzYXNzZW1ibGVy
KCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDIyMTI2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNp
bmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKICNp
bmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExPU1JFeGl0LmgiCiAjaW5j
bHVkZSAiSklUQ29kZS5oIgpAQCAtMzksMTEgKzQwLDE5IEBAIGNsYXNzIFRyYWNrZWRSZWZlcmVu
Y2VzOwogCiBuYW1lc3BhY2UgRlRMIHsKIAorc3RydWN0IENhdGNoT1NSRW50cnkgeworICAgIHZv
aWQqIG1hY2hpbmVDb2RlQWRkcmVzczsKKyAgICBWZWN0b3I8REZHOjpGbHVzaEZvcm1hdD4gYXJn
dW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVPZmZzZXQ7Cit9OworCiBj
bGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklUQ29kZSB7CiBwdWJsaWM6CiAgICAgSklUQ29k
ZSgpOwogICAgIH5KSVRDb2RlKCk7CiAKKyAgICAvLyBPT1BTOiBhZGQgaGVscGVycyBmb3IgYWRk
aW5nIGFuZCBsb29raW5nIHVwIGNhdGNoIG9zciBlbnRyeXMuCisKICAgICBDb2RlUHRyIGFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkKiBleGVjdXRhYmxl
QWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRlOwogICAgIHZvaWQqIGRhdGFB
ZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CkBAIC03Miw2ICs4MSw3IEBA
IHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICBT
ZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNjcmlwdG9yczsK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7
CisgICAgVmVjdG9yPENhdGNoT1NSRW50cnk+IGNhdGNoT1NSRW50cnk7CiAgICAgCiBwcml2YXRl
OgogICAgIENvZGVQdHIgbV9hZGRyZXNzRm9yQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJBdG9taWNzT2JqZWN0
LmgiCkBAIC0xNDksNiArMTUwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAiXyIsIGNv
ZGVCbG9jaygpLT5oYXNoKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5hbWUgPSAi
anNCb2R5IjsKKworICAgICAgICB7CisgICAgICAgICAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2lu
dHMobV9ncmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9ncmFwaC5tX2NvZGVCbG9jazsKKworICAgICAgICAgICAgUmVmUHRyPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hh
cmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPigKKyAgICAgICAgICAg
ICAgICBbY29kZUJsb2NrXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExp
c3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
Y29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9n
cmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlzKCkpIHsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaEVudHJ5cG9pbnRJbmRleCAhPSAwKTsK
KyAgICAgICAgICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChj
YXRjaEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRy
eSkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0ZDo6
bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtlIHN1
cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4KKyAg
ICAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5jYXRjaE9TUkVudHJ5QnVm
ZmVyID0gbV9ncmFwaC5tX3ZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVlKSAq
IG51bWJlck9mTGl2ZUxvY2Fscyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogCkBAIC0xNjAsNyArMTg0
LDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBh
bGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5j
eSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBtX291dC5uZXdCbG9jaygp
OwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMTc0LDggKzE5OSw4IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFueSBi
b2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBjb2Rl
LgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwotICAgICAgICBtX291
dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zKTsK
KyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIHByb2xvZ3VlKTsKICAg
ICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1
cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CkBAIC0y
NTcsNTEgKzI4Miw3NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICBMQmFz
aWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKTsK
LSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5j
bGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KLSAgICAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fbm9kZSA9IG51
bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2Rl
T3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2Vu
dHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIG1f
b3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxsb3dzIHVzIHRv
IGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxvYWQgb2YgYXJn
dW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3QgcHV0IGluCi0g
ICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNu
J3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQuIFRoaXMKLSAgICAgICAgICAgICAgICAvLyBz
aG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMu
YWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKLSAgICAgICAgICAg
IGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2Rl
LCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVu
dCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE5v
ZGUqIHJvb3RFbnRyeVN3aXRjaCA9IG1fZ3JhcGguYmxvY2soMCktPnRlcm1pbmFsKCk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlTd2l0Y2goKSk7
CisgICAgICAgICAgICAvL0VudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gcm9vdEVu
dHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAgICAgIFZlY3RvcjxMQmFzaWNC
bG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAg
c3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnM7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBhZGQgZXhwbGFpbmVyIGhlcmUuCisg
ICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9IGZpcnN0REZHQmFzaWNCbG9jazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7Cisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRp
b25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOworCisgICAgICAgICAgICBtX25vZGUgPSBudWxscHRy
OworICAgICAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVP
cmlnaW4oMCksIHRydWUpOworCisgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOworICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KKyAgICAgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9hdXRvJiBhcmd1bWVu
dHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygw
KSktPnZhbHVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGdldCBub24g
bnVsbHB0ciBub2RlIGhlcmUuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7
CisKKyAgICAgICAgICAgICAgICAvL05vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CisgICAgICAg
ICAgICAgICAgLy9tX291dC5zZXRPcmlnaW4obm9kZSk7CisKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9h
ZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIE9PUFM6IGNhbiB3ZSBldmVuIGRvIHRoaXMgYW55bW9yZSBnaXZlbiBFbnRyeVN3aXRj
aD8KKyAgICAgICAgICAgICAgICAvL2lmIChub2RlKSB7CisgICAgICAgICAgICAgICAgLy8gICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIC8vICAgIAorICAgICAgICAgICAg
ICAgIC8vICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJ
dCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vICAgIC8vIHBy
aW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2Nh
bCB0aGF0IGdvdCBwdXQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAvLyBwbGFjZSBvZiB0aGUg
b3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4g
VGhpcworICAgICAgICAgICAgICAgIC8vICAgIC8vIHNob3VsZCBob2xkIHRydWUuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVz
LmFkZChub2RlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbMF1b
aV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNO
b3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1Zh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1h
dCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQuanVtcChmaXJzdERGR0Jh
c2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RERkdCYXNpY0Js
b2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0aW9ucywgZmly
c3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2Vw
dGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKQEAgLTUxMCw2ICs1NjAsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAgICAg
ICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKKyAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0
Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0U3RhY2s6
CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2soKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTM4LDYgKzk5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZHOjpTd2l0Y2g6CiAgICAg
ICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVudHJ5U3dpdGNoKCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVybjoKICAgICAgICAgICAg
IGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0OCw2ICsxMjA0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZh
bHVlOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgY2FzZSBJbml0aWFsaXplRW50
cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2Rl
IGluIEZUTCBiYWNrZW5kIik7CkBAIC0xNTE4LDYgKzE1NzUsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIo
KS0+ZGF0YUJ1ZmZlcigpKTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQu
YWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOwog
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKKyAgICB7CisgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZm
ZXIoKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1
ZmZlciArIG1fbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCkpKSk7CisgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CkBAIC03Nzg3LDYgKzc4NTAsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
c3dpdGNoIGtpbmQiKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnRyeVN3aXRjaCgpCisg
ICAgeworICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnM7CisgICAgICAgIGZv
ciAoREZHOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX25vZGUtPmVudHJ5U3dpdGNoRGF0YSgp
LT5jYXNlcykKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKGxvd0Jsb2NrKHN1Y2Nlc3Nv
cikpOworICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNzb3JzKTsKKyAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKICAgICB7CkBAIC0xNDYzOCw3ICsxNDcwOSw2IEBA
IHByaXZhdGU6CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAg
IAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVF
eGNlcHRpb25zOwogICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1f
YmxvY2tzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjEsNiArODYxLDE2IEBAIHZvaWQgT3V0cHV0Ojph
ZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGkKICAgICAgICAgdmFsdWUudmFsdWUoKS0+YXM8QjM6
OlVwc2lsb25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7CiB9CiAKK3ZvaWQgT3V0cHV0OjplbnRyeVN3
aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiBjYXNlcykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYXNlcy5zaXplKCkgPT0gbV9wcm9jLm51bUVudHJ5cG9pbnRzKCkpOworICAgIG1fYmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3JpZ2luKCkpOworICAg
IGZvciAoTEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykgeworICAgICAgICAvLyBPT1BTOiBmcmVx
dWVuY2llcyBoZXJlCisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVk
QmxvY2soYmxvY2spKTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAog
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDggQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJh
c2ljQmxvY2s+Jik7CisKICAgICB2b2lkIHJldChMVmFsdWUpOwogCiAgICAgdm9pZCB1bnJlYWNo
YWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAi
RXJyb3JIYW5kbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkZ1enouaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgogI2luY2x1ZGUg
IkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC0xNTMzLDEwICsxNTM0LDE0IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CiAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0g
ZXhlYy0+Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxh
Y2VtZW50LT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hP
U1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAg
IHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklU
Q29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1p
emVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSog
ZXhlYywgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKQEAgLTE1NDYsOCArMTU1MSwxNCBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVw
bGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJl
cGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorCisgICAgc3dpdGNoIChv
cHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdK
SVQ6CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNl
bWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KIAogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZUluZGV4KTsKICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4o
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4ICsgM10udS5wb2ludGVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319231</attachid>
            <date>2017-08-28 19:19:31 -0700</date>
            <delta_ts>2017-08-29 17:12:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>75762</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxT
cGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUg
YW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiAr
MTY4LDE3IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9p
bnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50cnlwb2lu
dHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRM
aXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTI2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNl
dDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBjbGFzcyBE
aXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdhc21Cb3Vu
ZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7CiAKK3R5
cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENvZGUm
KTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQcm9sb2d1
ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhl
IGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCiAv
LyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRp
bmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2YgQWlyLgpA
QCAtMTY1LDcgKzE2OSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsgfQogICAg
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlwb2ludChC
YXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW50
cnlwb2ludEluZGV4KEJhc2ljQmxvY2sqKSBjb25zdDsKKyAgICB2b2lkIHNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgsIFJlZlB0cjxQcm9sb2d1ZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogV2UgYWxsb3cgdGhpcyB0
byBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgd2Ugc2V0IG1fZW50cnlwb2ludHMganVzdCBmb3IgY29u
dmVuaWVuY2UgdG8gdXNlcnMgb2YgdGhpcyBBUEkuCisgICAgICAgIG1fZW50cnlwb2ludEluZGV4
VG9HZW5lcmF0b3Iuc2V0KGVudHJ5cG9pbnRJbmRleCwgZ2VuZXJhdG9yKTsKKyAgICB9CisgICAg
UmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQo
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW50cnlw
b2ludEluZGV4VG9HZW5lcmF0b3IuZ2V0KGVudHJ5cG9pbnRJbmRleCk7CisgICAgfQorCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGJ5IGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CiAgICAgdm9pZCBzZXRFbnRyeXBvaW50cyhWZWN0b3ImJiB2ZWN0b3IpCkBA
IC0zNTMsNiArMzY3LDcgQEAgcHJpdmF0ZToKICAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5
cG9pbnRzOyAvLyBUaGlzIGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4K
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9lbnRyeXBvaW50SW5k
ZXhUb0dlbmVyYXRvcjsKICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yPiBtX3dh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwyMSArMjA4LDI4IEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCiAKLSAgICAgICAg
aWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZW50cnlwb2ludEluZGV4ID0gY29kZS5lbnRyeXBvaW50SW5kZXgoYmxvY2sp
KSB7CisgICAgICAgICAgICBBU1NFUlQoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKKwogICAg
ICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZXIt
PnN0YXJ0RW50cnlwb2ludChqaXQpOyAKIAotICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7Ci0gICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IGlzQVJNNjQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBw
cm9sb2d1ZUdlbmVyYXRvciA9IGNvZGUucHJvbG9ndWVHZW5lcmF0b3JGb3JFbnRyeXBvaW50KCpl
bnRyeXBvaW50SW5kZXgpKQorICAgICAgICAgICAgICAgIHByb2xvZ3VlR2VuZXJhdG9yLT5ydW4o
aml0LCBjb2RlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIGlzQVJNNjQoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKIAogICAgICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKICAgICAgICAgICAgICAg
ICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCi0gICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBBU1NFUlQoIWNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYwLDcgKzI2MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgLy8gREZHIGV4ZWN1dGlvbi4KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAg
ICAKKwogICAgIGNhc2UgS2lsbFN0YWNrOiB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIGhp
bnQgdGVsbGluZyB1cyB0aGF0IHRoZSBPU1Igc3RhdGUgb2YgdGhlIGxvY2FsIGlzIG5vIGxvbmdl
ciBpbnNpZGUgdGhlCiAgICAgICAgIC8vIGZsdXNoZWQgZGF0YS4KQEAgLTI3Myw3ICsyNzMsMzMg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBu
b24tY2xlYXIgdmFsdWUuCiAgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAK
KworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9h
cmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVu
dCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxl
cygpLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRGb3Jt
YXRzW2FyZ3VtZW50XSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAg
ICAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAg
dmFsdWUuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5tYWtlQnl0ZWNvZGVU
b3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZv
ciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFy
Z3Mgc2hvdWxkIGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9l
cywgaXQgc2hvdWxkIHR1cm4KQEAgLTE4NTMsNiArMTg3OSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFJldHVybjoKICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjIxMjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMSw4ICsyMjEsNiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCi0gICAgLy8gVGhl
c2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIAogICAgIHN0cnVj
dCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjM0LDkgKzUyMzQsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U3VwcG9ydCBjYXRjaCBpbiB0aGUgRlRMLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgewogICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIApAQCAtNjQzNSw4ICs2NDMz
LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIG1fZ3JhcGguZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIAot
ICAgIG1fZ3JhcGgubV9jcHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9ncmFwaCk7
Ci0gICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsNyBAQCB1c2lu
ZyBTU0FDRkcgPSBDRkc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgQ1BTQ0ZHPjo6dmFsdWU+Ojp0eXBlPgog
Q1BTQ0ZHJiBzZWxlY3RDRkcoR3JhcGgmIGdyYXBoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGdy
YXBoLm1fY3BzQ0ZHKTsKLSAgICByZXR1cm4gKmdyYXBoLm1fY3BzQ0ZHOworICAgIHJldHVybiBn
cmFwaC5lbnN1cmVDUFNDRkcoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIFNTQUNGRz46OnZhbHVl
Pjo6dHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFRo
cm93OgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgpAQCAt
NDM4LDYgKzQzOSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAg
IGNhc2UgUHV0SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJv
b2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICAvLyBUaGVyZSBhcmUg
Y2VydGFpbiBub2RlcyB3aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcg
dG8gZG8gd2l0aCB3aGF0IHRoZXkKICAgICAvLyBub3JtYWxseSBjbG9iYmVyLgogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFB1dEhp
bnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJ
KHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBDb21tb25EYXRh
OjpzaHJpbmtUb0ZpdCgpCiAgICAgY29kZU9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKICAgICB3ZWFr
UmVmZXJlbmNlcy5zaHJpbmtUb0ZpdCgpOwogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7
CisgICAgY2F0Y2hFbnRyeXBvaW50cy5zaHJpbmtUb0ZpdCgpOwogfQogCiBzdGF0aWMgU3RhdGlj
TG9jayBwY0NvZGVCbG9ja01hcExvY2s7CkBAIC0xOTMsNiArMTk0LDE3IEBAIHZvaWQgQ29tbW9u
RGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnMKICAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCku
dmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAordm9pZCBDb21tb25E
YXRhOjpmaW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKQoreworICAgIHN0ZDo6c29ydChjYXRjaEVu
dHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNoRW50cnlwb2ludHMuZW5kKCksCisgICAgICAgIFtdIChj
b25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBhLCBjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBi
KSB7IHJldHVybiBhLmJ5dGVjb2RlSW5kZXggPCBiLmJ5dGVjb2RlSW5kZXg7IH0pOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgKyAxIDwgY2F0Y2hF
bnRyeXBvaW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKGNhdGNoRW50cnlwb2ludHNb
aV0uYnl0ZWNvZGVJbmRleCA8PSBjYXRjaEVudHJ5cG9pbnRzW2kgKyAxXS5ieXRlY29kZUluZGV4
KTsKKyNlbmRpZgorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBs
YWNlbWVudC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2Fs
bEZyYW1lU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21w
aWxhdGlvbi5oIgpAQCAtOTAsNiArOTEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKENvZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVh
a3BvaW50KHZvaWQqIGFkZHJlc3MpOwogCisgICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hP
U1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50cnlwb2ludHMu
c2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgW10gKGNvbnN0IENhdGNoRW50cnlw
b2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmJ5dGVjb2RlSW5kZXg7IH0pOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IHZvaWQqIG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRz
KQorICAgIHsKKyAgICAgICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBvaW50
RGF0YSB7IG1hY2hpbmVDb2RlLCAgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpLCBieXRlY29kZUlu
ZGV4IH0pOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisK
ICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQs
IHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQpOwpAQCAtMTA2LDExICsxMjEsMTMgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7CiAg
ICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOworICAg
IFZlY3RvcjxDYXRjaEVudHJ5cG9pbnREYXRhPiBjYXRjaEVudHJ5cG9pbnRzOwogICAgIEJhZzxD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwogICAgIEJhZzxBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgQmFnPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2Vt
ZW50PiBqdW1wUmVwbGFjZW1lbnRzOwogICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NS
RW50cnlCdWZmZXI7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRp
b247CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsg
Ly8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2
LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0
TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBJ
bml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAg
Y2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgpAQCAtMTgzLDYgKzE4NCw3IEBAIGJvb2wg
ZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2Fz
ZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBj
YXNlIFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgY2FzZSBFbnRy
eVN3aXRjaDoKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKQEAg
LTIwMTEsNiArMjAxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9j
YWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjEy
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDYgKzM2OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5j
YXNlc1tpXS52YWx1ZSwgY29udGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgfQorICAgIGlmIChub2RlLT5pc0VudHJ5U3dpdGNoKCkpIHsKKyAgICAgICAgRW50cnlTd2l0
Y2hEYXRhKiBkYXRhID0gbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgQnJhbmNoVGFyZ2V0KGRhdGEtPmNhc2VzW2ldKSk7CisgICAgfQogICAg
IENsb2JiZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CiAgICAgYWRkUmVhZHNB
bmRXcml0ZXMoKnRoaXMsIG5vZGUsIHJlYWRzLCB3cml0ZXMpOwpAQCAtNTE1LDggKzUyMCwxMCBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50
KCJcbiIpOwogICAgIG91dC5wcmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZSht
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBG
aXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7
IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBz
dGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkK
LSAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJn
dW1lbnRGb3JtYXRzKSwgIlxuIik7CisgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2Fy
Z3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0
LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5
cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJ
bmRleF0pLCAiXG4iKTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWly
IDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJn
dW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIu
dmFsdWUpLCAiXG4iKTsKQEAgLTgyNCw2ICs4MzEsNyBAQCB2b2lkIEdyYXBoOjppbnZhbGlkYXRl
Q0ZHKCkKICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gbnVsbHB0cjsKICAgICBt
X2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxscHRyOwogICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVs
bHB0cjsKKyAgICBtX2Nwc0NGRyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgR3JhcGg6OmludmFsaWRh
dGVOb2RlTGl2ZW5lc3MoKQpAQCAtMTU0Myw2ICsxNTUxLDE0IEBAIHZvaWQgR3JhcGg6OmxvZ0Fz
c2VydGlvbkZhaWx1cmUoCiAgICAgbG9nREZHQXNzZXJ0aW9uRmFpbHVyZSgqdGhpcywgdG9DU3Ry
aW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiks
IGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24pOwogfQogCitDUFNDRkcmIEdyYXBoOjpl
bnN1cmVDUFNDRkcoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1f
aXNJblNTQUNvbnZlcnNpb24pOworICAgIGlmICghbV9jcHNDRkcpCisgICAgICAgIG1fY3BzQ0ZH
ID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY3BzQ0ZH
OworfQorCiBDUFNEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlQ1BTRG9taW5hdG9ycygpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NBQ29udmVyc2lvbik7
CkBAIC0xNjEwLDIxICsxNjI2LDE3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3Jh
cGg6Om1ldGgKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIGlmIChu
b2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAgICAgIFZhbHVlUHJvZmls
ZSogcmVzdWx0ID0gWyZdICgpIC0+IFZhbHVlUHJvZmlsZSogewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkuaXNB
cmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxv
Y2FsKCkudG9Bcmd1bWVudCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1hdGNoIFNldEFyZ3VtZW50IG5vZGVzIGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU4NDEKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0g
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpICE9IGFyZ3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1
bWVudCk7Ci0gICAgICAgICAgICAgICAgfSgpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgOiBtX2VudHJ5cG9pbnRUb0Fy
Z3VtZW50cy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudCBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3
ZWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTg0MQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gT09QUzog
dGhpcyBpc24ndCBxdWl0ZSBjb3JyZWN0IGZvciBjYXRjaCBzaW5jZSB3ZSB2YWx1ZSBwcm9maWxl
IHNlcGFyYXRlbHkhCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUg
PSBhcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Tm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAm
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTE5LDYgKzkx
OSw3IEBAIHB1YmxpYzoKICAgICBCYWNrd2FyZHNDRkcmIGVuc3VyZUJhY2t3YXJkc0NGRygpOwog
ICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJhY2t3YXJkc0RvbWluYXRvcnMoKTsKICAg
ICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5zdXJlQ29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXMoKTsKKyAgICBDUFNDRkcmIGVuc3VyZUNQU0NGRygpOwogCiAgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIG9ubHkgbWFrZXMgc2Vuc2UgdG8gY2FsbCBhZnRlciBieXRlY29kZSBwYXJzaW5nCiAg
ICAgLy8gYmVjYXVzZSBpdCBxdWVyaWVzIHRoZSBtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xl
YW4gd2hvc2UgdmFsdWUKQEAgLTkzOCw2ICs5MzksMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFtX2lzSW5TU0FDb252ZXJzaW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRl
biB0byB3b3JrIGR1cmluZyBTU0EgY29udmVyc2lvbi4iKTsKKworICAgICAgICBpZiAobV9mb3Jt
ID09IFNTQSkgeworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2ludHMuY29udGFpbnModGhpcy0+YmxvY2so
MCkpKTsKKyAgICAgICAgICAgIHJldHVybiBibG9jayA9PSB0aGlzLT5ibG9jaygwKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChtX2VudHJ5cG9pbnRzLnNpemUoKSA8PSA0KSB7CiAgICAgICAg
ICAgICBib29sIHJlc3VsdCA9IG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxvY2spOwogICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jb250YWlucyhi
bG9jaykpOwpAQCAtOTU0LDYgKzk2Myw4IEBAIHB1YmxpYzoKICAgICBDb2RlQmxvY2sqIG1fcHJv
ZmlsZWRCbG9jazsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPEJhc2ljQmxvY2s+LCA4PiBtX2Js
b2NrczsKKyAgICB1bnNpZ25lZCBtX251bUVudHJ5cG9pbnRzIHsgVUlOVF9NQVggfTsKKyAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1fZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OwogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbV9lbnRy
eXBvaW50czsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAKQEAgLTk5
MSw4ICsxMDAyLDggQEAgcHVibGljOgogICAgIC8vIGVmZmVjdHMuCiAgICAgSGFzaE1hcDxCYXNp
Y0Jsb2NrKiwgQXJndW1lbnRzVmVjdG9yPiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50czsKICAgICAK
LSAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVhbmluZ2xlc3MuIEluIFNTQSwgdGhpcyBpcyB0aGUg
YXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4uCi0gICAgVmVjdG9yPEZs
dXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0czsKKyAgICAvLyBJbiBDUFMsIHRoaXMgaXMgbWVh
bmluZ2xlc3MuIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3
ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQgYmxvY2suCisgICAgVmVjdG9yPFZlY3Rv
cjxGbHVzaEZvcm1hdD4+IG1fYXJndW1lbnRGb3JtYXRzOwogCiAgICAgU2VnbWVudGVkVmVjdG9y
PFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwpAQCAt
MTA0OCw2ICsxMDU5LDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1f
bWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd0luZGV4
aW5nPiBtX2luZGV4aW5nQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dNYXA8QWJzdHJh
Y3RWYWx1ZT4+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKKyAgICBCYWc8RW50cnlTd2l0Y2hEYXRh
PiBtX2VudHJ5U3dpdGNoRGF0YTsKIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RyaW5nU3Ry
dWN0dXJlOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3ltYm9sU3RydWN0dXJlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwy
OCBAQCBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzCiAgICAgICAgIHZh
bHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJh
Y3RWYWx1ZSgpIH0pOwogfQogCitzdGF0aWMgdm9pZCBzZXRBcmd1bWVudEZvcm1hdChHcmFwaCYg
Z3JhcGgsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgdmFsdWUu
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbHVzaGVk
Qm9vbGVhbjoKKyAgICAgICAgdmFsdWUuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHZhbHVlLnNldFR5cGUoZ3JhcGgs
IFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAg
ICAgICAgdmFsdWUubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIERGR19DUkFTSChncmFwaCwgbnVsbHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQg
Zm9yIGFyZ3VtZW50Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCiB2b2lkIEluUGxh
Y2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGVu
dHJ5cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKQEAgLTEwMCwxNSArMTIyLDE1IEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICBlbnRyeXBv
aW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hl
ZDsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0g
U3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChpKS5jbGVhcigpOwogCi0gICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdoZW4gc3VwcG9ydGluZyBtdWx0aXBsZSBlbnRyeXBvaW50cyBpbiB0aGUg
RlRMLCB3ZSBuZWVkIHRvIGNoYW5nZQotICAgICAgICAgICAgICAgIC8vIHdoYXQgd2UgZG8gaGVy
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgotICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV07Ci0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSAgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0OwogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRv
QXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlW2ldOwogICAgICAgICAgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7CkBA
IC0xMTYsMjYgKzEzOCwxMSBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KCkKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZW50
cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnRGb3JtYXQobV9n
cmFwaCwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLCBmb3JtYXQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAg
ICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
ICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwpAQCAtMTYzLDYg
KzE3MCw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgfQorCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3MSw2ICszNzksMTQgQEAgaW5saW5lIGJvb2wgSW5Q
bGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShi
YXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKICAgICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICBF
bnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2lj
QmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQog
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNiBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICBjb21tb24uc2hyaW5r
VG9GaXQoKTsKICAgICBvc3JFbnRyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4aXQuc2hyaW5r
VG9GaXQoKTsKLSAgICBjYXRjaEVudHJ5cG9pbnRzLnNocmlua1RvRml0KCk7CiAgICAgc3BlY3Vs
YXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnByZXBhcmVBbmRT
aHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CkBAIC0yNDMs
NyArMjQyLDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAgICBh
dXRvIGNvbXBhcmF0b3IgPSBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gYS5tX2J5dGVjb2RlSW5kZXggPCBiLm1fYnl0ZWNvZGVJbmRleDsKICAgICB9
OwotICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNoRW50cnlwb2lu
dHMuZW5kKCksIGNvbXBhcmF0b3IpOwogICAgIHN0ZDo6c29ydChvc3JFbnRyeS5iZWdpbigpLCBv
c3JFbnRyeS5lbmQoKSwgY29tcGFyYXRvcik7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0y
NTEsNyArMjQ5LDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBvc3JWZWN0b3Iuc2l6ZSgpOyArK2kp
CiAgICAgICAgICAgICBBU1NFUlQob3NyVmVjdG9yW2ldLm1fYnl0ZWNvZGVJbmRleCA8PSBvc3JW
ZWN0b3JbaSArIDFdLm1fYnl0ZWNvZGVJbmRleCk7CiAgICAgfTsKLSAgICB2ZXJpZnlJc1NvcnRl
ZChjYXRjaEVudHJ5cG9pbnRzKTsKICAgICB2ZXJpZnlJc1NvcnRlZChvc3JFbnRyeSk7CiAjZW5k
aWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lv
biAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDggQEAgcHVibGljOgogICAgICAgICAgICAgZ2V0T1NS
RW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCi0gICAgQ2F0Y2hFbnRyeXBvaW50RGF0
YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2lu
dERhdGEsIHVuc2lnbmVkPigKLSAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50
cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgW10gKGNvbnN0IENh
dGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm1fYnl0ZWNvZGVJbmRleDsg
fSk7Ci0gICAgfQotCiAgICAgdm9pZCBmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7CiAKLSAgICB2
b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBtYWNoaW5lQ29kZU9mZnNldCwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0
cykKLSAgICB7Ci0gICAgICAgIGNhdGNoRW50cnlwb2ludHMuYXBwZW5kKENhdGNoRW50cnlwb2lu
dERhdGEgeyBieXRlY29kZUluZGV4LCBtYWNoaW5lQ29kZU9mZnNldCwgV1RGTW92ZShhcmd1bWVu
dEZvcm1hdHMpIH0pOwotICAgIH0KLSAgICAKICAgICB1bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNv
bnN0IE9TUkV4aXQmIGV4aXQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBvc3JF
eGl0LnNpemUoKTsKQEAgLTE0NiwxMiArMTM0LDEwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAg
Q29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBvc3JFbnRy
eTsKLSAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50RGF0YT4gY2F0Y2hFbnRyeXBvaW50czsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxE
Rkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgREZHOjpW
YXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmll
ZEdyYXBoIG1pbmlmaWVkREZHOwotICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZm
ZXI7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICB1aW50OF90IG5ldmVyRXhlY3V0ZWRFbnRy
eSB7IDEgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNp
Y0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMg
cmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5hcHBlbmRDYXRjaEVudHJ5
cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNldE9mKGJsb2Nr
SGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2RlLT5jb21tb24u
YXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGJsb2NrSGVhZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1
bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFz
aWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpt
YWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JD
YXRjaE9TUkVudHJ5KSB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0
ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtl
IHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4K
LSAgICAgICAgbV9qaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKKyAgICAg
ICAgbV9qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCktPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJl
dmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwo
R3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CiAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRy
eXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBGbHVzaDoKICAg
ICBjYXNlIFBoYW50b206CkBAIC03OCw2ICs3OSw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdy
YXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgogICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNh
c2UgQnJhbmNoOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBEb3VibGVSZXA6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIxMjYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
Myw2ICsyMDMsMTEgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRh
YmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgRW50cnlTd2l0Y2hEYXRh
KCkgPSBkZWZhdWx0OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gY2FzZXM7Cit9OworCiBzdHJ1
Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7CiB9OwpAQCAt
MTI5NywxMiArMTMwMiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcCgpID09IFN3aXRj
aDsKICAgICB9CiAKKyAgICBib29sIGlzRW50cnlTd2l0Y2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gRW50cnlTd2l0Y2g7CisgICAgfQorCiAgICAgYm9vbCBpc1Rlcm1p
bmFsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEp1bXA6
CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgY2Fz
ZSBFbnRyeVN3aXRjaDoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGFpbENh
bGw6CiAgICAgICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkBAIC0xMzY0LDYgKzEzNzUsMTIgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoaXNTd2l0Y2goKSk7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxTd2l0Y2hEYXRhKj4oKTsKICAgICB9CisKKyAgICBFbnRyeVN3aXRjaERhdGEqIGVu
dHJ5U3dpdGNoRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbnRyeVN3aXRjaCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEVudHJ5U3dpdGNoRGF0YSo+KCk7CisgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQogICAgIHsKQEAgLTEzNzQsNiArMTM5
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICBjYXNlIFN3aXRj
aDoKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSArIDE7Cisg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hE
YXRhKCktPmNhc2VzLnNpemUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9CkBAIC0xMzg2LDcgKzE0MDUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXNbaW5kZXhdLnRhcmdldC5ibG9jazsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ID09IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoLmJsb2Nr
OwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNFbnRyeVN3aXRjaCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF07CiAKICAgICAgICAg
c3dpdGNoIChpbmRleCkgewogICAgICAgICBjYXNlIDA6CkBAIC0yNTc0LDYgKzI1OTQsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8QnVja2V0T3duZXJUeXBlPigpOwog
ICAgIH0KIAorICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCgpCisgICAgeworICAgICAgICBB
U1NFUlQob3AoKSA9PSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cyk7CisgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczx1bnNpZ25lZD4oKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGls
ZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIyMTI2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQnJhbmNoLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oRW50cnlTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhS
ZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oRGlyZWN0VGFpbENhbGwsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtNDQxLDYgKzQ0MiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogTm9kZXMgZm9yIERPTSBKSVQg
Ki9cCiAgICAgbWFjcm8oQ2FsbERPTUdldHRlciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENhbGxET00sIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICAvKiBNZXRhZGF0YSBub2RlIHRoYXQgaW5pdGlhbGl6ZXMgYXJndW1lbnQgc3Rh
dGUgZm9yIGEgcGFydGljdWxhciBlbnRyeXBvaW50IGluIHRoZSBwcm9ncmFtLiBcCisgICAgICog
Q3VycmVudGx5LCB3ZSBvbmx5IHVzZSB0aGlzIGZvciB0aGUgYmxvY2tzIGFuIEVudHJ5U3dpdGNo
IGJyYW5jaGVzIHRvIGF0IHRoZSByb290IG9mIFwKKyAgICAgKiB0aGUgcHJvZ3JhbS4gIFwKKyAg
ICAgKi8gXAorICAgIG1hY3JvKEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzLCBOb2RlTXVz
dEdlbmVyYXRlKQogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNy
ZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJz
ZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJ
ZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEyNjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuZmlsbChBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAg
ICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1c2hlZEF0KAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxp
dHkoZmx1c2hlZEF0KTsKLSAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGguYmxvY2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5Ojp1
bmF2YWlsYWJsZSgpOwogCiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmlj
aWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAg
CkBAIC04NiwxMCArODMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFp
bGFiaWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLnBydW5lQnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1
Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
OTksNiArMjAwLDE2IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUK
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAg
ICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CisgICAgICAgIHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOworICAgICAgICBjb25z
dCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1l
bnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKKyAgICAgICAgICAg
IEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50
XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9IEF2YWlsYWJpbGl0eShm
bHVzaGVkQXQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjIxMjYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCwxNiArMzM4LDE3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKIH0KIAogdm9pZCogcHJlcGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Cit7IAorICAgIC8vIE9PUFMKKyAgICAvL2lmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RG
RygpKQorICAgIC8vICAgIHJldHVybiBudWxscHRyOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
LSAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpGVExKSVQpOwogCi0gICAgREZHOjpDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5
cG9pbnQgPSBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CisgICAgQ29tbW9uRGF0YSogZGZnQ29tbW9uID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvbW1vbik7CisgICAgREZH
OjpDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5cG9pbnQgPSBkZmdDb21tb24tPmNhdGNo
T1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBpZiAoIWNh
dGNoRW50cnlwb2ludCkgewogICAgICAgICAvLyBUaGlzIGNhbiBiZSBudWxsIHVuZGVyIHNvbWUg
Y2lyY3Vtc3RhbmNlcy4gVGhlIG1vc3QgY29tbW9uIGlzIHRoYXQgd2UgZGlkbid0CiAgICAgICAg
IC8vIGNvbXBpbGUgdGhpcyBvcF9jYXRjaCBhcyBhbiBlbnRyeXBvaW50IHNpbmNlIGl0IGhhZCBu
ZXZlciBleGVjdXRlZCB3aGVuIHN0YXJ0aW5nCkBAIC0zNTYsOSArMzU3LDkgQEAgdm9pZCogcHJl
cGFyZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleAogICAgIH0KIAogICAgIC8vIFdlJ3JlIG9u
bHkgYWxsb3dlZCB0byBPU1IgZW50ZXIgaWYgd2UndmUgcHJvdmVuIHdlIGhhdmUgY29tcGF0aWJs
ZSBhcmd1bWVudCB0eXBlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBjYXRjaEVudHJ5cG9pbnQtPm1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVu
dCkgeworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50
cnlwb2ludC0+YXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkUih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCkpLmpzVmFsdWUoKTsKLSAgICAgICAgc3dpdGNoIChjYXRjaEVudHJ5cG9pbnQt
Pm1fYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgeworICAgICAgICBzd2l0Y2ggKGNhdGNoRW50
cnlwb2ludC0+YXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgewogICAgICAgICBjYXNlIERGRzo6
Rmx1c2hlZEludDMyOgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zODIsMTMgKzM4MywxMyBAQCB2b2lkKiBwcmVw
YXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lz
dGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7CisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9y
Q2hlY2sgPSBkZmdDb21tb24tPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4
aXQoKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4ZWMt
PnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrKS5v
ZmZzZXQoKV0pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoSW50ZXJw
cmV0ZXI6OmdldE9wY29kZUlEKGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVtleGVj
LT5ieXRlY29kZU9mZnNldCgpXS51Lm9wY29kZSkgPT0gb3BfY2F0Y2gpOwogICAgIFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIqPihleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbZXhlYy0+
Ynl0ZWNvZGVPZmZzZXQoKSArIDNdLnUucG9pbnRlcik7Ci0gICAgSlNWYWx1ZSogZGF0YUJ1ZmZl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZm
ZXItPmRhdGFCdWZmZXIoKSk7CisgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNMb2NhbCgpKQpAQCAtMzk3LDkgKzM5OCw4IEBA
IHZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgKytpbmRl
eDsKICAgICB9KTsKIAotICAgIGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXItPnNldEFjdGl2
ZUxlbmd0aChzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCk7Ci0KLSAgICByZXR1cm4gaml0Q29kZS0+
ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChjYXRjaEVudHJ5cG9pbnQtPm1fbWFjaGluZUNvZGVP
ZmZzZXQpOworICAgIGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVu
Z3RoKHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KTsKKyAgICByZXR1cm4gY2F0Y2hFbnRyeXBvaW50
LT5tYWNoaW5lQ29kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMjIxMjYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSwxMSArNzEsMTEgQEAgaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2Rl
SQogfQogCiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7Ci0gICAgdW5zaWduZWQgbV9ieXRl
Y29kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CiAgICAgLy8gV2Ug
dXNlIHRoaXMgd2hlbiBkb2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1
bWVudHMKICAgICAvLyBhcmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0
IGEgY2F0Y2ggYmxvY2suCi0gICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0
czsKKyAgICB2b2lkKiBtYWNoaW5lQ29kZTsKKyAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3Vt
ZW50Rm9ybWF0czsKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKIAogLy8gUmV0dXJu
cyBhIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlciB0aGF0IHRoZSBPU1IgZW50cnkgdGh1bmsgd2ls
bCByZWNvZ25pemUgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIx
MjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY2xlYXIoKTsKICAgICAgICAg
bV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5hZGQobmV3Um9vdCwgbmV3QXJndW1lbnRz
KTsKIAotICAgICAgICBtX2dyYXBoLm1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+
KG1fZ3JhcGgpOwotCisgICAgICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygpOwogICAgICAgICBt
X2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hh
YmxlQmxvY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEy
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBj
YXNlIFVwc2lsb246CiAgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50
aWwgd2UgZ28gaW50byBTU0EuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTE1NSw2ICsxMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgICAgICBjYXNlIE51a2VT
dHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CisgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9p
bnRBcmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBh
IHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCYXNpY0Js
b2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgpAQCAtNDQsNyArNDUsNiBAQCBjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKLSAgICAgICAgLCBt
X2NhbGN1bGF0b3IoZ3JhcGgpCiAgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAg
ewogICAgIH0KQEAgLTU1LDYgKzU1LDU1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgbV9ncmFwaC5jbGVhckNQU0NGR0Rh
dGEoKTsKKworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBCYXNpY0Jsb2NrKiwgV1RGOjpJbnRI
YXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25l
ZD4+IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2s7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9ncmFwaC5tX251bUVudHJ5cG9pbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNp
emUoKTsKKworICAgICAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQo
bV9ncmFwaCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gYmxvY2tJbnNlcnRp
b25TZXQuaW5zZXJ0KDAsIDEuMGYpOworCisgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVu
dHJ5U3dpdGNoRGF0YSA9IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEuYWRkKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8
IG1fZ3JhcGgubV9udW1FbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBvbGRSb290ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzW2VudHJ5
cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNC
bG9jay5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290KTsKKyAgICAgICAgICAgICAgICBlbnRy
eVN3aXRjaERhdGEtPmNhc2VzLmFwcGVuZChvbGRSb290KTsKKworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG9sZFJvb3QtPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIG9sZFJvb3QtPnByZWRlY2Vzc29ycy5hcHBlbmQobmV3Um9vdCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAob2xkUm9vdC0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCEhZW50cnlwb2ludEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5hZGQoZW50cnlwb2lu
dEluZGV4LCBvbGRSb290LT5ieXRlY29kZUJlZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG9sZFJvb3QtPmF0KDApLT5vcmlnaW47
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgMCwgU3BlY05vbmUsIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzLCBvcmln
aW4sIE9wSW5mbyhlbnRyeXBvaW50SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgRXhpdE9L
LCBvcmlnaW4pOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUob2xkUm9v
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dp
dGNoRGF0YS0+Y2FzZXNbMF0gPT0gbV9ncmFwaC5ibG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFz
c3VtZSB0aGUgbm9ybWFsIGNhbGwgZW50cnlwb2ludCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUg
bGlzdC4KKworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9n
cmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKworICAgICAgICAgICAgY29uc3QgYm9vbCBleGl0T0sg
PSBmYWxzZTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29kZU9yaWdpbigwKSwg
Q29kZU9yaWdpbigwKSwgZXhpdE9LIH07CisgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2Rl
KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBFbnRyeVN3aXRjaCwgb3JpZ2lu
LCBPcEluZm8oZW50cnlTd2l0Y2hEYXRhKSk7CisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRy
eXBvaW50cy5jbGVhcigpOworICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmFwcGVu
ZChuZXdSb290KTsKKworICAgICAgICAgICAgYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUyBwcmV2ZW50IGNyZWF0aW5nIHRoaXMgdHdpY2UK
KyAgICAgICAgbV9jYWxjdWxhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTU0FDYWxjdWxhdG9yPiht
X2dyYXBoKTsKKwogICAgICAgICBtX2dyYXBoLmVuc3VyZVNTQURvbWluYXRvcnMoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC02Nyw3ICsxMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
c3NhVmFyaWFibGUgPSBtX2NhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci0+bmV3VmFy
aWFibGUoKTsKICAgICAgICAgICAgIEFTU0VSVChzc2FWYXJpYWJsZS0+aW5kZXgoKSA9PSBtX3Zh
cmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVGb3JTU0FJ
bmRleC5hcHBlbmQoJnZhcmlhYmxlKTsKICAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJp
YWJsZS5hZGQoJnZhcmlhYmxlLCBzc2FWYXJpYWJsZSk7CkBAIC0xMDMsNyArMTUyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50TWFwcGluZy5hZGQobm9kZSwgY2hp
bGROb2RlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgbV9jYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3It
Pm5ld0RlZigKICAgICAgICAgICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmdl
dCh2YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xMTIsNyArMTYxLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gRGVj
aWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlIFBoaSdz
IGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCiAgICAgICAgIC8vIHlldC4gV2Ugd2lsbCBsYXRlciBr
bm93IHdoZXJlIHRvIGluc2VydCBiYXNlZCBvbiB3aGVyZSBTU0FDYWxjdWxhdG9yIHRlbGxzIHVz
IHRvLgotICAgICAgICBtX2NhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgIG1fY2FsY3Vs
YXRvci0+Y29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUlu
ZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKQEAgLTE2Nyw3ICsy
MTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAiLCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIG1fdmFyaWFi
bGVGb3JTU0FJbmRleFtpXSksICJcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBtX2NhbGN1bGF0b3IsICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsICptX2NhbGN1bGF0b3Is
ICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBEbyB0aGUgYnVsayBvZiB0
aGUgU1NBIGNvbnZlcnNpb24uIEZvciBlYWNoIGJsb2NrLCB0aGlzIHRyYWNrcyB0aGUgb3BlcmFu
ZC0+Tm9kZQpAQCAtMjIwLDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxvY2ss
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxl
LmdldCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiog
ZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gbV9jYWxjdWxh
dG9yLT5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWRlZikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJl
IHJlcXVpcmVkIHRvIGluc2VydCBhIFBoaSwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcmVhY2hpbmcg
ZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCBoZWFkLgpAQCAtMjQ2LDcgKzI5NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIHZhbHVlRm9yT3BlcmFuZCB3aXRoIHRob3NlIFBo
aXMuIEZvciBQaGlzIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMgdGhhdCBhcmUgbm90CiAgICAg
ICAgICAgICAvLyBmbHVzaGVkLCB3ZSBhbHNvIGluc2VydCBhIE1vdkhpbnQuCiAgICAgICAgICAg
ICBzaXplX3QgcGhpSW5zZXJ0aW9uUG9pbnQgPSAwOwotICAgICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7
CisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxh
dG9yLT5waGlzRm9yQmxvY2soYmxvY2spKSB7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxl
KCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKQEAgLTM0
Niw3ICszOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25Pcmln
aW4gPSB0ZXJtaW5hbC5ub2RlLT5vcmlnaW47CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1
Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTsp
IHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5z
dWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3Vs
YXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJs
b2NrKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBtX2NhbGN1bGF0b3ItPnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gcGhpRGVmLT52
YXJpYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKQEAgLTM4
MywyMyArNDMyLDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBzdGQ6Om1h
a2VfdW5pcXVlPEJhc2ljQmxvY2s6OlNTQURhdGE+KGJsb2NrKTsKICAgICAgICAgfQogCi0gICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRzIGluIERGRyBTU0E6Ci0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3Vt
ZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLSAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50Rm9ybWF0cy5yZXNpemUoYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGFyZ3VtZW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IEZsdXNoZWRKU1ZhbHVlOwotCi0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9hcmd1bWVudE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUpOwotICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSA9IGZvcm1hdDsKLSAgICAgICAgICAgIGFyZ3VtZW50
c1tpXSA9IG5vZGU7IC8vIFJlY29yZCB0aGUgbG9hZCB0aGF0IGxvYWRzIHRoZSBhcmd1bWVudHMg
Zm9yIHRoZSBiZW5lZml0IG9mIGV4aXQgcHJvZmlsaW5nLgorICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IG9sZFJvb3QgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgQXJndW1lbnRzVmVjdG9yJiBhcmd1
bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQob2xkUm9vdCktPnZh
bHVlOworICAgICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7Cisg
ICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVu
dHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9hcmd1bWVu
dE1hcHBpbmcuZ2V0KGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnVuY2hlY2tlZEFwcGVu
ZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICBhcmd1
bWVudHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1l
bnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSA9IFdU
Rk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBt
X2dyYXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtNDExLDcg
KzQ1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU1NBQ2FsY3VsYXRvciBt
X2NhbGN1bGF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNTQUNhbGN1bGF0b3I+IG1fY2FsY3Vs
YXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAgSGFzaE1hcDxWYXJp
YWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fc3NhVmFyaWFibGVG
b3JWYXJpYWJsZTsKICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9hcmd1bWVudE1hcHBpbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJh
bmNoOgogICAgIGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBS
ZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpAQCAt
Mzk4LDYgKzM5OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOgogICAgIGNhc2UgQXRv
bWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NDMsNyArNTY0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVn
IHRhZ0dQUiA9IHRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYXlsb2Fk
LmdwcigpOwogCi0gICAgICAgIEpTVmFsdWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihtX2ppdC5qaXRDb2RlKCktPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlb
bm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCldOworICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVp
bnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JF
bnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CiAg
ICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBH
UFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIs
IFRhZ09mZnNldCksIHRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3ModGVtcEdQUiwgUGF5bG9hZE9mZnNldCksIHBheWxvYWRHUFIpOwpAQCAtNTY5Niw2
ICs1Njk2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBJZGVudGl0
eVdpdGhQcm9maWxlOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6Cisg
ICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTk5LDcgKzU5
OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDogewotICAgICAgICBKU1ZhbHVl
KiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jYXRj
aE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgp
XTsKKyAgICAgICAgSlNWYWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1f
aml0LmppdENvZGUoKS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlb
bm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCldOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICBtX2pp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdHIpLCB0ZW1wR1BSKTsKQEAgLTYx
MDYsNiArNjEwNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAg
IGNhc2UgRW50cnlTd2l0Y2g6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50
czoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBFeHRyYWN0T1NS
RW50cnlMb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzMSw2ICsx
OTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogICAgIH0K
IAogICAgIG1faml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBvaW50cygpOworICAgIG1f
aml0LmppdENvZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cygpOwogCiAgICAg
QVNTRVJUKG9zckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIx
MjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgdGVybWluYWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGluIHJlbGVhc2UgYnVpbGRzLgogCiAgICAgICAgIFZB
TElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5pc0VudHJ5cG9pbnQobV9ncmFwaC5i
bG9jaygwKSkpOworICAgICAgICBWQUxJREFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGgu
YmxvY2soMCkgPT0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzWzBdKTsKKworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKQorICAgICAgICAgICAgVkFM
SURBVEUoKGJsb2NrKSwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogCiAgICAgICAg
IC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwg
ZW50cnlwb2ludHMgYXJlIGRlYWQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2lu
dCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50cykgewpAQCAtNTQ5LDYgKzU1Myw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEtp
bGxTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAgICAgICAg
IGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlw
b2ludEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhInVu
ZXhwZWN0ZWQgbm9kZSB0eXBlIGluIENQUyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CkBAIC02MzksNiAr
NjQ1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIHRoaW5ncyBoZXJl
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
NDcxCiAgICAgICAgIAorICAgICAgICBWQUxJREFURSgoKSwgbV9ncmFwaC5tX2VudHJ5cG9pbnRz
LnNpemUoKSA9PSAxKTsKKyAgICAgICAgVkFMSURBVEUoKCksIG1fZ3JhcGgubV9lbnRyeXBvaW50
c1swXSA9PSBtX2dyYXBoLmJsb2NrKDApKTsKKwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC03NDAsNiArNzQ5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSA9PSBt
X2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+ZW50cnlwb2ludEluZGV4KCkg
PCBtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKQEAgLTc4MCw2ICs3
OTcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChv
cGVyYW5kKSA8IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KCkgeyB9CisKICAgICB2b2lkIHJl
cG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBkYXRhTG9n
RigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSw2ICsxMTEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAg
ICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5
TG9jYWw6CisgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNlIExvb3BIaW50Ogog
ICAgIGNhc2UgU2tpcFNjb3BlOgogICAgIGNhc2UgR2V0R2xvYmFsT2JqZWN0OgpAQCAtMjQ1LDYg
KzI0Niw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9m
Qm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoK
ICAgICBjYXNlIFN3aXRjaDoKICAgICBjYXNlIFR5cGVPZjoKICAgICBjYXNlIFB1dEJ5SWQ6CkBA
IC0zMDAsNiArMzAyLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBB
dG9taWNzSXNMb2NrRnJlZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRz
OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyMTI2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw2ICsxNDIsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6
OlJlCiAgICAgICAgIH0pOwogCiAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKKwogICAgIGlmIChzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxl
ZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKQEAgLTE1Miw5ICsxNTMsMTggQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBjb2RlQmxvY2stPnNldFBD
VG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24g
PSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAotICAgICAgICBzdGF0ZS5maW5hbGl6
ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0
YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbCgwKSkpOwogICAgIHN0YXRlLmppdENvZGUtPmluaXRp
YWxpemVCM0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKKyAg
ICBmb3IgKGF1dG8gcGFpciA6IHN0YXRlLmdyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5
dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVPZmZzZXQgPSBw
YWlyLnZhbHVlOworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsK
KyAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHMgPSBzdGF0ZS5ncmFw
aC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICBzdGF0ZS5qaXRD
b2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KAorICAgICAgICAgICAgY2F0Y2hCeXRl
Y29kZU9mZnNldCwgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9m
KHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOworICAgIH0KKyAgICBzdGF0ZS5q
aXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisKICAgICBpZiAoQjM6
OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2RlKCkuZGlz
YXNzZW1ibGVyKCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9u
IDIyMTI2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVj
dHMuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3Jt
YXQuaCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExPU1JFeGl0
LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMzksMTEgKzQwLDE5IEBAIGNsYXNzIFRyYWNr
ZWRSZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgRlRMIHsKIAorc3RydWN0IENhdGNoT1NSRW50cnkg
eworICAgIHZvaWQqIG1hY2hpbmVDb2RlQWRkcmVzczsKKyAgICBWZWN0b3I8REZHOjpGbHVzaEZv
cm1hdD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNvZGVPZmZzZXQ7
Cit9OworCiBjbGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklUQ29kZSB7CiBwdWJsaWM6CiAg
ICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAKKyAgICAvLyBPT1BTOiBhZGQgaGVscGVy
cyBmb3IgYWRkaW5nIGFuZCBsb29raW5nIHVwIGNhdGNoIG9zciBlbnRyeXMuCisKICAgICBDb2Rl
UHRyIGFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkKiBl
eGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIG92ZXJyaWRlOwogICAgIHZv
aWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgb3ZlcnJpZGU7CkBAIC03Miw2
ICs4MSw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhp
dDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNj
cmlwdG9yczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlT
bG93UGF0aHM7CisgICAgVmVjdG9yPENhdGNoT1NSRW50cnk+IGNhdGNoT1NSRW50cnk7CiAgICAg
CiBwcml2YXRlOgogICAgIENvZGVQdHIgbV9hZGRyZXNzRm9yQ2FsbDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyMTI2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJBdG9t
aWNzT2JqZWN0LmgiCkBAIC0xNDksNiArMTUwLDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAiXyIsIGNvZGVCbG9jaygpLT5oYXNoKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG5hbWUgPSAianNCb2R5IjsKKworICAgICAgICB7CisgICAgICAgICAgICBtX3Byb2Muc2V0TnVt
RW50cnlwb2ludHMobV9ncmFwaC5tX251bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5tX2NvZGVCbG9jazsKKworICAgICAgICAgICAgUmVm
UHRyPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0g
Y3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPigKKyAg
ICAgICAgICAgICAgICBbY29kZUJsb2NrXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNv
ZGUmIGNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIoY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludElu
ZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlz
KCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaEVudHJ5cG9pbnRJbmRl
eCAhPSAwKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50
cnlwb2ludChjYXRjaEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0
Y2hPU1JFbnRyeSkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2Fs
cyA9IHN0ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAv
LyBNYWtlIHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1
ZmZlci4KKyAgICAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5jYXRjaE9T
UkVudHJ5QnVmZmVyID0gbV9ncmFwaC5tX3ZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihK
U1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogCkBAIC0x
NjAsNyArMTg0LDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVl
bmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNl
dEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMg
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBtX291dC5u
ZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMTc0LDgg
KzE5OSw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kg
Zm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXph
dGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwotICAg
ICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3Vs
YXRpb25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIHByb2xv
Z3VlKTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAgICAgICAgc2l6ZV90IHNp
emVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9j
YWw7CkBAIC0yNTcsNTEgKzI4Miw3NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJs
b2NrKDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgotICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5jbGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9w
ZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkp
ID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1f
bm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2lu
KDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9n
cmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxs
b3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxv
YWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3Qg
cHV0IGluCi0gICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3Vt
ZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQuIFRoaXMKLSAgICAgICAgICAg
ICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1l
bnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFs
dWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1
ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZv
ciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIE5vZGUqIHJvb3RFbnRyeVN3aXRjaCA9IG1fZ3JhcGguYmxvY2soMCktPnRlcm1pbmFs
KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290RW50cnlTd2l0Y2gtPmlzRW50cnlT
d2l0Y2goKSk7CisgICAgICAgICAgICAvL0VudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRh
ID0gcm9vdEVudHJ5U3dpdGNoLT5lbnRyeVN3aXRjaERhdGEoKTsKKyAgICAgICAgICAgIFZlY3Rv
cjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVtRW50cnlwb2ludHMpOworICAg
ICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlv
bnM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9ncmFwaC5tX251bUVu
dHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBhZGQgZXhwbGFpbmVy
IGhlcmUuCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9IGZpcnN0REZHQmFzaWNCbG9j
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vz
c29ycyk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjYWxsRW50cnlwb2ludEFyZ3VtZW50
U3BlY3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOworCisgICAgICAgICAgICBtX25vZGUg
PSBudWxscHRyOworICAgICAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4o
MCksIENvZGVPcmlnaW4oMCksIHRydWUpOworCisgICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVu
dHMuCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOworICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KKyAgICAgICAgICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9hdXRv
JiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFw
aC5ibG9jaygwKSktPnZhbHVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIC8vIE9PUFM6
IGdldCBub24gbnVsbHB0ciBub2RlIGhlcmUuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAvL05vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07
CisgICAgICAgICAgICAgICAgLy9tX291dC5zZXRPcmlnaW4obm9kZSk7CisKKyAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0g
bV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIE9PUFM6IGNhbiB3ZSBldmVuIGRvIHRoaXMgYW55bW9yZSBnaXZlbiBF
bnRyeVN3aXRjaD8KKyAgICAgICAgICAgICAgICAvL2lmIChub2RlKSB7CisgICAgICAgICAgICAg
ICAgLy8gICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIC8vICAgIAorICAg
ICAgICAgICAgICAgIC8vICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3Rp
dmUgb25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAgICAgIC8v
ICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRo
ZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAgICAgICAgICAgICAgICAvLyAgICAvLyBwbGFj
ZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJl
Zm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vICAgIC8vIHNob3VsZCBob2xkIHRydWUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICBtX2xvYWRlZEFyZ3Vt
ZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAvL30KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZv
cm1hdHNbMF1baV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwg
bm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9v
bGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZs
dXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQuanVtcChm
aXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RE
RkdCYXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0
aW9ucywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFi
ZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKQEAgLTUxMCw2
ICs1NjAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgog
ICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKKyAgICAgICAgICAgIGNvbXBp
bGVFeHRyYWN0Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
R2V0U3RhY2s6CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2soKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTM4LDYgKzk5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZHOjpTd2l0
Y2g6CiAgICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVudHJ5U3dp
dGNoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVybjoKICAg
ICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0OCw2
ICsxMjA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRIaW50OgogICAgICAgICBjYXNl
IEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgY2FzZSBJbml0
aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2du
aXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBAIC0xNTE4LDYgKzE1NzUsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50
cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2Fk
NjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2Nh
bCgpKSkpOwogICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKKyAg
ICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXIt
PmRhdGFCdWZmZXIoKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFi
c29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCkpKSk7CisgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7CkBAIC03Nzg3LDYgKzc4NTAs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnRyeVN3
aXRjaCgpCisgICAgeworICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnM7Cisg
ICAgICAgIGZvciAoREZHOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX25vZGUtPmVudHJ5U3dp
dGNoRGF0YSgpLT5jYXNlcykKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKGxvd0Jsb2Nr
KHN1Y2Nlc3NvcikpOworICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNzb3JzKTsKKyAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKICAgICB7CkBAIC0xNDYzOCw3ICsx
NDcwOSw2IEBAIHByaXZhdGU6CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIFByb2NlZHVyZSYgbV9w
cm9jOwogICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJhc2ljQmxvY2sg
bV9oYW5kbGVFeGNlcHRpb25zOwogICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2lj
QmxvY2s+IG1fYmxvY2tzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcAkocmV2aXNpb24gMjIxMjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjEsNiArODYxLDE2IEBAIHZvaWQg
T3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGkKICAgICAgICAgdmFsdWUudmFsdWUo
KS0+YXM8QjM6OlVwc2lsb25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7CiB9CiAKK3ZvaWQgT3V0cHV0
OjplbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiBjYXNlcykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChjYXNlcy5zaXplKCkgPT0gbV9wcm9jLm51bUVudHJ5cG9pbnRzKCkpOwor
ICAgIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3JpZ2lu
KCkpOworICAgIGZvciAoTEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykgeworICAgICAgICAvLyBP
T1BTOiBmcmVxdWVuY2llcyBoZXJlCisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihG
cmVxdWVudGVkQmxvY2soYmxvY2spKTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDggQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBlbnRyeVN3aXRjaChjb25zdCBW
ZWN0b3I8TEJhc2ljQmxvY2s+Jik7CisKICAgICB2b2lkIHJldChMVmFsdWUpOwogCiAgICAgdm9p
ZCB1bnJlYWNoYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjEyNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAj
aW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgog
I2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC0xNTMzLDEwICsxNTM0LDE0IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxh
Y2VtZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGlt
aXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVw
YXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRl
eCkpOworICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgeworICAg
IGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhl
Yywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKEV4
ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKQEAgLTE1NDYsOCArMTU1MSwx
NCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0
aW1pemVkUmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9w
dGltaXplZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorCisgICAg
c3dpdGNoIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRD
b2RlOjpERkdKSVQ6CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6
ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KIAogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0
ZWRGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKICAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKj4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4ICsgM10udS5w
b2ludGVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319312</attachid>
            <date>2017-08-29 17:12:35 -0700</date>
            <delta_ts>2017-09-04 15:30:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>89059</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjEzMjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE3LTA4LTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFN1cHBvcnQgY29tcGlsaW5nIGNhdGNoIGluIHRoZSBGVEwKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTM5NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1h
cmtzL2Zha2UtaXRlcmF0b3JzLXRoYXQtdGhyb3ctd2hlbi1maW5pc2hlZC5qczoKKwogMjAxNy0w
OC0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBb
SlNDXSBVc2UgcmVpZnlpbmcgc3lzdGVtIGZvciAibmFtZSIgcHJvcGVydHkgb2YgYnVpbHRpbiBK
U0Z1bmN0aW9uCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mYWtlLWl0ZXJhdG9ycy10
aGF0LXRocm93LXdoZW4tZmluaXNoZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvZmFrZS1pdGVyYXRvcnMtdGhhdC10aHJvdy13aGVuLWZpbmlzaGVkLmpzCShyZXZp
c2lvbiAyMjEzMjApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mYWtlLWl0ZXJhdG9ycy10
aGF0LXRocm93LXdoZW4tZmluaXNoZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDYg
QEAgZnVuY3Rpb24gcnVuSXRlcmF0b3JzKCkgewogICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7
CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwOyArK2kpCiAgICAgICAgIHJ1bkl0ZXJhdG9y
cygpOwotICAgIGlmICh0cnVlKQorICAgIGlmIChmYWxzZSkKICAgICAgICAgcHJpbnQoRGF0ZS5u
b3coKSAtIHN0YXJ0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjIxMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNy0wOC0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IGNvbXBpbGluZyBjYXRjaCBpbiB0aGUgRlRMCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGltcGxlbWVudHMgb3BfY2F0Y2ggaW4gdGhlIEZUTC4gSXQgZXh0ZW5kcyB0aGUgREZHIGltcGxl
bWVudGF0aW9uCisgICAgICAgIGJ5IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4g
REZHLVNTQS4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoaXMKKyAgICAgICAgYnkgaW50cm9kdWNp
bmcgYW4gRW50cnlTd2l0Y2ggbm9kZS4gV2hlbiBjb252ZXJ0aW5nIHRvIFNTQSwgd2UgaW50cm9k
dWNlIGEgbmV3CisgICAgICAgIHJvb3QgYmxvY2sgd2l0aCBhbiBFbnRyeVN3aXRjaCB0aGF0IGhh
cyB0aGUgcHJldmlvdXMgREZHIGVudHJ5cG9pbnRzIGFzIGl0cworICAgICAgICBzdWNjZXNzb3Jz
LiBCeSBjb252ZW50aW9uLCB3ZSBwaWNrIHRoZSB6ZXJvdGggZW50cnkgcG9pbnQgaW5kZXggdG8g
YmUgdGhlCisgICAgICAgIG9wX2VudGVyIGVudHJ5cG9pbnQuIExpa2UgaW4gQjMsIGluIERGRy1T
U0EsIEVudHJ5U3dpdGNoIGp1c3QgYWN0cyBsaWtlIGEKKyAgICAgICAgc3dpdGNoIG92ZXIgdGhl
IGVudHJ5cG9pbnQgaW5kZXggYXJndW1lbnQuIERGRzo6RW50cnlTd2l0Y2ggaW4gdGhlIEZUTAor
ICAgICAgICBzaW1wbHkgbG93ZXJzIHRvIEIzOjpFbnRyeVN3aXRjaC4gVGhlIEVudHJ5U3dpdGNo
IGluIHRoZSByb290IGJsb2NrIHRoYXQKKyAgICAgICAgU1NBQ29udmVyc2lvbiBjcmVhdGVzIGNh
biBub3QgZXhpdCBiZWNhdXNlIHdlIHdvdWxkIGJvdGggbm90IGtub3cgd2hlcmUgdG8gZXhpdAor
ICAgICAgICB0byBpbiB0aGUgcHJvZ3JhbSwgYW5kIG5vdCBoYXZlIHZhbGllIE9TUiBleGl0IHN0
YXRlLiBUaGlzIGRlc2lnbiBhbHNvCisgICAgICAgIG1hbmRhdGVzIHRoYXQgYW55dGhpbmcgd2Ug
aG9pc3QgYWJvdmUgRW50cnlTd2l0Y2ggaW4gdGhlIG5ldyByb290IGJsb2NrCisgICAgICAgIGNh
biBub3QgZXhpdCBzaW5jZSB3ZSBkbyBub3QgaGF2ZSBhIHZhbGlkIE9TUiBleGl0IHN0YXRlLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgbWV0YWRhdGEgbm9k
ZSBuYW1lZCBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cy4KKyAgICAgICAgSW5pdGlhbGl6
ZUVudHJ5cG9pbnRBcmd1bWVudHMgaXMgYSBtZXRhZGF0YSBub2RlIHRoYXQgaW5pdGlhbGl6ZXMg
dGhlIGZsdXNoIGZvcm1hdCBmb3IKKyAgICAgICAgdGhlIGFyZ3VtZW50cyBhdCBhIGdpdmVuIGVu
dHJ5cG9pbnQuIEZvciBhIGdpdmVuIGVudHJ5cG9pbnQgaW5kZXgsIHRoaXMgbm9kZQorICAgICAg
ICB0ZWxscyBBSSBhbmQgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMgd2hhdCB0aGUgZmx1c2ggZm9y
bWF0IGZvciBlYWNoIGFyZ3VtZW50CisgICAgICAgIGlzLiBUaGlzIGFsbG93cyBlYWNoIGluZGl2
aWR1YWwgZW50cnlwb2ludCB0byBoYXZlIGFuIGluZGVwZW5kZW50IHNldCBvZgorICAgICAgICBh
cmd1bWVudCB0eXBlcy4gQ3VycmVudGx5LCB0aGlzIHdvbid0IGhhcHBlbiBpbiBwcmFjdGljZSBi
ZWNhdXNlIEFyZ3VtZW50UG9zaXRpb24KKyAgICAgICAgdW5pZmllcyBmbHVzaCBmb3JtYXRzLCBi
dXQgdGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgd2UgcHJvYmFibHkgd2FudAorICAg
ICAgICB0byBtb2RpZnkgaW4gdGhlIGZ1dHVyZS4gU1NBQ29udmVyc2lvbiB3aWxsIGFkZCBJbml0
aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cworICAgICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIGVh
Y2ggb2YgdGhlIG9yaWdpbmFsIERGRyBlbnRyeXBvaW50IGJsb2Nrcy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgY3VzdG9tIHBy
b2xvZ3VlIGNvZGUgZ2VuZXJhdG9ycyB0byBBaXIuCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBG
VEwgdG8gc3BlY2lmeSBhIGN1c3RvbSBwcm9sb2d1ZSBmb3IgY2F0Y2ggZW50cnlwb2ludHMgdGhh
dAorICAgICAgICBtYXRjaGVzIHRoZSBvcF9jYXRjaCBPU1IgZW50cnkgY2FsbGluZyBjb252ZW50
aW9uIHRoYXQgdGhlIERGRyB1c2VzLiBUaGlzIHdheSwKKyAgICAgICAgdGhlIGJhc2VsaW5lIEpJ
VCBjb2RlIE9TUiBlbnRlcnMgaW50byBvcF9jYXRjaCB0aGUgc2FtZSB3YXkgYm90aCBpbiB0aGUg
REZHCisgICAgICAgIGFuZCB0aGUgRlRMLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gdXNlIHRoaXMg
c2FtZSBtZWNoYW5pc20gdG8gcGVyZm9ybSBzdGFjaworICAgICAgICBvdmVyZmxvdyBjaGVja3Mg
aW5zdGVhZCBvZiB1c2luZyBhIHBhdGNocG9pbnQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29k
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmlzRW50cnlwb2ludCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmVudHJ5cG9pbnRJbmRleCk6CisgICAgICAgICogYjMv
YWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0UHJvbG9ndWVG
b3JFbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cHJvbG9ndWVHZW5l
cmF0b3JGb3JFbnRyeXBvaW50KToKKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBk
ZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NG
Ry5oOgorICAgICAgICAoSlNDOjpERkc6OnNlbGVjdENGRyk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJz
RXhpdFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q29tbW9uRGF0YTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpERkc6OkNv
bW1vbkRhdGE6OmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0Nv
bW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5
RGF0YUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFw
cGVuZENhdGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aW52YWxpZGF0ZUNGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmVuc3VyZUNQU0NGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0VudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpzc2FEYXRhKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
c3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6Zmlu
YWxpemVPU1JFbnRyeXBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFwcGVuZENhdGNoRW50cnlw
b2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlQ2F0Y2hFbnRyeXBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bWFrZUNhdGNoT1NSRW50cnlCdWZmZXIpOgorICAg
ICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmlzVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmVudHJ5U3dpdGNo
RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpl
bnRyeXBvaW50SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNo
T1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAqIGRmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OlNTQUNvbnZl
cnNpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlN0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlOjpy
dW4pOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUVudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Ymxlc3NTcGVjdWxhdGlvbik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplbnRyeVN3aXRjaCk6CisgICAgICAgICog
ZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKwogMjAx
Ny0wOC0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBUaHJv
d2luZyBhbiBleGNlcHRpb24gaW4gdGhlIERGRy9GVEwgc2hvdWxkIG5vdCBiZSBhIGpldHRpc29u
LWFibGUgT1NSIGV4aXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBAIENDYWxsU3BlY2lh
bCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IHdv
cmsgYm90aCBiZWZvcmUgYW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisKICAgICBpZiAobV9l
bnRyeXBvaW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2stPmluZGV4KCk7CiAg
ICAgCkBAIC0xNjYsNiArMTY4LDE2IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50KEJhc2ljQmxv
Y2sqIGJsb2MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IENvZGU6OmVudHJ5cG9pbnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZW50
cnlwb2ludHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
IH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6OnNldENhbGxlZVNh
dmVSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRP
ZmZzZXRMaXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJlY3RlZENhbGxlZVNh
dmVSZWdpc3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIyMTMy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2Vy
dGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2NsYXNzIENvZGU7CiBj
bGFzcyBEaXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0
b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFdh
c21Cb3VuZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7
CiAKK3R5cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYs
IENvZGUmKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPiBQ
cm9sb2d1ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2Ug
dG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4g
dGhlCiAvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdl
bmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKIC8vIDQwTUIgb2Yg
QWlyLgpAQCAtMTY1LDcgKzE2OSwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZyZXF1
ZW50ZWRCbG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50czsg
fQogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBib29sIGlzRW50cnlw
b2ludChCYXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgLy8gTm90ZTogSXQgaXMgb25seSB2
YWxpZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgTG93ZXJFbnRyeVN3aXRjaC4KKyAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBvaW50SW5kZXgoQmFzaWNCbG9jayopIGNvbnN0
OworICAgIHZvaWQgc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KHVuc2lnbmVkIGVudHJ5cG9pbnRJ
bmRleCwgUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICAvLyBOb3RlOiBXZSBhbGxvdyB0aGlzIHRvIGJlIGNhbGxlZCBldmVuIGJlZm9yZSB3ZSBzZXQg
bV9lbnRyeXBvaW50cyBqdXN0IGZvciBjb252ZW5pZW5jZSB0byB1c2VycyBvZiB0aGlzIEFQSS4K
KyAgICAgICAgbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRvci5zZXQoZW50cnlwb2ludEluZGV4
LCBnZW5lcmF0b3IpOworICAgIH0KKyAgICBSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xv
Z3VlR2VuZXJhdG9yRm9yRW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRvci5nZXQoZW50cnlw
b2ludEluZGV4KTsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgbG93ZXJFbnRyeVN3
aXRjaCgpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rvcj4KICAgICB2b2lkIHNldEVudHJ5
cG9pbnRzKFZlY3RvciYmIHZlY3RvcikKQEAgLTM1Myw2ICszNjgsNyBAQCBwcml2YXRlOgogICAg
IFN0YWNrU2xvdCogbV9jYWxsZWVTYXZlU3RhY2tTbG90IHsgbnVsbHB0ciB9OwogICAgIFZlY3Rv
cjxGcmVxdWVudGVkQmxvY2s+IG1fZW50cnlwb2ludHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwg
YWZ0ZXIgbG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIFZlY3RvcjxDQ2FsbEhlbHBlcnM6OkxhYmVs
PiBtX2VudHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwgY29kZSBnZW5lcmF0
aW9uLgorICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxQcm9sb2d1ZUdlbmVyYXRvcj4sIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dW5zaWduZWQ+PiBtX2VudHJ5cG9pbnRJbmRleFRvR2VuZXJhdG9yOwogICAgIFJlZlB0cjxXYXNt
Qm91bmRzQ2hlY2tHZW5lcmF0b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yOwogICAgIGNv
bnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzYXNzZW1i
bGVyPiBtX2Rpc2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDIxICsy
MDgsMjggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAg
ICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgZGlzYXNzZW1ibGVyLT5zdGFydEJsb2Nr
KGJsb2NrLCBqaXQpOyAKIAotICAgICAgICBpZiAoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKSB7
CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBvaW50SW5kZXggPSBj
b2RlLmVudHJ5cG9pbnRJbmRleChibG9jaykpIHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlLmlz
RW50cnlwb2ludChibG9jaykpOworCiAgICAgICAgICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAg
ICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRFbnRyeXBvaW50KGppdCk7IAogCi0gICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgICAgIGlmIChjb2Rl
LmZyYW1lU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgaXNBUk02NCgpKTsKLSAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChS
ZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY29kZS5wcm9sb2d1
ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQoKmVudHJ5cG9pbnRJbmRleCkpCisgICAgICAgICAgICAg
ICAgcHJvbG9ndWVHZW5lcmF0b3ItPnJ1bihqaXQsIGNvZGUpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgaXNBUk02NCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0LmVtaXRTYXZlKGNvZGUu
Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwogCiAgICAgICAgICAgICBpZiAoZGlz
YXNzZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+ZW5kRW50cnlwb2ludChq
aXQpOyAKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVCghY29k
ZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChibG9jay0+
c2l6ZSgpID49IDEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNp
emUoKSAtIDE7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjIxMzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBLaWxsU3RhY2s6IHsKICAg
ICAgICAgLy8gVGhpcyBpcyBqdXN0IGEgaGludCB0ZWxsaW5nIHVzIHRoYXQgdGhlIE9TUiBzdGF0
ZSBvZiB0aGUgbG9jYWwgaXMgbm8gbG9uZ2VyIGluc2lkZSB0aGUKICAgICAgICAgLy8gZmx1c2hl
ZCBkYXRhLgpAQCAtMjczLDcgKzI3MywzMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KICAgICAgICAgQVNTRVJU
KCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2lu
dEFyZ3VtZW50czogeworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBub2RlLT5l
bnRyeXBvaW50SW5kZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNoRm9ybWF0PiYgYXJn
dW1lbnRGb3JtYXRzID0gbV9ncmFwaC5zc2FEYXRhKCkuYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9p
bnRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChhcmd1bWVudCk7
CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50Rm9ybWF0c1thcmd1bWVudF0pIHsKKyAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUo
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDoKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNDZWxsKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgICAgICAgICAgdmFsdWUubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUg
Y291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCkBAIC0x
ODUzLDYgKzE4NzksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAg
IGJyZWFrOworCiAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIyMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsOCArMjIxLDYgQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIGZsb2F0
IGV4ZWN1dGlvbkNvdW50OwogICAgIAotICAgIC8vIFRoZXNlIGZpZWxkcyBhcmUgcmVzZXJ2ZWQg
Zm9yIE5hdHVyYWxMb29wcy4KLSAgICAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjEzMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIzNCw5ICs1MjM0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgY2F0Y2ggaW4gdGhlIEZU
TC4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1Mzk2CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExG
b3JPU1JFbnRyeU1vZGUpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7
CiAgICAgICAgICAgICB9CiAKQEAgLTY0MzUsOCArNjQzMyw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICBtX2dyYXBoLmRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIG1f
Z3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CiAKLSAgICBtX2dyYXBoLm1fY3BzQ0ZHID0g
c3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+KG1fZ3JhcGgpOwotICAgIAogICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewog
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAg
ICAgICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
Ry5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHJl
dmlzaW9uIDIyMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDcgQEAgdXNpbmcgU1NBQ0ZHID0gQ0ZHOwogdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFQsIENQU0NGRz46OnZhbHVlPjo6dHlwZT4KIENQU0NGRyYgc2VsZWN0Q0ZHKEdyYXBo
JiBncmFwaCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChncmFwaC5tX2Nwc0NGRyk7Ci0gICAgcmV0
dXJuICpncmFwaC5tX2Nwc0NGRzsKKyAgICByZXR1cm4gZ3JhcGguZW5zdXJlQ1BTQ0ZHKCk7CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxULCBTU0FDRkc+Ojp2YWx1ZT46OnR5cGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjIxMzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyNiw2ICs0MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dpdGNoOgor
ICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKQEAgLTQzOCw2ICs0MzksNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBQcm9maWxlVHlwZToK
ICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICBjYXNlIFB1dEhpbnQ6CisgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShyZXZpc2lvbiAyMjEzMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdy
YXBoJiBncmFwaCwgTm9kCiAgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMgd2hvc2UgZWZm
ZWN0IG9uIHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGV5CiAg
ICAgLy8gbm9ybWFsbHkgY2xvYmJlci4KICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBj
YXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgTW92SGludDoKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBQdXRIaW50OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAyMjEzMjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw2ICs4Nyw3IEBAIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQogICAgIGNv
ZGVPcmlnaW5zLnNocmlua1RvRml0KCk7CiAgICAgd2Vha1JlZmVyZW5jZXMuc2hyaW5rVG9GaXQo
KTsKICAgICB0cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgIGNhdGNoRW50cnlwb2ludHMu
c2hyaW5rVG9GaXQoKTsKIH0KIAogc3RhdGljIFN0YXRpY0xvY2sgcGNDb2RlQmxvY2tNYXBMb2Nr
OwpAQCAtMTkzLDYgKzE5NCwxNyBAQCB2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zCiAgICAgICAgIHdhdGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFj
a2VkUmVmZXJlbmNlcyk7CiB9CiAKK3ZvaWQgQ29tbW9uRGF0YTo6ZmluYWxpemVDYXRjaEVudHJ5
cG9pbnRzKCkKK3sKKyAgICBzdGQ6OnNvcnQoY2F0Y2hFbnRyeXBvaW50cy5iZWdpbigpLCBjYXRj
aEVudHJ5cG9pbnRzLmVuZCgpLAorICAgICAgICBbXSAoY29uc3QgQ2F0Y2hFbnRyeXBvaW50RGF0
YSYgYSwgY29uc3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSYgYikgeyByZXR1cm4gYS5ieXRlY29kZUlu
ZGV4IDwgYi5ieXRlY29kZUluZGV4OyB9KTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpICsgMSA8IGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIEFTU0VSVChjYXRjaEVudHJ5cG9pbnRzW2ldLmJ5dGVjb2RlSW5kZXggPD0gY2F0
Y2hFbnRyeXBvaW50c1tpICsgMV0uYnl0ZWNvZGVJbmRleCk7CisjZW5kaWYKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjIxMzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKKyNpbmNsdWRlICJE
RkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKQEAgLTkwLDYgKzkx
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cyhDb2RlQmxv
Y2sqIG93bmVyKTsKICAgICBib29sIGlzVk1UcmFwQnJlYWtwb2ludCh2b2lkKiBhZGRyZXNzKTsK
IAorICAgIENhdGNoRW50cnlwb2ludERhdGEqIGNhdGNoT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJ
bmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUJp
bmFyeVNlYXJjaDxDYXRjaEVudHJ5cG9pbnREYXRhLCB1bnNpZ25lZD4oCisgICAgICAgICAgICBj
YXRjaEVudHJ5cG9pbnRzLCBjYXRjaEVudHJ5cG9pbnRzLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwK
KyAgICAgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhKiBpdGVtKSB7IHJldHVy
biBpdGVtLT5ieXRlY29kZUluZGV4OyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZENhdGNo
RW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBtYWNoaW5lQ29kZSwgVmVj
dG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKKyAgICB7CisgICAgICAgIGNhdGNo
RW50cnlwb2ludHMuYXBwZW5kKENhdGNoRW50cnlwb2ludERhdGEgeyBtYWNoaW5lQ29kZSwgIFdU
Rk1vdmUoYXJndW1lbnRGb3JtYXRzKSwgYnl0ZWNvZGVJbmRleCB9KTsKKyAgICB9CisKKyAgICB2
b2lkIGZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cygpOworCiAgICAgdW5zaWduZWQgcmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50LCByZXF1aXJlZFJlZ2lzdGVyQ291bnRG
b3JFeGl0KTsKQEAgLTEwNiwxMSArMTIxLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V2Vha1Jl
ZmVyZW5jZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+PiB3ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKKyAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50
RGF0YT4gY2F0Y2hFbnRyeXBvaW50czsKICAgICBCYWc8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50PiB3YXRjaHBvaW50czsKICAgICBCYWc8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
PiBhZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEJhZzxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludHM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4ganVtcFJlcGxhY2VtZW50czsK
ICAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBjYXRjaE9TUkVudHJ5QnVmZmVyOwogICAgIFJlZlB0
cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwogICAgIGJvb2wgbGl2ZW5lc3NI
YXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICBi
b29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2Vk
IG9uIGV2ZXJ5IEdDLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9j
YWw6CiAgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1
bWVudHM6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2Ug
UGhhbnRvbToKQEAgLTE4Myw2ICsxODQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgU3dp
dGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBU
YWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTI2LDYgKzE1MjYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAg
ICBjYXNlIFVwc2lsb246CisgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CkBAIC0yMDExLDYgKzIwMTIsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOgogICAgICAgICBjYXNlIExvb3BI
aW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5
cG9pbnRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBF
eGl0T0s6CiAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsMTEg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS0+Y2FzZXNbaV0udmFsdWUsIGNvbnRleHQp
LCAiOiIsIGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwg
ImRlZmF1bHQ6IiwgZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aXNF
bnRyeVN3aXRjaCgpKSB7CisgICAgICAgIEVudHJ5U3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPmVu
dHJ5U3dpdGNoRGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+
Y2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIEJyYW5jaFRh
cmdldChkYXRhLT5jYXNlc1tpXSkpOworICAgIH0KICAgICBDbG9iYmVyU2V0IHJlYWRzOwogICAg
IENsb2JiZXJTZXQgd3JpdGVzOwogICAgIGFkZFJlYWRzQW5kV3JpdGVzKCp0aGlzLCBub2RlLCBy
ZWFkcywgd3JpdGVzKTsKQEAgLTUxNSw4ICs1MjAsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICBvdXQucHJpbnQo
IkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRG
R0pJVCksICI6XG4iKTsKICAgICBvdXQucHJpbnQoIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4
cG9pbnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwg
bV91bmlmaWNhdGlvblN0YXRlLCAiOyBSZWYgY291bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0
ZSwgIlxuIik7Ci0gICAgaWYgKG1fZm9ybSA9PSBTU0EpCi0gICAgICAgIG91dC5wcmludCgiICBB
cmd1bWVudCBmb3JtYXRzOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50Rm9ybWF0cyksICJcbiIpOwor
ICAgIGlmIChtX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2lu
dEluZGV4ID0gMDsgZW50cnlwb2ludEluZGV4IDwgc3NhRGF0YSgpLmFyZ3VtZW50Rm9ybWF0cy5z
aXplKCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3Vt
ZW50IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6
ICIsIGxpc3REdW1wKHNzYURhdGEoKS5hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSks
ICJcbiIpOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2Vu
dHJ5cG9pbnRUb0FyZ3VtZW50cykKICAgICAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudHMg
Zm9yIGJsb2NrIyIsIHBhaXIua2V5LT5pbmRleCwgIjogIiwgbGlzdER1bXAocGFpci52YWx1ZSks
ICJcbiIpOwpAQCAtODI0LDYgKzgzMSw3IEBAIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkcoKQog
ICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBudWxscHRyOwogICAgIG1fYmFja3dh
cmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CiAgICAgbV9iYWNrd2FyZHNDRkcgPSBudWxscHRyOwor
ICAgIG1fY3BzQ0ZHID0gbnVsbHB0cjsKIH0KIAogdm9pZCBHcmFwaDo6aW52YWxpZGF0ZU5vZGVM
aXZlbmVzcygpCkBAIC0xNTQzLDYgKzE1NTEsMTQgQEAgdm9pZCBHcmFwaDo6bG9nQXNzZXJ0aW9u
RmFpbHVyZSgKICAgICBsb2dERkdBc3NlcnRpb25GYWlsdXJlKCp0aGlzLCB0b0NTdHJpbmcoIldo
aWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuXG4iKSwgZmlsZSwg
bGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9CiAKK0NQU0NGRyYgR3JhcGg6OmVuc3VyZUNQ
U0NGRygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NB
Q29udmVyc2lvbik7CisgICAgaWYgKCFtX2Nwc0NGRykKKyAgICAgICAgbV9jcHNDRkcgPSBzdGQ6
Om1ha2VfdW5pcXVlPENQU0NGRz4oKnRoaXMpOworICAgIHJldHVybiAqbV9jcHNDRkc7Cit9CisK
IENQU0RvbWluYXRvcnMmIEdyYXBoOjplbnN1cmVDUFNEb21pbmF0b3JzKCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChtX2Zvcm0gIT0gU1NBICYmICFtX2lzSW5TU0FDb252ZXJzaW9uKTsKQEAgLTE2
MTAsMjEgKzE2MjYsMTQgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0
aAogICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFj
Y2Vzc2VzU3RhY2soKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1
bHQgPSBbJl0gKCkgLT4gVmFsdWVQcm9maWxlKiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5s
b2NhbCgpLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQg
PSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
YXJndW1lbnROb2RlID0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZh
bHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
YXRjaCBTZXRBcmd1bWVudCBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1ODQxCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fZW50
cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnROb2RlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAmcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQp
OwotICAgICAgICAgICAgICAgIH0oKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnROb2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IGFyZ3VtZW50Tm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
JnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTksNiArOTE5LDcgQEAgcHVibGljOgogICAgIEJh
Y2t3YXJkc0NGRyYgZW5zdXJlQmFja3dhcmRzQ0ZHKCk7CiAgICAgQmFja3dhcmRzRG9taW5hdG9y
cyYgZW5zdXJlQmFja3dhcmRzRG9taW5hdG9ycygpOwogICAgIENvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzJiBlbnN1cmVDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcygpOworICAgIENQU0NGRyYg
ZW5zdXJlQ1BTQ0ZHKCk7CiAKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgb25seSBtYWtlcyBzZW5z
ZSB0byBjYWxsIGFmdGVyIGJ5dGVjb2RlIHBhcnNpbmcKICAgICAvLyBiZWNhdXNlIGl0IHF1ZXJp
ZXMgdGhlIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgYm9vbGVhbiB3aG9zZSB2YWx1ZQpAQCAtOTM4
LDYgKzkzOSwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW50cnlwb2ludChCYXNpY0Jsb2Nr
KiBibG9jaykgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faXNJ
blNTQUNvbnZlcnNpb24sICJUaGlzIGlzIG5vdCB3cml0dGVuIHRvIHdvcmsgZHVyaW5nIFNTQSBj
b252ZXJzaW9uLiIpOworCisgICAgICAgIGlmIChtX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAg
ICBBU1NFUlQobV9lbnRyeXBvaW50cy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQo
bV9lbnRyeXBvaW50cy5jb250YWlucyh0aGlzLT5ibG9jaygwKSkpOworICAgICAgICAgICAgcmV0
dXJuIGJsb2NrID09IHRoaXMtPmJsb2NrKDApOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1f
ZW50cnlwb2ludHMuc2l6ZSgpIDw9IDQpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9l
bnRyeXBvaW50cy5jb250YWlucyhibG9jayk7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IG1fZW50cnlwb2ludFRvQXJndW1lbnRzLmNvbnRhaW5zKGJsb2NrKSk7CkBAIC05NjYsMzMgKzk3
NSw1MCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gSW4gQ1BTLCB0aGlzIGlzIGFsbCBvZiB0aGUg
U2V0QXJndW1lbnQgbm9kZXMgZm9yIHRoZSBhcmd1bWVudHMgaW4gdGhlIG1hY2hpbmUgY29kZSBi
bG9jawogICAgIC8vIHRoYXQgc3Vydml2ZWQgRENFLiBBbGwgb2YgdGhlbSBleGNlcHQgbWF5YmUg
InRoaXMiIHdpbGwgc3Vydml2ZSBEQ0UsIGJlY2F1c2Ugb2YgdGhlIEZsdXNoCi0gICAgLy8gbm9k
ZXMuCi0gICAgLy8KLSAgICAvLyBJbiBTU0EsIHRoaXMgaXMgYWxsIG9mIHRoZSBHZXRTdGFjayBu
b2RlcyBmb3IgdGhlIGFyZ3VtZW50cyBpbiB0aGUgbWFjaGluZSBjb2RlIGJsb2NrIHRoYXQKLSAg
ICAvLyBtYXkgaGF2ZSBzb21lIHNwZWN1bGF0aW9uIGluIHRoZSBwcm9sb2d1ZSBhbmQgc3Vydml2
ZWQgRENFLiBOb3RlIHRoYXQgdG8gZ2V0IHRoZSBzcGVjdWxhdGlvbgotICAgIC8vIGZvciBhbiBh
cmd1bWVudCBpbiBTU0EsIHlvdSBtdXN0IHVzZSBtX2FyZ3VtZW50Rm9ybWF0cywgc2luY2Ugd2Ug
c3RpbGwgaGF2ZSB0byBzcGVjdWxhdGUKLSAgICAvLyBldmVuIGlmIHRoZSBhcmd1bWVudCBnb3Qg
a2lsbGVkLiBGb3IgZXhhbXBsZToKLSAgICAvLwotICAgIC8vICAgICBmdW5jdGlvbiBmb28oeCkg
ewotICAgIC8vICAgICAgICB2YXIgdG1wID0geCArIDE7Ci0gICAgLy8gICAgIH0KLSAgICAvLwot
ICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgYWx3YXlzIGludCBkdXJpbmcgcHJvZmlsaW5nLiBUaGUg
QXJpdGhBZGQgZm9yICJ4ICsgMSIgd2lsbCBiZSBkZWFkIGFuZCB3aWxsCi0gICAgLy8gaGF2ZSBh
IHByb3ZlbiBjaGVjayBmb3IgdGhlIGVkZ2UgdG8gIngiLiBTbywgd2Ugd2lsbCBub3QgaW5zZXJ0
IGEgQ2hlY2sgbm9kZSBhbmQgd2Ugd2lsbAotICAgIC8vIGtpbGwgdGhlIEdldFN0YWNrIGZvciAi
eCIuIEJ1dCwgd2UgbXVzdCBkbyB0aGUgaW50IGNoZWNrIGluIHRoZSBwcm9nb2x1ZSwgYmVjYXVz
ZSB0aGF0J3MgdGhlCi0gICAgLy8gdGhpbmcgd2UgdXNlZCB0byBhbGxvdyBEQ0Ugb2YgQXJpdGhB
ZGQuIE90aGVyd2lzZSB0aGUgYWRkIGNvdWxkIGJlIGltcHVyZToKLSAgICAvLwotICAgIC8vICAg
ICB2YXIgbyA9IHsKLSAgICAvLyAgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyBkbyBzaWRl
IGVmZmVjdHM7IH0KLSAgICAvLyAgICAgfTsKLSAgICAvLyAgICAgZm9vKG8pOwotICAgIC8vCi0g
ICAgLy8gSWYgd2UgRENFIHRoZSBBcml0aEFkZCBhbmQgd2UgcmVtb3ZlIHRoZSBpbnQgY2hlY2sg
b24geCwgdGhlbiB0aGlzIHdvbid0IGRvIHRoZSBzaWRlCi0gICAgLy8gZWZmZWN0cy4KKyAgICAv
LyBub2Rlcy4gSW4gU1NBLCB0aGlzIGhhcyBubyBtZWFuaW5nLiBJdCdzIGVtcHR5LgogICAgIEhh
c2hNYXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1ZlY3Rvcj4gbV9lbnRyeXBvaW50VG9Bcmd1bWVu
dHM7Ci0gICAgCi0gICAgLy8gSW4gQ1BTLCB0aGlzIGlzIG1lYW5pbmdsZXNzLiBJbiBTU0EsIHRo
aXMgaXMgdGhlIGFyZ3VtZW50IHNwZWN1bGF0aW9uIHRoYXQgd2UndmUgbG9ja2VkIGluLgotICAg
IFZlY3RvcjxGbHVzaEZvcm1hdD4gbV9hcmd1bWVudEZvcm1hdHM7CisKKyAgICBzdHJ1Y3QgU1NB
RGF0YSB7CisgICAgICAgIC8vIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRp
b24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQgYmxvY2suCisgICAgICAg
IC8vCisgICAgICAgIC8vIFdlIG11c3Qgc3BlY3VsYXRlIG9uIHRoZSBhcmd1bWVudCB0eXBlcyBh
dCBlYWNoIGVudHJ5cG9pbnQgZXZlbiBpZiBvcGVyYXRpb25zIGludm9sdmluZworICAgICAgICAv
LyBhcmd1bWVudHMgZ2V0IGtpbGxlZC4gRm9yIGV4YW1wbGU6CisgICAgICAgIC8vCisgICAgICAg
IC8vICAgICBmdW5jdGlvbiBmb28oeCkgeworICAgICAgICAvLyAgICAgICAgdmFyIHRtcCA9IHgg
KyAxOworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyBBc3N1bWUgdGhh
dCB4IGlzIGFsd2F5cyBpbnQgZHVyaW5nIHByb2ZpbGluZy4gVGhlIEFyaXRoQWRkIGZvciAieCAr
IDEiIHdpbGwgYmUgZGVhZCBhbmQgd2lsbAorICAgICAgICAvLyBoYXZlIGEgcHJvdmVuIGNoZWNr
IGZvciB0aGUgZWRnZSB0byAieCIuIFNvLCB3ZSB3aWxsIG5vdCBpbnNlcnQgYSBDaGVjayBub2Rl
IGFuZCB3ZSB3aWxsCisgICAgICAgIC8vIGtpbGwgdGhlIEdldFN0YWNrIGZvciAieCIuIEJ1dCwg
d2UgbXVzdCBkbyB0aGUgaW50IGNoZWNrIGluIHRoZSBwcm9nb2x1ZSwgYmVjYXVzZSB0aGF0J3Mg
dGhlCisgICAgICAgIC8vIHRoaW5nIHdlIHVzZWQgdG8gYWxsb3cgRENFIG9mIEFyaXRoQWRkLiBP
dGhlcndpc2UgdGhlIGFkZCBjb3VsZCBiZSBpbXB1cmU6CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICB2YXIgbyA9IHsKKyAgICAgICAgLy8gICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsg
ZG8gc2lkZSBlZmZlY3RzOyB9CisgICAgICAgIC8vICAgICB9OworICAgICAgICAvLyAgICAgZm9v
KG8pOworICAgICAgICAvLworICAgICAgICAvLyBJZiB3ZSBEQ0UgdGhlIEFyaXRoQWRkIGFuZCB3
ZSByZW1vdmUgdGhlIGludCBjaGVjayBvbiB4LCB0aGVuIHRoaXMgd29uJ3QgZG8gdGhlIHNpZGUK
KyAgICAgICAgLy8gZWZmZWN0cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnkgY29udmVudGlv
biwgZW50cnlwb2ludCBpbmRleCAwIGlzIHVzZWQgZm9yIHRoZSBDb2RlQmxvY2sncyBvcF9lbnRl
ciBlbnRyeXBvaW50LgorICAgICAgICAvLyBTbyBhcmd1bWVudEZvcm1hdHNbMF0gYXJlIHRoZSBh
cmd1bWVudCBmb3JtYXRzIGZvciB0aGUgbm9ybWFsIGNhbGwgZW50cnlwb2ludC4KKyAgICAgICAg
VmVjdG9yPFZlY3RvcjxGbHVzaEZvcm1hdD4+IGFyZ3VtZW50Rm9ybWF0czsKKworICAgICAgICAv
LyBUaGlzIG1hcHMgYW4gZW50cnlwb2ludCBpbmRleCB0byBhIHBhcnRpY3VsYXIgb3BfY2F0Y2gg
Ynl0ZWNvZGUgb2Zmc2V0LiBCeSBjb252ZW50aW9uLAorICAgICAgICAvLyBpdCdsbCBuZXZlciBo
YXZlIHplcm8gYXMgYSBrZXkgYmVjYXVzZSB3ZSB1c2UgemVybyB0byBtZWFuIHRoZSBvcF9lbnRl
ciBlbnRyeXBvaW50LgorICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gZW50cnlw
b2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OworCisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mRW50cnlwb2ludHMgeyBVSU5UX01BWCB9OworICAgIH07CisgICAgc3RkOjp1bmlxdWVfcHRy
PFNTQURhdGE+IG1fc3NhRGF0YTsKKworICAgIFNTQURhdGEmIHNzYURhdGEoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fZm9ybSA9PSBTU0EgfHwgbV9pc0luU1NBQ29udmVyc2lvbik7CisgICAg
ICAgIEFTU0VSVChtX3NzYURhdGEpOworICAgICAgICByZXR1cm4gKm1fc3NhRGF0YTsKKyAgICB9
CiAKICAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJs
ZUFjY2Vzc0RhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1f
YXJndW1lbnRQb3NpdGlvbnM7CkBAIC0xMDQ4LDYgKzEwNzQsNyBAQCBwdWJsaWM6CiAgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOwor
ICAgIEJhZzxFbnRyeVN3aXRjaERhdGE+IG1fZW50cnlTd2l0Y2hEYXRhOwogCiAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJpbmdTdHJ1Y3R1cmU7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBz
eW1ib2xTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw0MiArMTAwLDQ1IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6
OmluaXRpYWxpemUoKQogICAgICAgICBlbnRyeXBvaW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKICAgICAgICAgZW50cnlwb2ludC0+Y2Zh
U3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNB
dFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+
dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgQXJndW1lbnRz
VmVjdG9yJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQo
ZW50cnlwb2ludCktPnZhbHVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAKLSAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBw
b3J0aW5nIG11bHRpcGxlIGVudHJ5cG9pbnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdl
Ci0gICAgICAgICAgICAgICAgLy8gd2hhdCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9n
cmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmlu
ZChlbnRyeXBvaW50KS0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0OworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVk
SlNWYWx1ZTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAg
ICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52
YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAg
ICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0
ZWNvZGVUb3AoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2gg
Zm9ybWF0IGZvciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQzMjoKKyAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAg
ICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKKyAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFk
LmFyZ3VtZW50KGkpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZUJ5
dGVjb2RlVG9wKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRy
LCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhl
YWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFp
bC5sb2NhbChpKS5jbGVhcigpOwpAQCAtMTYzLDYgKzE2Niw3IEBAIHZvaWQgSW5QbGFjZUFic3Ry
YWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5s
b2NhbChpKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQorCiAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3
MSw2ICszNzUsMTQgQEAgaW5saW5lIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50
YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCisgICAg
Y2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJt
aW5hbC0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAg
ICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQogCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2Fz
ZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCB2b2lkIEpJVENvZGU6OnNo
cmlua1RvRml0KCkKICAgICBjb21tb24uc2hyaW5rVG9GaXQoKTsKICAgICBvc3JFbnRyeS5zaHJp
bmtUb0ZpdCgpOwogICAgIG9zckV4aXQuc2hyaW5rVG9GaXQoKTsKLSAgICBjYXRjaEVudHJ5cG9p
bnRzLnNocmlua1RvRml0KCk7CiAgICAgc3BlY3VsYXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgp
OwogICAgIG1pbmlmaWVkREZHLnByZXBhcmVBbmRTaHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50
U3RyZWFtLnNocmlua1RvRml0KCk7CkBAIC0yNDMsNyArMjQyLDYgQEAgdm9pZCBKSVRDb2RlOjpm
aW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAgICBhdXRvIGNvbXBhcmF0b3IgPSBbXSAoY29uc3Qg
YXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAgICAgICByZXR1cm4gYS5tX2J5dGVjb2RlSW5k
ZXggPCBiLm1fYnl0ZWNvZGVJbmRleDsKICAgICB9OwotICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5
cG9pbnRzLmJlZ2luKCksIGNhdGNoRW50cnlwb2ludHMuZW5kKCksIGNvbXBhcmF0b3IpOwogICAg
IHN0ZDo6c29ydChvc3JFbnRyeS5iZWdpbigpLCBvc3JFbnRyeS5lbmQoKSwgY29tcGFyYXRvcik7
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0yNTEsNyArMjQ5LDYgQEAgdm9pZCBKSVRDb2Rl
OjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSArIDEgPCBvc3JWZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQob3NyVmVj
dG9yW2ldLm1fYnl0ZWNvZGVJbmRleCA8PSBvc3JWZWN0b3JbaSArIDFdLm1fYnl0ZWNvZGVJbmRl
eCk7CiAgICAgfTsKLSAgICB2ZXJpZnlJc1NvcnRlZChjYXRjaEVudHJ5cG9pbnRzKTsKICAgICB2
ZXJpZnlJc1NvcnRlZChvc3JFbnRyeSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAg
ICAgfQogCi0gICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
dHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIHVuc2lnbmVkPigKLSAgICAgICAg
ICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUlu
ZGV4LAotICAgICAgICAgICAgW10gKGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0tPm1fYnl0ZWNvZGVJbmRleDsgfSk7Ci0gICAgfQotCiAgICAgdm9pZCBmaW5h
bGl6ZU9TUkVudHJ5cG9pbnRzKCk7CiAKLSAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1
bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCwgVmVjdG9y
PEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9ybWF0cykKLSAgICB7Ci0gICAgICAgIGNhdGNoRW50
cnlwb2ludHMuYXBwZW5kKENhdGNoRW50cnlwb2ludERhdGEgeyBieXRlY29kZUluZGV4LCBtYWNo
aW5lQ29kZU9mZnNldCwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpIH0pOwotICAgIH0KLSAgICAK
ICAgICB1bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQpCiAgICAgewog
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBvc3JFeGl0LnNpemUoKTsKQEAgLTE0NiwxMiArMTM0
LDEwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0YSBjb21tb247CiAgICAgVmVj
dG9yPERGRzo6T1NSRW50cnlEYXRhPiBvc3JFbnRyeTsKLSAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBv
aW50RGF0YT4gY2F0Y2hFbnRyeXBvaW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JF
eGl0LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNw
ZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxl
RXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwotICAgIFNj
cmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZmZXI7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
ICAgICB1aW50OF90IG5ldmVyRXhlY3V0ZWRFbnRyeSB7IDEgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjEzMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50
cnlwb2ludCgKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBv
aW50KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFz
VmlzaXRlZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0g
ICAgbV9qaXRDb2RlLT5hcHBlbmRDYXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBsaW5rQnVmZmVyLm9mZnNldE9mKGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3Jt
YXRzKSk7CisgICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2lj
QmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBK
SVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29t
cGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTY4Nyw3
ICs2ODcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlCiB7CiAg
ICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7CiAgICAgICAgIHVp
bnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxz
Rm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEg
bm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4KLSAgICAgICAgbV9qaXRDb2RlLT5jYXRjaE9T
UkVudHJ5QnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUp
ICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uY2F0Y2hP
U1JFbnRyeUJ1ZmZlciA9IHZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVl
KSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDIyMTMyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNh
c2UgTGF6eUpTQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92
SGludDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2Ug
U2V0TG9jYWw6CiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b206CkBAIC03OCw2ICs3
OSw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgSnVtcDoK
KyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgVW5yZWFj
aGFibGU6CiAgICAgY2FzZSBEb3VibGVSZXA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsMTAgQEAgc3RydWN0IFN3aXRj
aERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dp
dGNoRGF0YSB7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBD
YWxsVmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMjk3
LDEyICsxMzAxLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwog
ICAgIH0KIAorICAgIGJvb2wgaXNFbnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBFbnRyeVN3aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAg
ICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVu
dHJ5U3dpdGNoOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoK
ICAgICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKQEAgLTEzNjQsNiArMTM3NCwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChpc1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPFN3aXRjaERhdGEqPigpOwogICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlT
d2l0Y2hEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCiAgICAgewpAQCAtMTM3NCw2ICsxMzkwLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgog
ICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAg
ICAgY2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEo
KS0+Y2FzZXMuc2l6ZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KQEAgLTEzODYsNyArMTQwNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0g
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAg
ICByZXR1cm4gZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0
Y2ggKGluZGV4KSB7CiAgICAgICAgIGNhc2UgMDoKQEAgLTI1NzQsNiArMjU5MywxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxCdWNrZXRPd25lclR5cGU+KCk7CiAgICAg
fQogCisgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCgpID09IEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJu
IG1fb3BJbmZvLmFzPHVuc2lnbmVkPigpOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVu
KFByaW50U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjIxMzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTMsNiArMzkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKEp1bXAsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhCcmFuY2gsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnRyeVN3aXRjaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJldHVy
biwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhEaXJlY3RUYWlsQ2FsbCwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCkBAIC00NDEsNiArNDQyLDEwIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBOb2RlcyBmb3IgRE9NIEpJVCAqL1wK
ICAgICBtYWNybyhDYWxsRE9NR2V0dGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oQ2FsbERPTSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIC8qIE1ldGFkYXRhIG5vZGUgdGhhdCBpbml0aWFsaXplcyB0aGUgc3RhdGUgZm9yIGZs
dXNoZWQgYXJndW1lbnQgdHlwZXMgYXQgYW4gZW50cnlwb2ludCBpbiB0aGUgcHJvZ3JhbS4gKi8g
XAorICAgIC8qIEN1cnJlbnRseSwgd2Ugb25seSB1c2UgdGhpcyBmb3IgdGhlIGJsb2NrcyBhbiBF
bnRyeVN3aXRjaCBicmFuY2hlcyB0byBhdCB0aGUgcm9vdCBvZiB0aGUgcHJvZ3JhbS4gKi8gXAor
ICAgIC8qIFRoaXMgaXMgb25seSB1c2VkIGluIFNTQS4gKi8gXAorICAgIG1hY3JvKEluaXRpYWxp
emVFbnRyeXBvaW50QXJndW1lbnRzLCBOb2RlTXVzdEdlbmVyYXRlKQogCiAvLyBUaGlzIGVudW0g
Z2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBl
cywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhl
IGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NywxMiArNTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQubV9sb2NhbHMuZmlsbChBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5zaXpl
KCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0ID0gRmx1
c2hlZEF0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbYXJndW1l
bnRdLAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
KSk7Ci0gICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5h
cmd1bWVudChhcmd1bWVudCkgPSBBdmFpbGFiaWxpdHkoZmx1c2hlZEF0KTsKLSAgICAgICAgfQor
CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fZ3JhcGgu
YmxvY2soMCktPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubV9sb2NhbHMuYXJndW1l
bnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogCiAgICAgICAgIC8v
IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBp
biByZXZlcnNlIHBvc3RvcmRlci4KICAgICAgICAgCkBAIC04NiwxMCArODMsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7CiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vz
c29ySW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubWVyZ2UoY2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3Nv
ckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9
IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBz
dWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLnBydW5lQnlMaXZlbmVzcygKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHN1Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5mb3JF
eGl0KTsKICAgICAgICAgICAgICAgICB9CkBAIC0xOTksNiArMjAwLDE2IEBAIHZvaWQgTG9jYWxP
U1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgp
OwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50
QXJndW1lbnRzOiB7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVu
dHJ5cG9pbnRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1
bWVudEZvcm1hdHMgPSBtX2dyYXBoLnNzYURhdGEoKS5hcmd1bWVudEZvcm1hdHNbZW50cnlwb2lu
dEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0
cy5zaXplKCk7IGFyZ3VtZW50LS07ICkgeworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRB
dCA9IEZsdXNoZWRBdChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZhaWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDE2ICsz
MzgsMTggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogfQogCiB2
b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIGlmICghT3B0aW9uczo6dXNl
T1NSRW50cnlUb0RGRygpKQoreyAKKyAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkco
KSAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRv
RlRMKCkgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExK
SVQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKLSAg
ICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpGVExKSVQpOwogCi0gICAgREZHOjpDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5cG9p
bnQgPSBqaXRDb2RlLT5jYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCk7CisgICAgQ29tbW9uRGF0YSogZGZnQ29tbW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvbW1vbik7CisgICAgREZHOjpD
YXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaEVudHJ5cG9pbnQgPSBkZmdDb21tb24tPmNhdGNoT1NS
RW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBpZiAoIWNhdGNo
RW50cnlwb2ludCkgewogICAgICAgICAvLyBUaGlzIGNhbiBiZSBudWxsIHVuZGVyIHNvbWUgY2ly
Y3Vtc3RhbmNlcy4gVGhlIG1vc3QgY29tbW9uIGlzIHRoYXQgd2UgZGlkbid0CiAgICAgICAgIC8v
IGNvbXBpbGUgdGhpcyBvcF9jYXRjaCBhcyBhbiBlbnRyeXBvaW50IHNpbmNlIGl0IGhhZCBuZXZl
ciBleGVjdXRlZCB3aGVuIHN0YXJ0aW5nCkBAIC0zNTYsOSArMzU4LDkgQEAgdm9pZCogcHJlcGFy
ZUNhdGNoT1NSRW50cnkoRXhlY1N0YXRlKiBleAogICAgIH0KIAogICAgIC8vIFdlJ3JlIG9ubHkg
YWxsb3dlZCB0byBPU1IgZW50ZXIgaWYgd2UndmUgcHJvdmVuIHdlIGhhdmUgY29tcGF0aWJsZSBh
cmd1bWVudCB0eXBlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBjYXRjaEVudHJ5cG9pbnQtPm1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkg
eworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50cnlw
b2ludC0+YXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgewogICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkUih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCkpLmpzVmFsdWUoKTsKLSAgICAgICAgc3dpdGNoIChjYXRjaEVudHJ5cG9pbnQtPm1f
YXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgeworICAgICAgICBzd2l0Y2ggKGNhdGNoRW50cnlw
b2ludC0+YXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50XSkgewogICAgICAgICBjYXNlIERGRzo6Rmx1
c2hlZEludDMyOgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zODIsMTMgKzM4NCwxMyBAQCB2b2lkKiBwcmVwYXJl
Q2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUqIGV4CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1bnNp
Z25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7CisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yQ2hl
Y2sgPSBkZmdDb21tb24tPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4ZWMtPnJl
Z2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrKS5vZmZz
ZXQoKV0pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoSW50ZXJwcmV0
ZXI6OmdldE9wY29kZUlEKGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVtleGVjLT5i
eXRlY29kZU9mZnNldCgpXS51Lm9wY29kZSkgPT0gb3BfY2F0Y2gpOwogICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmRCdWZmZXIqPihleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbZXhlYy0+Ynl0
ZWNvZGVPZmZzZXQoKSArIDNdLnUucG9pbnRlcik7Ci0gICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXIt
PmRhdGFCdWZmZXIoKSk7CisgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICBpZiAoIVZpcnR1YWxSZWdp
c3Rlcihwcm9maWxlLm1fb3BlcmFuZCkuaXNMb2NhbCgpKQpAQCAtMzk3LDkgKzM5OSw4IEBAIHZv
aWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgKytpbmRleDsK
ICAgICB9KTsKIAotICAgIGppdENvZGUtPmNhdGNoT1NSRW50cnlCdWZmZXItPnNldEFjdGl2ZUxl
bmd0aChzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCk7Ci0KLSAgICByZXR1cm4gaml0Q29kZS0+ZXhl
Y3V0YWJsZUFkZHJlc3NBdE9mZnNldChjYXRjaEVudHJ5cG9pbnQtPm1fbWFjaGluZUNvZGVPZmZz
ZXQpOworICAgIGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3Ro
KHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KTsKKyAgICByZXR1cm4gY2F0Y2hFbnRyeXBvaW50LT5t
YWNoaW5lQ29kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMjIxMzIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MSwxMSArNzEsMTEgQEAgaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSQog
fQogCiBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7Ci0gICAgdW5zaWduZWQgbV9ieXRlY29k
ZUluZGV4OwotICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CiAgICAgLy8gV2UgdXNl
IHRoaXMgd2hlbiBkb2luZyBPU1IgZW50cnkgYXQgY2F0Y2guIFdlIHByb3ZlIHRoZSBhcmd1bWVu
dHMKICAgICAvLyBhcmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUgYmVmb3JlIGVudGVyaW5nIGF0IGEg
Y2F0Y2ggYmxvY2suCi0gICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBtX2FyZ3VtZW50Rm9ybWF0czsK
KyAgICB2b2lkKiBtYWNoaW5lQ29kZTsKKyAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50
Rm9ybWF0czsKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogfTsKIAogLy8gUmV0dXJucyBh
IHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlciB0aGF0IHRoZSBPU1IgZW50cnkgdGh1bmsgd2lsbCBy
ZWNvZ25pemUgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY2xlYXIoKTsKICAgICAgICAgbV9n
cmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5hZGQobmV3Um9vdCwgbmV3QXJndW1lbnRzKTsK
IAotICAgICAgICBtX2dyYXBoLm1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1ZTxDUFNDRkc+KG1f
Z3JhcGgpOwotCisgICAgICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygpOwogICAgICAgICBtX2dy
YXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxl
QmxvY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjEzMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBjYXNl
IFVwc2lsb246CiAgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwg
d2UgZ28gaW50byBTU0EuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTE1NSw2ICsxMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGb3J3YXJkVmFy
YXJnczoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgICAgICBjYXNlIE51a2VTdHJ1
Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CisgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRB
cmd1bWVudHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBhIHZh
bHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
REZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQ
aGFzZS5oIgpAQCAtNDQsNyArNDUsNiBAQCBjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBwdWJs
aWMgUGhhc2UgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkK
ICAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKLSAgICAgICAgLCBtX2Nh
bGN1bGF0b3IoZ3JhcGgpCiAgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgewog
ICAgIH0KQEAgLTU1LDYgKzU1LDU3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgbV9ncmFwaC5jbGVhckNQU0NGR0RhdGEo
KTsKKworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBCYXNpY0Jsb2NrKiwgV1RGOjpJbnRIYXNo
PHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+
IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2s7CisgICAgICAgIEFTU0VSVCghbV9ncmFw
aC5tX3NzYURhdGEpOworICAgICAgICBtX2dyYXBoLm1fc3NhRGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8R3JhcGg6OlNTQURhdGE+KCk7CisgICAgICAgIEdyYXBoOjpTU0FEYXRhJiBzc2FEYXRhID0g
bV9ncmFwaC5zc2FEYXRhKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgc3NhRGF0YS5udW1i
ZXJPZkVudHJ5cG9pbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKTsKKworICAgICAg
ICAgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0KDAs
IDEuMGYpOworCisgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9
IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEuYWRkKCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8IHNzYURhdGEubnVtYmVy
T2ZFbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBvbGRSb290ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzW2VudHJ5cG9pbnRJbmRleF07
CisgICAgICAgICAgICAgICAgZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jay5hZGQoZW50
cnlwb2ludEluZGV4LCBvbGRSb290KTsKKyAgICAgICAgICAgICAgICBlbnRyeVN3aXRjaERhdGEt
PmNhc2VzLmFwcGVuZChvbGRSb290KTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChvbGRSb290
LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBvbGRSb290LT5wcmVk
ZWNlc3NvcnMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAgICAgICAgaWYgKG9sZFJvb3Qt
PmlzQ2F0Y2hFbnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghIWVudHJ5
cG9pbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHNzYURhdGEuZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJvb3QtPmJ5dGVj
b2RlQmVnaW4pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gb2xkUm9vdC0+YXQoMCktPm9yaWdpbjsKKyAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwg
SW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHMsIG9yaWdpbiwgT3BJbmZvKGVudHJ5cG9pbnRJ
bmRleCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBFeGl0T0ssIG9yaWdpbik7CisgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShvbGRSb290KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlTd2l0Y2hEYXRhLT5jYXNlc1swXSA9PSBt
X2dyYXBoLmJsb2NrKDApKTsgLy8gV2Ugc3Ryb25nbHkgYXNzdW1lIHRoZSBub3JtYWwgY2FsbCBl
bnRyeXBvaW50IGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LgorCisgICAgICAgICAgICBz
c2FEYXRhLmFyZ3VtZW50Rm9ybWF0cy5yZXNpemUoc3NhRGF0YS5udW1iZXJPZkVudHJ5cG9pbnRz
KTsKKworICAgICAgICAgICAgY29uc3QgYm9vbCBleGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZXhpdE9L
IH07CisgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIFNwZWNOb25lLCBFbnRyeVN3aXRjaCwgb3JpZ2luLCBPcEluZm8oZW50cnlTd2l0Y2hE
YXRhKSk7CisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5jbGVhcigpOworICAg
ICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmFwcGVuZChuZXdSb290KTsKKworICAgICAg
ICAgICAgYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAg
U1NBQ2FsY3VsYXRvciBjYWxjdWxhdG9yKG1fZ3JhcGgpOworCiAgICAgICAgIG1fZ3JhcGguZW5z
dXJlU1NBRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAg
LTY3LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUuaXNSb290
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlh
YmxlID0gY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNzYVZh
cmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOwogICAgICAg
ICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOwogICAgICAgICAg
ICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZhcmlhYmxlKTsK
QEAgLTEwMyw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAg
ICAgICAgICAgIGNhbGN1bGF0b3IubmV3RGVmKAogICAgICAgICAgICAgICAgICAgICBtX3NzYVZh
cmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMiw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICAvLyBEZWNpZGUgd2hlcmUgUGhpcyBhcmUgdG8gYmUgaW5zZXJ0ZWQuIFRo
aXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRvZXNuJ3QgaW5zZXJ0IHRoZW0KICAgICAgICAgLy8g
eWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hlcmUgdG8gaW5zZXJ0IGJhc2VkIG9uIHdoZXJlIFNT
QUNhbGN1bGF0b3IgdGVsbHMgdXMgdG8uCi0gICAgICAgIG1fY2FsY3VsYXRvci5jb21wdXRlUGhp
cygKKyAgICAgICAgY2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4g
Tm9kZSogewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIApAQCAtMTY3LDcgKzIxOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICIsIGksICI6ICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAo
bV9ncmFwaCwgbV92YXJpYWJsZUZvclNTQUluZGV4W2ldKSwgIlxuIik7CiAgICAgICAgICAgICBk
YXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1f
Y2FsY3VsYXRvciwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRvcjog
IiwgY2FsY3VsYXRvciwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIERv
IHRoZSBidWxrIG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJh
Y2tzIHRoZSBvcGVyYW5kLT5Ob2RlCkBAIC0yMjAsNyArMjcxLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJs
b2NrICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlh
YmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ss
IHNzYVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBk
ZWYgPSBjYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghZGVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhhdmUg
YSByZWFjaGluZyBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGhlYWQuCkBAIC0y
NDYsNyArMjk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gdmFsdWVGb3JPcGVyYW5kIHdp
dGggdGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0aGF0IGFy
ZSBub3QKICAgICAgICAgICAgIC8vIGZsdXNoZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92SGludC4K
ICAgICAgICAgICAgIHNpemVfdCBwaGlJbnNlcnRpb25Qb2ludCA9IDA7Ci0gICAgICAgICAgICBm
b3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhibG9jaykpIHsKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBjYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkp
OwpAQCAtMzQ2LDcgKzM5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBz
aWxvbk9yaWdpbiA9IHRlcm1pbmFsLm5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IGNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwpA
QCAtMzgzLDIzICs0MzQsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0
ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNT
QToKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTM5NgotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgp
ID09IDEpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRv
QXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dyYXBo
Lm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7Ci0KLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZSk7Ci0gICAgICAgICAgICBmb3JtYXQgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldID0gZm9ybWF0OwotICAgICAgICAgICAgYXJn
dW1lbnRzW2ldID0gbm9kZTsgLy8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3Vt
ZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgIGZvciAoYXV0
byYgcGFpciA6IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2spIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OworICAgICAgICAgICAgQmFzaWNC
bG9jayogb2xkUm9vdCA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICBBcmd1bWVudHNWZWN0b3Im
IGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290
KS0+dmFsdWU7CisgICAgICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0
czsKKyAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFy
Z3VtZW50cy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Fy
Z3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMudW5jaGVja2Vk
QXBwZW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc3NhRGF0YS5hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSA9IFdU
Rk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICBt
X2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmNsZWFyKCk7CisKICAgICAgICAgbV9ncmFw
aC5tX2Zvcm0gPSBTU0E7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTQxMSw3ICs0NjEs
NiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNTQUNhbGN1bGF0b3IgbV9jYWxj
dWxhdG9yOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICBIYXNoTWFwPFZh
cmlhYmxlQWNjZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJs
ZUZvclZhcmlhYmxlOwogICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX2FyZ3VtZW50TWFwcGlu
ZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAyMjEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBC
cmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNl
IFJldHVybjoKICAgICBjYXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkBA
IC0zOTgsNiArMzk5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dAogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBB
dG9taWNzSXNMb2NrRnJlZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRz
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQXJyYXlTbGljZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY0Myw3ICs1NjQzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJS
ZWcgdGFnR1BSID0gdGFnLmdwcigpOwogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHBheWxv
YWQuZ3ByKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNW
YWx1ZSo+KG1faml0LmppdENvZGUoKS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUqIHB0ciA9ICZy
ZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5jYXRjaE9T
UkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpXTsK
ICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHRyKSwgdGVt
cEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModGVtcEdQ
UiwgVGFnT2Zmc2V0KSwgdGFnR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyh0ZW1wR1BSLCBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZEdQUik7CkBAIC01Njk2
LDYgKzU2OTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICBjYXNlIElkZW50
aXR5V2l0aFByb2ZpbGU6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoK
KyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgInVuZXhwZWN0ZWQgbm9kZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OTksNyAr
NTk5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOiB7Ci0gICAgICAgIEpTVmFs
dWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX2ppdC5qaXRDb2RlKCktPmNh
dGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4
KCldOworICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4o
bV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBHUFIpOwpAQCAt
NjEwNiw2ICs2MTA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6Cisg
ICAgY2FzZSBFbnRyeVN3aXRjaDoKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1l
bnRzOgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEV4dHJhY3RP
U1JFbnRyeUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMxLDYg
KzE5MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiAgICAg
fQogCiAgICAgbV9qaXQuaml0Q29kZSgpLT5maW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7CisgICAg
bV9qaXQuaml0Q29kZSgpLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CiAKICAg
ICBBU1NFUlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
MjEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGFwcGx5Q291bnRzKGRhdGEtPmZhbGxUaHJvdWdoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDogeworICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCB0ZXJtaW5hbCwgIlVuZXhwZWN0ZWQgRW50cnlTd2l0Y2ggaW4gQ1BTIGZvcm0uIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAKICAgICAgICAg
VkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmlzRW50cnlwb2ludChtX2dyYXBo
LmJsb2NrKDApKSk7CisgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFw
aC5ibG9jaygwKSA9PSBtX2dyYXBoLm1fZW50cnlwb2ludHNbMF0pOworCisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpCisgICAgICAgICAgICBW
QUxJREFURSgoYmxvY2spLCBibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAKICAgICAg
ICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIGFs
bCBlbnRyeXBvaW50cyBhcmUgZGVhZC4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBv
aW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7CkBAIC0zOTEsNiArMzk1LDggQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIHZhbGlkYXRlQ1BTKCkKICAgICB7CisgICAgICAgIFZBTElEQVRF
KCgpLCAhbV9ncmFwaC5tX3NzYURhdGEpOworCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTU0OSw2ICs1NTUsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBLaWxsU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAgICAg
ICAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAgICAgICAgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVu
dHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
ISJ1bmV4cGVjdGVkIG5vZGUgdHlwZSBpbiBDUFMiKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewpAQCAtNjM5
LDYgKzY0NywxNCBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogQWRkIG1vcmUgdGhpbmdz
IGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjM0NzEKICAgICAgICAgCisgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpID09IDEpOworICAgICAgICBWQUxJREFURSgoKSwgbV9ncmFwaC5tX2VudHJ5
cG9pbnRzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOworICAgICAgICBWQUxJREFURSgoKSwgbV9n
cmFwaC5tX3NzYURhdGEpOworICAgICAgICBWQUxJREFURSgoKSwgIW1fZ3JhcGguc3NhRGF0YSgp
LmFyZ3VtZW50Rm9ybWF0cy5pc0VtcHR5KCkpOyAvLyBXZSBhbHdheXMgaGF2ZSBhdCBsZWFzdCBv
bmUgZW50cnlwb2ludC4KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6
IG1fZ3JhcGgubV9zc2FEYXRhLT5lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQu
a2V5cygpKQorICAgICAgICAgICAgVkFMSURBVEUoKCksIGVudHJ5cG9pbnRJbmRleCA+IDApOyAv
LyBCeSBjb252ZW50aW9uLCAwIGlzIHRoZSBlbnRyeXBvaW50IGluZGV4IGZvciB0aGUgb3BfZW50
ZXIgZW50cnlwb2ludC4KKwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgIGlmICghYmxvY2spCkBAIC03NDAsNiArNzU2LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
ICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSA9PSBtX2dyYXBoLnNzYURh
dGEoKS5udW1iZXJPZkVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgorICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmVudHJ5cG9pbnRJbmRleCgp
IDwgbV9ncmFwaC5zc2FEYXRhKCkubnVtYmVyT2ZFbnRyeXBvaW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LApAQCAtNzgwLDYgKzgwNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5k
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoKSB7IH0K
KwogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSkKICAgICB7CiAg
ICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIyMTMyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBF
eHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOgogICAgIGNh
c2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBTa2lwU2NvcGU6CiAgICAgY2FzZSBHZXRHbG9iYWxPYmpl
Y3Q6CkBAIC0yNDUsNiArMjQ2LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IEVudHJ5U3dpdGNoOgogICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgVHlwZU9mOgogICAgIGNh
c2UgUHV0QnlJZDoKQEAgLTMwMCw2ICszMDIsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hv
cjoKICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5
cG9pbnRBcmd1bWVudHM6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNp
b24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3Rh
dGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgfSk7CiAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworCiAgICAgaWYgKHN0YXRlLmZpbmFsaXplci0+
YjNDb2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBzdGF0ZS5h
bGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTUyLDkgKzE1Mywx
OCBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIGNv
ZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9y
aWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkp
LCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CiAKICAgICBzdGF0ZS5nZW5l
cmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRGdW5jdGlvbj4oCi0gICAgICAg
IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIt
PmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKDApKSk7CiAgICAgc3RhdGUu
aml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9k
dWN0cygpKTsKIAorICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGguc3NhRGF0YSgpLmVu
dHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgeworICAgICAgICB1bnNpZ25lZCBj
YXRjaEJ5dGVjb2RlT2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlw
b2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1l
bnRGb3JtYXRzID0gc3RhdGUuZ3JhcGguc3NhRGF0YSgpLmFyZ3VtZW50Rm9ybWF0c1tlbnRyeXBv
aW50SW5kZXhdOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRy
eXBvaW50KAorICAgICAgICAgICAgY2F0Y2hCeXRlY29kZU9mZnNldCwgc3RhdGUuZmluYWxpemVy
LT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJl
bChlbnRyeXBvaW50SW5kZXgpKS5leGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGFyZ3VtZW50
Rm9ybWF0cykpOworICAgIH0KKyAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRj
aEVudHJ5cG9pbnRzKCk7CisKICAgICBpZiAoQjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3Nl
bWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2RlKCkuZGlzYXNzZW1ibGVyKCkpIHsKICAgICAgICAgUHJp
bnRTdHJlYW0mIG91dCA9IFdURjo6ZGF0YUZpbGUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkF0b21pY3NPYmpl
Y3QuaCIKQEAgLTE0OSw2ICsxNTAsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICJfIiwg
Y29kZUJsb2NrKCktPmhhc2goKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmFtZSA9
ICJqc0JvZHkiOworCisgICAgICAgIHsKKyAgICAgICAgICAgIERGRzo6R3JhcGg6OlNTQURhdGEm
IHNzYURhdGEgPSBtX2dyYXBoLnNzYURhdGEoKTsKKyAgICAgICAgICAgIG1fcHJvYy5zZXROdW1F
bnRyeXBvaW50cyhzc2FEYXRhLm51bWJlck9mRW50cnlwb2ludHMpOworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLm1fY29kZUJsb2NrOworCisgICAgICAgICAgICBS
ZWZQdHI8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3Ig
PSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KAor
ICAgICAgICAgICAgICAgIFtjb2RlQmxvY2tdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6
Q29kZSYgY29kZSkgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50
SW5kZXggOiBzc2FEYXRhLmVudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlz
KCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaEVudHJ5cG9pbnRJbmRl
eCAhPSAwKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50
cnlwb2ludChjYXRjaEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0
Y2hPU1JFbnRyeSkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2Fs
cyA9IHN0ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAv
LyBNYWtlIHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1
ZmZlci4KKyAgICAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5jYXRjaE9T
UkVudHJ5QnVmZmVyID0gbV9ncmFwaC5tX3ZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihK
U1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwogCkBAIC0x
NjAsNyArMTg1LDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVl
bmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNl
dEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMg
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBtX291dC5u
ZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMTc0LDgg
KzIwMCw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kg
Zm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXph
dGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwotICAg
ICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHByb2xvZ3VlLCBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3Vs
YXRpb25zKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIHByb2xv
Z3VlKTsKICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CiAKICAgICAgICAgc2l6ZV90IHNp
emVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9j
YWw7CkBAIC0yNTcsNTEgKzI4Myw1NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jhc2ljQmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJs
b2NrKDApKTsKLSAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgotICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5jbGVhcigpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9w
ZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkp
ID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1f
bm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2lu
KDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKLSAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9n
cmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgIG1fb3V0LnNldE9yaWdpbihub2RlKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxs
b3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxv
YWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3Qg
cHV0IGluCi0gICAgICAgICAgICAgICAgLy8gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3Vt
ZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0cyBiZWZvcmUgaXQuIFRoaXMKLSAgICAgICAgICAg
ICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgotICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1l
bnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFs
dWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1
ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZv
ciBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLnNzYURhdGEoKS5u
dW1iZXJPZkVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnNbMF0gPSBjYWxsRW50
cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG1fZ3JhcGguc3NhRGF0YSgpLm51bWJlck9mRW50cnlwb2ludHM7ICsraSkgewor
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgb3RoZXIgZW50cnlwb2ludCBp
cyBhbiBvcF9jYXRjaCBlbnRyeXBvaW50LgorICAgICAgICAgICAgICAgIC8vIFdlIGRvIE9TUiBl
bnRyeSBhdCBvcF9jYXRjaCwgYW5kIHdlIHByb3ZlIGFyZ3VtZW50IGZvcm1hdHMgYmVmb3JlCisg
ICAgICAgICAgICAgICAgLy8ganVtcGluZyB0byBGVEwgY29kZSwgc28gd2UgZG9uJ3QgbmVlZCB0
byBjaGVjayBhcmd1bWVudCB0eXBlcyBoZXJlCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZXNl
IGVudHJ5cG9pbnRzLgorICAgICAgICAgICAgICAgIHN1Y2Nlc3NvcnNbaV0gPSBmaXJzdERGR0Jh
c2ljQmxvY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fb3V0LmVudHJ5U3dpdGNo
KHN1Y2Nlc3NvcnMpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2FsbEVudHJ5cG9pbnRB
cmd1bWVudFNwZWN1bGF0aW9ucywgbV9oYW5kbGVFeGNlcHRpb25zKTsKKworICAgICAgICAgICAg
bV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2Rl
T3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sg
QXJndW1lbnRzLgorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5
Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CisgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUoJm1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpKSk7CisgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGguc3NhRGF0YSgpLmFyZ3VtZW50Rm9ybWF0c1swXVtpXSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9maWxlLCBpc05vdEludDMy
KGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aGVkQ2VsbDoKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9y
bWF0IGZvciBhcmd1bWVudCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtX291dC5qdW1wKGZpcnN0REZH
QmFzaWNCbG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXQuanVtcChmaXJzdERGR0Jhc2lj
QmxvY2spOworCiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVFeGNlcHRpb25zLCBm
aXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZXhj
ZXB0aW9uSGFuZGxlciA9IHN0YXRlLT5leGNlcHRpb25IYW5kbGVyOwpAQCAtNTEwLDYgKzU0Miw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAg
ICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOgorICAgICAgICAgICAgY29tcGlsZUV4dHJh
Y3RDYXRjaExvY2FsKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRTdGFj
azoKICAgICAgICAgICAgIGNvbXBpbGVHZXRTdGFjaygpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC05MzgsNiArOTczLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBERkc6OlN3aXRjaDoKICAg
ICAgICAgICAgIGNvbXBpbGVTd2l0Y2goKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERGRzo6RW50cnlTd2l0Y2g6CisgICAgICAgICAgICBjb21waWxlRW50cnlTd2l0Y2goKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERGRzo6UmV0dXJuOgogICAgICAgICAg
ICAgY29tcGlsZVJldHVybigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQ4LDYgKzExODYs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9t
VmFsdWU6CiAgICAgICAgIGNhc2UgS2lsbFN0YWNrOgorICAgICAgICBjYXNlIEluaXRpYWxpemVF
bnRyeXBvaW50QXJndW1lbnRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5v
ZGUgaW4gRlRMIGJhY2tlbmQiKTsKQEAgLTE1MTgsMTYgKzE1NTcsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZm
ZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9v
dXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkp
OwogICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKCkKKyAgICB7Cisg
ICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFC
dWZmZXIoKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRl
KGJ1ZmZlciArIG1fbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCkpKSk7CisgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldFN0YWNrKCkKICAgICB7Ci0gICAgICAgIC8vIEdldExvY2FscyBh
cmlzZSBvbmx5IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4gRm9yIGFyZ3Vt
ZW50cywgd2UgbWlnaHQgaGF2ZQotICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZCBpdC4KLSAgICAg
ICAgaWYgKExWYWx1ZSB2YWx1ZSA9IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuZ2V0KG1fbm9kZSkp
IHsKLSAgICAgICAgICAgIHNldEpTVmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5sb2NhbCk7CiAgICAgICAgIApAQCAtNzc4
Nyw2ICs3ODI1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHN3aXRjaCBraW5kIik7CiAgICAgfQorCisgICAgdm9pZCBjb21w
aWxlRW50cnlTd2l0Y2goKQorICAgIHsKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBzdWNj
ZXNzb3JzOworICAgICAgICBmb3IgKERGRzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ub2Rl
LT5lbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXMpCisgICAgICAgICAgICBzdWNjZXNzb3JzLmFwcGVu
ZChsb3dCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vz
c29ycyk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVJldHVybigpCiAgICAgewpAQCAt
MTI1NzgsNiArMTI2MjQsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFwcGVuZE9TUkV4
aXQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgbV9vcmlnaW4pOwog
ICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgY29uc3QgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSYg
cHJvZmlsZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgeworICAgICAgICBhcHBlbmRPU1JF
eGl0KGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBmYWlsQ29uZGl0aW9uLCBtX29yaWdpbik7Cisg
ICAgfQogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQpCiAgICAgewpAQCAt
MTQxMDIsMTYgKzE0MTU0LDI5IEBAIHByaXZhdGU6CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciog
YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhp
Z2hWYWx1ZSkKICAgICB7CisgICAgICAgIHJldHVybiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihs
b3dWYWx1ZSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fbm9kZSwg
aGlnaFZhbHVlKSk7CisgICAgfQorCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4
aXREZXNjcmlwdG9yKEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBjb25zdCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlJiBwcm9maWxlKQorICAgIHsKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygKLSAgICAgICAgICAgIGxvd1Zh
bHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9u
b2RlLCBoaWdoVmFsdWUpLAorICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUs
CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50
cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2Nh
bHMoKSk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAogICAgICAgICBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBM
VmFsdWUgZmFpbENvbmRpdGlvbiwgCiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlz
RXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGVuZE9T
UkV4aXQoa2luZCwgbG93VmFsdWUsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihtX25vZGUsIGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLCBvcmln
aW4sIGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kT1NS
RXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIGNv
bnN0IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIExWYWx1ZSBmYWlsQ29u
ZGl0aW9uLCAKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5k
bGVyID0gZmFsc2UpCisgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTog
IiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJs
ZVJlY292ZXJpZXMuaXNFbXB0eSgpKQpAQCAtMTQxNDYsMTIgKzE0MjExLDE3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbigKLSAgICAg
ICAgICAgIG1fb3V0LnNwZWN1bGF0ZShmYWlsQ29uZGl0aW9uKSwga2luZCwgbG93VmFsdWUsIGhp
Z2hWYWx1ZSwgb3JpZ2luKTsKKyAgICAgICAgICAgIG1fb3V0LnNwZWN1bGF0ZShmYWlsQ29uZGl0
aW9uKSwga2luZCwgbG93VmFsdWUsIHByb2ZpbGUsIG9yaWdpbik7CiAgICAgfQogCiAgICAgdm9p
ZCBibGVzc1NwZWN1bGF0aW9uKENoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikK
ICAgICB7Ci0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVu
ZE9TUkV4aXREZXNjcmlwdG9yKGxvd1ZhbHVlLCBoaWdoVmFsdWUpOworICAgICAgICBibGVzc1Nw
ZWN1bGF0aW9uKHZhbHVlLCBraW5kLCBsb3dWYWx1ZSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKG1fbm9kZSwgaGlnaFZhbHVlKSwgb3JpZ2luKTsKKyAgICB9CisKKyAg
ICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQs
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBjb25zdCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlJiBwcm9maWxlLCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGxvd1Zh
bHVlLCBwcm9maWxlKTsKICAgICAgICAgCiAgICAgICAgIHZhbHVlLT5hcHBlbmRDb2xkQW55cyhi
dWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9yaWdpbi5mb3JFeGl0LCBsb3dWYWx1
ZSkpOwogCkBAIC0xNDYzOCw3ICsxNDcwOCw2IEBAIHByaXZhdGU6CiAgICAgT3V0cHV0IG1fb3V0
OwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9n
dWU7CiAgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOwogICAgIEhhc2hNYXA8REZH
OjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIApAQCAtMTQ2NTUsMTEg
KzE0NzI0LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX3N0b3JhZ2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9kb3VibGVWYWx1ZXM7CiAgICAgCi0gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0
IHByZXZlbnRzIEIzIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KLSAgICAvLyBJdCdzIG5pY2UgdG8gaGF2ZSB0aGVzZSBvcHRpbWl6YXRpb25zIG9uIG91ciBl
bmQgYmVjYXVzZSB3ZSBjYW4gZ3VhcmFudGVlIHRoZW0gYSBiaXQgYmV0dGVyLgotICAgIC8vIFBy
b2JhYmx5IGFsc28gc2F2ZXMgQjMgY29tcGlsZSB0aW1lLgotICAgIEhhc2hNYXA8Tm9kZSosIExW
YWx1ZT4gbV9sb2FkZWRBcmd1bWVudFZhbHVlczsKLSAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBM
VmFsdWU+IG1fcGhpczsKICAgICAKICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Ig
bV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjEsNiArODYxLDE0IEBAIHZv
aWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGkKICAgICAgICAgdmFsdWUudmFs
dWUoKS0+YXM8QjM6OlVwc2lsb25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7CiB9CiAKK3ZvaWQgT3V0
cHV0OjplbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiBjYXNlcykKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChjYXNlcy5zaXplKCkgPT0gbV9wcm9jLm51bUVudHJ5cG9pbnRzKCkp
OworICAgIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgb3Jp
Z2luKCkpOworICAgIGZvciAoTEJhc2ljQmxvY2sgYmxvY2sgOiBjYXNlcykKKyAgICAgICAgbV9i
bG9jay0+YXBwZW5kU3VjY2Vzc29yKEZyZXF1ZW50ZWRCbG9jayhibG9jaykpOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjIxMzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDI5LDYgKzQyOSw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZW50
cnlTd2l0Y2goY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYpOworCiAgICAgdm9pZCByZXQoTFZh
bHVlKTsKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIxMzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgogI2luY2x1ZGUg
IkV2YWxDb2RlQmxvY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb25GdXp6LmgiCisjaW5jbHVkZSAi
RlRMT1NSRW50cnkuaCIKICNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKICNpbmNsdWRlICJGdW5j
dGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpAQCAtMTUzMywxMCAr
MTUzNCwxNCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQ29kZUJsb2Nr
KiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5yZXBsYWNlbWVudCgp
OwotICAgIGlmIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRG
R0pJVCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1l
bnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBzd2l0Y2ggKG9wdGltaXplZFJlcGxhY2VtZW50LT5q
aXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICBjYXNlIEpJVENvZGU6
OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihERkc6OnByZXBhcmVD
YXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCkBA
IC0xNTQ2LDggKzE1NTEsMTQgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JF
bnRlcgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAg
ICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpOwotICAgIGlmIChvcHRpbWl6ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCkKKworICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkg
eworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50
cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CiAgICAg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVJbmRleCArIDNdLnUucG9pbnRlcik7Cg==
</data>
<flag name="review"
          id="339615"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319863</attachid>
            <date>2017-09-04 15:30:40 -0700</date>
            <delta_ts>2017-09-04 16:06:56 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>86178</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxNy0wOS0wNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBTdXBwb3J0IGNvbXBpbGluZyBjYXRjaCBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgb3BfY2F0Y2gg
aW4gdGhlIEZUTC4gSXQgZXh0ZW5kcyB0aGUgREZHIGltcGxlbWVudGF0aW9uCisgICAgICAgIGJ5
IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHLVNTQS4gVGhpcyBwYXRjaCBp
bXBsZW1lbnRzIHRoaXMKKyAgICAgICAgYnkgaW50cm9kdWNpbmcgYW4gRW50cnlTd2l0Y2ggbm9k
ZS4gV2hlbiBjb252ZXJ0aW5nIHRvIFNTQSwgd2UgaW50cm9kdWNlIGEgbmV3CisgICAgICAgIHJv
b3QgYmxvY2sgd2l0aCBhbiBFbnRyeVN3aXRjaCB0aGF0IGhhcyB0aGUgcHJldmlvdXMgREZHIGVu
dHJ5cG9pbnRzIGFzIGl0cworICAgICAgICBzdWNjZXNzb3JzLiBCeSBjb252ZW50aW9uLCB3ZSBw
aWNrIHRoZSB6ZXJvdGggZW50cnkgcG9pbnQgaW5kZXggdG8gYmUgdGhlCisgICAgICAgIG9wX2Vu
dGVyIGVudHJ5cG9pbnQuIExpa2UgaW4gQjMsIGluIERGRy1TU0EsIEVudHJ5U3dpdGNoIGp1c3Qg
YWN0cyBsaWtlIGEKKyAgICAgICAgc3dpdGNoIG92ZXIgdGhlIGVudHJ5cG9pbnQgaW5kZXggYXJn
dW1lbnQuIERGRzo6RW50cnlTd2l0Y2ggaW4gdGhlIEZUTAorICAgICAgICBzaW1wbHkgbG93ZXJz
IHRvIEIzOjpFbnRyeVN3aXRjaC4gVGhlIEVudHJ5U3dpdGNoIGluIHRoZSByb290IGJsb2NrIHRo
YXQKKyAgICAgICAgU1NBQ29udmVyc2lvbiBjcmVhdGVzIGNhbiBub3QgZXhpdCBiZWNhdXNlIHdl
IHdvdWxkIGJvdGggbm90IGtub3cgd2hlcmUgdG8gZXhpdAorICAgICAgICB0byBpbiB0aGUgcHJv
Z3JhbTogd2Ugd291bGQgbm90IGhhdmUgdmFsaWQgT1NSIGV4aXQgc3RhdGUuIFRoaXMgZGVzaWdu
IGFsc28KKyAgICAgICAgbWFuZGF0ZXMgdGhhdCBhbnl0aGluZyB3ZSBob2lzdCBhYm92ZSBFbnRy
eVN3aXRjaCBpbiB0aGUgbmV3IHJvb3QgYmxvY2sKKyAgICAgICAgY2FuIG5vdCBleGl0IHNpbmNl
IHRoZXkgYWxzbyBkbyBub3QgaGF2ZSB2YWxpZCBPU1IgZXhpdCBzdGF0ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEgbmV3IG1ldGFkYXRhIG5vZGUgbmFtZWQgSW5p
dGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHMuCisgICAgICAgIEluaXRpYWxpemVFbnRyeXBvaW50
QXJndW1lbnRzIGlzIGEgbWV0YWRhdGEgbm9kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBmbHVzaCBm
b3JtYXQgZm9yCisgICAgICAgIHRoZSBhcmd1bWVudHMgYXQgYSBnaXZlbiBlbnRyeXBvaW50LiBG
b3IgYSBnaXZlbiBlbnRyeXBvaW50IGluZGV4LCB0aGlzIG5vZGUKKyAgICAgICAgdGVsbHMgQUkg
YW5kIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzIHdoYXQgdGhlIGZsdXNoIGZvcm1hdCBmb3IgZWFj
aCBhcmd1bWVudAorICAgICAgICBpcy4gVGhpcyBhbGxvd3MgZWFjaCBpbmRpdmlkdWFsIGVudHJ5
cG9pbnQgdG8gaGF2ZSBhbiBpbmRlcGVuZGVudCBzZXQgb2YKKyAgICAgICAgYXJndW1lbnQgdHlw
ZXMuIEN1cnJlbnRseSwgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2UgYmVjYXVzZSBBcmd1
bWVudFBvc2l0aW9uCisgICAgICAgIHVuaWZpZXMgZmx1c2ggZm9ybWF0cywgYnV0IHRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHdlIHByb2JhYmx5IHdhbnQKKyAgICAgICAgdG8gbW9k
aWZ5IGluIHRoZSBmdXR1cmUuIFNTQUNvbnZlcnNpb24gd2lsbCBhZGQgSW5pdGlhbGl6ZUVudHJ5
cG9pbnRBcmd1bWVudHMKKyAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoIG9mIHRoZSBv
cmlnaW5hbCBERkcgZW50cnlwb2ludCBibG9ja3MuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gYWRkcyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBwcm9sb2d1ZSBjb2Rl
IGdlbmVyYXRvcnMgaW4gQWlyLgorICAgICAgICBUaGlzIGFsbG93cyB0aGUgRlRMIHRvIHNwZWNp
ZnkgYSBjdXN0b20gcHJvbG9ndWUgZm9yIGNhdGNoIGVudHJ5cG9pbnRzIHRoYXQKKyAgICAgICAg
bWF0Y2hlcyB0aGUgb3BfY2F0Y2ggT1NSIGVudHJ5IGNhbGxpbmcgY29udmVudGlvbiB0aGF0IHRo
ZSBERkcgdXNlcy4gVGhpcyB3YXksCisgICAgICAgIHRoZSBiYXNlbGluZSBKSVQgY29kZSBPU1Ig
ZW50ZXJzIGludG8gb3BfY2F0Y2ggdGhlIHNhbWUgd2F5IGJvdGggaW4gdGhlIERGRworICAgICAg
ICBhbmQgdGhlIEZUTC4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHVzZSB0aGlzIHNhbWUgbWVjaGFu
aXNtIHRvIHBlcmZvcm0gc3RhY2sKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tzIGluc3RlYWQgb2Yg
dXNpbmcgYSBwYXRjaHBvaW50LgorCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppc0VudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjplbnRyeXBvaW50SW5kZXgpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldFByb2xvZ3VlRm9yRW50cnlwb2lu
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnByb2xvZ3VlR2VuZXJhdG9yRm9yRW50
cnlwb2ludCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Jhc2lj
QmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkcuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzZWxlY3RDRkcpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6
CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bW1vbkRhdGE6OnNocmlua1RvRml0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpm
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Y2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphcHBlbmRDYXRjaEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmludmFsaWRhdGVDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjplbnN1
cmVDUFNDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aXNFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VUb1N1Y2Nlc3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZTo6ZmluYWxpemVPU1JFbnRyeXBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVj
b2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFwcGVuZENh
dGNoRW50cnlwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlQ2F0Y2hFbnRyeXBvaW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bWFrZUNhdGNoT1NSRW50cnlCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRW50cnlTd2l0Y2gpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmVu
dHJ5U3dpdGNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjplbnRyeXBvaW50SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgor
ICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OlNTQUNvbnZlcnNpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBo
YXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUVudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Ymxlc3NTcGVjdWxhdGlvbik6CisgICAgICAgICogZnRsL0ZU
TE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplbnRyeVN3aXRjaCk6Cisg
ICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKwogMjAxNy0wOS0wNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtXZWJJRExdIFVuaWZ5IGFuZCBzaW1wbGlmeSBFbmFibGVCeVNldHRpbmdzIHdpdGggdGhlIHJl
c3Qgb2YgdGhlIHJ1bnRpbWUgc2V0dGluZ3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBA
IENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5
cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5j
dGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUgYW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisK
ICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2st
PmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiArMTY4LDE2IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBv
aW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9pbnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fZW50cnlwb2ludHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6
OnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYm
IHJlZ2lzdGVyQXRPZmZzZXRMaXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJl
Y3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9m
ZnNldExpc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJl
dmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFz
cyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2Ns
YXNzIENvZGU7CiBjbGFzcyBEaXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBT
aGFyZWRUYXNrPFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hl
Y2tHZW5lcmF0b3I7CiAKK3R5cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKEND
YWxsSGVscGVycyYsIENvZGUmKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRv
ckZ1bmN0aW9uPiBQcm9sb2d1ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlz
IHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3Jl
IGJ5dGVzIHRoYW4gdGhlCiAvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUg
aWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQK
IC8vIDQwTUIgb2YgQWlyLgpAQCAtMTY1LDcgKzE2OSwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9l
bnRyeXBvaW50czsgfQogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBi
b29sIGlzRW50cnlwb2ludChCYXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgLy8gTm90ZTog
SXQgaXMgb25seSB2YWxpZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgTG93ZXJFbnRyeVN3
aXRjaC4KKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBvaW50SW5kZXgoQmFzaWNC
bG9jayopIGNvbnN0OworICAgIHZvaWQgc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCwgUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBnZW5lcmF0b3IpCisg
ICAgeworICAgICAgICAvLyBOb3RlOiBXZSBhbGxvdyB0aGlzIHRvIGJlIGNhbGxlZCBldmVuIGJl
Zm9yZSB3ZSBzZXQgbV9lbnRyeXBvaW50cyBqdXN0IGZvciBjb252ZW5pZW5jZSB0byB1c2VycyBv
ZiB0aGlzIEFQSS4KKyAgICAgICAgbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRvci5zZXQoZW50
cnlwb2ludEluZGV4LCBnZW5lcmF0b3IpOworICAgIH0KKyAgICBSZWZQdHI8UHJvbG9ndWVHZW5l
cmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yRm9yRW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50
SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRv
ci5nZXQoZW50cnlwb2ludEluZGV4KTsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHVzZWQgYnkg
bG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rvcj4KICAgICB2
b2lkIHNldEVudHJ5cG9pbnRzKFZlY3RvciYmIHZlY3RvcikKQEAgLTM1Myw2ICszNjgsNyBAQCBw
cml2YXRlOgogICAgIFN0YWNrU2xvdCogbV9jYWxsZWVTYXZlU3RhY2tTbG90IHsgbnVsbHB0ciB9
OwogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IG1fZW50cnlwb2ludHM7IC8vIFRoaXMgaXMg
ZW1wdHkgdW50aWwgYWZ0ZXIgbG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIFZlY3RvcjxDQ2FsbEhl
bHBlcnM6OkxhYmVsPiBtX2VudHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwg
Y29kZSBnZW5lcmF0aW9uLgorICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxQcm9sb2d1ZUdl
bmVyYXRvcj4sIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtX2VudHJ5cG9pbnRJbmRleFRvR2VuZXJhdG9yOwogICAg
IFJlZlB0cjxXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2VuZXJh
dG9yOwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGlzYXNzZW1ibGVyPiBtX2Rpc2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA4LDIxICsyMDgsMjggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgZGlzYXNzZW1ibGVy
LT5zdGFydEJsb2NrKGJsb2NrLCBqaXQpOyAKIAotICAgICAgICBpZiAoY29kZS5pc0VudHJ5cG9p
bnQoYmxvY2spKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBv
aW50SW5kZXggPSBjb2RlLmVudHJ5cG9pbnRJbmRleChibG9jaykpIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb2RlLmlzRW50cnlwb2ludChibG9jaykpOworCiAgICAgICAgICAgICBpZiAoZGlzYXNz
ZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRFbnRyeXBvaW50KGpp
dCk7IAogCi0gICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAg
ICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgaXNBUk02NCgpKTsKLSAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZy
YW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGlmIChSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0g
Y29kZS5wcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQoKmVudHJ5cG9pbnRJbmRleCkpCisg
ICAgICAgICAgICAgICAgcHJvbG9ndWVHZW5lcmF0b3ItPnJ1bihqaXQsIGNvZGUpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwg
aXNBUk02NCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0LmVt
aXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwogCiAgICAgICAg
ICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+ZW5k
RW50cnlwb2ludChqaXQpOyAKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVCghY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIEFT
U0VSVChibG9jay0+c2l6ZSgpID49IDEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBERkcgZXhl
Y3V0aW9uLgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBLaWxs
U3RhY2s6IHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGEgaGludCB0ZWxsaW5nIHVzIHRoYXQg
dGhlIE9TUiBzdGF0ZSBvZiB0aGUgbG9jYWwgaXMgbm8gbG9uZ2VyIGluc2lkZSB0aGUKICAgICAg
ICAgLy8gZmx1c2hlZCBkYXRhLgpAQCAtMjczLDcgKzI3MywzMyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KICAg
ICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
aXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2FzZSBJbml0aWFs
aXplRW50cnlwb2ludEFyZ3VtZW50czogeworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSBub2RlLT5lbnRyeXBvaW50SW5kZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNo
Rm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRy
eXBvaW50SW5kZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoYXJndW1l
bnQpOworICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdKSB7Cisg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXRU
eXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZENlbGw6CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVl
OgorICAgICAgICAgICAgICAgIHZhbHVlLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYg
dGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpA
QCAtMTg2Niw2ICsxODkyLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAg
ICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDggKzIyMSw2
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKICAgICBm
bG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHJlc2Vy
dmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjIx
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyNjIsOSArNTI2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRj
aCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhdGNoIGluIHRo
ZSBGVEwuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTM5NgorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0
Y2gpOwogICAgICAgICAgICAgfQogCkBAIC02NDY1LDggKzY0NjMsNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAg
ICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCi0gICAgbV9ncmFwaC5tX2Nwc0NG
RyA9IHN0ZDo6bWFrZV91bmlxdWU8Q1BTQ0ZHPihtX2dyYXBoKTsKLSAgICAKICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICBpZiAoIWJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5o
CShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw3IEBAIHVzaW5nIFNTQUNGRyA9IENGRzsKIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxULCBDUFNDRkc+Ojp2YWx1ZT46OnR5cGU+CiBDUFNDRkcmIHNlbGVjdENGRyhH
cmFwaCYgZ3JhcGgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ3JhcGgubV9jcHNDRkcpOwotICAg
IHJldHVybiAqZ3JhcGgubV9jcHNDRkc7CisgICAgcmV0dXJuIGdyYXBoLmVuc3VyZUNQU0NGRygp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgU1NBQ0ZHPjo6dmFsdWU+Ojp0eXBlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIyMTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MjYsNiArNDI2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIFN3aXRj
aDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNh
c2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgUmV0dXJuOgpAQCAtNDM3LDYgKzQzOCw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFByb2ZpbGVU
eXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgIGNhc2UgUHV0SGludDoKKyAg
ICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIy
MTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3Rh
dGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3aG9z
ZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRo
ZXkKICAgICAvLyBub3JtYWxseSBjbG9iYmVyLgogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBNb3ZIaW50
OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFB1dEhpbnQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDIyMTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBDb21tb25EYXRhOjpzaHJpbmtUb0ZpdCgpCiAg
ICAgY29kZU9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKICAgICB3ZWFrUmVmZXJlbmNlcy5zaHJpbmtU
b0ZpdCgpOwogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CisgICAgY2F0Y2hFbnRyeXBv
aW50cy5zaHJpbmtUb0ZpdCgpOwogfQogCiBzdGF0aWMgU3RhdGljTG9jayBwY0NvZGVCbG9ja01h
cExvY2s7CkBAIC0xOTMsNiArMTk0LDE3IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnMKICAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2Vz
KHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAordm9pZCBDb21tb25EYXRhOjpmaW5hbGl6ZUNhdGNo
RW50cnlwb2ludHMoKQoreworICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCks
IGNhdGNoRW50cnlwb2ludHMuZW5kKCksCisgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9p
bnREYXRhJiBhLCBjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBiKSB7IHJldHVybiBhLmJ5dGVj
b2RlSW5kZXggPCBiLmJ5dGVjb2RlSW5kZXg7IH0pOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgKyAxIDwgY2F0Y2hFbnRyeXBvaW50cy5zaXplKCk7
ICsraSkKKyAgICAgICAgQVNTRVJUKGNhdGNoRW50cnlwb2ludHNbaV0uYnl0ZWNvZGVJbmRleCA8
PSBjYXRjaEVudHJ5cG9pbnRzW2kgKyAxXS5ieXRlY29kZUluZGV4KTsKKyNlbmRpZgorfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAy
MjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgorI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgpAQCAtOTAs
NiArOTEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENv
ZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVha3BvaW50KHZvaWQqIGFkZHJl
c3MpOwogCisgICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIHVuc2lnbmVkPigKKyAgICAgICAg
ICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUlu
ZGV4LAorICAgICAgICAgICAgW10gKGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0tPmJ5dGVjb2RlSW5kZXg7IH0pOworICAgIH0KKworICAgIHZvaWQgYXBwZW5k
Q2F0Y2hFbnRyeXBvaW50KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHZvaWQqIG1hY2hpbmVDb2Rl
LCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHsKKyAgICAgICAg
Y2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBvaW50RGF0YSB7IG1hY2hpbmVDb2Rl
LCAgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpLCBieXRlY29kZUluZGV4IH0pOworICAgIH0KKwor
ICAgIHZvaWQgZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisKICAgICB1bnNpZ25lZCByZXF1
aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQsIHJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQpOwpAQCAtMTA2LDExICsxMjEsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7CiAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOworICAgIFZlY3RvcjxDYXRjaEVudHJ5
cG9pbnREYXRhPiBjYXRjaEVudHJ5cG9pbnRzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwogICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAgQmFnPEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1l
bnRzOwogICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZmZXI7CiAgICAg
UmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CiAgICAgYm9vbCBsaXZl
bmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5k
IHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2lu
dEFyZ3VtZW50czoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBFeGl0T0s6CiAgICAg
Y2FzZSBQaGFudG9tOgpAQCAtMTgzLDYgKzE4NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2Fz
ZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoKICAgICBj
YXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIExhc3ROb2RlVHlw
ZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKQEAgLTIwMTQsNiArMjAxNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgICAgIGNhc2Ug
TG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBJbml0aWFsaXpl
RW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBj
YXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2
OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwgY29u
dGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQorICAgIGlmIChub2Rl
LT5pc0VudHJ5U3dpdGNoKCkpIHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gbm9k
ZS0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLT5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgQnJh
bmNoVGFyZ2V0KGRhdGEtPmNhc2VzW2ldKSk7CisgICAgfQogICAgIENsb2JiZXJTZXQgcmVhZHM7
CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CiAgICAgYWRkUmVhZHNBbmRXcml0ZXMoKnRoaXMsIG5v
ZGUsIHJlYWRzLCB3cml0ZXMpOwpAQCAtNTE1LDggKzUyMCwxMCBAQCB2b2lkIEdyYXBoOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5w
cmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwg
bV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRl
OiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3Vu
dFN0YXRlLCAiXG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50
KCIgIEFyZ3VtZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxu
Iik7CisgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRy
eXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXpl
KCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50
IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIs
IGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAg
ICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9B
cmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMi
LCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKQEAg
LTgyNCw2ICs4MzEsNyBAQCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKICAgICBtX2NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gbnVsbHB0cjsKICAgICBtX2JhY2t3YXJkc0RvbWluYXRv
cnMgPSBudWxscHRyOwogICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2Nwc0NG
RyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgR3JhcGg6OmludmFsaWRhdGVOb2RlTGl2ZW5lc3MoKQpA
QCAtMTU0Myw2ICsxNTUxLDE0IEBAIHZvaWQgR3JhcGg6OmxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAg
ICAgbG9nREZHQXNzZXJ0aW9uRmFpbHVyZSgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGlu
ZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0
aW9uLCBhc3NlcnRpb24pOwogfQogCitDUFNDRkcmIEdyYXBoOjplbnN1cmVDUFNDRkcoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1faXNJblNTQUNvbnZlcnNpb24p
OworICAgIGlmICghbV9jcHNDRkcpCisgICAgICAgIG1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1
ZTxDUFNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY3BzQ0ZHOworfQorCiBDUFNEb21pbmF0
b3JzJiBHcmFwaDo6ZW5zdXJlQ1BTRG9taW5hdG9ycygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NBQ29udmVyc2lvbik7CkBAIC0xNjEwLDIxICsxNjI2
LDE0IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KCp0aGlzKSkgewotICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gWyZdICgp
IC0+IFZhbHVlUHJvZmlsZSogewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0Fy
Z3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9k
ZSA9IG1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVu
dF07CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJn
dW1lbnQgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX2VudHJ5cG9pbnRUb0Fy
Z3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnBy
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAg
ICAgICAgICB9KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9k
ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21M
YXp5T3BlcmFuZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtOTE5LDYgKzkxOSw3IEBAIHB1YmxpYzoKICAgICBCYWNrd2FyZHNDRkcm
IGVuc3VyZUJhY2t3YXJkc0NGRygpOwogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJh
Y2t3YXJkc0RvbWluYXRvcnMoKTsKICAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5z
dXJlQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKKyAgICBDUFNDRkcmIGVuc3VyZUNQU0NG
RygpOwogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG9ubHkgbWFrZXMgc2Vuc2UgdG8gY2FsbCBh
ZnRlciBieXRlY29kZSBwYXJzaW5nCiAgICAgLy8gYmVjYXVzZSBpdCBxdWVyaWVzIHRoZSBtX2hh
c0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xlYW4gd2hvc2UgdmFsdWUKQEAgLTkzOCw2ICs5MzksMTQg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiAgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lzSW5TU0FDb252ZXJz
aW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRlbiB0byB3b3JrIGR1cmluZyBTU0EgY29udmVyc2lvbi4i
KTsKKworICAgICAgICBpZiAobV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgQVNTRVJUKG1f
ZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2lu
dHMuY29udGFpbnModGhpcy0+YmxvY2soMCkpKTsKKyAgICAgICAgICAgIHJldHVybiBibG9jayA9
PSB0aGlzLT5ibG9jaygwKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChtX2VudHJ5cG9pbnRz
LnNpemUoKSA8PSA0KSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fZW50cnlwb2ludHMu
Y29udGFpbnMoYmxvY2spOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9p
bnRUb0FyZ3VtZW50cy5jb250YWlucyhibG9jaykpOwpAQCAtOTY2LDEyICs5NzUsMTMgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIEluIENQUywgdGhpcyBpcyBhbGwgb2YgdGhlIFNldEFyZ3VtZW50
IG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sKICAgICAv
LyB0aGF0IHN1cnZpdmVkIERDRS4gQWxsIG9mIHRoZW0gZXhjZXB0IG1heWJlICJ0aGlzIiB3aWxs
IHN1cnZpdmUgRENFLCBiZWNhdXNlIG9mIHRoZSBGbHVzaAotICAgIC8vIG5vZGVzLgorICAgIC8v
IG5vZGVzLiBJbiBTU0EsIHRoaXMgaGFzIG5vIG1lYW5pbmcuIEl0J3MgZW1wdHkuCisgICAgSGFz
aE1hcDxCYXNpY0Jsb2NrKiwgQXJndW1lbnRzVmVjdG9yPiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50
czsKKworICAgIC8vIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhh
dCB3ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQgYmxvY2suCiAgICAgLy8KLSAgICAv
LyBJbiBTU0EsIHRoaXMgaXMgYWxsIG9mIHRoZSBHZXRTdGFjayBub2RlcyBmb3IgdGhlIGFyZ3Vt
ZW50cyBpbiB0aGUgbWFjaGluZSBjb2RlIGJsb2NrIHRoYXQKLSAgICAvLyBtYXkgaGF2ZSBzb21l
IHNwZWN1bGF0aW9uIGluIHRoZSBwcm9sb2d1ZSBhbmQgc3Vydml2ZWQgRENFLiBOb3RlIHRoYXQg
dG8gZ2V0IHRoZSBzcGVjdWxhdGlvbgotICAgIC8vIGZvciBhbiBhcmd1bWVudCBpbiBTU0EsIHlv
dSBtdXN0IHVzZSBtX2FyZ3VtZW50Rm9ybWF0cywgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0byBzcGVj
dWxhdGUKLSAgICAvLyBldmVuIGlmIHRoZSBhcmd1bWVudCBnb3Qga2lsbGVkLiBGb3IgZXhhbXBs
ZToKKyAgICAvLyBXZSBtdXN0IHNwZWN1bGF0ZSBvbiB0aGUgYXJndW1lbnQgdHlwZXMgYXQgZWFj
aCBlbnRyeXBvaW50IGV2ZW4gaWYgb3BlcmF0aW9ucyBpbnZvbHZpbmcKKyAgICAvLyBhcmd1bWVu
dHMgZ2V0IGtpbGxlZC4gRm9yIGV4YW1wbGU6CiAgICAgLy8KICAgICAvLyAgICAgZnVuY3Rpb24g
Zm9vKHgpIHsKICAgICAvLyAgICAgICAgdmFyIHRtcCA9IHggKyAxOwpAQCAtOTg5LDEwICs5OTks
MjAgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gSWYgd2UgRENFIHRoZSBBcml0aEFkZCBhbmQg
d2UgcmVtb3ZlIHRoZSBpbnQgY2hlY2sgb24geCwgdGhlbiB0aGlzIHdvbid0IGRvIHRoZSBzaWRl
CiAgICAgLy8gZWZmZWN0cy4KLSAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBBcmd1bWVudHNWZWN0
b3I+IG1fZW50cnlwb2ludFRvQXJndW1lbnRzOwotICAgIAotICAgIC8vIEluIENQUywgdGhpcyBp
cyBtZWFuaW5nbGVzcy4gSW4gU1NBLCB0aGlzIGlzIHRoZSBhcmd1bWVudCBzcGVjdWxhdGlvbiB0
aGF0IHdlJ3ZlIGxvY2tlZCBpbi4KLSAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IG1fYXJndW1lbnRG
b3JtYXRzOworICAgIC8vCisgICAgLy8gQnkgY29udmVudGlvbiwgZW50cnlwb2ludCBpbmRleCAw
IGlzIHVzZWQgZm9yIHRoZSBDb2RlQmxvY2sncyBvcF9lbnRlciBlbnRyeXBvaW50LgorICAgIC8v
IFNvIGFyZ3VtZW50Rm9ybWF0c1swXSBhcmUgdGhlIGFyZ3VtZW50IGZvcm1hdHMgZm9yIHRoZSBu
b3JtYWwgY2FsbCBlbnRyeXBvaW50LgorICAgIFZlY3RvcjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBt
X2FyZ3VtZW50Rm9ybWF0czsKKworICAgIC8vIFRoaXMgbWFwcyBhbiBlbnRyeXBvaW50IGluZGV4
IHRvIGEgcGFydGljdWxhciBvcF9jYXRjaCBieXRlY29kZSBvZmZzZXQuIEJ5IGNvbnZlbnRpb24s
CisgICAgLy8gaXQnbGwgbmV2ZXIgaGF2ZSB6ZXJvIGFzIGEga2V5IGJlY2F1c2Ugd2UgdXNlIHpl
cm8gdG8gbWVhbiB0aGUgb3BfZW50ZXIgZW50cnlwb2ludC4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4gbV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQ7CisKKyAg
ICAvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBlbnRyeXBvaW50cyB0aGF0IHdlJ3Jl
IGNvbXBpbGluZy4gVGhpcyBpcyBvbmx5IHVzZWQKKyAgICAvLyBpbiBTU0EuIEVhY2ggRW50cnlT
d2l0Y2ggbm9kZSBtdXN0IGhhdmUgbnVtYmVyT2ZFbnRyeXBvaW50cyBjYXNlcy4gTm90ZSwgdGhp
cyBpcworICAgIC8vIG5vdCB0aGUgc2FtZSBhcyBtX2VudHJ5cG9pbnRzLnNpemUoKS4gbV9lbnRy
eXBvaW50cy5zaXplKCkgcmVwcmVzZW50cyB0aGUgbnVtYmVyCisgICAgLy8gb2Ygcm9vdHMgaW4g
dGhlIENGRy4gSW4gU1NBLCBtX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxLgorICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZFbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CiAKICAgICBTZWdtZW50ZWRWZWN0
b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CkBA
IC0xMDQ4LDYgKzEwNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5k
ZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0
cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworICAgIEJhZzxFbnRyeVN3aXRjaERh
dGE+IG1fZW50cnlTd2l0Y2hEYXRhOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJpbmdT
dHJ1Y3R1cmU7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzeW1ib2xTdHJ1Y3R1cmU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw0MiAr
MTAwLDQ1IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAg
ICBlbnRyeXBvaW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRl
QXRUYWlsID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KSB7Ci0gICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZh
bHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgPSBt
X2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgZW50cnlwb2lu
dC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAKLSAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIGVudHJ5
cG9pbnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdlCi0gICAgICAgICAgICAgICAgLy8g
d2hhdCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWVb
aV07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAg
ICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAg
ICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQo
aSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAg
ICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBlbnRyeXBv
aW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAiQmFkIGZsdXNoIGZvcm1hdCBm
b3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsK
ICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwpA
QCAtMTYzLDYgKzE2Niw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
KQogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAg
ICAgICB9CiAgICAgfQorCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3MSw2ICszNzUsMTQgQEAgaW5saW5l
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogewor
ICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0Y2hEYXRh
KCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7
CisgICAgfQogCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIxNTk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNiBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICBjb21t
b24uc2hyaW5rVG9GaXQoKTsKICAgICBvc3JFbnRyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4
aXQuc2hyaW5rVG9GaXQoKTsKLSAgICBjYXRjaEVudHJ5cG9pbnRzLnNocmlua1RvRml0KCk7CiAg
ICAgc3BlY3VsYXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7
CkBAIC0yNDMsNyArMjQyLDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRz
KCkKICAgICBhdXRvIGNvbXBhcmF0b3IgPSBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYg
YikgewogICAgICAgICByZXR1cm4gYS5tX2J5dGVjb2RlSW5kZXggPCBiLm1fYnl0ZWNvZGVJbmRl
eDsKICAgICB9OwotICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNo
RW50cnlwb2ludHMuZW5kKCksIGNvbXBhcmF0b3IpOwogICAgIHN0ZDo6c29ydChvc3JFbnRyeS5i
ZWdpbigpLCBvc3JFbnRyeS5lbmQoKSwgY29tcGFyYXRvcik7CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECkBAIC0yNTEsNyArMjQ5LDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9p
bnRzKCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBvc3JWZWN0b3Iuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQob3NyVmVjdG9yW2ldLm1fYnl0ZWNvZGVJbmRl
eCA8PSBvc3JWZWN0b3JbaSArIDFdLm1fYnl0ZWNvZGVJbmRleCk7CiAgICAgfTsKLSAgICB2ZXJp
ZnlJc1NvcnRlZChjYXRjaEVudHJ5cG9pbnRzKTsKICAgICB2ZXJpZnlJc1NvcnRlZChvc3JFbnRy
eSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCi0gICAgQ2F0Y2hFbnRy
eXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNo
RW50cnlwb2ludERhdGEsIHVuc2lnbmVkPigKLSAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMs
IGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgW10g
KGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm1fYnl0ZWNv
ZGVJbmRleDsgfSk7Ci0gICAgfQotCiAgICAgdm9pZCBmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7
CiAKLSAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4
LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3Vt
ZW50Rm9ybWF0cykKLSAgICB7Ci0gICAgICAgIGNhdGNoRW50cnlwb2ludHMuYXBwZW5kKENhdGNo
RW50cnlwb2ludERhdGEgeyBieXRlY29kZUluZGV4LCBtYWNoaW5lQ29kZU9mZnNldCwgV1RGTW92
ZShhcmd1bWVudEZvcm1hdHMpIH0pOwotICAgIH0KLSAgICAKICAgICB1bnNpZ25lZCBhcHBlbmRP
U1JFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSBvc3JFeGl0LnNpemUoKTsKQEAgLTE0NiwxMiArMTM0LDEwIEBAIHByaXZhdGU6CiBwdWJs
aWM6CiAgICAgQ29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBvc3JFbnRyeTsKLSAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50RGF0YT4gY2F0Y2hFbnRyeXBv
aW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAg
IFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAg
ICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZH
OjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwotICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NS
RW50cnlCdWZmZXI7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICB1aW50OF90IG5ldmVyRXhl
Y3V0ZWRFbnRyeSB7IDEgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FT
U0VSVChiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5
cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5hcHBlbmRD
YXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNl
dE9mKGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2Rl
LT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RG
TW92ZShhcmd1bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NS
RW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVh
ZCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhM
b2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxv
Y2FscyA9IHN0ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUp
OyAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRy
eUJ1ZmZlci4KLSAgICAgICAgbV9qaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxz
KTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fs
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgRXhpdE1vZGUgbWF5
RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b206CkBAIC03OCw2ICs3OSw3IEBAIEV4aXRNb2RlIG1heUV4
aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBj
YXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBEb3Vi
bGVSZXA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIx
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMyw2ICsyMDMsMTAgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlk
VXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAg
IGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMzA2LDEyICsxMzEwLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwogICAgIH0KIAorICAgIGJvb2wgaXNF
bnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnRyeVN3
aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAg
ICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBj
YXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICAgICAgY2FzZSBEaXJlY3RU
YWlsQ2FsbDoKQEAgLTEzNzMsNiArMTM4MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChp
c1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFN3aXRjaERhdGEqPigpOwog
ICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8u
YXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3Vj
Y2Vzc29ycygpCiAgICAgewpAQCAtMTM4Myw2ICsxMzk5LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgogICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoK
KyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEzOTUs
NyArMTQxMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgp
LT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0gICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hE
YXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgICAg
IGNhc2UgMDoKQEAgLTIwMDQsNiArMjAyMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29wSW5mby5hczxQcm9maWxlcjo6RXhlY3V0aW9uQ291bnRlcio+KCk7CiAgICAgfQogCisgICAg
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCgpID09
IEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPHVuc2lnbmVkPigpOworICAgIH0KKwogICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OSw2ICszODksNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSnVtcCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEJyYW5jaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKFN3aXRjaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudHJ5U3dpdGNo
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oVGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cykgXAogICAgIG1hY3JvKERpcmVjdFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKQEAgLTQzOSw2ICs0NDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIC8qIE5vZGVzIGZvciBET00gSklUICovXAogICAgIG1hY3JvKENhbGxET01H
ZXR0ZXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDYWxs
RE9NLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgLyogTWV0YWRhdGEg
bm9kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBzdGF0ZSBmb3IgZmx1c2hlZCBhcmd1bWVudCB0eXBl
cyBhdCBhbiBlbnRyeXBvaW50IGluIHRoZSBwcm9ncmFtLiAqLyBcCisgICAgLyogQ3VycmVudGx5
LCB3ZSBvbmx5IHVzZSB0aGlzIGZvciB0aGUgYmxvY2tzIGFuIEVudHJ5U3dpdGNoIGJyYW5jaGVz
IHRvIGF0IHRoZSByb290IG9mIHRoZSBwcm9ncmFtLiAqLyBcCisgICAgLyogVGhpcyBpcyBvbmx5
IHVzZWQgaW4gU1NBLiAqLyBcCisgICAgbWFjcm8oSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVu
dHMsIE5vZGVNdXN0R2VuZXJhdGUpCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9u
aWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQg
YnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZp
YSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1Nyw5IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2Nr
KDApOwogICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxs
KEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTspIHsK
LSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1thcmd1bWVudF0sCi0gICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgICAgIHJv
b3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9
IEF2YWlsYWJpbGl0eShmbHVzaGVkQXQpOwotICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9ncmFwaC5ibG9jaygwKS0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAgICByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRl
IG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVy
LgogICAgICAgICAKQEAgLTg2LDEwICs4MywxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3Vs
YXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
SW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAg
ICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29y
KHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3Nvcklu
ZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3Nvcihz
dWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTE5OSw2ICsyMDAsMTYgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUt
PnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07ICkgewor
ICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdChhcmd1bWVudEZvcm1h
dHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZh
aWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZp
c2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDE2ICszMzgsMTkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogfQogCiB2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQotewotICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQoreyAKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUIHx8IGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CisKKyAgICBpZiAoIU9wdGlvbnM6OnVz
ZU9TUkVudHJ5VG9ERkcoKSAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvRlRMKCkgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpGVExKSVQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6REZHSklUKTsKLSAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CiAKLSAgICBERkc6OkNh
dGNoRW50cnlwb2ludERhdGEqIGNhdGNoRW50cnlwb2ludCA9IGppdENvZGUtPmNhdGNoT1NSRW50
cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoZGZnQ29tbW9uKTsKKyAgICBERkc6OkNhdGNoRW50cnlwb2ludERhdGEqIGNhdGNo
RW50cnlwb2ludCA9IGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghY2F0Y2hFbnRyeXBvaW50KSB7CiAgICAgICAgIC8v
IFRoaXMgY2FuIGJlIG51bGwgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLiBUaGUgbW9zdCBjb21t
b24gaXMgdGhhdCB3ZSBkaWRuJ3QKICAgICAgICAgLy8gY29tcGlsZSB0aGlzIG9wX2NhdGNoIGFz
IGFuIGVudHJ5cG9pbnQgc2luY2UgaXQgaGFkIG5ldmVyIGV4ZWN1dGVkIHdoZW4gc3RhcnRpbmcK
QEAgLTM1Niw5ICszNTksOSBAQCB2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUq
IGV4CiAgICAgfQogCiAgICAgLy8gV2UncmUgb25seSBhbGxvd2VkIHRvIE9TUiBlbnRlciBpZiB3
ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21wYXRpYmxlIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50cnlwb2ludC0+bV9hcmd1
bWVudEZvcm1hdHMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgY2F0Y2hFbnRyeXBvaW50LT5hcmd1bWVudEZvcm1hdHMuc2l6
ZSgpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNr
ZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuanNWYWx1ZSgpOwotICAg
ICAgICBzd2l0Y2ggKGNhdGNoRW50cnlwb2ludC0+bV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRd
KSB7CisgICAgICAgIHN3aXRjaCAoY2F0Y2hFbnRyeXBvaW50LT5hcmd1bWVudEZvcm1hdHNbYXJn
dW1lbnRdKSB7CiAgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTM4MiwxMyArMzg1LDEzIEBAIHZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSog
ZXgKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvckNoZWNrID0g
aml0Q29kZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGRmZ0NvbW1vbi0+cmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOwogICAgIGlmIChVTkxJS0VMWSghdm0u
ZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2spLm9mZnNldCgpXSkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIEFTU0VSVChJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoZXhlYy0+Y29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCldLnUub3Bjb2Rl
KSA9PSBvcF9jYXRjaCk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGV4ZWMtPmNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKVtleGVjLT5ieXRlY29kZU9mZnNldCgpICsgM10udS5wb2lu
dGVyKTsKLSAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
Kj4oaml0Q29kZS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICBKU1Zh
bHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5j
YXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kKS5p
c0xvY2FsKCkpCkBAIC0zOTcsOSArNDAwLDggQEAgdm9pZCogcHJlcGFyZUNhdGNoT1NSRW50cnko
RXhlY1N0YXRlKiBleAogICAgICAgICArK2luZGV4OwogICAgIH0pOwogCi0gICAgaml0Q29kZS0+
Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKHNpemVvZihKU1ZhbHVlKSAqIGlu
ZGV4KTsKLQotICAgIHJldHVybiBqaXRDb2RlLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KGNh
dGNoRW50cnlwb2ludC0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgZGZnQ29tbW9uLT5jYXRj
aE9TUkVudHJ5QnVmZmVyLT5zZXRBY3RpdmVMZW5ndGgoc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgp
OworICAgIHJldHVybiBjYXRjaEVudHJ5cG9pbnQtPm1hY2hpbmVDb2RlOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSwxMSBAQCBpbmxpbmUgdW5z
aWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJCiB9CiAKIHN0cnVjdCBDYXRjaEVudHJ5cG9p
bnREYXRhIHsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9t
YWNoaW5lQ29kZU9mZnNldDsKICAgICAvLyBXZSB1c2UgdGhpcyB3aGVuIGRvaW5nIE9TUiBlbnRy
eSBhdCBjYXRjaC4gV2UgcHJvdmUgdGhlIGFyZ3VtZW50cwogICAgIC8vIGFyZSBvZiB0aGUgZXhw
ZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4KLSAgICBWZWN0b3I8
Rmx1c2hGb3JtYXQ+IG1fYXJndW1lbnRGb3JtYXRzOworICAgIHZvaWQqIG1hY2hpbmVDb2RlOwor
ICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXg7CiB9OwogCiAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVy
IHRoYXQgdGhlIE9TUiBlbnRyeSB0aHVuayB3aWxsIHJlY29nbml6ZSBhbmQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRU
b0FyZ3VtZW50cy5jbGVhcigpOwogICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1l
bnRzLmFkZChuZXdSb290LCBuZXdBcmd1bWVudHMpOwogCi0gICAgICAgIG1fZ3JhcGgubV9jcHND
RkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9ncmFwaCk7Ci0KKyAgICAgICAgbV9ncmFw
aC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
ICAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDkyLDYgKzEwOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIC8v
IFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTU1LDYgKzExNTYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5
bmFtaWNWYXI6CiAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKKyAg
ICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2Ug
aXQgb25seSBwcmV0ZW5kcyB0byBwcm9kdWNlIGEgdmFsdWUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lv
biAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBA
IGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAgICBT
U0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
U1NBIGNvbnZlcnNpb24iKQotICAgICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAgICAg
LCBtX2luc2VydGlvblNldChncmFwaCkKICAgICB7CiAgICAgfQpAQCAtNTUsNiArNTUsNTQgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwog
ICAgICAgICBtX2dyYXBoLmNsZWFyQ1BTQ0ZHRGF0YSgpOworCisgICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1bWVu
dHNCbG9jazsKKworICAgICAgICB7CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRy
eXBvaW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50cy5zaXplKCk7CisKKyAgICAgICAgICAgIEJs
b2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAgICAg
QmFzaWNCbG9jayogbmV3Um9vdCA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxLjBmKTsK
KworICAgICAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBtX2dyYXBo
Lm1fZW50cnlTd2l0Y2hEYXRhLmFkZCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRy
eXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRy
eXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBvbGRSb290ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzW2VudHJ5cG9pbnRJbmRleF07CisgICAg
ICAgICAgICAgICAgZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jay5hZGQoZW50cnlwb2lu
dEluZGV4LCBvbGRSb290KTsKKyAgICAgICAgICAgICAgICBlbnRyeVN3aXRjaERhdGEtPmNhc2Vz
LmFwcGVuZChvbGRSb290KTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChvbGRSb290LT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBvbGRSb290LT5wcmVkZWNlc3Nv
cnMuYXBwZW5kKG5ld1Jvb3QpOworCisgICAgICAgICAgICAgICAgaWYgKG9sZFJvb3QtPmlzQ2F0
Y2hFbnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghIWVudHJ5cG9pbnRJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0Nh
dGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVC
ZWdpbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4gPSBvbGRSb290LT5hdCgwKS0+b3JpZ2luOworICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBJbml0
aWFsaXplRW50cnlwb2ludEFyZ3VtZW50cywgb3JpZ2luLCBPcEluZm8oZW50cnlwb2ludEluZGV4
KSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgMCwgU3BlY05vbmUsIEV4aXRPSywgb3JpZ2luKTsKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5leGVjdXRlKG9sZFJvb3QpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNhc2VzWzBdID09IG1fZ3Jh
cGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5vcm1hbCBjYWxsIGVudHJ5
cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCisKKyAgICAgICAgICAgIG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHMucmVzaXplKG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRz
KTsKKworICAgICAgICAgICAgY29uc3QgYm9vbCBleGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZXhpdE9L
IH07CisgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIFNwZWNOb25lLCBFbnRyeVN3aXRjaCwgb3JpZ2luLCBPcEluZm8oZW50cnlTd2l0Y2hE
YXRhKSk7CisKKyAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5jbGVhcigpOworICAg
ICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmFwcGVuZChuZXdSb290KTsKKworICAgICAg
ICAgICAgYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAg
U1NBQ2FsY3VsYXRvciBjYWxjdWxhdG9yKG1fZ3JhcGgpOworCiAgICAgICAgIG1fZ3JhcGguZW5z
dXJlU1NBRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAg
LTY3LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUuaXNSb290
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlh
YmxlID0gY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNzYVZh
cmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOwogICAgICAg
ICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOwogICAgICAgICAg
ICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZhcmlhYmxlKTsK
QEAgLTEwMyw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAg
ICAgICAgICAgIGNhbGN1bGF0b3IubmV3RGVmKAogICAgICAgICAgICAgICAgICAgICBtX3NzYVZh
cmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMiw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICAvLyBEZWNpZGUgd2hlcmUgUGhpcyBhcmUgdG8gYmUgaW5zZXJ0ZWQuIFRo
aXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRvZXNuJ3QgaW5zZXJ0IHRoZW0KICAgICAgICAgLy8g
eWV0LiBXZSB3aWxsIGxhdGVyIGtub3cgd2hlcmUgdG8gaW5zZXJ0IGJhc2VkIG9uIHdoZXJlIFNT
QUNhbGN1bGF0b3IgdGVsbHMgdXMgdG8uCi0gICAgICAgIG1fY2FsY3VsYXRvci5jb21wdXRlUGhp
cygKKyAgICAgICAgY2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4g
Tm9kZSogewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAg
ICAgIApAQCAtMTY3LDcgKzIxNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICIsIGksICI6ICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAo
bV9ncmFwaCwgbV92YXJpYWJsZUZvclNTQUluZGV4W2ldKSwgIlxuIik7CiAgICAgICAgICAgICBk
YXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1f
Y2FsY3VsYXRvciwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRvcjog
IiwgY2FsY3VsYXRvciwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIERv
IHRoZSBidWxrIG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJh
Y2tzIHRoZSBvcGVyYW5kLT5Ob2RlCkBAIC0yMjAsNyArMjY4LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJs
b2NrICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlh
YmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ss
IHNzYVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBk
ZWYgPSBjYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghZGVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhhdmUg
YSByZWFjaGluZyBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGhlYWQuCkBAIC0y
NDYsNyArMjk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gdmFsdWVGb3JPcGVyYW5kIHdp
dGggdGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0aGF0IGFy
ZSBub3QKICAgICAgICAgICAgIC8vIGZsdXNoZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92SGludC4K
ICAgICAgICAgICAgIHNpemVfdCBwaGlJbnNlcnRpb25Qb2ludCA9IDA7Ci0gICAgICAgICAgICBm
b3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhibG9jaykpIHsKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBjYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkp
OwpAQCAtMzQ2LDcgKzM5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBz
aWxvbk9yaWdpbiA9IHRlcm1pbmFsLm5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3Vj
Y2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IGNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwpA
QCAtMzgzLDIzICs0MzEsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgYmxvY2stPnNzYSA9IHN0
ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jazo6U1NBRGF0YT4oYmxvY2spOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHIFNT
QToKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTM5NgotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgp
ID09IDEpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRv
QXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAgICAgICBtX2dyYXBo
Lm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZShhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gRmx1c2hlZEpTVmFsdWU7Ci0KLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2FyZ3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZSk7Ci0gICAgICAgICAgICBmb3JtYXQgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldID0gZm9ybWF0OwotICAgICAgICAgICAgYXJn
dW1lbnRzW2ldID0gbm9kZTsgLy8gUmVjb3JkIHRoZSBsb2FkIHRoYXQgbG9hZHMgdGhlIGFyZ3Vt
ZW50cyBmb3IgdGhlIGJlbmVmaXQgb2YgZXhpdCBwcm9maWxpbmcuCisgICAgICAgIGZvciAoYXV0
byYgcGFpciA6IGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2spIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OworICAgICAgICAgICAgQmFzaWNC
bG9jayogb2xkUm9vdCA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICBBcmd1bWVudHNWZWN0b3Im
IGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290
KS0+dmFsdWU7CisgICAgICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0
czsKKyAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFy
Z3VtZW50cy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Fy
Z3VtZW50TWFwcGluZy5nZXQoYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudEZvcm1hdHMudW5jaGVja2Vk
QXBwZW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdID0g
V1RGTW92ZShhcmd1bWVudEZvcm1hdHMpOwogICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAg
IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY2xlYXIoKTsKKwogICAgICAgICBtX2dy
YXBoLm1fZm9ybSA9IFNTQTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtNDExLDcgKzQ1
OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU1NBQ2FsY3VsYXRvciBtX2Nh
bGN1bGF0b3I7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogICAgIEhhc2hNYXA8
VmFyaWFibGVBY2Nlc3NEYXRhKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX3NzYVZhcmlh
YmxlRm9yVmFyaWFibGU7CiAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fYXJndW1lbnRNYXBw
aW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEwLDcgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSnVtcDoKICAgICBjYXNl
IEJyYW5jaDoKICAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNh
c2UgUmV0dXJuOgogICAgIGNhc2UgVGFpbENhbGw6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoK
QEAgLTM5OCw2ICszOTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICBjYXNl
IEF0b21pY3NJc0xvY2tGcmVlOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVu
dHM6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBBcnJheVNsaWNlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQ1LDcgKzU2NDUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyB0YWdHUFIgPSB0YWcuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gcGF5
bG9hZC5ncHIoKTsKIAotICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVy
KCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSogcHRyID0g
JnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1faml0LmppdENvZGUoKS0+Y29tbW9uLmNhdGNo
T1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCld
OwogICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdHIpLCB0
ZW1wR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh0ZW1w
R1BSLCBUYWdPZmZzZXQpLCB0YWdHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHRlbXBHUFIsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkR1BSKTsKQEAgLTU2
OTgsNiArNTY5OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOgogICAgIGNhc2UgSWRl
bnRpdHlXaXRoUHJvZmlsZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRz
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgp
LCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwMSw3
ICs2MDAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6IHsKLSAgICAgICAgSlNW
YWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1faml0LmppdENvZGUoKS0+
Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5k
ZXgoKV07CisgICAgICAgIEpTVmFsdWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFsdWUq
PihtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVy
KCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpXTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAg
bV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHRyKSwgdGVtcEdQUik7CkBA
IC02MTA4LDYgKzYxMDgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToK
KyAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1
bWVudHM6CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzEs
NiArMTkzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmsKICAg
ICB9CiAKICAgICBtX2ppdC5qaXRDb2RlKCktPmZpbmFsaXplT1NSRW50cnlwb2ludHMoKTsKKyAg
ICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5maW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIAog
ICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYXBwbHlDb3VudHMoZGF0YS0+ZmFsbFRocm91Z2gp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOiB7CisgICAgICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIHRlcm1pbmFsLCAiVW5leHBlY3RlZCBFbnRyeVN3aXRjaCBpbiBDUFMgZm9ybS4i
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsMTAgQEAgcHVibGljOgogICAgICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KIAogICAgICAg
ICBWQUxJREFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguaXNFbnRyeXBvaW50KG1fZ3Jh
cGguYmxvY2soMCkpKTsKKyAgICAgICAgVkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dy
YXBoLmJsb2NrKDApID09IG1fZ3JhcGgubV9lbnRyeXBvaW50c1swXSk7CisKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgubV9lbnRyeXBvaW50cykKKyAgICAgICAgICAg
IFZBTElEQVRFKChibG9jayksIGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKIAogICAg
ICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMgYXQgdGhlIGhlYWQgb2Yg
YWxsIGVudHJ5cG9pbnRzIGFyZSBkZWFkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5
cG9pbnQgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKQEAgLTU0OSw2ICs1NTMsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBLaWxsU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAgICAg
ICAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAgICAgICAgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVu
dHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
ISJ1bmV4cGVjdGVkIG5vZGUgdHlwZSBpbiBDUFMiKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDogewpAQCAtNjM5
LDYgKzY0NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogQWRkIG1vcmUgdGhpbmdz
IGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjM0NzEKICAgICAgICAgCisgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fZW50cnlw
b2ludHMuc2l6ZSgpID09IDEpOworICAgICAgICBWQUxJREFURSgoKSwgbV9ncmFwaC5tX2VudHJ5
cG9pbnRzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOworICAgICAgICBWQUxJREFURSgoKSwgIW1f
Z3JhcGgubV9hcmd1bWVudEZvcm1hdHMuaXNFbXB0eSgpKTsgLy8gV2UgYWx3YXlzIGhhdmUgYXQg
bGVhc3Qgb25lIGVudHJ5cG9pbnQuCisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50
SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0Lmtl
eXMoKSkKKyAgICAgICAgICAgIFZBTElEQVRFKCgpLCBlbnRyeXBvaW50SW5kZXggPiAwKTsgLy8g
QnkgY29udmVudGlvbiwgMCBpcyB0aGUgZW50cnlwb2ludCBpbmRleCBmb3IgdGhlIG9wX2VudGVy
IGVudHJ5cG9pbnQsIHdoaWNoIGNhbiBub3QgYmUgaW4gYSBjYXRjaC4KKwogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC03NDAs
NiArNzUzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGNhc2UgRW50cnlTd2l0Y2g6CisgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNh
c2VzLnNpemUoKSA9PSBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50cyk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlw
b2ludEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2Rl
LT5lbnRyeXBvaW50SW5kZXgoKSA8IG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUsCkBAIC03ODAsNiArODAxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dCgpIHsgfQorCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDcgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoK
ICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgRXh0cmFjdENhdGNoTG9j
YWw6CiAgICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIFNraXBTY29wZToKICAgICBjYXNlIEdl
dEdsb2JhbE9iamVjdDoKQEAgLTI0NSw2ICsyNDYsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBUeXBl
T2Y6CiAgICAgY2FzZSBQdXRCeUlkOgpAQCAtMzAwLDYgKzMwMiw3IEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2Fz
ZSBBdG9taWNzWG9yOgogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6CisgICAgY2FzZSBJbml0
aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAg
ICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAgdm9pZCBjb21waWxl
KFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICB9KTsKIAogICAgIHN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4o
aml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisKICAgICBpZiAoc3RhdGUu
ZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAg
ICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CkBAIC0x
NTIsOSArMTUzLDE4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUK
ICAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVl
PFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUo
b3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKIAogICAg
IHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9u
PigKLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2Rl
TGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCkpKTsK
ICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJl
bGVhc2VCeXByb2R1Y3RzKCkpOwogCisgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5t
X2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgeworICAgICAgICB1bnNpZ25l
ZCBjYXRjaEJ5dGVjb2RlT2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJn
dW1lbnRGb3JtYXRzID0gc3RhdGUuZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludElu
ZGV4XTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2lu
dCgKKyAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50
cnlwb2ludEluZGV4KSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1bWVudEZvcm1h
dHMpKTsKKyAgICB9CisgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRy
eXBvaW50cygpOworCiAgICAgaWYgKEIzOjpBaXI6OkRpc2Fzc2VtYmxlciogZGlzYXNzZW1ibGVy
ID0gc3RhdGUucHJvYy0+Y29kZSgpLmRpc2Fzc2VtYmxlcigpKSB7CiAgICAgICAgIFByaW50U3Ry
ZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJBdG9taWNzT2JqZWN0Lmgi
CkBAIC0xNTEsNiArMTUyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAiXyIsIGNvZGVC
bG9jaygpLT5oYXNoKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5hbWUgPSAianNC
b2R5IjsKKworICAgICAgICB7CisgICAgICAgICAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMo
bV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2dyYXBoLm1fY29kZUJsb2NrOworCisgICAgICAgICAgICBSZWZQdHI8QjM6
OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVT
aGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KAorICAgICAgICAg
ICAgICAgIFtjb2RlQmxvY2tdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29k
ZSkgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBt
X2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkgewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhdGNoRW50cnlwb2ludEluZGV4ICE9IDAp
OworICAgICAgICAgICAgICAgIG1fcHJvYy5jb2RlKCkuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50
KGNhdGNoRW50cnlwb2ludEluZGV4LCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVu
dHJ5KSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMaXZlTG9jYWxzID0gc3Rk
OjptYXgoKm1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5LCAxdSk7IC8vIE1ha2Ug
c3VyZSB3ZSBhbHdheXMgYWxsb2NhdGUgYSBub24tbnVsbCBjYXRjaE9TUkVudHJ5QnVmZmVyLgor
ICAgICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlC
dWZmZXIgPSBtX2dyYXBoLm1fdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUp
ICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CiAKQEAgLTE2Miw3ICsx
ODYsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9y
IGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVl
bmN5KDEpOwogICAgICAgICAKLSAgICAgICAgbV9wcm9sb2d1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIHByb2xvZ3VlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgIG1faGFuZGxlRXhjZXB0aW9ucyA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0xNzYsOCArMjAxLDgg
QEAgcHVibGljOgogICAgICAgICAvLyBCYWNrIHRvIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYW55
IGJvY2tzIHRoYXQgZ2V0IHNuZWFraWx5IGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIGNv
ZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIG1faGFuZGxlRXhjZXB0aW9ucyk7Ci0gICAgICAgIG1f
b3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBtX3Byb2xvZ3VlKTsKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8ocHJvbG9ndWUsIGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMp
OworICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgcHJvbG9ndWUpOwog
ICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZU9mQ2Fw
dHVyZWQgPSBzaXplb2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKQEAg
LTI1OSw1MSArMjg0LDU3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIExC
YXNpY0Jsb2NrIGZpcnN0REZHQmFzaWNCbG9jayA9IGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkp
OwotICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCi0gICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
LmNsZWFyKCk7Ci0gICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8
QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewot
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQotICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9ub2RlID0g
bnVsbHB0cjsKLSAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENv
ZGVPcmlnaW4oMCksIHRydWUpOwotICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1f
ZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYXJndW1lbnRzW2ldOwotICAgICAgICAgICAg
bV9vdXQuc2V0T3JpZ2luKG5vZGUpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5tYWNoaW5lTG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMg
dG8gZG8gQ1NFIG9uIHRoZQotICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBh
cmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4K
LSAgICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9l
c24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcwotICAgICAgICAgICAgICAgIC8v
IHNob3VsZCBob2xkIHRydWUuCi0gICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVudFZhbHVl
cy5hZGQobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgewotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5v
ZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3Vt
ZW50Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgeworICAgICAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzKG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9p
bnRzKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NvcnNbMF0gPSBjYWxsRW50cnlwb2ludEFyZ3VtZW50
U3BlY3VsYXRpb25zOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fZ3Jh
cGgubV9udW1iZXJPZkVudHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBDdXJy
ZW50bHksIHRoZSBvbmx5IG90aGVyIGVudHJ5cG9pbnQgaXMgYW4gb3BfY2F0Y2ggZW50cnlwb2lu
dC4KKyAgICAgICAgICAgICAgICAvLyBXZSBkbyBPU1IgZW50cnkgYXQgb3BfY2F0Y2gsIGFuZCB3
ZSBwcm92ZSBhcmd1bWVudCBmb3JtYXRzIGJlZm9yZQorICAgICAgICAgICAgICAgIC8vIGp1bXBp
bmcgdG8gRlRMIGNvZGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYXJndW1lbnQgdHlwZXMg
aGVyZQorICAgICAgICAgICAgICAgIC8vIGZvciB0aGVzZSBlbnRyeXBvaW50cy4KKyAgICAgICAg
ICAgICAgICBzdWNjZXNzb3JzW2ldID0gZmlyc3RERkdCYXNpY0Jsb2NrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNzb3JzKTsKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMsIG1f
aGFuZGxlRXhjZXB0aW9ucyk7CisKKyAgICAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAg
ICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigw
KSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KKyAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlKCZtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CisgICAgICAgICAg
ICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fYXJn
dW1lbnRGb3JtYXRzWzBdW2ldKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIHByb2ZpbGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9m
aWxlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9maWxlLCBpc05vdENl
bGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbnVsbHB0ciwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgfQotICAgICAg
ICBtX291dC5qdW1wKGZpcnN0REZHQmFzaWNCbG9jayk7CisKIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2hhbmRsZUV4Y2VwdGlvbnMsIGZpcnN0REZHQmFzaWNCbG9jayk7CiAgICAgICAgIEJv
eDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyID0gc3RhdGUtPmV4Y2VwdGlv
bkhhbmRsZXI7CkBAIC01MTIsNiArNTQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2Nh
bCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6
CisgICAgICAgICAgICBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgY29tcGlsZUdldFN0YWNr
KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk0MCw2ICs5NzQsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIERGRzo6U3dpdGNoOgogICAgICAgICAgICAgY29tcGlsZVN3aXRjaCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpFbnRyeVN3aXRjaDoKKyAgICAgICAg
ICAgIGNvbXBpbGVFbnRyeVN3aXRjaCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgREZHOjpSZXR1cm46CiAgICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTExNTIsNiArMTE4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0
SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6
CisgICAgICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIpOwpAQCAtMTUyMiwx
NiArMTU2MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5m
dGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwogICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVu
bGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRXh0
cmFjdENhdGNoTG9jYWwoKQorICAgIHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24u
Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT5jYXRjaE9TUkVudHJ5
SW5kZXgoKSkpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAg
IHsKLSAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxl
cyBhbmQgYXJndW1lbnRzLiBGb3IgYXJndW1lbnRzLCB3ZSBtaWdodCBoYXZlCi0gICAgICAgIC8v
IGFscmVhZHkgbG9hZGVkIGl0LgotICAgICAgICBpZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRB
cmd1bWVudFZhbHVlcy5nZXQobV9ub2RlKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEt
PmxvY2FsKTsKICAgICAgICAgCkBAIC03Nzg4LDYgKzc4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQi
KTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnRyeVN3aXRjaCgpCisgICAgeworICAgICAg
ICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnM7CisgICAgICAgIGZvciAoREZHOjpCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IgOiBtX25vZGUtPmVudHJ5U3dpdGNoRGF0YSgpLT5jYXNlcykKKyAg
ICAgICAgICAgIHN1Y2Nlc3NvcnMuYXBwZW5kKGxvd0Jsb2NrKHN1Y2Nlc3NvcikpOworICAgICAg
ICBtX291dC5lbnRyeVN3aXRjaChzdWNjZXNzb3JzKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlUmV0dXJuKCkKICAgICB7CkBAIC0xMjU5MSw2ICsxMjYzNiwxMiBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgYXBwZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBm
YWlsQ29uZGl0aW9uLCBtX29yaWdpbik7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGUoCisg
ICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBjb25zdCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlJiBwcm9maWxlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikK
KyAgICB7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoa2luZCwgbG93VmFsdWUsIHByb2ZpbGUsIGZh
aWxDb25kaXRpb24sIG1fb3JpZ2luKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUo
RXhpdEtpbmQga2luZCkKICAgICB7CkBAIC0xNDExNSwxNiArMTQxNjYsMjkgQEAgcHJpdmF0ZToK
IAogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQogICAgIHsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGxvd1ZhbHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3IobV9ub2RlLCBoaWdoVmFsdWUpKTsKKyAgICB9CisKKyAgICBPU1JF
eGl0RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsIGNvbnN0IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUmIHByb2ZpbGUpCisgICAg
ewogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3Jz
LmFsbG9jKAotICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX25vZGUsIGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBs
b3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lk
IGFwcGVuZE9TUkV4aXQoCiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxv
d1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCAKICAgICAgICAg
Tm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpCiAgICAg
eworICAgICAgICByZXR1cm4gYXBwZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgbV9ncmFwaC5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fbm9kZSwgaGlnaFZhbHVlKSwKKyAgICAg
ICAgICAgIGZhaWxDb25kaXRpb24sIG9yaWdpbiwgaXNFeGNlcHRpb25IYW5kbGVyKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCBraW5kLCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgY29uc3QgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSYgcHJvZmlsZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIAorICAgICAgICBOb2RlT3JpZ2luIG9y
aWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKKyAgICB7CiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6
ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAg
ICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCkBAIC0xNDE1
OSwxMiArMTQyMjMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKAotICAgICAgICAgICAgbV9vdXQuc3BlY3VsYXRlKGZhaWxDb25k
aXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBvcmlnaW4pOworICAgICAgICAgICAg
bV9vdXQuc3BlY3VsYXRlKGZhaWxDb25kaXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgcHJvZmlsZSwg
b3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSog
dmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdo
VmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQogICAgIHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhp
Z2hWYWx1ZSk7CisgICAgICAgIGJsZXNzU3BlY3VsYXRpb24odmFsdWUsIGtpbmQsIGxvd1ZhbHVl
LCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9ub2RlLCBoaWdoVmFs
dWUpLCBvcmlnaW4pOworICAgIH0KKworICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1Zh
bHVlKiB2YWx1ZSwgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIGNvbnN0
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUmIHByb2ZpbGUsIE5vZGVPcmlnaW4gb3JpZ2lu
KQorICAgIHsKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBw
ZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIHByb2ZpbGUpOwogICAgICAgICAKICAgICAg
ICAgdmFsdWUtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRv
ciwgb3JpZ2luLmZvckV4aXQsIGxvd1ZhbHVlKSk7CiAKQEAgLTE0NjUxLDcgKzE0NzIwLDYgQEAg
cHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAg
Ci0gICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKICAgICBMQmFzaWNCbG9jayBtX2hhbmRsZUV4
Y2VwdGlvbnM7CiAgICAgSGFzaE1hcDxERkc6OkJhc2ljQmxvY2sqLCBMQmFzaWNCbG9jaz4gbV9i
bG9ja3M7CiAgICAgCkBAIC0xNDY2OCwxMSArMTQ3MzYsNiBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKICAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKICAgICAKLSAgICAvLyBU
aGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBoYXZpbmcgdG8gZG8g
Q1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgotICAgIC8vIEl0J3MgbmljZSB0byBoYXZlIHRo
ZXNlIG9wdGltaXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBndWFyYW50ZWUgdGhl
bSBhIGJpdCBiZXR0ZXIuCi0gICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBCMyBjb21waWxlIHRp
bWUuCi0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzOwot
ICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlzOwogICAgIAogICAgIExvY2Fs
T1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvciBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMjE1OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg2MSw2ICs4NjEsMTQgQEAgdm9pZCBPdXRwdXQ6OmFkZEluY29taW5nVG9QaGkoTFZh
bHVlIHBoaQogICAgICAgICB2YWx1ZS52YWx1ZSgpLT5hczxCMzo6VXBzaWxvblZhbHVlPigpLT5z
ZXRQaGkocGhpKTsKIH0KIAordm9pZCBPdXRwdXQ6OmVudHJ5U3dpdGNoKGNvbnN0IFZlY3RvcjxM
QmFzaWNCbG9jaz4mIGNhc2VzKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhc2VzLnNpemUoKSA9
PSBtX3Byb2MubnVtRW50cnlwb2ludHMoKSk7CisgICAgbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVudHJ5U3dpdGNoLCBvcmlnaW4oKSk7CisgICAgZm9yIChMQmFzaWNCbG9jayBi
bG9jayA6IGNhc2VzKQorICAgICAgICBtX2Jsb2NrLT5hcHBlbmRTdWNjZXNzb3IoRnJlcXVlbnRl
ZEJsb2NrKGJsb2NrKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNiArNDI5LDggQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCBlbnRyeVN3aXRjaChjb25zdCBWZWN0b3I8TEJhc2ljQmxv
Y2s+Jik7CisKICAgICB2b2lkIHJldChMVmFsdWUpOwogCiAgICAgdm9pZCB1bnJlYWNoYWJsZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRXJyb3JI
YW5kbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkZ1enouaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkZyYW1l
VHJhY2Vycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCkBAIC0xNTMzLDEwICsxNTM0LDE0IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHJ5T1NSRW50ZXIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gZXhlYy0+
Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxhY2VtZW50
LT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRy
eShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCkpOworICAgIHN3aXRj
aCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6
REZHSklUOgorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVw
bGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywg
dWludDMyX3QgYnl0ZWNvZGVJbmRleCkKQEAgLTE1NDYsOCArMTU1MSwxNCBAQCBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1l
bnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKG9wdGltaXplZFJlcGxhY2Vt
ZW50LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorCisgICAgc3dpdGNoIChvcHRpbWl6
ZWRSZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6Cisg
ICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
Kj4oREZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwg
Ynl0ZWNvZGVJbmRleCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KIAog
ICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZUluZGV4KTsKICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBi
dWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4ICsgM10udS5wb2ludGVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319864</attachid>
            <date>2017-09-04 16:06:56 -0700</date>
            <delta_ts>2017-09-04 20:21:37 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>86792</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxNy0wOS0wNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBTdXBwb3J0IGNvbXBpbGluZyBjYXRjaCBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUzOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgb3BfY2F0Y2gg
aW4gdGhlIEZUTC4gSXQgZXh0ZW5kcyB0aGUgREZHIGltcGxlbWVudGF0aW9uCisgICAgICAgIGJ5
IHN1cHBvcnRpbmcgbXVsdGlwbGUgZW50cnlwb2ludHMgaW4gREZHLVNTQS4gVGhpcyBwYXRjaCBp
bXBsZW1lbnRzIHRoaXMKKyAgICAgICAgYnkgaW50cm9kdWNpbmcgYW4gRW50cnlTd2l0Y2ggbm9k
ZS4gV2hlbiBjb252ZXJ0aW5nIHRvIFNTQSwgd2UgaW50cm9kdWNlIGEgbmV3CisgICAgICAgIHJv
b3QgYmxvY2sgd2l0aCBhbiBFbnRyeVN3aXRjaCB0aGF0IGhhcyB0aGUgcHJldmlvdXMgREZHIGVu
dHJ5cG9pbnRzIGFzIGl0cworICAgICAgICBzdWNjZXNzb3JzLiBCeSBjb252ZW50aW9uLCB3ZSBw
aWNrIHRoZSB6ZXJvdGggZW50cnkgcG9pbnQgaW5kZXggdG8gYmUgdGhlCisgICAgICAgIG9wX2Vu
dGVyIGVudHJ5cG9pbnQuIExpa2UgaW4gQjMsIGluIERGRy1TU0EsIEVudHJ5U3dpdGNoIGp1c3Qg
YWN0cyBsaWtlIGEKKyAgICAgICAgc3dpdGNoIG92ZXIgdGhlIGVudHJ5cG9pbnQgaW5kZXggYXJn
dW1lbnQuIERGRzo6RW50cnlTd2l0Y2ggaW4gdGhlIEZUTAorICAgICAgICBzaW1wbHkgbG93ZXJz
IHRvIEIzOjpFbnRyeVN3aXRjaC4gVGhlIEVudHJ5U3dpdGNoIGluIHRoZSByb290IGJsb2NrIHRo
YXQKKyAgICAgICAgU1NBQ29udmVyc2lvbiBjcmVhdGVzIGNhbiBub3QgZXhpdCBiZWNhdXNlIHdl
IHdvdWxkIGJvdGggbm90IGtub3cgd2hlcmUgdG8gZXhpdAorICAgICAgICB0byBpbiB0aGUgcHJv
Z3JhbTogd2Ugd291bGQgbm90IGhhdmUgdmFsaWQgT1NSIGV4aXQgc3RhdGUuIFRoaXMgZGVzaWdu
IGFsc28KKyAgICAgICAgbWFuZGF0ZXMgdGhhdCBhbnl0aGluZyB3ZSBob2lzdCBhYm92ZSBFbnRy
eVN3aXRjaCBpbiB0aGUgbmV3IHJvb3QgYmxvY2sKKyAgICAgICAgY2FuIG5vdCBleGl0IHNpbmNl
IHRoZXkgYWxzbyBkbyBub3QgaGF2ZSB2YWxpZCBPU1IgZXhpdCBzdGF0ZS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEgbmV3IG1ldGFkYXRhIG5vZGUgbmFtZWQgSW5p
dGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHMuCisgICAgICAgIEluaXRpYWxpemVFbnRyeXBvaW50
QXJndW1lbnRzIGlzIGEgbWV0YWRhdGEgbm9kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBmbHVzaCBm
b3JtYXQgZm9yCisgICAgICAgIHRoZSBhcmd1bWVudHMgYXQgYSBnaXZlbiBlbnRyeXBvaW50LiBG
b3IgYSBnaXZlbiBlbnRyeXBvaW50IGluZGV4LCB0aGlzIG5vZGUKKyAgICAgICAgdGVsbHMgQUkg
YW5kIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzIHdoYXQgdGhlIGZsdXNoIGZvcm1hdCBmb3IgZWFj
aCBhcmd1bWVudAorICAgICAgICBpcy4gVGhpcyBhbGxvd3MgZWFjaCBpbmRpdmlkdWFsIGVudHJ5
cG9pbnQgdG8gaGF2ZSBhbiBpbmRlcGVuZGVudCBzZXQgb2YKKyAgICAgICAgYXJndW1lbnQgdHlw
ZXMuIEN1cnJlbnRseSwgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2UgYmVjYXVzZSBBcmd1
bWVudFBvc2l0aW9uCisgICAgICAgIHVuaWZpZXMgZmx1c2ggZm9ybWF0cywgYnV0IHRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHdlIHByb2JhYmx5IHdhbnQKKyAgICAgICAgdG8gbW9k
aWZ5IGluIHRoZSBmdXR1cmUuIFNTQUNvbnZlcnNpb24gd2lsbCBhZGQgSW5pdGlhbGl6ZUVudHJ5
cG9pbnRBcmd1bWVudHMKKyAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoIG9mIHRoZSBv
cmlnaW5hbCBERkcgZW50cnlwb2ludCBibG9ja3MuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gYWRkcyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBwcm9sb2d1ZSBjb2Rl
IGdlbmVyYXRvcnMgaW4gQWlyLgorICAgICAgICBUaGlzIGFsbG93cyB0aGUgRlRMIHRvIHNwZWNp
ZnkgYSBjdXN0b20gcHJvbG9ndWUgZm9yIGNhdGNoIGVudHJ5cG9pbnRzIHRoYXQKKyAgICAgICAg
bWF0Y2hlcyB0aGUgb3BfY2F0Y2ggT1NSIGVudHJ5IGNhbGxpbmcgY29udmVudGlvbiB0aGF0IHRo
ZSBERkcgdXNlcy4gVGhpcyB3YXksCisgICAgICAgIHRoZSBiYXNlbGluZSBKSVQgY29kZSBPU1Ig
ZW50ZXJzIGludG8gb3BfY2F0Y2ggdGhlIHNhbWUgd2F5IGJvdGggaW4gdGhlIERGRworICAgICAg
ICBhbmQgdGhlIEZUTC4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHVzZSB0aGlzIHNhbWUgbWVjaGFu
aXNtIHRvIHBlcmZvcm0gc3RhY2sKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tzIGluc3RlYWQgb2Yg
dXNpbmcgYSBwYXRjaHBvaW50LgorCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppc0VudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjplbnRyeXBvaW50SW5kZXgpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldFByb2xvZ3VlRm9yRW50cnlwb2lu
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnByb2xvZ3VlR2VuZXJhdG9yRm9yRW50
cnlwb2ludCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Jhc2lj
QmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkcuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzZWxlY3RDRkcpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6
CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bW1vbkRhdGE6OnNocmlua1RvRml0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpm
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Y2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjphcHBlbmRDYXRjaEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmludmFsaWRhdGVDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjplbnN1
cmVDUFNDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aXNFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VUb1N1Y2Nlc3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZTo6ZmluYWxpemVPU1JFbnRyeXBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVj
b2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFwcGVuZENh
dGNoRW50cnlwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlQ2F0Y2hFbnRyeXBvaW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bWFrZUNhdGNoT1NSRW50cnlCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRW50cnlTd2l0Y2gpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmVu
dHJ5U3dpdGNoRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjplbnRyeXBvaW50SW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgor
ICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZUNhdGNoT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OlNTQUNvbnZlcnNpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBo
YXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUVudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Ymxlc3NTcGVjdWxhdGlvbik6CisgICAgICAgICogZnRsL0ZU
TE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplbnRyeVN3aXRjaCk6Cisg
ICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKwogMjAxNy0wOS0wNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtXZWJJRExdIFVuaWZ5IGFuZCBzaW1wbGlmeSBFbmFibGVCeVNldHRpbmdzIHdpdGggdGhlIHJl
c3Qgb2YgdGhlIHJ1bnRpbWUgc2V0dGluZ3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4IEBA
IENDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkKIAogYm9vbCBDb2RlOjppc0VudHJ5
cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiB7CisgICAgLy8gTm90ZTogVGhpcyBmdW5j
dGlvbiBtdXN0IHdvcmsgYm90aCBiZWZvcmUgYW5kIGFmdGVyIExvd2VyRW50cnlTd2l0Y2guCisK
ICAgICBpZiAobV9lbnRyeXBvaW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAhYmxvY2st
PmluZGV4KCk7CiAgICAgCkBAIC0xNjYsNiArMTY4LDE2IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBv
aW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IENvZGU6OmVudHJ5cG9pbnRJbmRleChCYXNpY0Jsb2NrKiBibG9jaykgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnRzLnNpemUoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cnlwb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fZW50cnlwb2ludHNbaV0uYmxvY2soKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB2b2lkIENvZGU6
OnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYm
IHJlZ2lzdGVyQXRPZmZzZXRMaXN0LCBTdGFja1Nsb3QqIHNsb3QpCiB7CiAgICAgbV91bmNvcnJl
Y3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9m
ZnNldExpc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJl
dmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTUgQEAgbmFtZXNwYWNlIEFpciB7CiBjbGFz
cyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIGNsYXNzIENGRzsKK2Ns
YXNzIENvZGU7CiBjbGFzcyBEaXNhc3NlbWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcpOwogdHlwZWRlZiBT
aGFyZWRUYXNrPFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvckZ1bmN0aW9uPiBXYXNtQm91bmRzQ2hl
Y2tHZW5lcmF0b3I7CiAKK3R5cGVkZWYgdm9pZCBQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uKEND
YWxsSGVscGVycyYsIENvZGUmKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxQcm9sb2d1ZUdlbmVyYXRv
ckZ1bmN0aW9uPiBQcm9sb2d1ZUdlbmVyYXRvcjsKKwogLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlz
IHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3Jl
IGJ5dGVzIHRoYW4gdGhlCiAvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUg
aWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQK
IC8vIDQwTUIgb2YgQWlyLgpAQCAtMTY1LDcgKzE2OSwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4mIGVudHJ5cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9l
bnRyeXBvaW50czsgfQogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZW50cnlwb2ludCh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50c1tpbmRleF07IH0KICAgICBi
b29sIGlzRW50cnlwb2ludChCYXNpY0Jsb2NrKikgY29uc3Q7Ci0gICAgCisgICAgLy8gTm90ZTog
SXQgaXMgb25seSB2YWxpZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgTG93ZXJFbnRyeVN3
aXRjaC4KKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBvaW50SW5kZXgoQmFzaWNC
bG9jayopIGNvbnN0OworICAgIHZvaWQgc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KHVuc2lnbmVk
IGVudHJ5cG9pbnRJbmRleCwgUmVmUHRyPFByb2xvZ3VlR2VuZXJhdG9yPiBnZW5lcmF0b3IpCisg
ICAgeworICAgICAgICAvLyBOb3RlOiBXZSBhbGxvdyB0aGlzIHRvIGJlIGNhbGxlZCBldmVuIGJl
Zm9yZSB3ZSBzZXQgbV9lbnRyeXBvaW50cyBqdXN0IGZvciBjb252ZW5pZW5jZSB0byB1c2VycyBv
ZiB0aGlzIEFQSS4KKyAgICAgICAgbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRvci5zZXQoZW50
cnlwb2ludEluZGV4LCBnZW5lcmF0b3IpOworICAgIH0KKyAgICBSZWZQdHI8UHJvbG9ndWVHZW5l
cmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yRm9yRW50cnlwb2ludCh1bnNpZ25lZCBlbnRyeXBvaW50
SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9lbnRyeXBvaW50SW5kZXhUb0dlbmVyYXRv
ci5nZXQoZW50cnlwb2ludEluZGV4KTsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHVzZWQgYnkg
bG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rvcj4KICAgICB2
b2lkIHNldEVudHJ5cG9pbnRzKFZlY3RvciYmIHZlY3RvcikKQEAgLTM1Myw2ICszNjgsNyBAQCBw
cml2YXRlOgogICAgIFN0YWNrU2xvdCogbV9jYWxsZWVTYXZlU3RhY2tTbG90IHsgbnVsbHB0ciB9
OwogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IG1fZW50cnlwb2ludHM7IC8vIFRoaXMgaXMg
ZW1wdHkgdW50aWwgYWZ0ZXIgbG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIFZlY3RvcjxDQ2FsbEhl
bHBlcnM6OkxhYmVsPiBtX2VudHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwg
Y29kZSBnZW5lcmF0aW9uLgorICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxQcm9sb2d1ZUdl
bmVyYXRvcj4sIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtX2VudHJ5cG9pbnRJbmRleFRvR2VuZXJhdG9yOwogICAg
IFJlZlB0cjxXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2VuZXJh
dG9yOwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGlzYXNzZW1ibGVyPiBtX2Rpc2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA4LDIxICsyMDgsMjggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgZGlzYXNzZW1ibGVy
LT5zdGFydEJsb2NrKGJsb2NrLCBqaXQpOyAKIAotICAgICAgICBpZiAoY29kZS5pc0VudHJ5cG9p
bnQoYmxvY2spKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbnRyeXBv
aW50SW5kZXggPSBjb2RlLmVudHJ5cG9pbnRJbmRleChibG9jaykpIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb2RlLmlzRW50cnlwb2ludChibG9jaykpOworCiAgICAgICAgICAgICBpZiAoZGlzYXNz
ZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRFbnRyeXBvaW50KGpp
dCk7IAogCi0gICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAg
ICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgaXNBUk02NCgpKTsKLSAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZy
YW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGlmIChSZWZQdHI8UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0g
Y29kZS5wcm9sb2d1ZUdlbmVyYXRvckZvckVudHJ5cG9pbnQoKmVudHJ5cG9pbnRJbmRleCkpCisg
ICAgICAgICAgICAgICAgcHJvbG9ndWVHZW5lcmF0b3ItPnJ1bihqaXQsIGNvZGUpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwg
aXNBUk02NCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0LmVt
aXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwogCiAgICAgICAg
ICAgICBpZiAoZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+ZW5k
RW50cnlwb2ludChqaXQpOyAKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVCghY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKTsKICAgICAgICAgCiAgICAgICAgIEFT
U0VSVChibG9jay0+c2l6ZSgpID49IDEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBERkcgZXhl
Y3V0aW9uLgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBLaWxs
U3RhY2s6IHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGEgaGludCB0ZWxsaW5nIHVzIHRoYXQg
dGhlIE9TUiBzdGF0ZSBvZiB0aGUgbG9jYWwgaXMgbm8gbG9uZ2VyIGluc2lkZSB0aGUKICAgICAg
ICAgLy8gZmx1c2hlZCBkYXRhLgpAQCAtMjczLDcgKzI3MywzMyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KICAg
ICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
aXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2FzZSBJbml0aWFs
aXplRW50cnlwb2ludEFyZ3VtZW50czogeworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSBub2RlLT5lbnRyeXBvaW50SW5kZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZsdXNo
Rm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRy
eXBvaW50SW5kZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoYXJndW1l
bnQpOworICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1hdHNbYXJndW1lbnRdKSB7Cisg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXRU
eXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZENlbGw6CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVl
OgorICAgICAgICAgICAgICAgIHZhbHVlLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYg
dGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpA
QCAtMTg2Niw2ICsxODkyLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgorICAg
ICAgICBicmVhazsKKwogICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDggKzIyMSw2
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKICAgICBm
bG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKLSAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHJlc2Vy
dmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjIx
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyNjIsOSArNTI2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRj
aCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhdGNoIGluIHRo
ZSBGVEwuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTM5NgorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0
Y2gpOwogICAgICAgICAgICAgfQogCkBAIC02NDY1LDggKzY0NjMsNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAg
ICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCi0gICAgbV9ncmFwaC5tX2Nwc0NG
RyA9IHN0ZDo6bWFrZV91bmlxdWU8Q1BTQ0ZHPihtX2dyYXBoKTsKLSAgICAKICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICBpZiAoIWJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5o
CShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw3IEBAIHVzaW5nIFNTQUNGRyA9IENGRzsKIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxULCBDUFNDRkc+Ojp2YWx1ZT46OnR5cGU+CiBDUFNDRkcmIHNlbGVjdENGRyhH
cmFwaCYgZ3JhcGgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ3JhcGgubV9jcHNDRkcpOwotICAg
IHJldHVybiAqZ3JhcGgubV9jcHNDRkc7CisgICAgcmV0dXJuIGdyYXBoLmVuc3VyZUNQU0NGRygp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgU1NBQ0ZHPjo6dmFsdWU+Ojp0eXBlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIyMTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MjYsNiArNDI2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIFN3aXRj
aDoKKyAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNh
c2UgQ2hlY2tCYWRDZWxsOgogICAgIGNhc2UgUmV0dXJuOgpAQCAtNDM3LDYgKzQzOCw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFByb2ZpbGVU
eXBlOgogICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgIGNhc2UgUHV0SGludDoKKyAg
ICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIy
MTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3Rh
dGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3aG9z
ZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRo
ZXkKICAgICAvLyBub3JtYWxseSBjbG9iYmVyLgogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBNb3ZIaW50
OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFB1dEhpbnQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDIyMTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDYgKzg3LDcgQEAgdm9pZCBDb21tb25EYXRhOjpzaHJpbmtUb0ZpdCgpCiAg
ICAgY29kZU9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKICAgICB3ZWFrUmVmZXJlbmNlcy5zaHJpbmtU
b0ZpdCgpOwogICAgIHRyYW5zaXRpb25zLnNocmlua1RvRml0KCk7CisgICAgY2F0Y2hFbnRyeXBv
aW50cy5zaHJpbmtUb0ZpdCgpOwogfQogCiBzdGF0aWMgU3RhdGljTG9jayBwY0NvZGVCbG9ja01h
cExvY2s7CkBAIC0xOTMsNiArMTk0LDE3IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnMKICAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2Vz
KHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAordm9pZCBDb21tb25EYXRhOjpmaW5hbGl6ZUNhdGNo
RW50cnlwb2ludHMoKQoreworICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCks
IGNhdGNoRW50cnlwb2ludHMuZW5kKCksCisgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9p
bnREYXRhJiBhLCBjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhJiBiKSB7IHJldHVybiBhLmJ5dGVj
b2RlSW5kZXggPCBiLmJ5dGVjb2RlSW5kZXg7IH0pOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgKyAxIDwgY2F0Y2hFbnRyeXBvaW50cy5zaXplKCk7
ICsraSkKKyAgICAgICAgQVNTRVJUKGNhdGNoRW50cnlwb2ludHNbaV0uYnl0ZWNvZGVJbmRleCA8
PSBjYXRjaEVudHJ5cG9pbnRzW2kgKyAxXS5ieXRlY29kZUluZGV4KTsKKyNlbmRpZgorfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAy
MjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgorI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgpAQCAtOTAs
NiArOTEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENv
ZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVha3BvaW50KHZvaWQqIGFkZHJl
c3MpOwogCisgICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIHVuc2lnbmVkPigKKyAgICAgICAg
ICAgIGNhdGNoRW50cnlwb2ludHMsIGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUlu
ZGV4LAorICAgICAgICAgICAgW10gKGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0tPmJ5dGVjb2RlSW5kZXg7IH0pOworICAgIH0KKworICAgIHZvaWQgYXBwZW5k
Q2F0Y2hFbnRyeXBvaW50KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHZvaWQqIG1hY2hpbmVDb2Rl
LCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHsKKyAgICAgICAg
Y2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBvaW50RGF0YSB7IG1hY2hpbmVDb2Rl
LCAgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpLCBieXRlY29kZUluZGV4IH0pOworICAgIH0KKwor
ICAgIHZvaWQgZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisKICAgICB1bnNpZ25lZCByZXF1
aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQsIHJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQpOwpAQCAtMTA2LDExICsxMjEsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7CiAgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxKU0NlbGw+PiB3ZWFrUmVmZXJlbmNlczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4+IHdlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzOworICAgIFZlY3RvcjxDYXRjaEVudHJ5
cG9pbnREYXRhPiBjYXRjaEVudHJ5cG9pbnRzOwogICAgIEJhZzxDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwogICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAgQmFnPEFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50czsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBqdW1wUmVwbGFjZW1l
bnRzOwogICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZmZXI7CiAgICAg
UmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CiAgICAgYm9vbCBsaXZl
bmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5k
IHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2lu
dEFyZ3VtZW50czoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBFeGl0T0s6CiAgICAg
Y2FzZSBQaGFudG9tOgpAQCAtMTgzLDYgKzE4NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2Fz
ZSBTd2l0Y2g6CisgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICBjYXNlIFJldHVybjoKICAgICBj
YXNlIFRhaWxDYWxsOgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MjYsNiArMTUyNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBQaGk6CiAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIExhc3ROb2RlVHlw
ZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKQEAgLTIwMTQsNiArMjAxNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgICAgIGNhc2Ug
TG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBJbml0aWFsaXpl
RW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBj
YXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2
OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwgY29u
dGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQorICAgIGlmIChub2Rl
LT5pc0VudHJ5U3dpdGNoKCkpIHsKKyAgICAgICAgRW50cnlTd2l0Y2hEYXRhKiBkYXRhID0gbm9k
ZS0+ZW50cnlTd2l0Y2hEYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLT5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgQnJh
bmNoVGFyZ2V0KGRhdGEtPmNhc2VzW2ldKSk7CisgICAgfQogICAgIENsb2JiZXJTZXQgcmVhZHM7
CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CiAgICAgYWRkUmVhZHNBbmRXcml0ZXMoKnRoaXMsIG5v
ZGUsIHJlYWRzLCB3cml0ZXMpOwpAQCAtNTE1LDggKzUyMCwxMCBAQCB2b2lkIEdyYXBoOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIG91dC5w
cmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSwgIjpcbiIpOwogICAgIG91dC5wcmludCgiICBGaXhwb2ludCBzdGF0ZTogIiwg
bV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRl
OiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3Vu
dFN0YXRlLCAiXG4iKTsKLSAgICBpZiAobV9mb3JtID09IFNTQSkKLSAgICAgICAgb3V0LnByaW50
KCIgIEFyZ3VtZW50IGZvcm1hdHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzKSwgIlxu
Iik7CisgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRy
eXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2FyZ3VtZW50Rm9ybWF0cy5zaXpl
KCk7ICsrZW50cnlwb2ludEluZGV4KQorICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50
IGZvcm1hdHMgZm9yIGVudHJ5cG9pbnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIs
IGxpc3REdW1wKG1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKKyAg
ICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9B
cmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzIGZvciBibG9jayMi
LCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsKQEAg
LTgyNCw2ICs4MzEsNyBAQCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKICAgICBtX2NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gbnVsbHB0cjsKICAgICBtX2JhY2t3YXJkc0RvbWluYXRv
cnMgPSBudWxscHRyOwogICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2Nwc0NG
RyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgR3JhcGg6OmludmFsaWRhdGVOb2RlTGl2ZW5lc3MoKQpA
QCAtMTU0Myw2ICsxNTUxLDE0IEBAIHZvaWQgR3JhcGg6OmxvZ0Fzc2VydGlvbkZhaWx1cmUoCiAg
ICAgbG9nREZHQXNzZXJ0aW9uRmFpbHVyZSgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGlu
ZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0
aW9uLCBhc3NlcnRpb24pOwogfQogCitDUFNDRkcmIEdyYXBoOjplbnN1cmVDUFNDRkcoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZm9ybSAhPSBTU0EgJiYgIW1faXNJblNTQUNvbnZlcnNpb24p
OworICAgIGlmICghbV9jcHNDRkcpCisgICAgICAgIG1fY3BzQ0ZHID0gc3RkOjptYWtlX3VuaXF1
ZTxDUFNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY3BzQ0ZHOworfQorCiBDUFNEb21pbmF0
b3JzJiBHcmFwaDo6ZW5zdXJlQ1BTRG9taW5hdG9ycygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9mb3JtICE9IFNTQSAmJiAhbV9pc0luU1NBQ29udmVyc2lvbik7CkBAIC0xNjEwLDIxICsxNjI2
LDE0IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAg
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KCp0aGlzKSkgewotICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gWyZdICgp
IC0+IFZhbHVlUHJvZmlsZSogewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0Fy
Z3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9k
ZSA9IG1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVu
dF07CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJn
dW1lbnQgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX2VudHJ5cG9pbnRUb0Fy
Z3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnBy
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAg
ICAgICAgICB9KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Tm9k
ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21M
YXp5T3BlcmFuZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtOTE5LDYgKzkxOSw3IEBAIHB1YmxpYzoKICAgICBCYWNrd2FyZHNDRkcm
IGVuc3VyZUJhY2t3YXJkc0NGRygpOwogICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJh
Y2t3YXJkc0RvbWluYXRvcnMoKTsKICAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5z
dXJlQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKKyAgICBDUFNDRkcmIGVuc3VyZUNQU0NG
RygpOwogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG9ubHkgbWFrZXMgc2Vuc2UgdG8gY2FsbCBh
ZnRlciBieXRlY29kZSBwYXJzaW5nCiAgICAgLy8gYmVjYXVzZSBpdCBxdWVyaWVzIHRoZSBtX2hh
c0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xlYW4gd2hvc2UgdmFsdWUKQEAgLTkzOCw2ICs5MzksMTQg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiAgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lzSW5TU0FDb252ZXJz
aW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRlbiB0byB3b3JrIGR1cmluZyBTU0EgY29udmVyc2lvbi4i
KTsKKworICAgICAgICBpZiAobV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgQVNTRVJUKG1f
ZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKG1fZW50cnlwb2lu
dHMuY29udGFpbnModGhpcy0+YmxvY2soMCkpKTsKKyAgICAgICAgICAgIHJldHVybiBibG9jayA9
PSB0aGlzLT5ibG9jaygwKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChtX2VudHJ5cG9pbnRz
LnNpemUoKSA8PSA0KSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fZW50cnlwb2ludHMu
Y29udGFpbnMoYmxvY2spOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9p
bnRUb0FyZ3VtZW50cy5jb250YWlucyhibG9jaykpOwpAQCAtOTY2LDEyICs5NzUsMTMgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIEluIENQUywgdGhpcyBpcyBhbGwgb2YgdGhlIFNldEFyZ3VtZW50
IG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sKICAgICAv
LyB0aGF0IHN1cnZpdmVkIERDRS4gQWxsIG9mIHRoZW0gZXhjZXB0IG1heWJlICJ0aGlzIiB3aWxs
IHN1cnZpdmUgRENFLCBiZWNhdXNlIG9mIHRoZSBGbHVzaAotICAgIC8vIG5vZGVzLgorICAgIC8v
IG5vZGVzLiBJbiBTU0EsIHRoaXMgaGFzIG5vIG1lYW5pbmcuIEl0J3MgZW1wdHkuCisgICAgSGFz
aE1hcDxCYXNpY0Jsb2NrKiwgQXJndW1lbnRzVmVjdG9yPiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50
czsKKworICAgIC8vIEluIFNTQSwgdGhpcyBpcyB0aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhh
dCB3ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5cG9pbnQgYmxvY2suCiAgICAgLy8KLSAgICAv
LyBJbiBTU0EsIHRoaXMgaXMgYWxsIG9mIHRoZSBHZXRTdGFjayBub2RlcyBmb3IgdGhlIGFyZ3Vt
ZW50cyBpbiB0aGUgbWFjaGluZSBjb2RlIGJsb2NrIHRoYXQKLSAgICAvLyBtYXkgaGF2ZSBzb21l
IHNwZWN1bGF0aW9uIGluIHRoZSBwcm9sb2d1ZSBhbmQgc3Vydml2ZWQgRENFLiBOb3RlIHRoYXQg
dG8gZ2V0IHRoZSBzcGVjdWxhdGlvbgotICAgIC8vIGZvciBhbiBhcmd1bWVudCBpbiBTU0EsIHlv
dSBtdXN0IHVzZSBtX2FyZ3VtZW50Rm9ybWF0cywgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0byBzcGVj
dWxhdGUKLSAgICAvLyBldmVuIGlmIHRoZSBhcmd1bWVudCBnb3Qga2lsbGVkLiBGb3IgZXhhbXBs
ZToKKyAgICAvLyBXZSBtdXN0IHNwZWN1bGF0ZSBvbiB0aGUgYXJndW1lbnQgdHlwZXMgYXQgZWFj
aCBlbnRyeXBvaW50IGV2ZW4gaWYgb3BlcmF0aW9ucyBpbnZvbHZpbmcKKyAgICAvLyBhcmd1bWVu
dHMgZ2V0IGtpbGxlZC4gRm9yIGV4YW1wbGU6CiAgICAgLy8KICAgICAvLyAgICAgZnVuY3Rpb24g
Zm9vKHgpIHsKICAgICAvLyAgICAgICAgdmFyIHRtcCA9IHggKyAxOwpAQCAtOTg5LDEwICs5OTks
MjAgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gSWYgd2UgRENFIHRoZSBBcml0aEFkZCBhbmQg
d2UgcmVtb3ZlIHRoZSBpbnQgY2hlY2sgb24geCwgdGhlbiB0aGlzIHdvbid0IGRvIHRoZSBzaWRl
CiAgICAgLy8gZWZmZWN0cy4KLSAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBBcmd1bWVudHNWZWN0
b3I+IG1fZW50cnlwb2ludFRvQXJndW1lbnRzOwotICAgIAotICAgIC8vIEluIENQUywgdGhpcyBp
cyBtZWFuaW5nbGVzcy4gSW4gU1NBLCB0aGlzIGlzIHRoZSBhcmd1bWVudCBzcGVjdWxhdGlvbiB0
aGF0IHdlJ3ZlIGxvY2tlZCBpbi4KLSAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IG1fYXJndW1lbnRG
b3JtYXRzOworICAgIC8vCisgICAgLy8gQnkgY29udmVudGlvbiwgZW50cnlwb2ludCBpbmRleCAw
IGlzIHVzZWQgZm9yIHRoZSBDb2RlQmxvY2sncyBvcF9lbnRlciBlbnRyeXBvaW50LgorICAgIC8v
IFNvIGFyZ3VtZW50Rm9ybWF0c1swXSBhcmUgdGhlIGFyZ3VtZW50IGZvcm1hdHMgZm9yIHRoZSBu
b3JtYWwgY2FsbCBlbnRyeXBvaW50LgorICAgIFZlY3RvcjxWZWN0b3I8Rmx1c2hGb3JtYXQ+PiBt
X2FyZ3VtZW50Rm9ybWF0czsKKworICAgIC8vIFRoaXMgbWFwcyBhbiBlbnRyeXBvaW50IGluZGV4
IHRvIGEgcGFydGljdWxhciBvcF9jYXRjaCBieXRlY29kZSBvZmZzZXQuIEJ5IGNvbnZlbnRpb24s
CisgICAgLy8gaXQnbGwgbmV2ZXIgaGF2ZSB6ZXJvIGFzIGEga2V5IGJlY2F1c2Ugd2UgdXNlIHpl
cm8gdG8gbWVhbiB0aGUgb3BfZW50ZXIgZW50cnlwb2ludC4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4gbV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQ7CisKKyAg
ICAvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBlbnRyeXBvaW50cyB0aGF0IHdlJ3Jl
IGNvbXBpbGluZy4gVGhpcyBpcyBvbmx5IHVzZWQKKyAgICAvLyBpbiBTU0EuIEVhY2ggRW50cnlT
d2l0Y2ggbm9kZSBtdXN0IGhhdmUgbnVtYmVyT2ZFbnRyeXBvaW50cyBjYXNlcy4gTm90ZSwgdGhp
cyBpcworICAgIC8vIG5vdCB0aGUgc2FtZSBhcyBtX2VudHJ5cG9pbnRzLnNpemUoKS4gbV9lbnRy
eXBvaW50cy5zaXplKCkgcmVwcmVzZW50cyB0aGUgbnVtYmVyCisgICAgLy8gb2Ygcm9vdHMgaW4g
dGhlIENGRy4gSW4gU1NBLCBtX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxLgorICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZFbnRyeXBvaW50cyB7IFVJTlRfTUFYIH07CiAKICAgICBTZWdtZW50ZWRWZWN0
b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7CkBA
IC0xMDQ4LDYgKzEwNjgsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5k
ZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0
cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworICAgIEJhZzxFbnRyeVN3aXRjaERh
dGE+IG1fZW50cnlTd2l0Y2hEYXRhOwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJpbmdT
dHJ1Y3R1cmU7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzeW1ib2xTdHJ1Y3R1cmU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw0MiAr
MTAwLDQ1IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAg
ICBlbnRyeXBvaW50LT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZDsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRl
QXRUYWlsID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KSB7Ci0gICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xl
YXIoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgIHsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZh
bHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgPSBt
X2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgZW50cnlwb2lu
dC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAKLSAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIGVudHJ5
cG9pbnRzIGluIHRoZSBGVEwsIHdlIG5lZWQgdG8gY2hhbmdlCi0gICAgICAgICAgICAgICAgLy8g
d2hhdCB3ZSBkbyBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1Mzk2Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWVb
aV07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAg
ICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAg
ICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQo
aSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlQnl0ZWNvZGVUb3AoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAg
ICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAg
ICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0NlbGwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBlbnRyeXBv
aW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAiQmFkIGZsdXNoIGZvcm1hdCBm
b3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
CiAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsK
ICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwpA
QCAtMTYzLDYgKzE2Niw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
KQogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAg
ICAgICB9CiAgICAgfQorCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTM3MSw2ICszNzUsMTQgQEAgaW5saW5l
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCisgICAgY2FzZSBFbnRyeVN3aXRjaDogewor
ICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+ZW50cnlTd2l0Y2hEYXRh
KCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlKGJhc2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7
CisgICAgfQogCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIxNTk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNiBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICBjb21t
b24uc2hyaW5rVG9GaXQoKTsKICAgICBvc3JFbnRyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4
aXQuc2hyaW5rVG9GaXQoKTsKLSAgICBjYXRjaEVudHJ5cG9pbnRzLnNocmlua1RvRml0KCk7CiAg
ICAgc3BlY3VsYXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7
CkBAIC0yNDMsNyArMjQyLDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRz
KCkKICAgICBhdXRvIGNvbXBhcmF0b3IgPSBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYg
YikgewogICAgICAgICByZXR1cm4gYS5tX2J5dGVjb2RlSW5kZXggPCBiLm1fYnl0ZWNvZGVJbmRl
eDsKICAgICB9OwotICAgIHN0ZDo6c29ydChjYXRjaEVudHJ5cG9pbnRzLmJlZ2luKCksIGNhdGNo
RW50cnlwb2ludHMuZW5kKCksIGNvbXBhcmF0b3IpOwogICAgIHN0ZDo6c29ydChvc3JFbnRyeS5i
ZWdpbigpLCBvc3JFbnRyeS5lbmQoKSwgY29tcGFyYXRvcik7CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECkBAIC0yNTEsNyArMjQ5LDYgQEAgdm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9p
bnRzKCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBvc3JWZWN0b3Iuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQob3NyVmVjdG9yW2ldLm1fYnl0ZWNvZGVJbmRl
eCA8PSBvc3JWZWN0b3JbaSArIDFdLm1fYnl0ZWNvZGVJbmRleCk7CiAgICAgfTsKLSAgICB2ZXJp
ZnlJc1NvcnRlZChjYXRjaEVudHJ5cG9pbnRzKTsKICAgICB2ZXJpZnlJc1NvcnRlZChvc3JFbnRy
eSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCi0gICAgQ2F0Y2hFbnRy
eXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNo
RW50cnlwb2ludERhdGEsIHVuc2lnbmVkPigKLSAgICAgICAgICAgIGNhdGNoRW50cnlwb2ludHMs
IGNhdGNoRW50cnlwb2ludHMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgW10g
KGNvbnN0IENhdGNoRW50cnlwb2ludERhdGEqIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm1fYnl0ZWNv
ZGVJbmRleDsgfSk7Ci0gICAgfQotCiAgICAgdm9pZCBmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7
CiAKLSAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4
LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3Vt
ZW50Rm9ybWF0cykKLSAgICB7Ci0gICAgICAgIGNhdGNoRW50cnlwb2ludHMuYXBwZW5kKENhdGNo
RW50cnlwb2ludERhdGEgeyBieXRlY29kZUluZGV4LCBtYWNoaW5lQ29kZU9mZnNldCwgV1RGTW92
ZShhcmd1bWVudEZvcm1hdHMpIH0pOwotICAgIH0KLSAgICAKICAgICB1bnNpZ25lZCBhcHBlbmRP
U1JFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSBvc3JFeGl0LnNpemUoKTsKQEAgLTE0NiwxMiArMTM0LDEwIEBAIHByaXZhdGU6CiBwdWJs
aWM6CiAgICAgQ29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBvc3JFbnRyeTsKLSAgICBWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50RGF0YT4gY2F0Y2hFbnRyeXBv
aW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAg
IFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAg
ICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZH
OjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwotICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NS
RW50cnlCdWZmZXI7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICB1aW50OF90IG5ldmVyRXhl
Y3V0ZWRFbnRyeSB7IDEgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FT
U0VSVChiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5
cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5hcHBlbmRD
YXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNl
dE9mKGJsb2NrSGVhZCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2Rl
LT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RG
TW92ZShhcmd1bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NS
RW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVh
ZCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhM
b2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxv
Y2FscyA9IHN0ZDo6bWF4KCptX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUp
OyAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRy
eUJ1ZmZlci4KLSAgICAgICAgbV9qaXRDb2RlLT5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxz
KTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fs
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgRXhpdE1vZGUgbWF5
RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b206CkBAIC03OCw2ICs3OSw3IEBAIEV4aXRNb2RlIG1heUV4
aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBj
YXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEVudHJ5U3dpdGNo
OgogICAgIGNhc2UgQnJhbmNoOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBEb3Vi
bGVSZXA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjIx
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMyw2ICsyMDMsMTAgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlk
VXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IEVudHJ5U3dpdGNoRGF0YSB7CisgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBjYXNlczsKK307CisKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAg
IGludCBmaXJzdFZhckFyZ09mZnNldDsKIH07CkBAIC0xMzA2LDEyICsxMzEwLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3dpdGNoOwogICAgIH0KIAorICAgIGJvb2wgaXNF
bnRyeVN3aXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnRyeVN3
aXRjaDsKKyAgICB9CisKICAgICBib29sIGlzVGVybWluYWwoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgSnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAg
ICAgICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICBj
YXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKICAgICAgICAgY2FzZSBEaXJlY3RU
YWlsQ2FsbDoKQEAgLTEzNzMsNiArMTM4MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChp
c1N3aXRjaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFN3aXRjaERhdGEqPigpOwog
ICAgIH0KKworICAgIEVudHJ5U3dpdGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0VudHJ5U3dpdGNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8u
YXM8RW50cnlTd2l0Y2hEYXRhKj4oKTsKKyAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3Vj
Y2Vzc29ycygpCiAgICAgewpAQCAtMTM4Myw2ICsxMzk5LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU3dpdGNoOgogICAgICAgICAgICAgcmV0dXJuIHN3
aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpICsgMTsKKyAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoK
KyAgICAgICAgICAgIHJldHVybiBlbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEzOTUs
NyArMTQxMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgp
LT5jYXNlc1tpbmRleF0udGFyZ2V0LmJsb2NrOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPT0gc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7Ci0gICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChpc0VudHJ5U3dpdGNoKCkpCisgICAgICAgICAgICByZXR1cm4gZW50cnlTd2l0Y2hE
YXRhKCktPmNhc2VzW2luZGV4XTsKIAogICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgICAg
IGNhc2UgMDoKQEAgLTIwMDQsNiArMjAyMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X29wSW5mby5hczxQcm9maWxlcjo6RXhlY3V0aW9uQ291bnRlcio+KCk7CiAgICAgfQogCisgICAg
dW5zaWduZWQgZW50cnlwb2ludEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCgpID09
IEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPHVuc2lnbmVkPigpOworICAgIH0KKwogICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OSw2ICszODksNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSnVtcCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEJyYW5jaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKFN3aXRjaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudHJ5U3dpdGNo
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oVGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cykgXAogICAgIG1hY3JvKERpcmVjdFRhaWxDYWxsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKQEAgLTQzOSw2ICs0NDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIC8qIE5vZGVzIGZvciBET00gSklUICovXAogICAgIG1hY3JvKENhbGxET01H
ZXR0ZXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDYWxs
RE9NLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgLyogTWV0YWRhdGEg
bm9kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBzdGF0ZSBmb3IgZmx1c2hlZCBhcmd1bWVudCB0eXBl
cyBhdCBhbiBlbnRyeXBvaW50IGluIHRoZSBwcm9ncmFtLiAqLyBcCisgICAgLyogQ3VycmVudGx5
LCB3ZSBvbmx5IHVzZSB0aGlzIGZvciB0aGUgYmxvY2tzIGFuIEVudHJ5U3dpdGNoIGJyYW5jaGVz
IHRvIGF0IHRoZSByb290IG9mIHRoZSBwcm9ncmFtLiAqLyBcCisgICAgLyogVGhpcyBpcyBvbmx5
IHVzZWQgaW4gU1NBLiAqLyBcCisgICAgbWFjcm8oSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVu
dHMsIE5vZGVNdXN0R2VuZXJhdGUpCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9u
aWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQg
YnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZp
YSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1Nyw5IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2Nr
KDApOwogICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5maWxs
KEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgYXJndW1lbnQtLTspIHsK
LSAgICAgICAgICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1thcmd1bWVudF0sCi0gICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgICAgIHJv
b3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm1fbG9jYWxzLmFyZ3VtZW50KGFyZ3VtZW50KSA9
IEF2YWlsYWJpbGl0eShmbHVzaGVkQXQpOwotICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9ncmFwaC5ibG9jaygwKS0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAgICByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBBdmFp
bGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRl
IG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVy
LgogICAgICAgICAKQEAgLTg2LDEwICs4MywxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3Vs
YXRvci5tX2F2YWlsYWJpbGl0eTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29y
SW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewogICAg
ICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29y
KHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5tZXJnZShjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5KTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3Nvcklu
ZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3Nvcihz
dWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTE5OSw2ICsyMDAsMTYgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUt
PnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKworICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7IGFyZ3VtZW50LS07ICkgewor
ICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCA9IEZsdXNoZWRBdChhcmd1bWVudEZvcm1h
dHNbYXJndW1lbnRdLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAg
ICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMuYXJndW1lbnQoYXJndW1lbnQpID0gQXZh
aWxhYmlsaXR5KGZsdXNoZWRBdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgICAgICAKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZp
c2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDE2ICszMzgsMTkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogfQogCiB2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQotewotICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQoreyAKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUIHx8IGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CisKKyAgICBpZiAoIU9wdGlvbnM6OnVz
ZU9TUkVudHJ5VG9ERkcoKSAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvRlRMKCkgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpGVExKSVQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6REZHSklUKTsKLSAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaml0Q29kZSk7CiAKLSAgICBERkc6OkNh
dGNoRW50cnlwb2ludERhdGEqIGNhdGNoRW50cnlwb2ludCA9IGppdENvZGUtPmNhdGNoT1NSRW50
cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICBDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoZGZnQ29tbW9uKTsKKyAgICBERkc6OkNhdGNoRW50cnlwb2ludERhdGEqIGNhdGNo
RW50cnlwb2ludCA9IGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghY2F0Y2hFbnRyeXBvaW50KSB7CiAgICAgICAgIC8v
IFRoaXMgY2FuIGJlIG51bGwgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLiBUaGUgbW9zdCBjb21t
b24gaXMgdGhhdCB3ZSBkaWRuJ3QKICAgICAgICAgLy8gY29tcGlsZSB0aGlzIG9wX2NhdGNoIGFz
IGFuIGVudHJ5cG9pbnQgc2luY2UgaXQgaGFkIG5ldmVyIGV4ZWN1dGVkIHdoZW4gc3RhcnRpbmcK
QEAgLTM1Niw5ICszNTksOSBAQCB2b2lkKiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUq
IGV4CiAgICAgfQogCiAgICAgLy8gV2UncmUgb25seSBhbGxvd2VkIHRvIE9TUiBlbnRlciBpZiB3
ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21wYXRpYmxlIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50cnlwb2ludC0+bV9hcmd1
bWVudEZvcm1hdHMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgY2F0Y2hFbnRyeXBvaW50LT5hcmd1bWVudEZvcm1hdHMuc2l6
ZSgpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNr
ZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkuanNWYWx1ZSgpOwotICAg
ICAgICBzd2l0Y2ggKGNhdGNoRW50cnlwb2ludC0+bV9hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRd
KSB7CisgICAgICAgIHN3aXRjaCAoY2F0Y2hFbnRyeXBvaW50LT5hcmd1bWVudEZvcm1hdHNbYXJn
dW1lbnRdKSB7CiAgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTM4MiwxMyArMzg1LDEzIEBAIHZvaWQqIHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSog
ZXgKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvckNoZWNrID0g
aml0Q29kZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGRmZ0NvbW1vbi0+cmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOwogICAgIGlmIChVTkxJS0VMWSghdm0u
ZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2spLm9mZnNldCgpXSkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIEFTU0VSVChJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoZXhlYy0+Y29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2V4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCldLnUub3Bjb2Rl
KSA9PSBvcF9jYXRjaCk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGV4ZWMtPmNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKVtleGVjLT5ieXRlY29kZU9mZnNldCgpICsgM10udS5wb2lu
dGVyKTsKLSAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
Kj4oaml0Q29kZS0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICBKU1Zh
bHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5j
YXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kKS5p
c0xvY2FsKCkpCkBAIC0zOTcsOSArNDAwLDggQEAgdm9pZCogcHJlcGFyZUNhdGNoT1NSRW50cnko
RXhlY1N0YXRlKiBleAogICAgICAgICArK2luZGV4OwogICAgIH0pOwogCi0gICAgaml0Q29kZS0+
Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKHNpemVvZihKU1ZhbHVlKSAqIGlu
ZGV4KTsKLQotICAgIHJldHVybiBqaXRDb2RlLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KGNh
dGNoRW50cnlwb2ludC0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgZGZnQ29tbW9uLT5jYXRj
aE9TUkVudHJ5QnVmZmVyLT5zZXRBY3RpdmVMZW5ndGgoc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgp
OworICAgIHJldHVybiBjYXRjaEVudHJ5cG9pbnQtPm1hY2hpbmVDb2RlOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSwxMSBAQCBpbmxpbmUgdW5z
aWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJCiB9CiAKIHN0cnVjdCBDYXRjaEVudHJ5cG9p
bnREYXRhIHsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9t
YWNoaW5lQ29kZU9mZnNldDsKICAgICAvLyBXZSB1c2UgdGhpcyB3aGVuIGRvaW5nIE9TUiBlbnRy
eSBhdCBjYXRjaC4gV2UgcHJvdmUgdGhlIGFyZ3VtZW50cwogICAgIC8vIGFyZSBvZiB0aGUgZXhw
ZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4KLSAgICBWZWN0b3I8
Rmx1c2hGb3JtYXQ+IG1fYXJndW1lbnRGb3JtYXRzOworICAgIHZvaWQqIG1hY2hpbmVDb2RlOwor
ICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOworICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXg7CiB9OwogCiAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVy
IHRoYXQgdGhlIE9TUiBlbnRyeSB0aHVuayB3aWxsIHJlY29nbml6ZSBhbmQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRU
b0FyZ3VtZW50cy5jbGVhcigpOwogICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1l
bnRzLmFkZChuZXdSb290LCBuZXdBcmd1bWVudHMpOwogCi0gICAgICAgIG1fZ3JhcGgubV9jcHND
RkcgPSBzdGQ6Om1ha2VfdW5pcXVlPENQU0NGRz4obV9ncmFwaCk7Ci0KKyAgICAgICAgbV9ncmFw
aC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
ICAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDkyLDYgKzEwOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIC8v
IFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTU1LDYgKzExNTYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5
bmFtaWNWYXI6CiAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKKyAg
ICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2Ug
aXQgb25seSBwcmV0ZW5kcyB0byBwcm9kdWNlIGEgdmFsdWUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lv
biAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBA
IGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSAKIHB1YmxpYzoKICAgICBT
U0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
U1NBIGNvbnZlcnNpb24iKQotICAgICAgICAsIG1fY2FsY3VsYXRvcihncmFwaCkKICAgICAgICAg
LCBtX2luc2VydGlvblNldChncmFwaCkKICAgICB7CiAgICAgfQpAQCAtNTIsOSArNTIsNTkgQEAg
cHVibGljOgogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
Z3JhcGgubV9pc0luU1NBQ29udmVyc2lvbik7CisgICAgICAgIG1fZ3JhcGgubV9pc0luU1NBQ29u
dmVyc2lvbiA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1l
bnRzKCk7CiAgICAgICAgIG1fZ3JhcGguY2xlYXJDUFNDRkdEYXRhKCk7CisKKyAgICAgICAgSGFz
aE1hcDx1bnNpZ25lZCwgQmFzaWNCbG9jayosIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBlbnRyeXBvaW50SW5kZXhU
b0FyZ3VtZW50c0Jsb2NrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9udW1i
ZXJPZkVudHJ5cG9pbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKTsKKworICAgICAg
ICAgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0KDAs
IDEuMGYpOworCisgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEqIGVudHJ5U3dpdGNoRGF0YSA9
IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEuYWRkKCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRleCA8IG1fZ3JhcGgubV9udW1i
ZXJPZkVudHJ5cG9pbnRzOyArK2VudHJ5cG9pbnRJbmRleCkgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIG9sZFJvb3QgPSBtX2dyYXBoLm1fZW50cnlwb2ludHNbZW50cnlwb2ludEluZGV4
XTsKKyAgICAgICAgICAgICAgICBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrLmFkZChl
bnRyeXBvaW50SW5kZXgsIG9sZFJvb3QpOworICAgICAgICAgICAgICAgIGVudHJ5U3dpdGNoRGF0
YS0+Y2FzZXMuYXBwZW5kKG9sZFJvb3QpOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG9sZFJv
b3QtPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIG9sZFJvb3QtPnBy
ZWRlY2Vzc29ycy5hcHBlbmQobmV3Um9vdCk7CisKKyAgICAgICAgICAgICAgICBpZiAob2xkUm9v
dC0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCEhZW50
cnlwb2ludEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRJ
bmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290LT5i
eXRlY29kZUJlZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG9sZFJvb3QtPmF0KDApLT5vcmlnaW47CisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05v
bmUsIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzLCBvcmlnaW4sIE9wSW5mbyhlbnRyeXBv
aW50SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgRXhpdE9LLCBvcmlnaW4pOworICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUob2xkUm9vdCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXNbMF0g
PT0gbV9ncmFwaC5ibG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGUgbm9ybWFsIGNh
bGwgZW50cnlwb2ludCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKworICAgICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9ncmFwaC5tX251bWJlck9mRW50
cnlwb2ludHMpOworCisgICAgICAgICAgICBjb25zdCBib29sIGV4aXRPSyA9IGZhbHNlOworICAg
ICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4geyBDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDAp
LCBleGl0T0sgfTsKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEVudHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRy
eVN3aXRjaERhdGEpKTsKKworICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRzLmNsZWFy
KCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludHMuYXBwZW5kKG5ld1Jvb3QpOwor
CisgICAgICAgICAgICBibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBTU0FDYWxjdWxhdG9yIGNhbGN1bGF0b3IobV9ncmFwaCk7CisKICAgICAgICAgbV9n
cmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewpAQCAtNjcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxjdWxh
dG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
c3NhVmFyaWFibGUgPSBjYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAgICAgICAgICAgICBBU1NF
UlQoc3NhVmFyaWFibGUtPmluZGV4KCkgPT0gbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKSk7
CiAgICAgICAgICAgICBtX3ZhcmlhYmxlRm9yU1NBSW5kZXguYXBwZW5kKCZ2YXJpYWJsZSk7CiAg
ICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuYWRkKCZ2YXJpYWJsZSwgc3NhVmFy
aWFibGUpOwpAQCAtMTAzLDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
bV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci5uZXdEZWYo
CisgICAgICAgICAgICAgICAgY2FsY3VsYXRvci5uZXdEZWYoCiAgICAgICAgICAgICAgICAgICAg
IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQodmFyaWFibGUpLCBibG9jaywgY2hpbGROb2Rl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTEyLDcgKzE2Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFyZSB0byBiZSBpbnNl
cnRlZC4gVGhpcyBjcmVhdGVzIHRoZSBQaGkncyBidXQgZG9lc24ndCBpbnNlcnQgdGhlbQogICAg
ICAgICAvLyB5ZXQuIFdlIHdpbGwgbGF0ZXIga25vdyB3aGVyZSB0byBpbnNlcnQgYmFzZWQgb24g
d2hlcmUgU1NBQ2FsY3VsYXRvciB0ZWxscyB1cyB0by4KLSAgICAgICAgbV9jYWxjdWxhdG9yLmNv
bXB1dGVQaGlzKAorICAgICAgICBjYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAogICAgICAgICAgICAg
WyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUsIEJhc2ljQmxvY2sqIGJs
b2NrKSAtPiBOb2RlKiB7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAg
ICAgICAgICAgICAgCkBAIC0xNjcsNyArMjE3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgaSwgIjogIiwgVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcChtX2dyYXBoLCBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbaV0pLCAiXG4iKTsKICAgICAg
ICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRv
cjogIiwgbV9jYWxjdWxhdG9yLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxj
dWxhdG9yOiAiLCBjYWxjdWxhdG9yLCAiXG4iKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gRG8gdGhlIGJ1bGsgb2YgdGhlIFNTQSBjb252ZXJzaW9uLiBGb3IgZWFjaCBibG9jaywg
dGhpcyB0cmFja3MgdGhlIG9wZXJhbmQtPk5vZGUKQEAgLTIyMCw3ICsyNzAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBsaXZlIHZhcmlh
YmxlICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgdmFyaWFibGUpLCAiIGF0IGhl
YWQgb2YgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1f
c3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQodmFyaWFibGUpOwotICAgICAgICAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IG1fY2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVh
ZChibG9jaywgc3NhVmFyaWFibGUpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9y
OjpEZWYqIGRlZiA9IGNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlh
YmxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWYpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGFyZSByZXF1aXJlZCB0byBpbnNlcnQgYSBQaGksIHRoZW4gd2Ugd29u
J3QgaGF2ZSBhIHJlYWNoaW5nIGRlZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgaGVh
ZC4KQEAgLTI0Niw3ICsyOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyB2YWx1ZUZvck9w
ZXJhbmQgd2l0aCB0aG9zZSBQaGlzLiBGb3IgUGhpcyBhc3NvY2lhdGVkIHdpdGggdmFyaWFibGVz
IHRoYXQgYXJlIG5vdAogICAgICAgICAgICAgLy8gZmx1c2hlZCwgd2UgYWxzbyBpbnNlcnQgYSBN
b3ZIaW50LgogICAgICAgICAgICAgc2l6ZV90IHBoaUluc2VydGlvblBvaW50ID0gMDsKLSAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhp
c0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYq
IHBoaURlZiA6IGNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewogICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhb
cGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+
dmFsdWUoKSk7CkBAIC0zNDYsNyArMzk2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gdGVybWluYWwubm9kZS0+b3JpZ2luOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1
Y2Nlc3NvckluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAg
ICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JC
bG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0
b3I6OkRlZiogcGhpRGVmIDogY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2sp
KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJs
ZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5k
ZXgoKV07CkBAIC0zODMsMjMgKzQzMywyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBibG9jay0+
c3NhID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrOjpTU0FEYXRhPihibG9jayk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSBlbnRyeXBvaW50cyBp
biBERkcgU1NBOgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1Mzk2Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9lbnRyeXBvaW50
cy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRy
eXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7Ci0gICAgICAg
IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMucmVzaXplKGFyZ3VtZW50cy5zaXplKCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmd1bWVudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsKLQotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fYXJndW1lbnRNYXBwaW5nLmdldChhcmd1bWVudHNbaV0pOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlKTsKLSAgICAgICAgICAgIGZv
cm1hdCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbaV0gPSBmb3JtYXQ7Ci0gICAgICAg
ICAgICBhcmd1bWVudHNbaV0gPSBub2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0
aGUgYXJndW1lbnRzIGZvciB0aGUgYmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KKyAgICAgICAg
Zm9yIChhdXRvJiBwYWlyIDogZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jaykgeworICAg
ICAgICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBvbGRSb290ID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIEFyZ3VtZW50
c1ZlY3RvciYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5k
KG9sZFJvb3QpLT52YWx1ZTsKKyAgICAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1l
bnRGb3JtYXRzOworICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXJndW1lbnRzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fYXJndW1lbnRNYXBwaW5nLmdldChhcmd1bWVudHNbaV0pOworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy51
bmNoZWNrZWRBcHBlbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJ
bmRleF0gPSBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cyk7CiAgICAgICAgIH0KLSAgICAgICAgCisK
KyAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jbGVhcigpOworCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9pc0luU1NBQ29udmVyc2lvbik7CisgICAgICAg
IG1fZ3JhcGgubV9pc0luU1NBQ29udmVyc2lvbiA9IGZhbHNlOworCiAgICAgICAgIG1fZ3JhcGgu
bV9mb3JtID0gU1NBOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC00MTEsNyArNDYzLDYg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTU0FDYWxjdWxhdG9yIG1fY2FsY3Vs
YXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAgSGFzaE1hcDxWYXJp
YWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG1fc3NhVmFyaWFibGVG
b3JWYXJpYWJsZTsKICAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gbV9hcmd1bWVudE1hcHBpbmc7
CkBAIC00MjEsMTEgKzQ3Miw3IEBAIHByaXZhdGU6CiAKIGJvb2wgcGVyZm9ybVNTQUNvbnZlcnNp
b24oR3JhcGgmIGdyYXBoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFncmFwaC5tX2lzSW5TU0FD
b252ZXJzaW9uKTsKLSAgICBncmFwaC5tX2lzSW5TU0FDb252ZXJzaW9uID0gdHJ1ZTsKICAgICBi
b29sIHJlc3VsdCA9IHJ1blBoYXNlPFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOwotICAgIFJF
TEVBU0VfQVNTRVJUKGdyYXBoLm1faXNJblNTQUNvbnZlcnNpb24pOwotICAgIGdyYXBoLm1faXNJ
blNTQUNvbnZlcnNpb24gPSBmYWxzZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgogICAg
IGNhc2UgU3dpdGNoOgorICAgIGNhc2UgRW50cnlTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CiAg
ICAgY2FzZSBUYWlsQ2FsbDoKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgpAQCAtMzk4LDYgKzM5
OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOgogICAgIGNhc2UgQXRvbWljc0lzTG9j
a0ZyZWU6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEFycmF5U2xpY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NDUsNyArNTY0NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9
IHRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYXlsb2FkLmdwcigpOwog
Ci0gICAgICAgIEpTVmFsdWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX2pp
dC5qaXRDb2RlKCktPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0
Y2hPU1JFbnRyeUluZGV4KCldOworICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CiAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIsIFRhZ09mZnNl
dCksIHRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
dGVtcEdQUiwgUGF5bG9hZE9mZnNldCksIHBheWxvYWRHUFIpOwpAQCAtNTY5OCw2ICs1Njk4LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQXRv
bWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgY2FzZSBJZGVudGl0eVdpdGhQcm9m
aWxlOgorICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CisgICAgY2FzZSBF
bnRyeVN3aXRjaDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJ1bmV4
cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAxLDcgKzYwMDEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDogewotICAgICAgICBKU1ZhbHVlKiBwdHIgPSAm
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jYXRjaE9TUkVudHJ5
QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpXTsKKyAgICAg
ICAgSlNWYWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0
Y2hPU1JFbnRyeUluZGV4KCldOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdHIpLCB0ZW1wR1BSKTsKQEAgLTYxMDgsNiArNjEw
OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2UgRW50
cnlTd2l0Y2g6CisgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBj
YXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2Nh
bDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzMSw2ICsxOTMxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogICAgIH0KIAogICAgIG1f
aml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBvaW50cygpOworICAgIG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cygpOwogCiAgICAgQVNTRVJUKG9z
ckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgRW50cnlTd2l0Y2g6IHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgdGVy
bWluYWwsICJVbmV4cGVjdGVkIEVudHJ5U3dpdGNoIGluIENQUyBmb3JtLiIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIGluIHJlbGVhc2UgYnVpbGRzLgogCiAgICAgICAgIFZBTElEQVRFKCht
X2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5pc0VudHJ5cG9pbnQobV9ncmFwaC5ibG9jaygwKSkp
OworICAgICAgICBWQUxJREFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguYmxvY2soMCkg
PT0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzWzBdKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKQorICAgICAgICAgICAgVkFMSURBVEUoKGJs
b2NrKSwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogCiAgICAgICAgIC8vIFZhbGlk
YXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2lu
dHMgYXJlIGRlYWQuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3Jh
cGgubV9lbnRyeXBvaW50cykgewpAQCAtNTQ5LDYgKzU1Myw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAgICAgICAgIGNhc2UgRW50
cnlTd2l0Y2g6CisgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhInVuZXhwZWN0ZWQg
bm9kZSB0eXBlIGluIENQUyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OiB7CkBAIC02MzksNiArNjQ1LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSB0aGluZ3MgaGVyZS4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ3MQogICAg
ICAgICAKKyAgICAgICAgVkFMSURBVEUoKCksIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5zaXplKCkg
PT0gMSk7CisgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fZW50cnlwb2ludHNbMF0gPT0g
bV9ncmFwaC5ibG9jaygwKSk7CisgICAgICAgIFZBTElEQVRFKCgpLCAhbV9ncmFwaC5tX2FyZ3Vt
ZW50Rm9ybWF0cy5pc0VtcHR5KCkpOyAvLyBXZSBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZW50
cnlwb2ludC4KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6IG1fZ3Jh
cGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQua2V5cygpKQorICAgICAg
ICAgICAgVkFMSURBVEUoKCksIGVudHJ5cG9pbnRJbmRleCA+IDApOyAvLyBCeSBjb252ZW50aW9u
LCAwIGlzIHRoZSBlbnRyeXBvaW50IGluZGV4IGZvciB0aGUgb3BfZW50ZXIgZW50cnlwb2ludCwg
d2hpY2ggY2FuIG5vdCBiZSBpbiBhIGNhdGNoLgorCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTc0MCw2ICs3NTMsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKKyAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBub2RlLT5lbnRyeVN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpID09
IG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRz
OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmVudHJ5cG9pbnRJ
bmRleCgpIDwgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwK
QEAgLTc4MCw2ICs4MDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChvcGVyYW5kKSA8IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KCkgeyB9CisK
ICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjE1OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNl
IExvb3BIaW50OgogICAgIGNhc2UgU2tpcFNjb3BlOgogICAgIGNhc2UgR2V0R2xvYmFsT2JqZWN0
OgpAQCAtMjQ1LDYgKzI0Niw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbE91dE9mQm91bmRzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBF
bnRyeVN3aXRjaDoKICAgICBjYXNlIFN3aXRjaDoKICAgICBjYXNlIFR5cGVPZjoKICAgICBjYXNl
IFB1dEJ5SWQ6CkBAIC0zMDAsNiArMzAyLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
CiAgICAgY2FzZSBBdG9taWNzSXNMb2NrRnJlZToKKyAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBv
aW50QXJndW1lbnRzOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIH0pOwogCiAgICAgc3RhdGUuZmluYWxpemVyLT5iM0Nv
ZGVMaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKwogICAgIGlmIChzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgc3RhdGUuYWxs
b2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKQEAgLTE1Miw5ICsxNTMsMTgg
QEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICBjb2Rl
QmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmln
aW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwg
KnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCiAgICAgc3RhdGUuZ2VuZXJh
dGVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAotICAgICAgICBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5s
b2NhdGlvbk9mKHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbCgwKSkpOwogICAgIHN0YXRlLmpp
dENvZGUtPmluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVj
dHMoKSk7CiAKKyAgICBmb3IgKGF1dG8gcGFpciA6IHN0YXRlLmdyYXBoLm1fZW50cnlwb2ludElu
ZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIHVuc2lnbmVkIGNhdGNoQnl0ZWNv
ZGVPZmZzZXQgPSBwYWlyLnZhbHVlOworICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXgg
PSBwYWlyLmtleTsKKyAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHMg
PSBzdGF0ZS5ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAg
ICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KAorICAgICAgICAg
ICAgY2F0Y2hCeXRlY29kZU9mZnNldCwgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mKHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgp
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOworICAgIH0K
KyAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKCk7CisK
ICAgICBpZiAoQjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9j
LT5jb2RlKCkuZGlzYXNzZW1ibGVyKCkpIHsKICAgICAgICAgUHJpbnRTdHJlYW0mIG91dCA9IFdU
Rjo6ZGF0YUZpbGUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIxNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNs
dWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkF0b21pY3NPYmplY3QuaCIKQEAgLTE1MSw2ICsx
NTIsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICJfIiwgY29kZUJsb2NrKCktPmhhc2go
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmFtZSA9ICJqc0JvZHkiOworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhtX2dyYXBoLm1fbnVt
YmVyT2ZFbnRyeXBvaW50cyk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Z3JhcGgubV9jb2RlQmxvY2s7CisKKyAgICAgICAgICAgIFJlZlB0cjxCMzo6QWlyOjpQcm9sb2d1
ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6
OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oCisgICAgICAgICAgICAgICAgW2NvZGVC
bG9ja10gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRTYXZlKGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9jaywg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRy
eXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQua2V5cygpKSB7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hFbnRyeXBvaW50SW5kZXggIT0gMCk7CisgICAgICAgICAg
ICAgICAgbV9wcm9jLmNvZGUoKS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoY2F0Y2hFbnRyeXBv
aW50SW5kZXgsIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnkpIHsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxpdmVMb2NhbHMgPSBzdGQ6Om1heCgqbV9ncmFw
aC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnksIDF1KTsgLy8gTWFrZSBzdXJlIHdlIGFsd2F5
cyBhbGxvY2F0ZSBhIG5vbi1udWxsIGNhdGNoT1NSRW50cnlCdWZmZXIuCisgICAgICAgICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IG1fZ3Jh
cGgubV92bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoSlNWYWx1ZSkgKiBudW1iZXJPZkxp
dmVMb2NhbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBt
X2dyYXBoLmVuc3VyZVNTQURvbWluYXRvcnMoKTsKIApAQCAtMTYyLDcgKzE4Niw4IEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gV2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9mIHRoZSBp
bml0aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CiAgICAg
ICAgIAotICAgICAgICBtX3Byb2xvZ3VlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgcHJvbG9ndWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zID0gbV9vdXQubmV3QmxvY2soKTsK
ICAgICAgICAgbV9oYW5kbGVFeGNlcHRpb25zID0gbV9vdXQubmV3QmxvY2soKTsKIAogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTE3Niw4ICsyMDEsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIEJhY2sgdG8gcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBn
ZXQgc25lYWtpbHkgY3JlYXRlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAg
bV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bV9wcm9sb2d1ZSwgbV9oYW5kbGVFeGNlcHRpb25zKTsKLSAgICAgICAgbV9vdXQuaW5pdGlhbGl6
ZUNvbnN0YW50cyhtX3Byb2MsIG1fcHJvbG9ndWUpOworICAgICAgICBtX291dC5hcHBlbmRUbyhw
cm9sb2d1ZSwgY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyk7CisgICAgICAgIG1f
b3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBwcm9sb2d1ZSk7CiAgICAgICAgIGNyZWF0
ZVBoaVZhcmlhYmxlcygpOwogCiAgICAgICAgIHNpemVfdCBzaXplT2ZDYXB0dXJlZCA9IHNpemVv
ZihKU1ZhbHVlKSAqIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwpAQCAtMjU5LDUxICsyODQs
NTcgQEAgcHVibGljOgogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgZmly
c3RERkdCYXNpY0Jsb2NrID0gbG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSk7Ci0gICAgICAgIC8v
IENoZWNrIEFyZ3VtZW50cy4KLSAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+
KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7Ci0gICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAg
QXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSkpKTsKLSAgICAgICAgfQotICAgICAgICBtX25vZGUgPSBudWxscHRyOwotICAg
ICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwg
dHJ1ZSk7Ci0gICAgICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9B
cmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBtX291dC5zZXRPcmln
aW4obm9kZSk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUg
anNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm1hY2hpbmVM
b2NhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGhh
Y2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFsbG93cyB1cyB0byBkbyBDU0Ugb24g
dGhlCi0gICAgICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFyZ3VtZW50cy4gVGhp
cyBhc3N1bWVzIHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgotICAgICAgICAgICAg
ICAgIC8vIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vzbid0IGhhdmUgYW55
IGVmZmVjdHMgYmVmb3JlIGl0LiBUaGlzCi0gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGhvbGQg
dHJ1ZS4KLSAgICAgICAgICAgICAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBq
c1ZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNo
IChtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNo
ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KGpzVmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29s
ZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZENlbGw6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3I8TEJhc2lj
QmxvY2s+IHN1Y2Nlc3NvcnMobV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMpOworICAgICAg
ICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnM7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9ncmFwaC5tX251bWJlck9m
RW50cnlwb2ludHM7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIG9u
bHkgb3RoZXIgZW50cnlwb2ludCBpcyBhbiBvcF9jYXRjaCBlbnRyeXBvaW50LgorICAgICAgICAg
ICAgICAgIC8vIFdlIGRvIE9TUiBlbnRyeSBhdCBvcF9jYXRjaCwgYW5kIHdlIHByb3ZlIGFyZ3Vt
ZW50IGZvcm1hdHMgYmVmb3JlCisgICAgICAgICAgICAgICAgLy8ganVtcGluZyB0byBGVEwgY29k
ZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhcmd1bWVudCB0eXBlcyBoZXJlCisgICAgICAg
ICAgICAgICAgLy8gZm9yIHRoZXNlIGVudHJ5cG9pbnRzLgorICAgICAgICAgICAgICAgIHN1Y2Nl
c3NvcnNbaV0gPSBmaXJzdERGR0Jhc2ljQmxvY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1fb3V0LmVudHJ5U3dpdGNoKHN1Y2Nlc3NvcnMpOworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucywgbV9oYW5kbGVFeGNlcHRp
b25zKTsKKworICAgICAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgorICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwKCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0g
T3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlIHByb2ZpbGUoJm1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudChpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
anNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNb
MF1baV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmls
ZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Qm9v
bGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAi
QmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQu
anVtcChmaXJzdERGR0Jhc2ljQmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Zmlyc3RERkdCYXNpY0Jsb2NrKTsKKwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxl
RXhjZXB0aW9ucywgZmlyc3RERkdCYXNpY0Jsb2NrKTsKICAgICAgICAgQm94PENDYWxsSGVscGVy
czo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKQEAg
LTUxMiw2ICs1NDMsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxv
Y2FsOgogICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKKyAgICAgICAgICAg
IGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICBjb21waWxlR2V0U3RhY2soKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtOTQwLDYgKzk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgREZH
OjpTd2l0Y2g6CiAgICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBERkc6OkVudHJ5U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZUVu
dHJ5U3dpdGNoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBERkc6OlJldHVy
bjoKICAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTE1Miw2ICsxMTg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRIaW50OgogICAgICAg
ICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVu
cmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBAIC0xNTIyLDE2ICsxNTYwLDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5
KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7CiAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgp
LnRvTG9jYWwoKSkpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2Nh
bCgpCisgICAgeworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5jYXRjaE9TUkVudHJ5
QnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NCht
X291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpKSkpOwor
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAgewotICAgICAgICAv
LyBHZXRMb2NhbHMgYXJpc2Ugb25seSBmb3IgY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBhcmd1bWVu
dHMuIEZvciBhcmd1bWVudHMsIHdlIG1pZ2h0IGhhdmUKLSAgICAgICAgLy8gYWxyZWFkeSBsb2Fk
ZWQgaXQuCi0gICAgICAgIGlmIChMVmFsdWUgdmFsdWUgPSBtX2xvYWRlZEFyZ3VtZW50VmFsdWVz
LmdldChtX25vZGUpKSB7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwogICAg
ICAgICAKQEAgLTc3ODgsNiArNzgyNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBzd2l0Y2gga2luZCIpOwogICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUVudHJ5U3dpdGNoKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxMQmFz
aWNCbG9jaz4gc3VjY2Vzc29yczsKKyAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA6IG1fbm9kZS0+ZW50cnlTd2l0Y2hEYXRhKCktPmNhc2VzKQorICAgICAgICAgICAgc3Vj
Y2Vzc29ycy5hcHBlbmQobG93QmxvY2soc3VjY2Vzc29yKSk7CisgICAgICAgIG1fb3V0LmVudHJ5
U3dpdGNoKHN1Y2Nlc3NvcnMpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVSZXR1cm4o
KQogICAgIHsKQEAgLTEyNTkxLDYgKzEyNjM2LDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBhcHBlbmRPU1JFeGl0KGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24s
IG1fb3JpZ2luKTsKICAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZSgKKyAgICAgICAgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIGNvbnN0IE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgcHJvZmlsZSwgZmFpbENvbmRpdGlvbiwg
bV9vcmlnaW4pOworICAgIH0KICAgICAKICAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5k
KQogICAgIHsKQEAgLTE0MTE1LDE2ICsxNDE2NiwyOSBAQCBwcml2YXRlOgogCiAgICAgT1NSRXhp
dERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKEZvcm1hdHRlZFZhbHVlIGxvd1Zh
bHVlLCBOb2RlKiBoaWdoVmFsdWUpCiAgICAgeworICAgICAgICByZXR1cm4gYXBwZW5kT1NSRXhp
dERlc2NyaXB0b3IobG93VmFsdWUsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihtX25vZGUsIGhpZ2hWYWx1ZSkpOworICAgIH0KKworICAgIE9TUkV4aXREZXNjcmlwdG9y
KiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgY29uc3Qg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSYgcHJvZmlsZSkKKyAgICB7CiAgICAgICAgIHJl
dHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCi0gICAg
ICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKG1fbm9kZSwgaGlnaFZhbHVlKSwKKyAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1h
dCgpLCBwcm9maWxlLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mTG9jYWxzKCkpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYXBwZW5kT1NSRXhp
dCgKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUq
IGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIAogICAgICAgICBOb2RlT3JpZ2luIG9y
aWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKICAgICB7CisgICAgICAgIHJl
dHVybiBhcHBlbmRPU1JFeGl0KGtpbmQsIGxvd1ZhbHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3IobV9ub2RlLCBoaWdoVmFsdWUpLAorICAgICAgICAgICAgZmFpbENv
bmRpdGlvbiwgb3JpZ2luLCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLCBjb25zdCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlJiBwcm9maWxlLCBM
VmFsdWUgZmFpbENvbmRpdGlvbiwgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlz
RXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQorICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMi
LCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5zaXplKCksICIgd2l0aCBh
dmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKICAgICAgICAgICAgIGlm
ICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKQEAgLTE0MTU5LDEyICsxNDIyMywx
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGJsZXNzU3BlY3Vs
YXRpb24oCi0gICAgICAgICAgICBtX291dC5zcGVjdWxhdGUoZmFpbENvbmRpdGlvbiksIGtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIG9yaWdpbik7CisgICAgICAgICAgICBtX291dC5zcGVjdWxh
dGUoZmFpbENvbmRpdGlvbiksIGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBvcmlnaW4pOwogICAg
IH0KIAogICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1ZhbHVlKiB2YWx1ZSwgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9y
aWdpbiBvcmlnaW4pCiAgICAgewotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2Ny
aXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1ZSwgaGlnaFZhbHVlKTsKKyAg
ICAgICAgYmxlc3NTcGVjdWxhdGlvbih2YWx1ZSwga2luZCwgbG93VmFsdWUsIG1fZ3JhcGgubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX25vZGUsIGhpZ2hWYWx1ZSksIG9yaWdpbik7
CisgICAgfQorCisgICAgdm9pZCBibGVzc1NwZWN1bGF0aW9uKENoZWNrVmFsdWUqIHZhbHVlLCBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgY29uc3QgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgTm9kZU9yaWdpbiBvcmlnaW4pCisgICAgeworICAg
ICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcihsb3dWYWx1ZSwgcHJvZmlsZSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZS0+YXBw
ZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBvcmlnaW4uZm9y
RXhpdCwgbG93VmFsdWUpKTsKIApAQCAtMTQ2NTEsNyArMTQ3MjAsNiBAQCBwcml2YXRlOgogICAg
IE91dHB1dCBtX291dDsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICAKLSAgICBMQmFzaWNC
bG9jayBtX3Byb2xvZ3VlOwogICAgIExCYXNpY0Jsb2NrIG1faGFuZGxlRXhjZXB0aW9uczsKICAg
ICBIYXNoTWFwPERGRzo6QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAK
QEAgLTE0NjY4LDExICsxNDczNiw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2Vy
ZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwogICAgIAotICAgIC8vIFRoaXMgaXMgYSBiaXQg
b2YgYSBoYWNrLiBJdCBwcmV2ZW50cyBCMyBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGlu
ZyBvZiBhcmd1bWVudHMuCi0gICAgLy8gSXQncyBuaWNlIHRvIGhhdmUgdGhlc2Ugb3B0aW1pemF0
aW9ucyBvbiBvdXIgZW5kIGJlY2F1c2Ugd2UgY2FuIGd1YXJhbnRlZSB0aGVtIGEgYml0IGJldHRl
ci4KLSAgICAvLyBQcm9iYWJseSBhbHNvIHNhdmVzIEIzIGNvbXBpbGUgdGltZS4KLSAgICBIYXNo
TWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXM7Ci0gICAgCiAgICAgSGFz
aE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAgICAgCiAgICAgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIyMTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYxLDYg
Kzg2MSwxNCBAQCB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpCiAgICAg
ICAgIHZhbHVlLnZhbHVlKCktPmFzPEIzOjpVcHNpbG9uVmFsdWU+KCktPnNldFBoaShwaGkpOwog
fQogCit2b2lkIE91dHB1dDo6ZW50cnlTd2l0Y2goY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYg
Y2FzZXMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FzZXMuc2l6ZSgpID09IG1fcHJvYy5udW1F
bnRyeXBvaW50cygpKTsKKyAgICBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRW50
cnlTd2l0Y2gsIG9yaWdpbigpKTsKKyAgICBmb3IgKExCYXNpY0Jsb2NrIGJsb2NrIDogY2FzZXMp
CisgICAgICAgIG1fYmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxvY2soYmxvY2sp
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9u
IDIyMTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyOSw2ICs0MjksOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICB2b2lkIGVudHJ5U3dpdGNoKGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mKTsKKwogICAg
IHZvaWQgcmV0KExWYWx1ZSk7CiAKICAgICB2b2lkIHVucmVhY2hhYmxlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMTU5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUu
aCIKICNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
QEAgLTE1MzMsMTAgKzE1MzQsMTQgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlP
U1JFbnRlcgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAog
ICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+
cmVwbGFjZW1lbnQoKTsKLSAgICBpZiAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSAh
PSBKSVRDb2RlOjpERkdKSVQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXIqPihERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGlt
aXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KSk7CisgICAgc3dpdGNoIChvcHRpbWl6ZWRS
ZXBsYWNlbWVudC0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CisgICAg
Y2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4o
REZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeShleGVjLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0
ZWNvZGVJbmRleCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBieXRl
Y29kZUluZGV4KQpAQCAtMTU0Niw4ICsxNTUxLDE0IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHJ5T1NSRW50ZXIKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKTsKLSAgICBpZiAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpERkdKSVQpCisKKyAgICBzd2l0Y2ggKG9wdGltaXplZFJlcGxhY2VtZW50
LT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICBjYXNlIEpJVENv
ZGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihERkc6OnByZXBh
cmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4
KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY29kZUJsb2Nr
LT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgpOwogICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpW2J5dGVjb2RlSW5kZXggKyAzXS51LnBvaW50ZXIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>