<?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>131407</bug_id>
          
          <creation_ts>2014-04-08 16:25:03 -0700</creation_ts>
          <short_desc>Web Replay: CodeGeneratorJS should guard includes of replay-related headers</short_desc>
          <delta_ts>2014-04-11 13:06:12 -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>Bindings</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>131340</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998872</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-08 16:25:03 -0700</bug_when>
    <thetext>Missed this before because the old branch was never built on non-replay ports, or something. Also will move generated replay memoization code from DEFINE_STATIC_LOCAL to NeverDestroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998906</commentid>
    <comment_count>1</comment_count>
      <attachid>228917</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-08 17:29:09 -0700</bug_when>
    <thetext>Created attachment 228917
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998907</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-08 17:30:27 -0700</bug_when>
    <thetext>Attachment 228917 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h:118:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:172:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:174:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:206:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:240:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:276:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:312:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:314:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:429:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:457:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 13 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999220</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-09 10:16:07 -0700</bug_when>
    <thetext>Anders, does NeverDestroyed play nice with AtomicString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999873</commentid>
    <comment_count>4</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-11 07:10:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Anders, does NeverDestroyed play nice with AtomicString?

There are ~15 uses of NeverDestroyed&lt;const AtomicString&gt; in the codebase and ~90 uses of NeverDestroyed&lt;AtomicString&gt;. So, if it is an anti-pattern, there&apos;s some more cleanup to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999928</commentid>
    <comment_count>5</comment_count>
      <attachid>228917</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-11 10:44:34 -0700</bug_when>
    <thetext>Comment on attachment 228917
the patch

Patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999992</commentid>
    <comment_count>6</comment_count>
      <attachid>228917</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-11 13:06:07 -0700</bug_when>
    <thetext>Comment on attachment 228917
the patch

Clearing flags on attachment: 228917

Committed r167140: &lt;http://trac.webkit.org/changeset/167140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999993</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-11 13:06:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228917</attachid>
            <date>2014-04-08 17:29:09 -0700</date>
            <delta_ts>2014-04-11 13:06:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-131407-20140408172848.patch</filename>
            <type>text/plain</type>
            <size>76582</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2OTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUwMjFkNGFjYTgzZDNh
NDM2MWM3MDQ0MTFlYzk1MzkwOWIyMmFiZC4uZTAyOWRjNzNiYTVmOWExNGQzMTg3NGUwNDI0YjA1
MzU3YmRmYmI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDE0LTA0LTA4ICBCcmlh
biBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAorICAgICAgICBXZWIgUmVwbGF5
OiBDb2RlR2VuZXJhdG9ySlMgc2hvdWxkIGd1YXJkIGluY2x1ZGVzIG9mIHJlcGxheS1yZWxhdGVk
IGhlYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTQwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWRkcyBndWFyZHMgdG8gaGVhZGVycyB0aGF0IGFyZSBvbmx5IHJlcXVpcmVk
IGJ5IGdlbmVyYXRlZCByZXBsYXkgY29kZQorICAgICAgICB0aGF0IGlzIGl0c2VsZiBndWFyZGVk
LiBPdGhlciBwb3J0cyBwcm9iYWJseSBoYXZlbid0IGFkZGVkIHRoZSBoZWFkZXJzIHRvIHRoZWly
CisgICAgICAgIGJ1aWxkIGZpbGVzLCBzbyB3ZSBkb24ndCB3YW50IHRvIGVtaXQgdGhlIHVudXNl
ZCBoZWFkZXIgaW5jbHVkZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNvbnZlcnRzIGdl
bmVyYXRlZCB1c2VzIG9mIERFRklORV9TVEFUSUNfTE9DQUwgdG8gTmV2ZXJEZXN0cm95ZWQ8VD4u
CisgICAgICAgIEZpbmFsbHksIGEgbmV3IGJpbmRpbmdzIHRlc3Qgd2FzIGFkZGVkIHRvIGRvY3Vt
ZW50IGNoYW5nZXMgdG8gZ2VuZXJhdGVkIHJlcGxheSBjb2RlLgorCisgICAgICAgIFRlc3Q6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5p
ZGwKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uRnVuY3Rpb25DYWxsKToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmNwcDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuc3ltYm9sczogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWNQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vbmRldGVybWluaXN0aWMuaDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vbmRldGVy
bWluaXN0aWMubW06IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3ROb25kZXRlcm1pbmlzdGljSW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb25kZXRlcm1pbmlzdGljLmlkbDogQWRkZWQuCisKKzIw
MTQtMDQtMDggIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCiAgICAg
ICAgIFdlYiBSZXBsYXk6IG1lbW9pemUgbm9uZGV0ZXJtaW5pc3RpYyBhdHRyaWJ1dGVzIG9mIHRo
ZSBTY3JlZW4gaW50ZXJmYWNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzEzMzkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAwODIwOTJhMjFkNDdhYTQwMTc4NTRmN2FjMDRm
NTcyMGMzNmUyZGIyLi5jZDY3YmRhNjQ2ODViZmJlODBmNzg3MDk4MmI4YmZkN2FlZDZjNzdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMjE5NiwxOSArMjE5NiwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9uZGV0ZXJtaW5pc3RpYyJ9KSB7Ci0gICAgICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siPHJlcGxheS9JbnB1dEN1cnNvci5oPiJ9ID0gMTsKKyAgICAgICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiTWVtb2l6ZWRET01SZXN1bHQuaCIsICJXRUJfUkVQ
TEFZIik7CisgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxyZXBsYXkvSW5wdXRD
dXJzb3IuaD4iLCAiV0VCX1JFUExBWSIpOworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCI8d3RmL05ldmVyRGVzdHJveWVkLmg+IiwgIldFQl9SRVBMQVkiKTsKKwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTtcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9i
YWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7XG4iKTsKIAotICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7Ik1lbW9pemVkRE9NUmVzdWx0LmgifSA9IDE7CiAgICAgICAgICAgICAgICAgbXkgJG5h
dGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCR0eXBlKTsKICAgICAgICAgICAgICAgICBteSAkbWVt
b2l6ZWRUeXBlID0gR2V0TmF0aXZlVHlwZUZvck1lbW9pemF0aW9uKCR0eXBlKTsKICAgICAgICAg
ICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJFeGNlcHRpb25zID8gImVjIiA6ICIw
IjsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBERVBSRUNBVEVEX0RF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBiaW5kaW5nTmFtZSwgKFwiJGlu
dGVyZmFjZU5hbWUuJG5hbWVcIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoXCIkaW50ZXJmYWNl
TmFtZS4kbmFtZVwiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTtcbiIpOwog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChjdXJzb3IuaXNDYXB0
dXJpbmcoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICRtZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT5pbXBsKCkuJGlt
cGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIp
OwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBjdXJzb3IuYXBw
ZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8JG1lbW9pemVkVHlwZT4+KGJpbmRpbmdOYW1lLCBt
ZW1vaXplZFJlc3VsdCwgJGV4Y2VwdGlvbkNvZGUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVk
UmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJtZW1vaXplZFJlc3VsdCIs
ICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAkZ2V0dGVyRXhj
ZXB0aW9uczsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CkBAIC0zNTU1LDcgKzM1NTcsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAKICAgICBpZiAoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgInZvaWQiKSB7CiAgICAgICAgIGlmICgkbm9uZGV0ZXJt
aW5pc3RpYykgewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJlcGxheS9JbnB1dEN1cnNv
ci5oPiJ9ID0gMTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cmVwbGF5L0lucHV0
Q3Vyc29yLmg+IiwgIldFQl9SRVBMQVkiKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5pbnB1dEN1cnNvcigpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICJpZiAoIWN1cnNvci5pc1JlcGxheWluZygpKSB7XG4iKTsKQEAgLTM1
ODQsMTkgKzM1ODYsMjEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwo
KQogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR0aGlzT2JqZWN0ID0gJGZ1bmN0aW9uLT5pc1N0
YXRpYyA/IDAgOiAiY2FzdGVkVGhpcyI7CiAgICAgICAgIGlmICgkbm9uZGV0ZXJtaW5pc3RpYykg
ewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siTWVtb2l6ZWRET01SZXN1bHQuaCJ9ID0gMTsK
LSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxyZXBsYXkvSW5wdXRDdXJzb3IuaD4ifSA9IDE7
CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiTWVtb2l6ZWRET01SZXN1bHQuaCIsICJX
RUJfUkVQTEFZIik7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJlcGxheS9JbnB1
dEN1cnNvci5oPiIsICJXRUJfUkVQTEFZIik7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiIsICJXRUJfUkVQTEFZIik7CisKICAgICAgICAgICAg
IG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUpOwogICAgICAgICAgICAgbXkgJG1lbW9pemVkVHlwZSA9IEdldE5hdGl2ZVR5cGVG
b3JNZW1vaXphdGlvbigkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CiAgICAgICAgICAgICBt
eSAkYmluZGluZ05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICIuIiAuICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiSlNW
YWx1ZSByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVO
QUJMRShXRUJfUkVQTEFZKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5pbnB1dEN1cnNvcigpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgYmluZGluZ05h
bWUsIChcIiRiaW5kaW5nTmFtZVwiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKFwiJGJpbmRp
bmdOYW1lXCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoY3Vyc29yLmlzQ2FwdHVy
aW5nKCkpIHtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAi
ICAgICRuYXRpdmVUeXBlIG1lbW9pemVkUmVzdWx0ID0gJGZ1bmN0aW9uU3RyaW5nO1xuIik7CiAg
ICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRyYWlzZXNFeGNlcHRpb24gPyAiZWMiIDog
IjAiOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIGN1cnNv
ci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05h
bWUsIG1lbW9pemVkUmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6
ZWRET01SZXN1bHQ8JG1lbW9pemVkVHlwZT4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBt
ZW1vaXplZFJlc3VsdCwgJGV4Y2VwdGlvbkNvZGUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICIgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgk
ZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZU5hbWUsICJtZW1vaXplZFJlc3VsdCIs
ICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAk
aW5kZW50IC4gIn0gZWxzZSBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIE1lbW9pemVkRE9NUmVzdWx0
QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7
XG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlz
dGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZmVmMjY1YTRhOTFjNWRhMjVhNWY0YTliOGZiNzQzMDQ2Zjgy
ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCkBAIC0wLDAgKzEs
MzMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaCIKKworI2luY2x1
ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05E
RVRFUk1JTklTVElDX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KG9iaiwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQywgV2ViS2l0RE9NVGVz
dE5vbmRldGVybWluaXN0aWNQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVz
dE5vbmRldGVybWluaXN0aWNQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE5vbmRl
dGVybWluaXN0aWM+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRlc3ROb25kZXRlcm1p
bmlzdGljKiBraXQoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIG9iaikKK3sKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9N
T2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05P
TkRFVEVSTUlOSVNUSUMocmV0KTsKKworICAgIHJldHVybiB3cmFwVGVzdE5vbmRldGVybWluaXN0
aWMob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmUoV2ViS2l0
RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3ROb25k
ZXRlcm1pbmlzdGljKiB3cmFwVGVzdE5vbmRldGVybWluaXN0aWMoV2ViQ29yZTo6VGVzdE5vbmRl
dGVybWluaXN0aWMqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQyhnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQywgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgTlVMTCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYywgd2Via2l0X2RvbV90ZXN0X25vbmRldGVy
bWluaXN0aWMsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX05PTkRFVEVSTUlOSVNUSUNfUkVBRE9OTFlfQVRUUiwKKyAgICBQUk9QX05PTkRF
VEVSTUlOSVNUSUNfV1JJVEVBQkxFX0FUVFIsCisgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX0VY
Q0VQVElPTl9BVFRSLAorICAgIFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9O
X0FUVFIsCisgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRUUiwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19HRVRfUFJJ
VkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVRlc3ROb25kZXRlcm1p
bmlzdGljUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ub25k
ZXRlcm1pbmlzdGljX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiA9IFdFQktJVF9ET01f
VEVTVF9OT05ERVRFUk1JTklTVElDKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdE5vbmRldGVy
bWluaXN0aWMqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfV1JJVEVBQkxFX0FU
VFI6IHsKKyAgICAgICAgY29yZVNlbGYtPnNldE5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRy
KFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19FWENFUFRJ
T05fQVRUUjogeworICAgICAgICBjb3JlU2VsZi0+c2V0Tm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlv
bkF0dHIoV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9OT05ERVRFUk1JTklTVElDX0dF
VFRFUl9FWENFUFRJT05fQVRUUjogeworICAgICAgICBjb3JlU2VsZi0+c2V0Tm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9O
T05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRUUjogeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYtPnNldE5vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9OT05ERVRF
Uk1JTklTVElDKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNv
cmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfUkVBRE9OTFlfQVRUUjogeworICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+bm9uZGV0ZXJtaW5pc3RpY1JlYWRv
bmx5QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9OT05ERVRF
Uk1JTklTVElDX1dSSVRFQUJMRV9BVFRSOiB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPm5vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9OT05E
RVRFUk1JTklTVElDX0VYQ0VQVElPTl9BVFRSOiB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPm5vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9O
T05ERVRFUk1JTklTVElDX0dFVFRFUl9FWENFUFRJT05fQVRUUjogeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+bm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4
Y2VwdGlvbkF0dHIoZWMpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1Bf
Tk9OREVURVJNSU5JU1RJQ19TRVRURVJfRVhDRVBUSU9OX0FUVFI6IHsKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+bm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUNfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VGVzdE5vbmRldGVybWluaXN0aWMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWNDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWNQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19maW5hbGl6
ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ub25k
ZXRlcm1pbmlzdGljX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1JFQURPTkxZX0FUVFIsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHkt
YXR0ciIsCisgICAgICAgICAgICAiVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3Rp
Yy1yZWFkb25seS1hdHRyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE5vbmRl
dGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1yZWFkb25seS1hdHRyIiwKKyAgICAgICAgICAg
IEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9OREVURVJNSU5JU1RJQ19XUklURUFCTEVfQVRU
UiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJub25kZXRlcm1p
bmlzdGljLXdyaXRlYWJsZS1hdHRyIiwKKyAgICAgICAgICAgICJUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yzpub25kZXRlcm1pbmlzdGljLXdyaXRlYWJsZS1hdHRyIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBUZXN0Tm9uZGV0ZXJtaW5pc3RpYzpub25kZXRlcm1pbmlzdGljLXdyaXRlYWJs
ZS1hdHRyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhDRVBUSU9OX0FU
VFIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibm9uZGV0ZXJt
aW5pc3RpYy1leGNlcHRpb24tYXR0ciIsCisgICAgICAgICAgICAiVGVzdE5vbmRldGVybWluaXN0
aWM6bm9uZGV0ZXJtaW5pc3RpYy1leGNlcHRpb24tYXR0ciIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1leGNlcHRp
b24tYXR0ciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX0dFVFRFUl9FWENF
UFRJT05fQVRUUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJu
b25kZXRlcm1pbmlzdGljLWdldHRlci1leGNlcHRpb24tYXR0ciIsCisgICAgICAgICAgICAiVGVz
dE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1nZXR0ZXItZXhjZXB0aW9uLWF0dHIi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGljOm5v
bmRldGVybWluaXN0aWMtZ2V0dGVyLWV4Y2VwdGlvbi1hdHRyIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X05PTkRFVEVSTUlOSVNUSUNfU0VUVEVSX0VYQ0VQVElPTl9BVFRSLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5vbmRldGVybWluaXN0aWMtc2V0dGVyLWV4Y2Vw
dGlvbi1hdHRyIiwKKyAgICAgICAgICAgICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYzpub25kZXRlcm1p
bmlzdGljLXNldHRlci1leGNlcHRpb24tYXR0ciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1zZXR0ZXItZXhjZXB0
aW9uLWF0dHIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWlu
aXN0aWNfaW5pdChXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1RFU1RfTk9OREVURVJNSU5JU1RJQ19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSgpOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19ub25kZXRlcm1pbmlzdGljX3plcm9f
YXJnX2Z1bmN0aW9uKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm5vbmRldGVybWluaXN0aWNaZXJv
QXJnRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19yZWFkb25seV9hdHRy
KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzdWx0ID0gaXRlbS0+bm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRF
VEVSTUlOSVNUSUMoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGlj
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0
aWNfc2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldE5vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9u
b25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRyKFdlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3Jl
OjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihlYykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWlu
aXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldE5vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGVz
dF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25f
YXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Cisg
ICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIoZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRp
b25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0Tm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRl
dGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1p
bmlzdGljKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9OREVURVJN
SU5JU1RJQyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+bm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5p
c3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9N
VGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXROb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0cihjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI5OWQyODk3NDYz
ZTM0ZWUwNzU1YmZhMTA5NWQ1M2Q4Y2ZkMmIxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRl
cm1pbmlzdGljLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVRlc3RO
b25kZXRlcm1pbmlzdGljX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPTV9URVNUX05PTkRFVEVSTUlO
SVNUSUMgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9N
X1RFU1RfTk9OREVURVJNSU5JU1RJQywgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9O
T05ERVRFUk1JTklTVElDLCBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9OT05E
RVRFUk1JTklTVElDKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNU
SUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQykpCisjZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9OT05ERVRFUk1JTklTVElDX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMsIFdlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RO
b25kZXRlcm1pbmlzdGljIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzIHsKKyAgICBX
ZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfdHlwZSAodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfbm9uZGV0ZXJtaW5pc3RpY196
ZXJvX2FyZ19mdW5jdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNfemVy
b19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlz
dGljX3JlYWRvbmx5X2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19yZWFk
b25seV9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY193
cml0ZWFibGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
YworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFi
bGVfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfd3Jp
dGVhYmxlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0
dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRl
dGVybWluaXN0aWNfZXhjZXB0aW9uX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWMKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5p
c3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9h
dHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9u
b25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRyKFdlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlz
dGljX2dldHRlcl9leGNlcHRpb25fYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlz
dGljX2dldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2dldHRl
cl9leGNlcHRpb25fYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYworICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJf
ZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0
aWNfZ2V0X25vbmRldGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlz
dGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X25v
bmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfc2V0
dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RO
b25kZXRlcm1pbmlzdGljLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5zeW1ib2xzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhjMjk0ZTc3OWMwNzQ2YTMwZjdlNzY0ODU1MmYyZDE1YWYxZGMyMGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5zeW1ib2xzCkBAIC0wLDAgKzEsMTAgQEAKK2di
b29sZWFuIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNf
emVyb19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQorZ2xvbmcg
d2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVh
ZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCitnY2hhciogd2Via2l0
X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxl
X2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQordm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKK2djaGFyKiB3ZWJr
aXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRp
b25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEdFcnJvcioqKQordm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNl
cHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikK
K2djaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5p
c3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMq
LCBHRXJyb3IqKikKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25v
bmRldGVybWluaXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRl
cm1pbmlzdGljKiwgY29uc3QgZ2NoYXIqKQorZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCit2b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ3ZWJlNjE4MzJmOTAyNmVkMTlhZTg3NTJiODJmZjVlY2Q3OTJm
MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RO
b25kZXRlcm1pbmlzdGljUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5oIgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiB3
cmFwVGVzdE5vbmRldGVybWluaXN0aWMoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqKTsK
K1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBraXQoV2ViQ29yZTo6VGVzdE5vbmRldGVy
bWluaXN0aWMqKTsKK1dlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBjb3JlKFdlYktpdERP
TVRlc3ROb25kZXRlcm1pbmlzdGljKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdlZTYzNTUzZmIxZDQ0NWYyMTBl
NjAwYjkyNDZmNzhmNzBhY2I1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMCww
ICsxLDQ5NyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIgorCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIgorI2lu
Y2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCisjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCisjaW5jbHVkZSAiTWVtb2l6ZWRET01SZXN1bHQuaCIKKyNpbmNsdWRlIDxyZXBs
YXkvSW5wdXRDdXJzb3IuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIEhh
c2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3JUYWJsZUluZGV4WzFd
ID0geworICAgIHsgLTEsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyAg
ICB7IDAsIDAsIE5vSW50cmluc2ljLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yVGFibGUgPSB7IDAsIDAsIGZhbHNl
LCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCwgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yVGFibGVJbmRleCB9OworY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3ROb25kZXRlcm1p
bmlzdGljQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdE5vbmRldGVybWluaXN0aWNDb25z
dHJ1Y3Rvcjo6SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3Ry
dWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3ZvaWQgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlw
ZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKK30KKworYm9vbCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdE5vbmRldGVybWlu
aXN0aWNDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVjLCBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKKy8qIEhhc2ggdGFibGUg
Zm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlSW5kZXhbMTddID0geworICAgIHsg
LTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEsIC0x
IH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDMsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAg
ICB7IDYsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDAsIC0xIH0sCisgICAgeyAtMSwg
LTEgfSwKKyAgICB7IDEsIDE2IH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAor
ICAgIHsgMiwgLTEgfSwKKyAgICB7IDUsIC0xIH0sCisgICAgeyA0LCAtMSB9LAorfTsKKworCitz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlw
ZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBSZWFk
T25seSwgTm9JbnRyaW5zaWMsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSwKKyAgICB7
ICJub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
Q3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljUmVhZG9ubHlBdHRyKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oMCkgfSwKKyAgICB7ICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
ciIsIERvbnREZWxldGUgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKSB9LAorICAgIHsgIm5vbmRldGVybWluaXN0
aWNFeGNlcHRpb25BdHRyIiwgRG9udERlbGV0ZSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNp
YywgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIpIH0sCisgICAgeyAi
bm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiLCBEb250RGVsZXRlIHwgQ3VzdG9t
QWNjZXNzb3IsIE5vSW50cmluc2ljLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
R2V0dGVyRXhjZXB0aW9uQXR0cikgfSwKKyAgICB7ICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhj
ZXB0aW9uQXR0ciIsIERvbnREZWxldGUgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKSwgKGludHB0
cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKSB9LAor
ICAgIHsgIm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24iLCBKU0M6OkZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlRnVuY3Rpb25Ob25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1
bmN0aW9uKSwgKGludHB0cl90KSAoMCkgfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlID0geyA3LCAxNSwgdHJ1ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlVGFibGVJbmRleCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlKSB9OworCitKU09iamVjdCogSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6
c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworYm9vbCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY1Byb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlz
dGljUHJvdG90eXBlKj4ob2JqZWN0KTsKKyAgICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90
PEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUsIEpTT2JqZWN0PihleGVjLCBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpzX2lu
Zm8gPSB7ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICZCYXNlOjpzX2luZm8sIDAsIDAgLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vbmRldGVybWluaXN0aWMpIH07CisKK0pTVGVzdE5vbmRl
dGVybWluaXN0aWM6OkpTVGVzdE5vbmRldGVybWluaXN0aWMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE5vbmRldGVy
bWluaXN0aWM+IGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXIoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpCisgICAgLCBtX2ltcGwoaW1wbC5sZWFrUmVmKCkpCit7Cit9CisKK0pTT2JqZWN0KiBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKwordm9pZCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oY2VsbCk7
CisgICAgdGhpc09iamVjdC0+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6fkpTVGVzdE5vbmRldGVy
bWluaXN0aWMoKTsKK30KKworSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6fkpTVGVzdE5vbmRldGVy
bWluaXN0aWMoKQoreworICAgIHJlbGVhc2VJbXBsSWZOb3ROdWxsKCk7Cit9CisKK2Jvb2wgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwor
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlKj4oc2xvdEJhc2UpKQorICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0
aWNSZWFkb25seUF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0
ciIpOworICAgIH0KKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIElucHV0Q3Vy
c29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRl
cm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKKyAg
ICAgICAgaW50IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+aW1wbCgpLm5vbmRldGVybWlu
aXN0aWNSZWFkb25seUF0dHIoKTsKKyAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVk
RE9NUmVzdWx0PGludD4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3Vs
dCwgMCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobWVtb2l6ZWRSZXN1bHQp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgIH0KKworICAg
ICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKKyAgICAgICAgaW50IG1lbW9pemVkUmVzdWx0
OworICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5w
dXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOworICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQt
PmNvbnZlcnRUbzxpbnQ+KG1lbW9pemVkUmVzdWx0KSkgeworICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKKworRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KHNs
b3RCYXNlKSkKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3Io
KmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxl
QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOworICAg
IH0KKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIElucHV0Q3Vyc29yJiBjdXJz
b3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGlj
Lm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CisgICAgICAgIFN0
cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGlj
V3JpdGVhYmxlQXR0cigpOworICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCAwKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBt
ZW1vaXplZFJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgfQorCisgICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgeworICAgICAgICBTdHJp
bmcgbWVtb2l6ZWRSZXN1bHQ7CisgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQg
PSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CisgICAgICAgIGlm
IChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9p
emVkUmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgaW1wbC5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KHNsb3RCYXNl
KSkKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIp
OworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOworICAgIH0KKyNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBn
bG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CisgICAgICAgIFN0cmluZyBt
ZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGljRXhjZXB0
aW9uQXR0cigpOworICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8
U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsK
KyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtZW1vaXpl
ZFJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
fQorCisgICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgeworICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQ7CisgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJz
b3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CisgICAgICAgIGlmIChpbnB1
dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
ICAgfQorICAgIH0KKyNlbmRpZgorICAgIFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKKworRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KHNsb3RCYXNl
KSkKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9u
QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIp
OworICAgIH0KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyNpZiBFTkFCTEUoV0VCX1JFUExB
WSkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpOworICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0
Q3Vyc29yKCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4g
YmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNHZXR0ZXJF
eGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
aWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CisgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3Vs
dCA9IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
cihlYyk7CisgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJp
bmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIGVjKTsKKyAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtZW1vaXplZFJl
c3VsdCk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgfQorCisgICAgIGlmIChjdXJzb3IuaXNS
ZXBsYXlpbmcoKSkgeworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CisgICAgICAgIE1l
bW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERP
TVJlc3VsdEJhc2U+KCk7CisgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0
cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
ICAgIFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5ub25kZXRlcm1p
bmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhj
ZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGUqPihzbG90QmFzZSkpCisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRl
ZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1Nl
dHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICB9CisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKKyAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdO
YW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIGlmIChjdXJz
b3IuaXNDYXB0dXJpbmcoKSkgeworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0
ZWRUaGlzLT5pbXBsKCkubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKTsKKyAg
ICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRp
bmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgIH0KKworICAgICBpZiAo
Y3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0Owor
ICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8
TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOworICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNv
bnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgeworICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworfQorCisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlz
dGljUHJvdG90eXBlKj4oYmFzZVZhbHVlKTsKKyAgICBpZiAoIWRvbU9iamVjdCkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21P
YmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIC8qIGJhc2VPYmplY3QgKi8sIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAg
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25k
ZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAgIGNv
bnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsLnNldE5vbmRldGVybWlu
aXN0aWNXcml0ZWFibGVBdHRyKG5hdGl2ZVZhbHVlKTsKK30KKworCit2b2lkIHNldEpTVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiAvKiBiYXNlT2JqZWN0ICovLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CisgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0
aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKKyAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm47CisgICAgaW1wbC5zZXRO
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihuYXRpdmVWYWx1ZSk7Cit9CisKKwordm9pZCBz
ZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogLyogYmFzZU9iamVjdCAqLywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVGVzdE5v
bmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgeworICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVGVzdE5vbmRldGVybWluaXN0aWMmIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CisgICAgY29uc3QgU3RyaW5nJiBuYXRpdmVWYWx1ZSh2
YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIo
bmF0aXZlVmFsdWUpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IC8qIGJhc2VPYmplY3QgKi8sIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRl
cm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUodmFs
dWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKG5h
dGl2ZVZhbHVlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKK30KKworCitK
U1ZhbHVlIEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZUZ1bmN0aW9uTm9uZGV0ZXJtaW5p
c3RpY1plcm9BcmdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4odGhpc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJt
aW5pc3RpY1plcm9BcmdGdW5jdGlvbiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6aW5mbygpKTsKKyAgICBUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdDsKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnB1dEN1cnNvcigpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0
ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7
CisgICAgICAgIGJvb2wgbWVtb2l6ZWRSZXN1bHQgPSBpbXBsLm5vbmRldGVybWluaXN0aWNaZXJv
QXJnRnVuY3Rpb24oKTsKKyAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVz
dWx0PGJvb2w+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDAp
OworICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4obWVtb2l6ZWRSZXN1bHQpOworICAgIH0gZWxz
ZSBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKKyAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRC
YXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsK
KyAgICAgICAgYm9vbCBtZW1vaXplZFJlc3VsdDsKKyAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0
LT5jb252ZXJ0VG88Ym9vbD4obWVtb2l6ZWRSZXN1bHQpKSB7CisgICAgICAgICAgICByZXN1bHQg
PSBqc0Jvb2xlYW4obWVtb2l6ZWRSZXN1bHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24o
KSk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm5vbmRldGVy
bWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CisjZWxzZQorICAgIHJlc3VsdCA9IGpzQm9vbGVh
bihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2Jvb2wgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVO
VVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY093bmVyOjpmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAg
ICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBqc1Rlc3ROb25kZXRlcm1pbmlzdGljID0ganNDYXN0
PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihj
b250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5vbmRldGVybWluaXN0
aWMtPmltcGwoKSwganNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyk7CisgICAganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy0+cmVsZWFzZUltcGwoKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklU
WSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4
dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROb25k
ZXRlcm1pbmlzdGljQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUyMFRlc3ROb25kZXRlcm1pbmlzdGljRVtdOyB9Cisj
ZW5kaWYKKyNlbmRpZgorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaW1wbCkKK3sK
KyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4oZ2xv
YmFsT2JqZWN0LCBpbXBsKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbCkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lk
KiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50
aWZpZXIoIj8/XzdUZXN0Tm9uZGV0ZXJtaW5pc3RpY0BXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQor
ICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMjBUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0VbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBm
YWlscyBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3Ug
bmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgQ09NUElMRV9BU1NFUlQoX19pc19w
b2x5bW9ycGhpYyhUZXN0Tm9uZGV0ZXJtaW5pc3RpYyksIFRlc3ROb25kZXRlcm1pbmlzdGljX2lz
X25vdF9wb2x5bW9ycGhpYyk7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhp
cyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAg
IC8vIFRlc3ROb25kZXRlcm1pbmlzdGljIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkg
d2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdE5vbmRldGVybWluaXN0aWMgeW91IHRvIG9wdCBvdXQg
b2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxp
ZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVM
RUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIp
OworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYz4oZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE5vbmRldGVybWluaXN0aWMqIHRv
VGVzdE5vbmRldGVybWluaXN0aWMoSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRv
KiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4odmFsdWUp
KQorICAgICAgICByZXR1cm4gJndyYXBwZXItPmltcGwoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk4YWM3
NDc5ZWU4M2QzY2UxYjAzZWZmMzU4YzA0YjU5MWNkOGE4NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlz
dGljLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljX2gKKyNkZWZpbmUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y19oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
IDogcHVibGljIEpTRE9NV3JhcHBlciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBw
ZXIgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY3JlYXRlKEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8VGVzdE5vbmRldGVybWluaXN0aWM+IGltcGwpCisgICAgeworICAgICAgICBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE5vbmRldGVybWluaXN0aWM+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyhzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKKyAgICB+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYygpOworICAgIERFQ0xBUkVf
SU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsKCkgY29uc3QgeyByZXR1cm4gKm1faW1wbDsgfQor
ICAgIHZvaWQgcmVsZWFzZUltcGwoKSB7IG1faW1wbC0+ZGVyZWYoKTsgbV9pbXBsID0gMDsgfQor
CisgICAgdm9pZCByZWxlYXNlSW1wbElmTm90TnVsbCgpCisgICAgeworICAgICAgICBpZiAobV9p
bXBsKSB7CisgICAgICAgICAgICBtX2ltcGwtPmRlcmVmKCk7CisgICAgICAgICAgICBtX2ltcGwg
PSAwOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIFRlc3ROb25kZXRlcm1pbmlz
dGljKiBtX2ltcGw7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyhKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0Tm9uZGV0ZXJt
aW5pc3RpYz4pOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7
CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljT3du
ZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKwor
aW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
JiwgVGVzdE5vbmRldGVybWluaXN0aWMqKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChKU1Rlc3ROb25kZXRlcm1pbmlzdGljT3duZXIsIGpzVGVzdE5vbmRldGVybWluaXN0
aWNPd25lciwgKCkpOworICAgIHJldHVybiAmanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY093bmVyOwor
fQorCitpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
VGVzdE5vbmRldGVybWluaXN0aWMqKQoreworICAgIHJldHVybiAmd29ybGQ7Cit9CisKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyopOworVGVzdE5vbmRldGVybWluaXN0aWMqIHRvVGVzdE5vbmRldGVybWlu
aXN0aWMoSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAg
ICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjbGFz
cyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOworfTsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlRnVuY3Rpb25Ob25kZXRlcm1pbmlz
dGljWmVyb0FyZ0Z1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisvLyBBdHRyaWJ1dGVzCisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNS
ZWFkb25seUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwordm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRl
YWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Cit2b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0
aW9uQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNH
ZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwordm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE5vbmRldGVybWluaXN0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmViOGVhN2U0YjMwOGVjN2JkYmVh
M2UwZWM0N2IwZjc2NTUyZjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vbmRldGVybWluaXN0aWMuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NT2Jq
ZWN0Lmg+CisKK0BjbGFzcyBOU1N0cmluZzsKKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMo
VEJEKQorQGludGVyZmFjZSBET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyA6IERPTU9iamVjdAorQHBy
b3BlcnR5IChyZWFkb25seSkgaW50IG5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHI7CitAcHJv
cGVydHkgKGNvcHkpIE5TU3RyaW5nICpub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cjsKK0Bw
cm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyOwor
QHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqbm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlv
bkF0dHI7CitAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICpub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cjsKKworLSAoQk9PTClub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9u
OworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE5vbmRldGVybWluaXN0aWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOTllNjM4YzFhNThjNGJhYzY4ODRiZDM5MzBjMzk2MTQ4MTQxNjY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5v
bmRldGVybWluaXN0aWMubW0KQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpYy5oIgorCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRP
TVRlc3ROb25kZXRlcm1pbmlzdGljSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRs
ZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIlRlc3RO
b25kZXRlcm1pbmlzdGljLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiVVJM
LmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElNUEwgcmVp
bnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KF9pbnRlcm5hbCkK
KworQGltcGxlbWVudGF0aW9uIERPTVRlc3ROb25kZXRlcm1pbmlzdGljCisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVh
ZChbRE9NVGVzdE5vbmRldGVybWluaXN0aWMgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBpZiAoX2ludGVybmFs
KQorICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0g
KGludClub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5ub25kZXRlcm1pbmlzdGlj
UmVhZG9ubHlBdHRyKCk7Cit9CisKKy0gKE5TU3RyaW5nICopbm9uZGV0ZXJtaW5pc3RpY1dyaXRl
YWJsZUF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgcmV0dXJuIElNUEwtPm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCk7Cit9CisKKy0g
KHZvaWQpc2V0Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHI6KE5TU3RyaW5nICopbmV3Tm9u
ZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0
dHIobmV3Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIpOworfQorCistIChOU1N0cmluZyAq
KW5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5ub25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cigpOworfQorCistICh2b2lkKXNldE5vbmRldGVybWluaXN0aWNFeGNlcHRpb25B
dHRyOihOU1N0cmluZyAqKW5ld05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldE5vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKG5ld05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
KTsKK30KKworLSAoTlNTdHJpbmcgKilub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBOU1N0cmluZyAqcmVzdWx0ID0gSU1QTC0+
bm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpOworICAgIFdlYkNvcmU6OnJh
aXNlT25ET01FcnJvcihlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZClzZXRO
b25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cjooTlNTdHJpbmcgKiluZXdOb25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhj
ZXB0aW9uQXR0cihuZXdOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cik7Cit9CisK
Ky0gKE5TU3RyaW5nICopbm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwt
Pm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCk7Cit9CisKKy0gKHZvaWQpc2V0
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHI6KE5TU3RyaW5nICopbmV3Tm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgSU1QTC0+c2V0Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIobmV3Tm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIsIGVjKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9u
RE9NRXJyb3IoZWMpOworfQorCistIChCT09MKW5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rp
b24KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0
dXJuIElNUEwtPm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKTsKK30KKworQGVuZAor
CitXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY29yZShET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYyAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsK
K30KKworRE9NVGVzdE5vbmRldGVybWluaXN0aWMgKmtpdChXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyogdmFsdWUpCit7CisgICAgeyBET01fQVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNv
cmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7IH07CisgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdE5vbmRldGVybWluaXN0aWMgKndyYXBw
ZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKKyAgICBET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyAqd3JhcHBlciA9
IFtbRE9NVGVzdE5vbmRldGVybWluaXN0aWMgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5f
aW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOwor
ICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAg
ICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE5vbmRldGVybWluaXN0aWNJ
bnRlcm5hbC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE5vbmRldGVybWluaXN0aWNJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyYzEyMThhMTdiYTVi
YWEyYTE3ZWIxYzNmZmUwZGEyYTVjODM0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0lu
dGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRl
c3ROb25kZXRlcm1pbmlzdGljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RO
b25kZXRlcm1pbmlzdGljOworfQorCitXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY29y
ZShET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyAqKTsKK0RPTVRlc3ROb25kZXRlcm1pbmlzdGljICpr
aXQoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vbmRldGVybWluaXN0aWMu
aWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2ZTQ3ZmQwZjFhYTM3YjZmNGNmMTY5NTQ1OWJjMDE0ZGY5M2E3YzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5vbmRldGVybWluaXN0aWMuaWRsCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bWF0cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlz
IElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciBhbmQg
Zm9yIHRyYWNraW5nCisvLyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KKworaW50ZXJmYWNlIFRlc3RO
b25kZXRlcm1pbmlzdGljIHsKKyAgICBbTm9uZGV0ZXJtaW5pc3RpY10gcmVhZG9ubHkgYXR0cmli
dXRlIGxvbmcgbm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cjsKKyAgICBbTm9uZGV0ZXJtaW5p
c3RpY10gYXR0cmlidXRlIERPTVN0cmluZyBub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cjsK
KyAgICBbTm9uZGV0ZXJtaW5pc3RpYywgUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIG5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyOworICAgIFtOb25kZXRlcm1pbmlzdGlj
LCBHZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgbm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHI7CisgICAgW05vbmRldGVybWluaXN0aWMsIFNldHRlclJh
aXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cjsKKworICAgIFtOb25kZXRlcm1pbmlzdGljXSBib29sZWFuIG5vbmRldGVy
bWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKTsKK307Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>