<?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>20088</bug_id>
          
          <creation_ts>2008-07-17 16:24:20 -0700</creation_ts>
          <short_desc>parse CSS Animations</short_desc>
          <delta_ts>2008-08-05 16:02:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>19028</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>86285</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-17 16:24:20 -0700</bug_when>
    <thetext>This patch updates the CSS parser to accept the CSS Animation properties, including the keyframe syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86286</commentid>
    <comment_count>1</comment_count>
      <attachid>22354</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-17 16:25:30 -0700</bug_when>
    <thetext>Created attachment 22354
patch to provide parsing for css animation properties</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86489</commentid>
    <comment_count>2</comment_count>
      <attachid>22395</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-20 12:27:49 -0700</bug_when>
    <thetext>Created attachment 22395
updated patch for css parsing

Removed an old keyframes @rule from the grammar. I&apos;d also left out the keyword in the tokenizer so keyframes were not being noticed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86787</commentid>
    <comment_count>3</comment_count>
      <attachid>22395</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 15:32:09 -0700</bug_when>
    <thetext>Comment on attachment 22395
updated patch for css parsing

CSSComputedStyleDeclaration should not be part of this patch.

Need a followup bug that keyframes should support a comma-separated list of percentages and not just a single percentage.

The way keyframe rules are added is wrong.  You need to add keyframe styles as part of the normal addRulesFromSheet process.  You can&apos;t add them in a separate walk or you&apos;ll miss @import and @media behavior.

Make a test with a &lt;style&gt; element that @imports a sheet with keyframes and you&apos;ll see that it doesn&apos;t work.  Similarly try putting a @keyframes rule inside @media print { } and watch it incorrectly apply to screen.

You already have the hashtable from name -&gt; keyframes rule held by the CSSStyleSelector.  Just build it up during the normal addRulesFromSheet process instead.

The code that aggressively constructs RenderStyles at keyframe-buildup time in the style selector is wrong, but that&apos;s the part I&apos;m looking the other way on.

This patch duplicates stuff from 19938.... the Node/Document/Element changes.  Pick one patch to put them in. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87813</commentid>
    <comment_count>4</comment_count>
      <attachid>22646</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-08-04 17:19:37 -0700</bug_when>
    <thetext>Created attachment 22646
Updated patch that adds keyframes correctly

This (hopefully) addresses the previous review comments about adding Keyframes at the wrong time during parsing. They should now be picked up within @media rules, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87891</commentid>
    <comment_count>5</comment_count>
      <attachid>22646</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-08-05 15:01:41 -0700</bug_when>
    <thetext>Comment on attachment 22646
Updated patch that adds keyframes correctly

This looks good.  

I think we need tests of error recovery from messed up keyframes, since I&apos;m a bit worried that malformed keyframes rules aren&apos;t going to error recover properly, but I think that could be a followup bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87900</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-08-05 16:02:17 -0700</bug_when>
    <thetext>r35579 = 684ed79bb9f8a782bb5f4d789adef25c161ec0e7 (trunk)
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/WebCore.pro
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/css/CSSValueKeywords.in
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSStyleSelector.h
	M	WebCore/css/CSSRule.h
	A	WebCore/css/WebKitCSSKeyframesRule.cpp
	M	WebCore/css/CSSParser.cpp
	M	WebCore/css/CSSGrammar.y
	A	WebCore/css/WebKitCSSKeyframeRule.cpp
	M	WebCore/css/tokenizer.flex
	M	WebCore/css/StyleBase.h
	M	WebCore/css/CSSPropertyNames.in
	A	WebCore/css/WebKitCSSKeyframeRule.h
	A	WebCore/css/WebKitCSSKeyframesRule.h
	M	WebCore/css/CSSParser.h
	M	WebCore/WebCoreSources.bkl

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22354</attachid>
            <date>2008-07-17 16:25:30 -0700</date>
            <delta_ts>2008-07-20 12:28:18 -0700</delta_ts>
            <desc>patch to provide parsing for css animation properties</desc>
            <filename>patch7-css-animation-properties.patch</filename>
            <type>text/plain</type>
            <size>63183</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDQzMmFhODYuLjNiMDM2NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjI5LDYgKzYyOSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9jc3MvU3R5bGVMaXN0LmNwcCBcCiAJV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldC5jcHAgXAogCVdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBc
CisJV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBcCisJV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgXAogCVdlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlLmNwcCBcCiAJV2ViQ29yZS9kb20vQXR0ci5jcHAgXAogCVdlYkNvcmUvZG9tL0F0
dHJpYnV0ZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggYTA4N2FiNS4uOWU5MmM0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01MDQsNiArNTA0LDggQEAg
U09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxlTGlzdC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0
LmNwcCBcCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBcCisgICAgY3NzL1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAgXAorICAgIGNzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBcCiAg
ICAgY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBcCiAgICAgZG9tL0F0dHIuY3BwIFwK
ICAgICBkb20vQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBlODkyMzgxLi4wYTc5YmYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTg5MzQsNiArODkzNCwzOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCIN
CisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdP
fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tleWZyYW1lUnVsZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJ
TmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0
cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cY3NzXFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGZkOGNjY2YuLmI1NzM5NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDEwIEBACiAJCTI5OTk4NkExMEREMERFRUEwMEY4RDI2
MSAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOTk5ODY5RDBERDBERUVBMDBGOEQyNjEgLyogQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwICovOyB9OwogCQkyRDkwNjYwNjBCRTE0MUQ0MDA5NTY5OTggLyogTGF5
b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCAqLzsgfTsKIAkJ
MkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9
OworCQkzMTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CisJCTMxMjg4
RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUzMDA1RDYw
MDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKKwkJMzEyODhFNzUw
RTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcxMEUzMDA1RDYwMDM2MTlB
RSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07CiAJCTMxNjExRTU1MEUxQzRENEEw
MEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAv
KiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgKi87IH07CiAJCTMxNjExRTVBMEUxQzRERTAw
MEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJMzE2MTFFNUIwRTFDNERF
MDAwRjZBNTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU5MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IH07CkBAIC00OTEzLDYgKzQ5MTcsMTAg
QEAKIAkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBi
b2FyZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENsaXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CisJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEy
ODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMjg4RTcxMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5
IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTYxMUU1OTBFMUM0
REUwMDBGNkE1NzkgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjc1OCw3ICsxMjc2Niw2IEBACiAJCUY1MjNEMTg0MDJE
RTQyRTgwMTg2MzVDQSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5pZGwgKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIu
aCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJ
CQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICov
LApAQCAtMTI4NDgsOCArMTI4NTUsNiBAQAogCQkJCTg1OEMzOTEwMEFBOEZGMDAwMEIxODdBNCAv
KiBDU1NTdHlsZVNoZWV0LmlkbCAqLywKIAkJCQlCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgKi8sCiAJCQkJQkM4MEM5ODYwQ0QyOTRFRTAwQTBC
N0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLywKLQkJCQlCQzlBREQ3RjBDQzQwOTIy
MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAotCQkJCUJDOUFERDIy
MENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTM3
MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8sCiAJ
CQkJMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8s
CiAJCQkJQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCkBA
IC0xMjkxMyw2ICsxMjkxOCwxMyBAQAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAogCQkJCTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAv
KiB0b2tlbml6ZXIuZmxleCAqLywKIAkJCQlCQzVFQzE3NjBBNTA3RTNFMDA2MDA3RjUgLyogdmll
dy1zb3VyY2UuY3NzICovLAorCQkJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuY3BwICovLAorCQkJCTMxMjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLywKKwkJCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUg
LyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8sCisJCQkJMzEyODhFNzEwRTMwMDVENjAw
MzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCAqLywKKwkJCQlCQzlBREQ3RjBDQzQw
OTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAorCQkJCUJDOUFE
RDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAorCQkJ
CTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNzczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0xNTMwMCw2ICsxNTMxMiw4IEBACiAJCQkJQkMzQTQ0REUwRTI2RDIwMjAwQzE0REZBIC8qIE5T
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0E0NEUzMEUyNkQyMUIwMEMxNERGQSAv
KiBKU05TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjRCNDY1MEUyRUYyRUEwMDgx
QTdCNyAvKiBUZXh0UnVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTI4OEU3MzBFMzAwNUQ2MDAz
NjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTI4
OEU3NTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xNzA3MCw2ICsxNzA4NCw4IEBACiAJCQkJMzE2MTFFNUEwRTFDNERFMDAwRjZB
NTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzE2MTFFNjIwRTFDNEUxNDAwRjZBNTc5IC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0RTIwRTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMjg4RTc0MEUz
MDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbAppbmRleCBhZGFiZDgxLi4xMWFjZDUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAt
MTc5LDYgKzE3OSw4IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVk
ZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgY3NzL1N0eWxlTGlzdC5jcHAKICAgICAgICAg
Y3NzL1N0eWxlU2hlZXQuY3BwCiAgICAgICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAKKyAgICAg
ICAgY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKKyAgICAgICAgY3NzL1dlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwCiAgICAgICAgIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAK
ICAgICA8L3NldD4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvV2Vi
Q29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGY1OWEwMzIuLmU3ZmQ5NzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkK
QEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRl
IDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIApAQCAtNjksNiArNzEsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIENTU1BhcnNlclZhbHVlIHZhbHVlOwogICAgIENT
U1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0OwogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4q
IG1lZGlhUXVlcnlFeHBMaXN0OworICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVS
dWxlOworICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIGtleWZyYW1lc1J1bGU7CisgICAgZmxv
YXQgdmFsOwogfQogCiAlewpAQCAtMTE4LDYgKzEyMyw4IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgo
WVlTVFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIpCiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRv
a2VuIFdFQktJVF9SVUxFX1NZTQogJXRva2VuIFdFQktJVF9ERUNMU19TWU0KKyV0b2tlbiBXRUJL
SVRfS0VZRlJBTUVTX1NZTQorJXRva2VuIFdFQktJVF9LRVlGUkFNRV9SVUxFX1NZTQogJXRva2Vu
IFdFQktJVF9WQUxVRV9TWU0KICV0b2tlbiBXRUJLSVRfTUVESUFRVUVSWV9TWU0KICV0b2tlbiBX
RUJLSVRfVkFSSUFCTEVTX1NZTQpAQCAtMTY3LDYgKzE3NCw3IEBAIHN0YXRpYyBpbnQgY3NzeXls
ZXgoWVlTVFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIpCiAldHlwZSA8cnVsZT4gaW1wb3J0CiAl
dHlwZSA8cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGtl
eWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+IGludmFsaWRf
YXQKICV0eXBlIDxydWxlPiBpbnZhbGlkX2ltcG9ydApAQCAtMTkzLDYgKzIwMSwxMSBAQCBzdGF0
aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgdm9pZCogcGFyc2VyKQogJXR5cGUgPG1l
ZGlhUXVlcnlFeHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdAogJXR5cGUgPG1lZGlhUXVlcnlF
eHBMaXN0PiBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3QKIAorJXR5cGUgPHN0cmluZz4g
a2V5ZnJhbWVfbmFtZQorJXR5cGUgPGtleWZyYW1lUnVsZT4ga2V5ZnJhbWVfcnVsZQorJXR5cGUg
PGtleWZyYW1lc1J1bGU+IGtleWZyYW1lc19ydWxlCisldHlwZSA8dmFsPiBrZXkKKwogJXR5cGUg
PHJ1bGVMaXN0PiBydWxlc2V0X2xpc3QKIAogJXR5cGUgPGludGVnZXI+IHByb3BlcnR5CkBAIC0y
MzUsNiArMjQ4LDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIHZvaWQq
IHBhcnNlcikKIHN0eWxlc2hlZXQ6CiAgICAgbWF5YmVfY2hhcnNldCBtYXliZV9zZ21sIGltcG9y
dF9saXN0IHZhcmlhYmxlc19saXN0IG5hbWVzcGFjZV9saXN0IHJ1bGVfbGlzdAogICB8IHdlYmtp
dF9ydWxlIG1heWJlX3NwYWNlCisgIHwgd2Via2l0X2tleWZyYW1lX3J1bGUgbWF5YmVfc3BhY2UK
ICAgfCB3ZWJraXRfZGVjbHMgbWF5YmVfc3BhY2UKICAgfCB3ZWJraXRfdmFsdWUgbWF5YmVfc3Bh
Y2UKICAgfCB3ZWJraXRfbWVkaWFxdWVyeSBtYXliZV9zcGFjZQpAQCAtMjUyLDYgKzI2NiwxMiBA
QCB3ZWJraXRfcnVsZToKICAgICB9CiA7CiAKK3dlYmtpdF9rZXlmcmFtZV9ydWxlOgorICAgIFdF
QktJVF9LRVlGUkFNRV9SVUxFX1NZTSAneycgbWF5YmVfc3BhY2Uga2V5ZnJhbWVfcnVsZSBtYXli
ZV9zcGFjZSAnfScgeworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5t
X2tleWZyYW1lID0gJDQ7CisgICAgfQorOworCiB3ZWJraXRfZGVjbHM6CiAgICAgV0VCS0lUX0RF
Q0xTX1NZTSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCAnfScgewogICAgICAgICAv
KiBjYW4gYmUgZW1wdHkgKi8KQEAgLTM1Miw2ICszNzIsNyBAQCB2YWxpZF9ydWxlOgogICB8IG1l
ZGlhCiAgIHwgcGFnZQogICB8IGZvbnRfZmFjZQorICB8IGtleWZyYW1lcwogICA7CiAKIHJ1bGU6
CkBAIC01OTYsNiArNjE3LDQ3IEBAIG1lZGl1bToKICAgfQogICA7CiAKK2tleWZyYW1lczoKKyAg
ICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIG1heWJlX3Nw
YWNlICd7JyBtYXliZV9zcGFjZSBrZXlmcmFtZXNfcnVsZSAnfScgeworICAgICAgICAkJCA9ICQ3
OworICAgICAgICAkNy0+c2V0TmFtZSgkMyk7CisgICAgfQorICAgIDsKKyAgCitrZXlmcmFtZV9u
YW1lOgorICAgIElERU5UCisgICAgfCBTVFJJTkcKKyAgICA7CisKK2tleWZyYW1lc19ydWxlOgor
ICAgIC8qIGVtcHR5ICovIHsgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5j
cmVhdGVLZXlmcmFtZXNSdWxlKCk7IH0KKyAgICB8IGtleWZyYW1lc19ydWxlIGtleWZyYW1lX3J1
bGUgbWF5YmVfc3BhY2UgeworICAgICAgICAkJCA9ICQxOworICAgICAgICBpZiAoJDIpCisgICAg
ICAgICAgICAkJC0+aW5zZXJ0KCQyKTsKKyAgICB9CisgICAgOworCitrZXlmcmFtZV9ydWxlOgor
ICAgIGtleSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCAnfScg
eworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUtl
eWZyYW1lUnVsZSgkMSk7CisgICAgfQorICAgIDsKKwora2V5OgorICAgIFBFUkNFTlRBR0UgeyAk
JCA9IChmbG9hdCkgJDE7IH0KKyAgICB8IElERU5UIHsKKyAgICAgICAgJCQgPSAtMTsKKyAgICAg
ICAgQ1NTUGFyc2VyU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHN0ciksICJmcm9tIikpCisgICAgICAgICAg
ICAkJCA9IDA7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHN0YXRpY19jYXN0
PGNvbnN0IFN0cmluZyY+KHN0ciksICJ0byIpKQorICAgICAgICAgICAgJCQgPSAxMDA7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFlZRVJST1I7CisgICAgfQorICAgIDsKKwogLyoKIHBhZ2U6
CiAgICAgUEFHRV9TWU0gbWF5YmVfc3BhY2UgSURFTlQ/IHBzZXVkb19wYWdlPyBtYXliZV9zcGFj
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKaW5kZXggY2QxOWI5Ni4uODc1MjJiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC02NSw2
ICs2NSw4IEBACiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlY3QuaCIKICNpbmNsdWRl
ICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgPGtqcy9kdG9hLmg+CiAKQEAgLTIzMCw2ICsyMzIsMTQg
QEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHIKICAgICByZXR1cm4gbV9ydWxlLnJlbGVhc2UoKTsK
IH0KIAorUGFzc1JlZlB0cjxDU1NSdWxlPiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVSdWxlKENT
U1N0eWxlU2hlZXQgKnNoZWV0LCBjb25zdCBTdHJpbmcgJnN0cmluZykKK3sKKyAgICBtX3N0eWxl
U2hlZXQgPSBzaGVldDsKKyAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQta2V5ZnJhbWUtcnVsZXsg
Iiwgc3RyaW5nLCAifSAiKTsKKyAgICBjc3N5eXBhcnNlKHRoaXMpOworICAgIHJldHVybiBtX2tl
eWZyYW1lLnJlbGVhc2UoKTsKK30KKwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBib29sIGltcG9ydGFudCkKIHsKICAgICBBU1NFUlQoIWRlY2xhcmF0aW9uLT5zdHls
ZXNoZWV0KCkgfHwgZGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkp
OwpAQCAtMTI4MCwxMiArMTI5MCwxOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0
YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eTogewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKLSAgICAgICAg
aWYgKHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KHByb3BJZCwgdmFsKSkgeworICAgICAgICBpZiAo
cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wSWQsIHZhbCkpIHsKICAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgdmFsLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNTM5LDYgKzE1NTYsOCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoLCBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciB9OwogICAgICAgICByZXR1cm4gcGFyc2VT
aG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCAyLCBpbXBvcnRhbnQpOwogICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgorICAgICAgICByZXR1cm4gcGFyc2VBbmlt
YXRpb25TaG9ydGhhbmQoaW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvbjoKICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChpbXBvcnRh
bnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgpAQCAtMTY3Niw3ICsxNjk1LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQq
IHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OmFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBydmFsKQordm9pZCBDU1NQYXJzZXI6OmFkZEFuaW1hdGlvblZhbHVlKFJl
ZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpCiB7CiAgICAg
aWYgKGx2YWwpIHsKICAgICAgICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpCkBAIC0xNjkzLDYg
KzE3MTIsNjYgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NT
VmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPgogICAgICAgICBsdmFsID0gcnZhbDsK
IH0KIAorYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KQoreworICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7ICBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uIH07CisgICAgY29uc3QgaW50IG51bVByb3BlcnRp
ZXMgPSBzaXplb2YocHJvcGVydGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7CisgICAgCisg
ICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb24p
OworCisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsg
Ly8gY29tcGlsZXIgd2lsbCByZXBlYXQgZmFsc2UgYXMgbmVjZXNzYXJ5CisgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107CisgICAgCisgICAgaW50IGk7CisgICAgd2hp
bGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbC0+aVZhbHVlID09ICcsJykgeworICAgICAgICAg
ICAgLy8gV2UgaGl0IHRoZSBlbmQuICBGaWxsIGluIGFsbCByZW1haW5pbmcgdmFsdWVzIHdpdGgg
dGhlIGluaXRpYWwgdmFsdWUuCisgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCisgICAgICAgICAgICAgICAgICAgIGFkZEFu
aW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgp
KTsKKyAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVydGllczsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQW5p
bWF0aW9uUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsKSkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCB2YWwucmVsZWFzZSgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB3ZSBkaWRu
J3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4KKyAgICAgICAgLy8gaW52YWxp
ZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0CisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEZpbGwgaW4g
YW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCisgICAgZm9y
IChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICBpZiAoIXBhcnNlZFBy
b3BlcnR5W2ldKQorICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJ
bml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOworICAgIH0KKyAgICAKKyAgICAvLyBOb3cg
YWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3ZSBmb3VuZC4KKyAgICBmb3IgKGkgPSAwOyBpIDwg
bnVtUHJvcGVydGllczsgaSsrKQorICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2
YWx1ZXNbaV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KQogewogICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvblByb3BlcnR5LApAQCAtMTcxMyw3ICsxNzkyLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVy
dGllczsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKLSAg
ICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlh
bFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0
aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOwog
ICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCkBAIC0xNzI0LDkgKzE4
MDMsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7
ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewogICAgICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZVRy
YW5zaXRpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWwpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsKSkgewogICAgICAg
ICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2UoKSk7
CisgICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgdmFsLnJl
bGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xNzQwLDcgKzE4MTksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRo
YW5kKGJvb2wgaW1wb3J0YW50KQogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0
aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkgewogICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQotICAgICAgICAg
ICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJ
bXBsaWNpdCgpKTsKKyAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NT
SW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gTm93
IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCkBAIC0yMTkzLDcgKzIyNzIsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBwcm9w
SWQxLCBpbnQmIHByb3BJZDIsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRGVsYXkoKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRlbGF5KCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb3cpCkBAIC0yMjAzLDcgKzIyODIsMTUgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZURlbGF5KCkKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUR1cmF0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKQoreworICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZU5vcm1hbCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBbHRlcm5hdGUpCisgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOworICAg
IHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5p
bWF0aW9uRHVyYXRpb24oKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWV8Rk5vbk5lZywg
bV9zdHJpY3QpKQpAQCAtMjIxMSw2ICsyMjk4LDUyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VEdXJhdGlvbigpCiAgICAgcmV0dXJuIDA7CiB9CiAKK1Bhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpCit7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBp
ZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5maW5pdGUpCisgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOworICAgIGlmICh2YWxpZFVu
aXQodmFsdWUsIEZJbnRlZ2VyfEZOb25OZWcsIG1fc3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCit7CisgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAgICAgICBpZiAodmFsdWUtPmlkID09
IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0cmluZywgIm5vbmUiKSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZU5vbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCkKK3sKKyAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhdXNl
ZCkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZh
bHVlLT5pZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSgpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IHJl
c3VsdCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7CisgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHJlc3VsdCk7
CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJhbGwiKSkKKyAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGNBbmltYXRlQWxs
KTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVlQWxsIGluc3RlYWQ/CisgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJub25lIikpCisgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihjQW5pbWF0ZU5vbmUpOyAvLyBGSVhN
RTogV2h5IG5vdCB1c2UgQ1NTVmFsdWVOb25lIGluc3RlYWQ/CisgICAgcmV0dXJuIDA7Cit9CisK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVM
aXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHYgPSBh
cmdzLT5jdXJyZW50KCk7CkBAIC0yMjI5LDcgKzIzNjIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYg
cmVzdQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVGltaW5nRnVuY3Rpb24oKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVFYXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZU91dCB8fCB2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQpCkBAIC0yMjU5LDIyICsyMzkyLDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1bmN0aW9uKCkKICAgICByZXR1cm4g
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpCi17
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaW50IHJlc3VsdCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmlu
Zyk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKHJlc3VsdCk7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVl
LT5zdHJpbmcsICJhbGwiKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKGNBbmltYXRlQWxsKTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVl
QWxsIGluc3RlYWQ/Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJu
b25lIikpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cihjQW5pbWF0ZU5vbmUpOyAvLyBGSVhNRTogV2h5IG5vdCB1c2UgQ1NTVmFsdWVOb25lIGluc3Rl
YWQ/Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Q
cm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCitib29sIENTU1Bh
cnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+
JiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOwogICAgIENTU1Bh
cnNlclZhbHVlKiB2YWw7CkBAIC0yMjkzLDIzICsyNDExLDQ2IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1
bHQpCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByb3BJ
ZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxh
eToKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5
OgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZURlbGF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGVsYXkoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CiAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAg
ICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlvbigpOworICAgICAgICAgICAgICAg
ICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkR1cmF0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgICAgICAg
ICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgorICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAg
ICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25OYW1lKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgICAg
ICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKyAg
ICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25Qcm9wZXJ0eSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
OgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5n
RnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9u
VGltaW5nRnVuY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjM0OCw2ICsyNDg5LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQogCiAjZGVmaW5lIERBU0hCT0FSRF9SRUdJT05fTlVNX1BBUkFNRVRFUlMgIDYKQEAgLTQwMjgs
NiArNDE3MSw3IEBAIGludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkK
ICAgICBjYXNlIEZPTlRfRkFDRV9TWU06CiAgICAgY2FzZSBDSEFSU0VUX1NZTToKICAgICBjYXNl
IE5BTUVTUEFDRV9TWU06CisgICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1NZTToKIAogICAgIGNh
c2UgSU1QT1JUQU5UX1NZTToKICAgICAgICAgYnJlYWs7CkBAIC00MzY5LDYgKzQ1MTMsMTQgQEAg
Q1NTUnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3QoKQogICAgIHJldHVybiBsaXN0
UHRyOwogfQogCitXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZy
YW1lc1J1bGUoKQoreworICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBydWxlID0g
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCk7CisgICAgV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZVB0ciA9IHJ1bGUuZ2V0KCk7CisgICAgbV9wYXJzZWRTdHls
ZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcnVsZVB0cjsKK30K
KwogQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQogewogICAgIENTU1N0eWxlUnVsZSogcmVzdWx0ID0gMDsKQEAgLTQ1MTAsNiArNDY2Miwx
OSBAQCB2b2lkIENTU1BhcnNlcjo6ZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCkKICAgICBtX251
bVBhcnNlZFByb3BlcnRpZXMgLT0gZGVsZXRlZFByb3BlcnRpZXM7CiB9CiAKK1dlYktpdENTU0tl
eWZyYW1lUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZVJ1bGUoZmxvYXQga2V5KQorewor
ICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZyYW1lID0gV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKKworICAgIGtleWZyYW1lLT5zZXRLZXko
a2V5KTsKKyAgICBrZXlmcmFtZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNyZWF0ZSgwLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVtUGFyc2VkUHJvcGVydGll
cykpOworICAgIGNsZWFyUHJvcGVydGllcygpOworCisgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
KiBrZXlmcmFtZVB0ciA9IGtleWZyYW1lLmdldCgpOworICAgIG1fcGFyc2VkU3R5bGVPYmplY3Rz
LmFwcGVuZChrZXlmcmFtZS5yZWxlYXNlKCkpOworICAgIHJldHVybiBrZXlmcmFtZVB0cjsKK30K
Kwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNmNmZWMxNy4u
NWExZmQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTQ2LDYgKzQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIE1lZGlhUXVlcnlFeHA7CiAgICAgY2xhc3MgU3R5bGVCYXNlOwogICAgIGNsYXNz
IFN0eWxlTGlzdDsKKyAgICBjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CisgICAgY2xhc3Mg
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKIAogICAgIGNsYXNzIENTU1BhcnNlciB7CiAgICAgcHVi
bGljOgpAQCAtNTQsNiArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9p
ZCBwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgUGFz
c1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYp
OworICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxl
U2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBv
cnRhbnQpOwogICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNv
bnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgICAgICBib29sIHBhcnNlQ29s
b3IoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmKTsKQEAgLTgzLDE2
ICs4NiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBhZGRGaWxsVmFs
dWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CiAK
LSAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CisgICAgICAgIHZvaWQgYWRkQW5pbWF0aW9uVmFs
dWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VEZWxheSgpOwotICAgICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZUR1cmF0aW9uKCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VBbmltYXRpb25EZWxheSgpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZUFuaW1hdGlvbkR1cmF0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VBbmltYXRpb25OYW1lKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlQW5pbWF0aW9uUGxheVN0YXRlKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlQW5pbWF0aW9uUHJvcGVydHkoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFy
c2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpOwogCiAgICAgICAgIGJvb2wgcGFyc2VUaW1pbmdG
dW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0KTsK
LSAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8
Q1NTVmFsdWU+Jik7CisgICAgICAgIGJvb2wgcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShpbnQgcHJv
cElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uU2hv
cnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKKyAgICAgICAgYm9vbCBwYXJzZUFuaW1hdGlvblNob3J0
aGFuZChib29sIGltcG9ydGFudCk7CiAgICAgICAgIAogICAgICAgICBib29sIHBhcnNlRGFzaGJv
YXJkUmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAKQEAgLTE1Niw2ICsxNjQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1lZGlhTGlzdCogY3JlYXRlTWVkaWFM
aXN0KCk7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZUNoYXJzZXRSdWxlKGNvbnN0IENTU1BhcnNl
clN0cmluZyYpOwogICAgICAgICBDU1NSdWxlKiBjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1Bh
cnNlclN0cmluZyYsIE1lZGlhTGlzdCopOworICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUq
IGNyZWF0ZUtleWZyYW1lUnVsZShmbG9hdCBrZXkpOworICAgICAgICBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlKiBjcmVhdGVLZXlmcmFtZXNSdWxlKCk7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZU1l
ZGlhUnVsZShNZWRpYUxpc3QqLCBDU1NSdWxlTGlzdCopOwogICAgICAgICBDU1NSdWxlTGlzdCog
Y3JlYXRlUnVsZUxpc3QoKTsKICAgICAgICAgQ1NTUnVsZSogY3JlYXRlU3R5bGVSdWxlKENTU1Nl
bGVjdG9yKik7CkBAIC0xODAsNiArMTkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBpbnQgbV9pZDsKICAgICAgICAgQ1NTU3R5bGVTaGVldCogbV9zdHlsZVNoZWV0OwogICAgICAg
ICBSZWZQdHI8Q1NTUnVsZT4gbV9ydWxlOworICAgICAgICBSZWZQdHI8Q1NTUnVsZT4gbV9rZXlm
cmFtZTsKICAgICAgICAgTWVkaWFRdWVyeSogbV9tZWRpYVF1ZXJ5OwogICAgICAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIG1fdmFsdWVMaXN0OwogICAgICAgICBDU1NQcm9wZXJ0eSoqIG1fcGFyc2Vk
UHJvcGVydGllczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4g
Yi9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmluZGV4IDUwMzk0ZTUuLjYyYzUzMWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgpAQCAtMTQyLDYgKzE0MiwxNCBAQCB3b3JkLXNwYWNp
bmcKIHdvcmQtd3JhcAogei1pbmRleAogem9vbQorLXdlYmtpdC1hbmltYXRpb24KKy13ZWJraXQt
YW5pbWF0aW9uLWRlbGF5Cistd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb24KKy13ZWJraXQtYW5p
bWF0aW9uLWR1cmF0aW9uCistd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQKKy13ZWJr
aXQtYW5pbWF0aW9uLW5hbWUKKy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUKKy13ZWJraXQt
YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbgogLXdlYmtpdC1hcHBlYXJhbmNlCiAtd2Via2l0LWJh
Y2tncm91bmQtY2xpcAogLXdlYmtpdC1iYWNrZ3JvdW5kLWNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9jc3MvQ1NTUnVsZS5oIGIvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCmluZGV4IDcxODIy
MGUuLmIzMGI1NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1J1bGUuaAorKysgYi9XZWJD
b3JlL2Nzcy9DU1NSdWxlLmgKQEAgLTM5LDcgKzM5LDkgQEAgcHVibGljOgogICAgICAgICBNRURJ
QV9SVUxFLAogICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKICAgICAgICAgUEFHRV9SVUxFLAotICAg
ICAgICBWQVJJQUJMRVNfUlVMRQorICAgICAgICBWQVJJQUJMRVNfUlVMRSwKKyAgICAgICAgV0VC
S0lUX0tFWUZSQU1FU19SVUxFLAorICAgICAgICBXRUJLSVRfS0VZRlJBTUVfUlVMRQogICAgIH07
CiAKICAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIHJldHVybiBDU1NSdWxlVHlwZS4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggN2YzNTc0My4uM2Q5N2ZiMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKQEAgLTcwLDYgKzcwLDggQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lc1J1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1
ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgiCkBAIC0xODIsNiArMTg0LDY1IEBA
IEhBTkRMRV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFzaywgTWFzaywgcHJvcCwg
UHJvcCkKICNkZWZpbmUgSEFORExFX01BU0tfVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIFwKIEhB
TkRMRV9GSUxMX0xBWUVSX1ZBTFVFKG1hc2ssIE1hc2ssIHByb3AsIFByb3AsIHZhbHVlKQogCisj
ZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBc
CitpZiAoaXNJbmhlcml0KSB7IFwKKyAgICBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxl
LT5hY2Nlc3NBbmltYXRpb25zKCk7IFwKKyAgICBUcmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBc
CisgICAgY29uc3QgVHJhbnNpdGlvbiogY3VyclBhcmVudCA9IG1fcGFyZW50U3R5bGUtPmFuaW1h
dGlvbnMoKTsgXAorICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIGN1cnJQYXJlbnQtPmlzIyNQcm9w
IyNTZXQoKSkgeyBcCisgICAgICAgIGlmICghY3VyckNoaWxkKSB7IFwKKyAgICAgICAgICAgIC8q
IE5lZWQgdG8gbWFrZSBhIG5ldyB0cmFuc2l0aW9uLiovIFwKKyAgICAgICAgICAgIGN1cnJDaGls
ZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKKyAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChj
dXJyQ2hpbGQpOyBcCisgICAgICAgIH0gXAorICAgICAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChj
dXJyUGFyZW50LT5wcm9wKCkpOyBcCisgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAor
ICAgICAgICBjdXJyQ2hpbGQgPSBwcmV2Q2hpbGQtPm5leHQoKTsgXAorICAgICAgICBjdXJyUGFy
ZW50ID0gY3VyclBhcmVudC0+bmV4dCgpOyBcCisgICAgfSBcCisgICAgXAorICAgIHdoaWxlIChj
dXJyQ2hpbGQpIHsgXAorICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIHRyYW5zaXRpb25z
IHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAgICAgICAgY3VyckNoaWxkLT5j
bGVhciMjUHJvcCgpOyBcCisgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBc
CisgICAgfSBcCisgICAgcmV0dXJuOyBcCit9IFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIFRy
YW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc0FuaW1hdGlvbnMoKTsgXAorICAg
IGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uIyNQcm9w
KCkpOyBcCisgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxk
OyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAorICAgICAgICBjdXJyQ2hpbGQtPmNs
ZWFyIyNQcm9wKCk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfQU5JTUFU
SU9OX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSB7IFwKK0hBTkRMRV9BTklNQVRJT05fSU5IRVJJ
VF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCitUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0
eWxlLT5hY2Nlc3NBbmltYXRpb25zKCk7IFwKK1RyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwK
K2lmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCisgICAgLyogV2FsayBlYWNoIHZhbHVlIGFu
ZCBwdXQgaXQgaW50byBhIHRyYW5zaXRpb24sIGNyZWF0aW5nIG5ldyB0cmFuc2l0aW9ucyBhcyBu
ZWVkZWQuICovIFwKKyAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
dmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsg
XAorICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgdHJhbnNpdGlvbiB0byBob2xkIHRoaXMg
dmFsdWUgKi8gXAorICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCisgICAg
ICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCisgICAgICAgIH0gXAorICAgICAg
ICBtYXBBbmltYXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW0oaSkpOyBcCisg
ICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAorICAgICAgICBjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHQoKTsgXAorICAgIH0gXAorfSBlbHNlIHsgXAorICAgIG1hcEFuaW1hdGlvbiMj
UHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAorICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4
dCgpOyBcCit9IFwKK3doaWxlIChjdXJyQ2hpbGQpIHsgXAorICAgIC8qIFJlc2V0IGFsbCByZW1h
aW5pbmcgdHJhbnNpdGlvbnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8gXAorICAg
IGN1cnJDaGlsZC0+Y2xlYXIjI1Byb3AoKTsgXAorICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+
bmV4dCgpOyBcCit9IH0KKwogI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9J
TklUSUFMKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAogICAgIFRyYW5zaXRpb24q
IGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKQEAgLTIyNywxMiAr
Mjg4LDEyIEBAIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCiAgICAgICAgIGN1cnJDaGls
ZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJD
aGlsZCk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIG1hcCMjUHJvcChjdXJyQ2hpbGQsIHZhbHVl
TGlzdC0+aXRlbShpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGN1cnJDaGlsZCwg
dmFsdWVMaXN0LT5pdGVtKGkpKTsgXAogICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7IFwK
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKICAgICB9IFwKIH0gZWxz
ZSB7IFwKLSAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBtYXBBbmltYXRp
b24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQt
Pm5leHQoKTsgXAogfSBcCiB3aGlsZSAoY3VyckNoaWxkKSB7IFwKQEAgLTM3NCw2ICs0MzUsNDcg
QEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jLCBjb25z
dCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LAogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0
eWxlU2hlZXRzLT5pdGVtKGkpOwogICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgp
ICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1
bSwgdGhpcyk7CisKKyAgICAgICAgICAgIC8vIGFkZCB0aGUga2V5ZnJhbWUgcnVsZXMKKyAgICAg
ICAgICAgIGludCBsZW4gPSBzaGVldC0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHlsZUJhc2UqIGl0ZW0g
PSBzaGVldC0+aXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNLZXlmcmFtZXNS
dWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogciA9
IHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkS2V5ZnJhbWVTdHlsZShkb2MsIHIpOworICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgfQorfQorCisvLyB0aGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBz
ZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YWRkS2V5ZnJhbWVTdHlsZShEb2N1bWVudCogZG9jLCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
KiBydWxlKQoreworICAgIEF0b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7CisgICAgS2V5ZnJh
bWVMaXN0KiBsaXN0OworICAgIGlmIChtX2tleWZyYW1lUnVsZU1hcC5jb250YWlucyhzLmltcGwo
KSkpCisgICAgICAgIGxpc3QgPSBtX2tleWZyYW1lUnVsZU1hcC5nZXQocy5pbXBsKCkpLmdldCgp
OworICAgIGVsc2UgeworICAgICAgICBsaXN0ID0gbmV3IEtleWZyYW1lTGlzdChzKTsKKyAgICAg
ICAgbV9rZXlmcmFtZVJ1bGVNYXAuYWRkKHMuaW1wbCgpLCBsaXN0KTsKKyAgICB9CisgICAgbGlz
dC0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJ1bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlKiBrZiA9IHJ1bGUtPml0ZW0oaSk7CisgICAgICAgIG1fc3R5bGUgPSBuZXcgKGRvYy0+cmVu
ZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgbV9zdHlsZS0+cmVmKCk7CisgICAg
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0ga2YtPnN0eWxlKCk7CisgICAg
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Cisg
ICAgICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+
IGl0ID0gZGVjbC0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICppdDsKKyAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgbGlz
dC0+YWRkUHJvcGVydHkoY3VycmVudC5pZCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaXN0LT5p
bnNlcnQoa2YtPmtleSgpLCAqbV9zdHlsZSk7CisgICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvYy0+
cmVuZGVyQXJlbmEoKSk7CisgICAgICAgIG1fc3R5bGUgPSAwOwogICAgIH0KIH0KIApAQCAtMzk0
LDYgKzQ5Niw3IEBAIENTU1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKICAgICBk
ZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVsZXRl
QWxsVmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAgbV9r
ZXlmcmFtZVJ1bGVNYXAuY2xlYXIoKTsKIH0KIAogc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNl
VUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQpAQCAtODU0LDcg
Kzk1Nyw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KE5vZGUqIG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5pc0NoZWNrZWQoKSAh
PSBtX2VsZW1lbnQtPmlzQ2hlY2tlZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSkKKyAg
ICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgYm9vbCBjbGFz
c2VzTWF0Y2ggPSB0cnVlOwpAQCAtMTMxMCw3ICsxNDEzLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQgKmUpCiAg
ICAgc3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMoKTsKICAgICBzdHlsZS0+YWRqdXN0TWFz
a0xheWVycygpOwogCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIHRyYW5zaXRpb25zLgorICAgIC8v
IERvIHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KKyAgICBzdHlsZS0+
YWRqdXN0QW5pbWF0aW9ucygpOwogICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOwogCiAg
ICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMg
YmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUg
d2lsbApAQCAtNDczMCw2ICs0ODM0LDMzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgbV9zdHlsZS0+c2V0VHJh
bnNmb3JtT3JpZ2luWShsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAgIGlmIChpc0luaXRpYWwpCisgICAgICAgICAg
ICBtX3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0
KQorICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMobV9wYXJlbnRTdHlsZS0+
YW5pbWF0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheToKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkZWxheSwg
RGVsYXksIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkRpcmVjdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkaXJl
Y3Rpb24sIERpcmVjdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05f
VkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICAgICAgSEFO
RExFX0FOSU1BVElPTl9WQUxVRShpdGVyYXRpb25Db3VudCwgSXRlcmF0aW9uQ291bnQsIHZhbHVl
KQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5h
bWU6CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUobmFtZSwgTmFtZSwgdmFsdWUpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0
YXRlOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKHBsYXlTdGF0ZSwgUGxheVN0YXRl
LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRSh0aW1p
bmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwp
CiAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CkBAIC00OTg4LDcgKzUx
MTksMzYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcER1cmF0aW9uKFRyYW5zaXRpb24qIHRyYW5z
aXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uRGVsYXkoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Cisg
ICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9u
RGVsYXkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3cpCisg
ICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KDApOworICAgIGVsc2UgeworICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1MpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0
RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0
RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLjBmKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKFRyYW5zaXRp
b24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5
cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldERpcmVj
dGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRE
aXJlY3Rpb24ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbHRlcm5hdGUp
OworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKFRyYW5z
aXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNz
c1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewogICAgICAgICB0cmFuc2l0
aW9uLT5zZXREdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uKCkp
OwpAQCAtNTAwNSwyNSArNTE2NSw3MCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcER1cmF0
aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgdHJh
bnNpdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAw
LjBmKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEZWxheShUcmFuc2l0aW9uKiB0
cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNT
U19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjpp
bml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldEl0ZXJhdGlv
bkNvdW50KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKLSAgICAgICAgdHJhbnNp
dGlvbi0+c2V0RGVsYXkoMCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOworICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQorICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRJdGVyYXRpb25Db3VudCgtMSk7CisgICAgZWxzZQorICAgICAgICB0cmFuc2l0aW9uLT5zZXRJ
dGVyYXRpb25Db3VudChpbnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworfQor
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbk5hbWUoVHJhbnNpdGlvbiogbGF5
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09
IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBsYXllci0+c2V0TmFtZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgIGxheWVyLT5zZXRJc05vbmVBbmlt
YXRpb24odHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUocHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgIAorICAgICAgICAvLyByZXNvbHZlIHRv
IHRoZSBrZXlmcmFtZXMKKyAgICAgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4ga2V5ZnJhbWUgPSBm
aW5kS2V5ZnJhbWVSdWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAg
ICAgbGF5ZXItPnNldEFuaW1hdGlvbktleWZyYW1lKGtleWZyYW1lKTsKKyAgICB9Cit9CisKK3Zv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uUGxheVN0YXRlKFRyYW5zaXRpb24qIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldFBsYXlTdGF0ZShS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRQbGF5U3Rh
dGUoKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1Q
bGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZyk7CiB9CiAKLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwVGltaW5nRnVuY3Rpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NT
VmFsdWUqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25Qcm9wZXJ0
eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAg
dHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25Qcm9w
ZXJ0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1
ZTo6Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24o
UmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKQEAgLTUwNTgs
MjAgKzUyNjMsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRpbWluZ0Z1bmN0aW9uKFRy
YW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZQogICAgIH0KIH0KIAotdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXBQcm9wZXJ0eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1
ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25Qcm9wZXJ0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHko
c3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsK
LX0KLQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSog
dmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBhIHByaW1p
dGl2ZSB2YWx1ZSwgdGhlbiB3ZSBhcmUgIm5vbmUiIGFuZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRo
ZSBlbXB0eSBpbWFnZSBhdCBhbGwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmggYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggYzM4YjYyOS4u
Njk4Yzk4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBi
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNjAsNiArNjAsNyBAQCBjbGFzcyBT
dHlsZUltYWdlOwogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xh
c3MgU3R5bGVkRWxlbWVudDsKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lc1J1bGU7CiAKIGNsYXNz
IE1lZGlhUXVlcnlSZXN1bHQgewogcHVibGljOgpAQCAtMTMwLDEwICsxMzEsMjMgQEAgcHVibGlj
OgogCiAgICAgICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpIHsgbV9jaGVja2VyLmFs
bFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsgfQogICAgICAgICB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5n
ZWQodW5zaWduZWQgdmlzaXRlZEhhc2gpIHsgbV9jaGVja2VyLnZpc2l0ZWRTdGF0ZUNoYW5nZWQo
dmlzaXRlZEhhc2gpOyB9Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQgYWRkVmFyaWFibGVzKENT
U1ZhcmlhYmxlc1J1bGUqIHZhcmlhYmxlcyk7CiAgICAgICAgIENTU1ZhbHVlKiByZXNvbHZlVmFy
aWFibGVEZXBlbmRlbnRWYWx1ZShDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKik7CiAKKyAgICAg
ICAgS2V5ZnJhbWVMaXN0KiBmaW5kS2V5ZnJhbWVSdWxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBBdG9taWNTdHJpbmcg
cyhuYW1lKTsKKyAgICAgICAgICAgIGlmICghbV9rZXlmcmFtZVJ1bGVNYXAuY29udGFpbnMocy5p
bXBsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG1f
a2V5ZnJhbWVSdWxlTWFwLmZpbmQocy5pbXBsKCkpLmdldCgpLT5zZWNvbmQuZ2V0KCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICBlbnVt
IFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogCkBAIC0xNjIsNiArMTc2LDkgQEAgcHVibGljOgog
ICAgICAgICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAgICAgQ29sb3IgbV9iYWNr
Z3JvdW5kQ29sb3I7CiAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiA+IEtleWZyYW1lUnVsZU1hcDsKKyAgICAgICAgS2V5ZnJh
bWVSdWxlTWFwIG1fa2V5ZnJhbWVSdWxlTWFwOworCiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsgfQogCkBAIC0yMDQsMTAgKzIyMSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2
b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKIAotICAgICAgICB2
b2lkIG1hcERlbGF5KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcER1
cmF0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcFRpbWluZ0Z1
bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcFByb3BlcnR5
KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5
KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRpcmVj
dGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25E
dXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRp
b25JdGVyYXRpb25Db3VudChUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBt
YXBBbmltYXRpb25OYW1lKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1h
cEFuaW1hdGlvblBsYXlTdGF0ZShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9p
ZCBtYXBBbmltYXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAg
dm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsK
IAogICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1h
Z2UmKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbiBiL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KaW5kZXggYjM5ZTE1MS4uY2M2NDUxMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgorKysgYi9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUtleXdvcmRzLmluCkBAIC01NjQsMTEgKzU2NCwyOSBAQCBsaW5lcwogCiAjCiAj
IENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9ERUxBWQorIyBDU1NfUFJPUF9fV0VCS0lUX0FO
SU1BVElPTl9ERUxBWQogIwogbm93CiAKICMKKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05f
RElSRUNUSU9OCisjCisjIGFsdGVybmF0ZQorCisjCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFU
SU9OX0lURVJBVElPTl9DT1VOVAorIworIyBpbmZpbml0ZQorCisjCisjIENTU19QUk9QX19XRUJL
SVRfQU5JTUFUSU9OX1BMQVlfU1RBVEUKKyMKK3J1bm5pbmcKK3BhdXNlZAorCisjCiAjIENTU19Q
Uk9QX19XRUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT04KKyMgQ1NTX1BST1BfX1dFQktJ
VF9BTklNQVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBlYXNlCiBsaW5lYXIKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5oIGIvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKaW5kZXgg
MWYxM2I1My4uZGU1ZDA1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKKysr
IGIvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyc2V0UnVsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9ydFJ1bGUoKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1bGUoKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZXNSdWxlKCkgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gZmFsc2U7
IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGVzUnVsZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlNmViMQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuaCIKKworI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQorICAgIDogQ1NTUnVsZShwYXJlbnQp
CisgICAgLCBtX2tleSgwKQoreworfQorCitXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6On5XZWJLaXRD
U1NLZXlmcmFtZVJ1bGUoKQoreworICAgIGlmIChtX3N0eWxlKQorICAgICAgICBtX3N0eWxlLT5z
ZXRQYXJlbnQoMCk7Cit9CisKK1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmtleVRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihtX2tleSkgKyAiJSI7Cit9CisK
K3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzZXRLZXlUZXh0KGNvbnN0IFN0cmluZyYgcykK
K3sKKyAgICBtX2tleSA9IGtleVN0cmluZ1RvRmxvYXQocyk7Cit9CisKK1N0cmluZyBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSBjb25zdAoreworICAgIFN0cmluZyByZXN1bHQgPSBT
dHJpbmc6Om51bWJlcihtX2tleSk7CisKKyAgICByZXN1bHQgKz0gIiUgeyAiOworICAgIHJlc3Vs
dCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0ICs9ICJ9IjsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypzdHJpY3QqLykKK3sKKyAgICAvLyBGSVhN
RQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnNl
dERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
KQoreworICAgIG1fc3R5bGUgPSBzdHlsZTsKKyAgICBtX3N0eWxlLT5zZXRQYXJlbnQocGFyZW50
KCkpOworfQorCisvKiBzdGF0aWMgKi8KK2Zsb2F0IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5
U3RyaW5nVG9GbG9hdChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgZmxvYXQga2V5ID0gMDsKKyAg
ICAKKyAgICAvLyBmb3Igbm93IHRoZSBzeW50YXggTVVTVCBiZSAneHh4JScgb3IgJ2Zyb20nIG9y
ICd0bycsIHdoZXJlIHh4eCBpcyBhIGxlZ2FsIGZsb2F0aW5nIHBvaW50IG51bWJlcgorICAgIGlm
IChzID09ICJmcm9tIikKKyAgICAgICAga2V5ID0gMDsKKyAgICBlbHNlIGlmIChzID09ICJ0byIp
CisgICAgICAgIGtleSA9IDEwMDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHMuZW5kc1dpdGgo
IiUiKSkgeworICAgICAgICAgICAgZmxvYXQgayA9IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkg
LSAxKS50b0Zsb2F0KCk7CisgICAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPD0gMTAwKQorICAg
ICAgICAgICAgICAgIGtleSA9IGs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGtleTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggYi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVjNzAzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
X2gKKyNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gKKworI2luY2x1ZGUgIkNTU1J1bGUu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlIDogcHVibGljIENTU1J1bGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYktpdENTU0tleWZyYW1lUnVsZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKDApKTsKKyAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBjcmVhdGUoQ1NTU3R5bGVTaGVldCog
cGFyZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUocGFyZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1bGUoKSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NSdWxlCisgICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FX1JVTEU7IH0K
KworICAgIFN0cmluZyBrZXlUZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXlUZXh0KGNvbnN0
IFN0cmluZyYgcyk7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7CisKKyAgICAvLyBOb3QgcGFydCBvZiB0aGUgQ1NTT00KKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZhbHNlKTsKKyAgICAKKyAg
ICBmbG9hdCBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS8xMDA7IH0KKyAgICBmbG9hdCBrZXlB
c1BlcmNlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAgdm9pZCBzZXRLZXkoZmxv
YXQgaykgeyBtX2tleSA9IGs7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKworICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiAgICAgICAgIGRlY2xhcmF0aW9uKCkgICAgICAgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQorICAgIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgIGRlY2xhcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIAorICAgIHN0YXRpYyBmbG9h
dCBrZXlTdHJpbmdUb0Zsb2F0KGNvbnN0IFN0cmluZyYgcyk7CisgCitwcml2YXRlOgorICAgIFdl
YktpdENTU0tleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOworCisgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAgIGZsb2F0IG1fa2V5OyAg
ICAgICAgLy8gMCB0byAxMDAKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFdlYktpdENTU0tleWZyYW1lUnVsZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWQxMzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcApAQCAt
MCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlz
dC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKENTU1N0eWxlU2hl
ZXQqIHBhcmVudCkKKyAgICA6IENTU1J1bGUocGFyZW50KQorICAgICwgbV9sc3RDU1NSdWxlcyhD
U1NSdWxlTGlzdDo6Y3JlYXRlKCkpCit7Cit9CisKK1dlYktpdENTU0tleWZyYW1lc1J1bGU6On5X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlKCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gbV9sc3RDU1NSdWxl
cy0+bGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIG1fbHN0
Q1NTUnVsZXMtPml0ZW0oaSktPnNldFBhcmVudCgwKTsKK30KKworU3RyaW5nIFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CisKK3Zv
aWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIC8qZWMqLykKK3sKKyAgICBtX25hbWUgPSBuYW1lOworfQorCit2b2lkIFdl
YktpdENTU0tleWZyYW1lc1J1bGU6OnNldE5hbWUoU3RyaW5nIG5hbWUpCit7CisgICAgbV9uYW1l
ID0gbmFtZTsKK30KKwordW5zaWduZWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6bGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy5nZXQoKS0+bGVuZ3RoKCk7Cit9CisK
K1dlYktpdENTU0tleWZyYW1lUnVsZSogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6aXRlbSh1bnNp
Z25lZCBpbmRleCkKK3sKKyAgICBDU1NSdWxlKiBydWxlID0gbV9sc3RDU1NSdWxlcy5nZXQoKS0+
aXRlbShpbmRleCk7CisgICAgcmV0dXJuIChydWxlICYmIHJ1bGUtPmlzS2V5ZnJhbWVSdWxlKCkp
ID8gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4ocnVsZSkgOiAwOworfQorCitj
b25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Oml0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQ1NTUnVsZSogcnVsZSA9IG1fbHN0Q1NTUnVs
ZXMuZ2V0KCktPml0ZW0oaW5kZXgpOworICAgIHJldHVybiAocnVsZSAmJiBydWxlLT5pc0tleWZy
YW1lUnVsZSgpKSA/IHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHJ1
bGUpIDogMDsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnQoV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlKiBydWxlKQoreworICAgIGZsb2F0IGtleSA9IHJ1bGUtPmtleUFzUGVy
Y2VudCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVyY2VudCgpID09IGtleSkgeworICAgICAgICAg
ICAgbV9sc3RDU1NSdWxlcy5nZXQoKS0+ZGVsZXRlUnVsZShpKTsKKyAgICAgICAgICAgIG1fbHN0
Q1NTUnVsZXMuZ2V0KCktPmluc2VydFJ1bGUocnVsZSwgaSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVyY2VudCgpID4ga2V5KSB7
CisgICAgICAgICAgICAvLyBpbnNlcnQgYmVmb3JlCisgICAgICAgICAgICBtX2xzdENTU1J1bGVz
LmdldCgpLT5pbnNlcnRSdWxlKHJ1bGUsIGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIGFwcGVuZAorICAgIG1fbHN0Q1NTUnVsZXMuZ2V0KCkt
PmFwcGVuZChydWxlKTsKKyAgICBzdHlsZXNoZWV0KCktPnN0eWxlU2hlZXRDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcm
IHJ1bGUpCit7CisgICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0UGFyc2luZygpKTsKKyAgICBSZWZQ
dHI8Q1NTUnVsZT4gbmV3UnVsZSA9IHAucGFyc2VLZXlmcmFtZVJ1bGUocGFyZW50U3R5bGVTaGVl
dCgpLCBydWxlKTsKKyAgICBpZiAobmV3UnVsZS5nZXQoKSAmJiBuZXdSdWxlLmdldCgpLT5pc0tl
eWZyYW1lUnVsZSgpKQorICAgICAgICBpbnNlcnQoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlKj4obmV3UnVsZS5nZXQoKSkpOworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1
bGU6OmRlbGV0ZVJ1bGUoY29uc3QgU3RyaW5nJiBzKQoreworICAgIGZsb2F0IGtleSA9IFdlYktp
dENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChzKTsKKyAgICBpbnQgaSA9IGZpbmRS
dWxlSW5kZXgoa2V5KTsKKyAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgIG1fbHN0Q1NTUnVsZXMu
Z2V0KCktPmRlbGV0ZVJ1bGUoaSk7CisgICAgICAgIHN0eWxlc2hlZXQoKS0+c3R5bGVTaGVldENo
YW5nZWQoKTsKKyAgICB9Cit9CisKK1dlYktpdENTU0tleWZyYW1lUnVsZSogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZTo6ZmluZFJ1bGUoY29uc3QgU3RyaW5nJiBzKQoreworICAgIGZsb2F0IGtleSA9
IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChzKTsKKyAgICBpbnQgaSA9
IGZpbmRSdWxlSW5kZXgoa2V5KTsKKyAgICByZXR1cm4gKGkgPj0gMCkgPyBpdGVtKGkpIDogMDsK
K30KKworaW50IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmZpbmRSdWxlSW5kZXgoZmxvYXQga2V5
KSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmIChpdGVtKGkpLT5rZXlBc1BlcmNlbnQoKSA9PSBrZXkpCisgICAgICAgICAg
ICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK1N0cmluZyBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzdWx0ID0g
IkAtd2Via2l0LWtleWZyYW1lcyAiOworICAgIHJlc3VsdCArPSBtX25hbWU7CisgICAgcmVzdWx0
ICs9ICIgeyBcbiI7CisKKyAgICBpZiAobV9sc3RDU1NSdWxlcykgeworICAgICAgICB1bnNpZ25l
ZCBsZW4gPSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIiAgIjsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBtX2xzdENTU1J1bGVzLT5pdGVtKGkpLT5jc3NUZXh0KCk7CisgICAg
ICAgICAgICByZXN1bHQgKz0gIlxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdCAr
PSAifSI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGIvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFlOTYyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZV9oCisjZGVmaW5lIFdlYktpdENTU0tleWZyYW1lc1J1
bGVfaAorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
U1NSdWxlTGlzdDsKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lUnVsZTsKK2NsYXNzIFN0cmluZzsK
KwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKDApKTsKKyAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gY3JlYXRlKENTU1N0eWxlU2hlZXQq
IHBhcmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZShwYXJlbnQpKTsKKyAgICB9CisKKyAgICB+V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZSgpOworCisgICAgdmlydHVhbCBib29sIGlzS2V5ZnJhbWVzUnVsZSgpIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1bGUKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBXRUJLSVRfS0VZRlJBTUVTX1JVTEU7IH0KKwor
ICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYs
IEV4Y2VwdGlvbkNvZGUmKTsgICAgCisgICAgdm9pZCBzZXROYW1lKFN0cmluZyk7ICAgIAorCisg
ICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5nZXQoKTsg
fQorCisgICAgdm9pZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSk7CisgICAgdm9pZCBk
ZWxldGVSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUq
IGZpbmRSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKKworICAgIC8qIG5vdCBwYXJ0IG9mIHRoZSBET00gKi8KKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqICAgICAgICBpdGVt
KHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqICBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2b2lkIGluc2VydChXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUqIHJ1bGUpOworCitwcml2YXRlOgorICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUoQ1NT
U3R5bGVTaGVldCogcGFyZW50KTsKKworICAgIGludCBmaW5kUnVsZUluZGV4KGZsb2F0IGtleSkg
Y29uc3Q7CisgICAgCisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1bGVzOworICAg
IFN0cmluZyBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22395</attachid>
            <date>2008-07-20 12:27:49 -0700</date>
            <delta_ts>2008-08-04 17:19:37 -0700</delta_ts>
            <desc>updated patch for css parsing</desc>
            <filename>patch7-css-animation-properties-updated.patch</filename>
            <type>text/plain</type>
            <size>200192</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDQzMmFhODYuLjNiMDM2NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjI5LDYgKzYyOSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9jc3MvU3R5bGVMaXN0LmNwcCBcCiAJV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldC5jcHAgXAogCVdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBc
CisJV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBcCisJV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgXAogCVdlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlLmNwcCBcCiAJV2ViQ29yZS9kb20vQXR0ci5jcHAgXAogCVdlYkNvcmUvZG9tL0F0
dHJpYnV0ZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggYTA4N2FiNS4uOWU5MmM0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01MDQsNiArNTA0LDggQEAg
U09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxlTGlzdC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0
LmNwcCBcCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBcCisgICAgY3NzL1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAgXAorICAgIGNzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBcCiAg
ICAgY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBcCiAgICAgZG9tL0F0dHIuY3BwIFwK
ICAgICBkb20vQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBlODkyMzgxLi4wYTc5YmYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTg5MzQsNiArODkzNCwzOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCIN
CisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdP
fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tleWZyYW1lUnVsZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJ
TmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0
cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cY3NzXFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGZkOGNjY2YuLmI1NzM5NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDEwIEBACiAJCTI5OTk4NkExMEREMERFRUEwMEY4RDI2
MSAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOTk5ODY5RDBERDBERUVBMDBGOEQyNjEgLyogQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwICovOyB9OwogCQkyRDkwNjYwNjBCRTE0MUQ0MDA5NTY5OTggLyogTGF5
b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCAqLzsgfTsKIAkJ
MkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9
OworCQkzMTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CisJCTMxMjg4
RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUzMDA1RDYw
MDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKKwkJMzEyODhFNzUw
RTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcxMEUzMDA1RDYwMDM2MTlB
RSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07CiAJCTMxNjExRTU1MEUxQzRENEEw
MEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAv
KiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgKi87IH07CiAJCTMxNjExRTVBMEUxQzRERTAw
MEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJMzE2MTFFNUIwRTFDNERF
MDAwRjZBNTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU5MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IH07CkBAIC00OTEzLDYgKzQ5MTcsMTAg
QEAKIAkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBi
b2FyZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENsaXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CisJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEy
ODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMjg4RTcxMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5
IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTYxMUU1OTBFMUM0
REUwMDBGNkE1NzkgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjc1OCw3ICsxMjc2Niw2IEBACiAJCUY1MjNEMTg0MDJE
RTQyRTgwMTg2MzVDQSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5pZGwgKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIu
aCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJ
CQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICov
LApAQCAtMTI4NDgsOCArMTI4NTUsNiBAQAogCQkJCTg1OEMzOTEwMEFBOEZGMDAwMEIxODdBNCAv
KiBDU1NTdHlsZVNoZWV0LmlkbCAqLywKIAkJCQlCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgKi8sCiAJCQkJQkM4MEM5ODYwQ0QyOTRFRTAwQTBC
N0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLywKLQkJCQlCQzlBREQ3RjBDQzQwOTIy
MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAotCQkJCUJDOUFERDIy
MENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTM3
MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8sCiAJ
CQkJMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8s
CiAJCQkJQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCkBA
IC0xMjkxMyw2ICsxMjkxOCwxMyBAQAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAogCQkJCTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAv
KiB0b2tlbml6ZXIuZmxleCAqLywKIAkJCQlCQzVFQzE3NjBBNTA3RTNFMDA2MDA3RjUgLyogdmll
dy1zb3VyY2UuY3NzICovLAorCQkJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuY3BwICovLAorCQkJCTMxMjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLywKKwkJCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUg
LyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8sCisJCQkJMzEyODhFNzEwRTMwMDVENjAw
MzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCAqLywKKwkJCQlCQzlBREQ3RjBDQzQw
OTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAorCQkJCUJDOUFE
RDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAorCQkJ
CTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNzczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0xNTMwMCw2ICsxNTMxMiw4IEBACiAJCQkJQkMzQTQ0REUwRTI2RDIwMjAwQzE0REZBIC8qIE5T
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0E0NEUzMEUyNkQyMUIwMEMxNERGQSAv
KiBKU05TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjRCNDY1MEUyRUYyRUEwMDgx
QTdCNyAvKiBUZXh0UnVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTI4OEU3MzBFMzAwNUQ2MDAz
NjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTI4
OEU3NTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xNzA3MCw2ICsxNzA4NCw4IEBACiAJCQkJMzE2MTFFNUEwRTFDNERFMDAwRjZB
NTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzE2MTFFNjIwRTFDNEUxNDAwRjZBNTc5IC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0RTIwRTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMjg4RTc0MEUz
MDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbAppbmRleCBhZGFiZDgxLi4xMWFjZDUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAt
MTc5LDYgKzE3OSw4IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVk
ZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgY3NzL1N0eWxlTGlzdC5jcHAKICAgICAgICAg
Y3NzL1N0eWxlU2hlZXQuY3BwCiAgICAgICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAKKyAgICAg
ICAgY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKKyAgICAgICAgY3NzL1dlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwCiAgICAgICAgIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAK
ICAgICA8L3NldD4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcCBiL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKaW5kZXggODU5MmYyMS4uOGQ4ZDBkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0
aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTg3LDYgKzE4OCwxMCBAQCBzdGF0aWMgY29uc3Qg
aW50IGNvbXB1dGVkUHJvcGVydGllc1tdID0gewogICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtLAogICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwKICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uRGVsYXksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCisgICAg
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sCiAgICAgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJh
ZywKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnksCiAgICAgQ1NTUHJvcGVydHlXZWJr
aXRVc2VyU2VsZWN0LApAQCAtMTA1NSw2ICsxMDYwLDYzIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJv
cGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKSk7
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6IHsKKyAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNv
bW1hU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0ID0gc3R5bGUt
PnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAgICAgIGZv
ciAoIDsgdDsgdCA9IHQtPm5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodC0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBbmltYXRpb25EZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAg
ICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9ucygp
OworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0
LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHQtPmR1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uRHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogeworICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
KyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsK
KyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+
bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0ZiA9
IHQtPnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChD
U1NUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUodGYueDEoKSwgdGYueTEoKSwgdGYueDIoKSwg
dGYueTIoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0ZiA9IFJlbmRl
clN0eWxlOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHRmLngxKCksIHRm
LnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgICAg
ICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9ucygpOworICAgICAg
ICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByb3AgPSB0LT5wcm9wZXJ0eSgpOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvcCA9PSBjQW5pbWF0ZU5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIm5v
bmUiOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09IGNBbmltYXRlQWxsKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJhbGwiOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZ2V0UHJvcGVydHlOYW1lKHN0
YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3ApKTsKKyAgICAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmFtZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoImFsbCIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAg
ICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmQ6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206CkBAIC0xMTEyLDExICsxMTc0LDYg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2s6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlOgotICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25Qcm9wZXJ0eToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBl
YXRDb3VudDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbjoKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgYXJlIHVuaW1wbGVtZW50
ZWQuCiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9jc3MvQ1NTR3JhbW1hci55IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGY1
OWEwMzIuLjJkYjYwYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysg
Yi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENT
U0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcu
aD4KIApAQCAtNjksNiArNzEsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIENT
U1BhcnNlclZhbHVlIHZhbHVlOwogICAgIENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0Owog
ICAgIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIG1lZGlhUXVlcnlFeHBMaXN0OworICAgIFdlYktp
dENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVSdWxlOworICAgIFdlYktpdENTU0tleWZyYW1lc1J1
bGUqIGtleWZyYW1lc1J1bGU7CisgICAgZmxvYXQgdmFsOwogfQogCiAlewpAQCAtMTE4LDYgKzEy
Myw3IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlTVFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIp
CiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFdFQktJVF9SVUxFX1NZTQogJXRva2VuIFdF
QktJVF9ERUNMU19TWU0KKyV0b2tlbiBXRUJLSVRfS0VZRlJBTUVTX1NZTQogJXRva2VuIFdFQktJ
VF9WQUxVRV9TWU0KICV0b2tlbiBXRUJLSVRfTUVESUFRVUVSWV9TWU0KICV0b2tlbiBXRUJLSVRf
VkFSSUFCTEVTX1NZTQpAQCAtMTY3LDYgKzE3Myw3IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlT
VFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIpCiAldHlwZSA8cnVsZT4gaW1wb3J0CiAldHlwZSA8
cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGtleWZyYW1l
cwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+IGludmFsaWRfYXQKICV0
eXBlIDxydWxlPiBpbnZhbGlkX2ltcG9ydApAQCAtMTkzLDYgKzIwMCwxMSBAQCBzdGF0aWMgaW50
IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgdm9pZCogcGFyc2VyKQogJXR5cGUgPG1lZGlhUXVl
cnlFeHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdAogJXR5cGUgPG1lZGlhUXVlcnlFeHBMaXN0
PiBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3QKIAorJXR5cGUgPHN0cmluZz4ga2V5ZnJh
bWVfbmFtZQorJXR5cGUgPGtleWZyYW1lUnVsZT4ga2V5ZnJhbWVfcnVsZQorJXR5cGUgPGtleWZy
YW1lc1J1bGU+IGtleWZyYW1lc19ydWxlCisldHlwZSA8dmFsPiBrZXkKKwogJXR5cGUgPHJ1bGVM
aXN0PiBydWxlc2V0X2xpc3QKIAogJXR5cGUgPGludGVnZXI+IHByb3BlcnR5CkBAIC0zNTIsNiAr
MzY0LDcgQEAgdmFsaWRfcnVsZToKICAgfCBtZWRpYQogICB8IHBhZ2UKICAgfCBmb250X2ZhY2UK
KyAgfCBrZXlmcmFtZXMKICAgOwogCiBydWxlOgpAQCAtNTk2LDYgKzYwOSw0NyBAQCBtZWRpdW06
CiAgIH0KICAgOwogCitrZXlmcmFtZXM6CisgICAgV0VCS0lUX0tFWUZSQU1FU19TWU0gbWF5YmVf
c3BhY2Uga2V5ZnJhbWVfbmFtZSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2Uga2V5ZnJhbWVz
X3J1bGUgJ30nIHsKKyAgICAgICAgJCQgPSAkNzsKKyAgICAgICAgJDctPnNldE5hbWUoJDMpOwor
ICAgIH0KKyAgICA7CisgIAora2V5ZnJhbWVfbmFtZToKKyAgICBJREVOVAorICAgIHwgU1RSSU5H
CisgICAgOworCitrZXlmcmFtZXNfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7ICQkID0gc3RhdGlj
X2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpOyB9CisgICAg
fCBrZXlmcmFtZXNfcnVsZSBrZXlmcmFtZV9ydWxlIG1heWJlX3NwYWNlIHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgaWYgKCQyKQorICAgICAgICAgICAgJCQtPmluc2VydCgkMik7CisgICAg
fQorICAgIDsKKwora2V5ZnJhbWVfcnVsZToKKyAgICBrZXkgbWF5YmVfc3BhY2UgJ3snIG1heWJl
X3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgJ30nIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVLZXlmcmFtZVJ1bGUoJDEpOworICAgIH0KKyAgICA7
CisKK2tleToKKyAgICBQRVJDRU5UQUdFIHsgJCQgPSAoZmxvYXQpICQxOyB9CisgICAgfCBJREVO
VCB7CisgICAgICAgICQkID0gLTE7CisgICAgICAgIENTU1BhcnNlclN0cmluZyYgc3RyID0gJDE7
CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcm
PihzdHIpLCAiZnJvbSIpKQorICAgICAgICAgICAgJCQgPSAwOworICAgICAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihzdHIpLCAidG8iKSkK
KyAgICAgICAgICAgICQkID0gMTAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBZWUVSUk9S
OworICAgIH0KKyAgICA7CisKIC8qCiBwYWdlOgogICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIElE
RU5UPyBwc2V1ZG9fcGFnZT8gbWF5YmVfc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDIwMWY4ODEuLjg3
NTIyYmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtNjUsNiArNjUsOCBAQAogI2luY2x1ZGUgIlBhaXIuaCIK
ICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKICNpbmNsdWRlIDxranMv
ZHRvYS5oPgogCkBAIC0yMzAsNiArMjMyLDE0IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZT4gQ1NTUGFy
c2VyOjpwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyCiAg
ICAgcmV0dXJuIG1fcnVsZS5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTUnVsZT4gQ1NT
UGFyc2VyOjpwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0ICpzaGVldCwgY29uc3QgU3Ry
aW5nICZzdHJpbmcpCit7CisgICAgbV9zdHlsZVNoZWV0ID0gc2hlZXQ7CisgICAgc2V0dXBQYXJz
ZXIoIkAtd2Via2l0LWtleWZyYW1lLXJ1bGV7ICIsIHN0cmluZywgIn0gIik7CisgICAgY3NzeXlw
YXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbV9rZXlmcmFtZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJh
dGlvbiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQpCiB7CiAg
ICAgQVNTRVJUKCFkZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpIHx8IGRlY2xhcmF0aW9uLT5zdHls
ZXNoZWV0KCktPmlzQ1NTU3R5bGVTaGVldCgpKTsKQEAgLTEyODAsMTIgKzEyOTAsMTkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bkRpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uRGVsYXk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50OgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogewogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbDsKLSAgICAgICAgaWYgKHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KHByb3BJZCwg
dmFsKSkgeworICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wSWQsIHZhbCkp
IHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsLnJlbGVhc2UoKSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNTM5LDYgKzE1
NTYsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZVdpZHRoLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciB9Owog
ICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCAyLCBpbXBv
cnRhbnQpOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgorICAg
ICAgICByZXR1cm4gcGFyc2VBbmltYXRpb25TaG9ydGhhbmQoaW1wb3J0YW50KTsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNp
dGlvblNob3J0aGFuZChpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgpA
QCAtMTY3Niw3ICsxNjk1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChp
bnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NT
VmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQordm9pZCBDU1NQYXJzZXI6
OmFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsKICAgICAgICAgaWYgKGx2YWwtPmlzVmFs
dWVMaXN0KCkpCkBAIC0xNjkzLDEwICsxNzEyLDcxIEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRUcmFu
c2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4K
ICAgICAgICAgbHZhbCA9IHJ2YWw7CiB9CiAKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlv
blNob3J0aGFuZChib29sIGltcG9ydGFudCkKK3sKKyAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbiB9OworICAg
IGNvbnN0IGludCBudW1Qcm9wZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gc2l6ZW9mKHBy
b3BlcnRpZXNbMF0pOworICAgIAorICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uKTsKKworICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJv
cGVydGllc10gPSB7IGZhbHNlIH07IC8vIGNvbXBpbGVyIHdpbGwgcmVwZWF0IGZhbHNlIGFzIG5l
Y2Vzc2FyeQorICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW251bVByb3BlcnRpZXNdOworICAg
IAorICAgIGludCBpOworICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAg
ICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgICAg
ICBpZiAodmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWwtPmlWYWx1
ZSA9PSAnLCcpIHsKKyAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kLiAgRmlsbCBpbiBhbGwg
cmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgorICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0
aWVzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQorICAg
ICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxW
YWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CisgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlb
aV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQg
JiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9w
ZXJ0eVtpXSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOworICAgICAg
ICAgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgdmFsLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlz
IGFuCisgICAgICAgIC8vIGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBp
dAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBp
bml0aWFsIHZhbHVlLgorICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsK
KyAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKKyAgICAgICAgICAgIGFkZEFuaW1hdGlv
blZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKKyAg
ICB9CisgICAgCisgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQu
CisgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykKKyAgICAgICAgYWRkUHJv
cGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlv
blNob3J0aGFuZChib29sIGltcG9ydGFudCkKIHsKLSAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uRHVyYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25SZXBlYXRDb3VudCB9OworICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uIH07CiAgICAgY29uc3QgaW50IG51bVByb3BlcnRpZXMgPSBzaXplb2YocHJvcGVy
dGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7CiAgICAgCiAgICAgU2hvcnRoYW5kU2NvcGUg
c2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uKTsKQEAgLTE3MTIsNyArMTc5
Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkUHJvcGVydHlbaV0pCi0gICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25WYWx1
ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVl
OjpjcmVhdGVJbXBsaWNpdCgpKTsKICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKQpAQCAtMTcyMyw5ICsxODAzLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNp
dGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgZm9yIChpID0gMDsgIWZvdW5k
ICYmIGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgICAgIGlmICghcGFyc2VkUHJv
cGVydHlbaV0pIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyc2VUcmFuc2l0aW9uUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFs
KSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHByb3BlcnRp
ZXNbaV0sIHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25WYWx1ZSh2YWx1
ZXNbaV0sIHZhbC5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25W
YWx1ZSh2YWx1ZXNbaV0sIHZhbC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTczOSw3ICsxODE5LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAvLyBGaWxsIGlu
IGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgIGZv
ciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJzZWRQ
cm9wZXJ0eVtpXSkKLSAgICAgICAgICAgIGFkZFRyYW5zaXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENT
U0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CisgICAgICAgICAgICBhZGRBbmltYXRp
b25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAg
ICAgfQogICAgIAogICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5k
LgpAQCAtMjE5MiwxNSArMjI3MiwzMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVy
dHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlv
bkR1cmF0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRp
b25EZWxheSgpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm93KQorICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsKICAgICBp
ZiAodmFsaWRVbml0KHZhbHVlLCBGVGltZSwgbV9zdHJpY3QpKQogICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQoKQorUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCit7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBp
ZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFs
dGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKHZhbHVlLT5pZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EdXJhdGlvbigpCit7CisgICAgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsaWRVbml0KHZh
bHVlLCBGVGltZXxGTm9uTmVnLCBtX3N0cmljdCkpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKXZhbHVlLT51bml0KTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKIHsKICAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKQEAgLTIyMTAsNiArMjMwOCw0MiBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCkKICAg
ICByZXR1cm4gMDsKIH0KIAorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFu
aW1hdGlvbk5hbWUoKQoreworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfU1RSSU5HIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
IHsKKyAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HICYmIGVxdWFsSWdub3JpbmdDYXNlKHZh
bHVlLT5zdHJpbmcsICJub25lIikpKSB7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJp
bmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFu
aW1hdGlvblBsYXlTdGF0ZSgpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlUnVubmluZyB8
fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYXVzZWQpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOworICAgIHJldHVybiAwOworfQor
CitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHko
KQoreworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
CisgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisg
ICAgICAgIHJldHVybiAwOworICAgIGludCByZXN1bHQgPSBjc3NQcm9wZXJ0eUlEKHZhbHVlLT5z
dHJpbmcpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlSWRlbnRpZmllcihyZXN1bHQpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWx1ZS0+c3RyaW5nLCAiYWxsIikpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihjQW5pbWF0ZUFsbCk7IC8vIEZJWE1FOiBXaHkgbm90IHVzZSBDU1NW
YWx1ZUFsbCBpbnN0ZWFkPworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+c3RyaW5n
LCAibm9uZSIpKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoY0FuaW1hdGVOb25lKTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVlTm9uZSBp
bnN0ZWFkPworICAgIHJldHVybiAwOworfQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VUaW1pbmdG
dW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0KQog
ewogICAgIENTU1BhcnNlclZhbHVlKiB2ID0gYXJncy0+Y3VycmVudCgpOwpAQCAtMjIyOCw3ICsy
MzYyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb24oKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlT3V0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJ
bk91dCkKQEAgLTIyNTgsMjIgKzIzOTIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAgICByZXR1cm4gQ1NTVGltaW5n
RnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpCi17Ci0gICAgQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFs
dWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaW50IHJlc3VsdCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7Ci0gICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKHJlc3VsdCk7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcs
ICJhbGwiKSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKGNBbmltYXRlQWxsKTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVlQWxsIGluc3Rl
YWQ/Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJub25lIikpCi0g
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihjQW5pbWF0
ZU5vbmUpOyAvLyBGSVhNRTogV2h5IG5vdCB1c2UgQ1NTVmFsdWVOb25lIGluc3RlYWQ/Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShp
bnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCitib29sIENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQp
CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOwogICAgIENTU1BhcnNlclZhbHVl
KiB2YWw7CkBAIC0yMjkyLDIzICsyNDExLDQ2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5z
aXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiAgICAg
ICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByb3BJZCkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgICAg
ICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRlbGF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgICAgICAg
ICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgogICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50
KCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlv
bkl0ZXJhdGlvbkNvdW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBw
YXJzZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFs
dWUgPSBwYXJzZUFuaW1hdGlvbk5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJW
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25QbGF5U3RhdGU6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9
IHBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJy
VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUg
PSBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFs
dWUgPSBwYXJzZUFuaW1hdGlvblByb3BlcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzQ3LDYg
KzI0ODksOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHBy
b3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAKICNkZWZpbmUgREFTSEJPQVJEX1JF
R0lPTl9OVU1fUEFSQU1FVEVSUyAgNgpAQCAtMzg5Myw3ICs0MDM3LDcgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQogCiAgICAgLy8gVGhlIHRy
YW5zZm9ybSBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25hbCBwcmltaXRpdmVzIHRoYXQgc3BlY2lmeSB0
cmFuc2Zvcm0gb3BlcmF0aW9ucy4KICAgICAvLyBXZSBjb2xsZWN0IGEgbGlzdCBvZiBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZXMsIHdoZXJlIGVhY2ggdmFsdWUgc3BlY2lmaWVzIGEgc2luZ2xlIG9w
ZXJhdGlvbi4KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgZm9yIChDU1NQYXJzZXJW
YWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBtX3Zh
bHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtNDAyNyw2ICs0MTcxLDcgQEAgaW50IENTU1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdp
dGhvdXRUeXBlKQogICAgIGNhc2UgRk9OVF9GQUNFX1NZTToKICAgICBjYXNlIENIQVJTRVRfU1lN
OgogICAgIGNhc2UgTkFNRVNQQUNFX1NZTToKKyAgICBjYXNlIFdFQktJVF9LRVlGUkFNRVNfU1lN
OgogCiAgICAgY2FzZSBJTVBPUlRBTlRfU1lNOgogICAgICAgICBicmVhazsKQEAgLTQzNjgsNiAr
NDUxMywxNCBAQCBDU1NSdWxlTGlzdCogQ1NTUGFyc2VyOjpjcmVhdGVSdWxlTGlzdCgpCiAgICAg
cmV0dXJuIGxpc3RQdHI7CiB9CiAKK1dlYktpdENTU0tleWZyYW1lc1J1bGUqIENTU1BhcnNlcjo6
Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpCit7CisgICAgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1
bGU+IHJ1bGUgPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsK
KyAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBydWxlUHRyID0gcnVsZS5nZXQoKTsKKyAgICBt
X3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHJldHVybiBy
dWxlUHRyOworfQorCiBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCiB7CiAgICAgQ1NTU3R5bGVSdWxlKiByZXN1bHQgPSAwOwpAQCAtNDUw
OSw2ICs0NjYyLDE5IEBAIHZvaWQgQ1NTUGFyc2VyOjpkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMo
KQogICAgIG1fbnVtUGFyc2VkUHJvcGVydGllcyAtPSBkZWxldGVkUHJvcGVydGllczsKIH0KIAor
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lUnVsZShmbG9h
dCBrZXkpCit7CisgICAgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQpOworCisgICAga2V5ZnJh
bWUtPnNldEtleShrZXkpOworICAgIGtleWZyYW1lLT5zZXREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKDAsIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzKSk7CisgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CisKKyAgICBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUqIGtleWZyYW1lUHRyID0ga2V5ZnJhbWUuZ2V0KCk7CisgICAgbV9wYXJzZWRT
dHlsZU9iamVjdHMuYXBwZW5kKGtleWZyYW1lLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGtleWZy
YW1lUHRyOworfQorCiBzdGF0aWMgaW50IGNzc1Byb3BlcnR5SUQoY29uc3QgVUNoYXIqIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRl
eCBmNjRkMzYzLi41YTFmZDExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAor
KysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtNDYsNiArNDYsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgTWVkaWFRdWVyeUV4cDsKICAgICBjbGFzcyBTdHlsZUJhc2U7
CiAgICAgY2xhc3MgU3R5bGVMaXN0OworICAgIGNsYXNzIFdlYktpdENTU0tleWZyYW1lUnVsZTsK
KyAgICBjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOwogCiAgICAgY2xhc3MgQ1NTUGFyc2Vy
IHsKICAgICBwdWJsaWM6CkBAIC01NCw2ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwog
ICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiwgY29u
c3QgU3RyaW5nJik7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gcGFyc2VLZXlmcmFtZVJ1
bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBib29sIHBhcnNlVmFs
dWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcElkLCBjb25zdCBTdHJpbmcm
LCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMy
JiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgICAgIGJv
b2wgcGFyc2VDb2xvcihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYp
OwpAQCAtODMsMTQgKzg2LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lk
IGFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBydmFsKTsKIAotICAgICAgICB2b2lkIGFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFs
dWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQoKTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAg
dm9pZCBhZGRBbmltYXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBydmFsKTsKKworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFu
aW1hdGlvbkRlbGF5KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0
aW9uRGlyZWN0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0
aW9uRHVyYXRpb24oKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRp
b25JdGVyYXRpb25Db3VudCgpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFu
aW1hdGlvbk5hbWUoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRp
b25QbGF5U3RhdGUoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRp
b25Qcm9wZXJ0eSgpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlv
blRpbWluZ0Z1bmN0aW9uKCk7CisKICAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFs
dWUoQ1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpOwotICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpOwotICAgICAgICBi
b29sIHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4m
KTsKKyAgICAgICAgYm9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0
cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9v
bCBpbXBvcnRhbnQpOworICAgICAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wg
aW1wb3J0YW50KTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcGFyc2VEYXNoYm9hcmRSZWdpb25z
KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKIApAQCAtMTU0LDYgKzE2NCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgTWVkaWFMaXN0KiBjcmVhdGVNZWRpYUxpc3QoKTsKICAg
ICAgICAgQ1NTUnVsZSogY3JlYXRlQ2hhcnNldFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7
CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5n
JiwgTWVkaWFMaXN0Kik7CisgICAgICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSogY3JlYXRlS2V5
ZnJhbWVSdWxlKGZsb2F0IGtleSk7CisgICAgICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIGNy
ZWF0ZUtleWZyYW1lc1J1bGUoKTsKICAgICAgICAgQ1NTUnVsZSogY3JlYXRlTWVkaWFSdWxlKE1l
ZGlhTGlzdCosIENTU1J1bGVMaXN0Kik7CiAgICAgICAgIENTU1J1bGVMaXN0KiBjcmVhdGVSdWxl
TGlzdCgpOwogICAgICAgICBDU1NSdWxlKiBjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqKTsK
QEAgLTE3OCw2ICsxOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBtX2lk
OwogICAgICAgICBDU1NTdHlsZVNoZWV0KiBtX3N0eWxlU2hlZXQ7CiAgICAgICAgIFJlZlB0cjxD
U1NSdWxlPiBtX3J1bGU7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlPiBtX2tleWZyYW1lOwogICAg
ICAgICBNZWRpYVF1ZXJ5KiBtX21lZGlhUXVlcnk7CiAgICAgICAgIENTU1BhcnNlclZhbHVlTGlz
dCogbV92YWx1ZUxpc3Q7CiAgICAgICAgIENTU1Byb3BlcnR5KiogbV9wYXJzZWRQcm9wZXJ0aWVz
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbiBiL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KaW5kZXggNDg5MmFlMS4uNjJjNTMxYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgorKysgYi9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eU5hbWVzLmluCkBAIC0xNDIsMTEgKzE0MiwxNCBAQCB3b3JkLXNwYWNpbmcKIHdvcmQt
d3JhcAogei1pbmRleAogem9vbQotLXdlYmtpdC10cmFuc2l0aW9uCi0td2Via2l0LXRyYW5zaXRp
b24tZHVyYXRpb24KLS13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQotLXdlYmtpdC10cmFuc2l0
aW9uLXJlcGVhdC1jb3VudAotLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbgorLXdl
YmtpdC1hbmltYXRpb24KKy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Cistd2Via2l0LWFuaW1hdGlv
bi1kaXJlY3Rpb24KKy13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uCistd2Via2l0LWFuaW1hdGlv
bi1pdGVyYXRpb24tY291bnQKKy13ZWJraXQtYW5pbWF0aW9uLW5hbWUKKy13ZWJraXQtYW5pbWF0
aW9uLXBsYXktc3RhdGUKKy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbgogLXdlYmtp
dC1hcHBlYXJhbmNlCiAtd2Via2l0LWJhY2tncm91bmQtY2xpcAogLXdlYmtpdC1iYWNrZ3JvdW5k
LWNvbXBvc2l0ZQpAQCAtMjI1LDYgKzIyOCwxMSBAQCB6b29tCiAtd2Via2l0LXRyYW5zZm9ybS1v
cmlnaW4KIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14CiAtd2Via2l0LXRyYW5zZm9ybS1vcmln
aW4teQorLXdlYmtpdC10cmFuc2l0aW9uCistd2Via2l0LXRyYW5zaXRpb24tZGVsYXkKKy13ZWJr
aXQtdHJhbnNpdGlvbi1kdXJhdGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Cistd2Vi
a2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LXVzZXItZHJhZwogLXdlYmtp
dC11c2VyLW1vZGlmeQogLXdlYmtpdC11c2VyLXNlbGVjdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTUnVsZS5oIGIvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCmluZGV4IDcxODIyMGUuLmIzMGI1
NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1J1bGUuaAorKysgYi9XZWJDb3JlL2Nzcy9D
U1NSdWxlLmgKQEAgLTM5LDcgKzM5LDkgQEAgcHVibGljOgogICAgICAgICBNRURJQV9SVUxFLAog
ICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKICAgICAgICAgUEFHRV9SVUxFLAotICAgICAgICBWQVJJ
QUJMRVNfUlVMRQorICAgICAgICBWQVJJQUJMRVNfUlVMRSwKKyAgICAgICAgV0VCS0lUX0tFWUZS
QU1FU19SVUxFLAorICAgICAgICBXRUJLSVRfS0VZRlJBTUVfUlVMRQogICAgIH07CiAKICAgICAv
LyBGSVhNRTogQ2hhbmdlIHRvIHJldHVybiBDU1NSdWxlVHlwZS4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKaW5kZXggYzc2ZGUwNS4uM2Q5N2ZiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
QEAgLTcwLDYgKzcwLDggQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldl
YktpdENTU0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUu
aCIKICNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgiCkBAIC0xODIsNiArMTg0LDY1IEBAIEhBTkRMRV9G
SUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFzaywgTWFzaywgcHJvcCwgUHJvcCkKICNk
ZWZpbmUgSEFORExFX01BU0tfVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIFwKIEhBTkRMRV9GSUxM
X0xBWUVSX1ZBTFVFKG1hc2ssIE1hc2ssIHByb3AsIFByb3AsIHZhbHVlKQogCisjZGVmaW5lIEhB
TkRMRV9BTklNQVRJT05fSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCitpZiAoaXNJ
bmhlcml0KSB7IFwKKyAgICBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3NB
bmltYXRpb25zKCk7IFwKKyAgICBUcmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBcCisgICAgY29u
c3QgVHJhbnNpdGlvbiogY3VyclBhcmVudCA9IG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKTsg
XAorICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIGN1cnJQYXJlbnQtPmlzIyNQcm9wIyNTZXQoKSkg
eyBcCisgICAgICAgIGlmICghY3VyckNoaWxkKSB7IFwKKyAgICAgICAgICAgIC8qIE5lZWQgdG8g
bWFrZSBhIG5ldyB0cmFuc2l0aW9uLiovIFwKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBU
cmFuc2l0aW9uKCk7IFwKKyAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQp
OyBcCisgICAgICAgIH0gXAorICAgICAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChjdXJyUGFyZW50
LT5wcm9wKCkpOyBcCisgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAorICAgICAgICBj
dXJyQ2hpbGQgPSBwcmV2Q2hpbGQtPm5leHQoKTsgXAorICAgICAgICBjdXJyUGFyZW50ID0gY3Vy
clBhcmVudC0+bmV4dCgpOyBcCisgICAgfSBcCisgICAgXAorICAgIHdoaWxlIChjdXJyQ2hpbGQp
IHsgXAorICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBo
YXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJv
cCgpOyBcCisgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCisgICAgfSBc
CisgICAgcmV0dXJuOyBcCit9IFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIFRyYW5zaXRpb24q
IGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc0FuaW1hdGlvbnMoKTsgXAorICAgIGN1cnJDaGls
ZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uIyNQcm9wKCkpOyBcCisg
ICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAorICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9w
KCk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVF
KHByb3AsIFByb3AsIHZhbHVlKSB7IFwKK0hBTkRMRV9BTklNQVRJT05fSU5IRVJJVF9BTkRfSU5J
VElBTChwcm9wLCBQcm9wKSBcCitUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nl
c3NBbmltYXRpb25zKCk7IFwKK1RyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKK2lmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCisgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQg
aW50byBhIHRyYW5zaXRpb24sIGNyZWF0aW5nIG5ldyB0cmFuc2l0aW9ucyBhcyBuZWVkZWQuICov
IFwKKyAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlKTsgXAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0
LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAorICAgICAg
ICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgdHJhbnNpdGlvbiB0byBob2xkIHRoaXMgdmFsdWUgKi8g
XAorICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCisgICAgICAgIHByZXZD
aGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCisgICAgICAgIH0gXAorICAgICAgICBtYXBBbmlt
YXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW0oaSkpOyBcCisgICAgICAgIHBy
ZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAorICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5l
eHQoKTsgXAorICAgIH0gXAorfSBlbHNlIHsgXAorICAgIG1hcEFuaW1hdGlvbiMjUHJvcChjdXJy
Q2hpbGQsIHZhbHVlKTsgXAorICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCit9
IFwKK3doaWxlIChjdXJyQ2hpbGQpIHsgXAorICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgdHJh
bnNpdGlvbnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8gXAorICAgIGN1cnJDaGls
ZC0+Y2xlYXIjI1Byb3AoKTsgXAorICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBc
Cit9IH0KKwogI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHBy
b3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAogICAgIFRyYW5zaXRpb24qIGN1cnJDaGls
ZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKQEAgLTE4OSw3ICsyNTAsNyBAQCBp
ZiAoaXNJbmhlcml0KSB7IFwKICAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyUGFyZW50ID0gbV9w
YXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKTsgXAogICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIGN1
cnJQYXJlbnQtPmlzIyNQcm9wIyNTZXQoKSkgeyBcCiAgICAgICAgIGlmICghY3VyckNoaWxkKSB7
IFwKLSAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllci4qLyBcCisgICAgICAg
ICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgdHJhbnNpdGlvbi4qLyBcCiAgICAgICAgICAgICBj
dXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCiAgICAgICAgICAgICBwcmV2Q2hpbGQtPnNl
dE5leHQoY3VyckNoaWxkKTsgXAogICAgICAgICB9IFwKQEAgLTIwMCw0MiArMjYxLDQzIEBAIGlm
IChpc0luaGVyaXQpIHsgXAogICAgIH0gXAogICAgIFwKICAgICB3aGlsZSAoY3VyckNoaWxkKSB7
IFwKLSAgICAgICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhl
IHByb3BlcnR5IHNldC4gKi8gXAorICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIHRyYW5z
aXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKICAgICAgICAgY3VyckNo
aWxkLT5jbGVhciMjUHJvcCgpOyBcCiAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4
dCgpOyBcCiAgICAgfSBcCi19IGVsc2UgaWYgKGlzSW5pdGlhbCkgeyBcCisgICAgcmV0dXJuOyBc
Cit9IFwKK2lmIChpc0luaXRpYWwpIHsgXAogICAgIFRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1f
c3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKLSAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChS
ZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb24jI1Byb3AoKSk7IFwKKyAgICBjdXJyQ2hpbGQt
PnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbiMjUHJvcCgpKTsgXAogICAg
IGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxk
ID0gY3VyckNoaWxkLT5uZXh0KCkpIFwKICAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgp
OyBcCisgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fVkFMVUUo
cHJvcCwgUHJvcCwgdmFsdWUpIHsgXAogSEFORExFX1RSQU5TSVRJT05fSU5IRVJJVF9BTkRfSU5J
VElBTChwcm9wLCBQcm9wKSBcCi1pZiAoaXNJbmhlcml0IHx8IGlzSW5pdGlhbCkgXAotICAgIHJl
dHVybjsgXAogVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlv
bnMoKTsgXAogVHJhbnNpdGlvbiogcHJldkNoaWxkID0gMDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7IFwKLSAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5
ZXIsIGNyZWF0aW5nIG5ldyBsYXllcnMgYXMgbmVlZGVkLiAqLyBcCisgICAgLyogV2FsayBlYWNo
IHZhbHVlIGFuZCBwdXQgaXQgaW50byBhIHRyYW5zaXRpb24sIGNyZWF0aW5nIG5ldyB0cmFuc2l0
aW9ucyBhcyBuZWVkZWQuICovIFwKICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRp
Y19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKICAgICAgICAgaWYgKCFjdXJy
Q2hpbGQpIHsgXAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyIHRvIGhv
bGQgdGhpcyB2YWx1ZSAqLyBcCi0gICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlv
bigpOyBcCi0gICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsgXAorICAg
ICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgdHJhbnNpdGlvbiB0byBob2xkIHRoaXMgdmFsdWUg
Ki8gXAorICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCisgICAgICAgIHBy
ZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBtYXBU
cmFuc2l0aW9uIyNQcm9wKGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKGkpKTsgXAorICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxp
c3QtPml0ZW0oaSkpOyBcCiAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAogICAgICAg
ICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogICAgIH0gXAogfSBlbHNlIHsgXAot
ICAgIG1hcFRyYW5zaXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBtYXBBbmlt
YXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hp
bGQtPm5leHQoKTsgXAogfSBcCiB3aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAgICAvKiBSZXNldCBh
bGwgcmVtYWluaW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisg
ICAgLyogUmVzZXQgYWxsIHJlbWFpbmluZyB0cmFuc2l0aW9ucyB0byBub3QgaGF2ZSB0aGUgcHJv
cGVydHkgc2V0LiAqLyBcCiAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCiAgICAgY3Vy
ckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKIH0gfQpAQCAtMzczLDYgKzQzNSw0NyBAQCBD
U1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0
cmluZyYgdXNlclN0eWxlU2hlZXQsCiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVT
aGVldHMtPml0ZW0oaSk7CiAgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYg
IXNoZWV0LT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0
aGlzKTsKKworICAgICAgICAgICAgLy8gYWRkIHRoZSBrZXlmcmFtZSBydWxlcworICAgICAgICAg
ICAgaW50IGxlbiA9IHNoZWV0LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHNo
ZWV0LT5pdGVtKGkpOworICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0tleWZyYW1lc1J1bGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiByID0gc3Rh
dGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgICAg
ICAgICBhZGRLZXlmcmFtZVN0eWxlKGRvYywgcik7CisgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICB9Cit9CisKKy8vIHRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRp
bmcgZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0eWxlcwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
ZGRLZXlmcmFtZVN0eWxlKERvY3VtZW50KiBkb2MsIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHJ1
bGUpCit7CisgICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsKKyAgICBLZXlmcmFtZUxp
c3QqIGxpc3Q7CisgICAgaWYgKG1fa2V5ZnJhbWVSdWxlTWFwLmNvbnRhaW5zKHMuaW1wbCgpKSkK
KyAgICAgICAgbGlzdCA9IG1fa2V5ZnJhbWVSdWxlTWFwLmdldChzLmltcGwoKSkuZ2V0KCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGxpc3QgPSBuZXcgS2V5ZnJhbWVMaXN0KHMpOworICAgICAgICBt
X2tleWZyYW1lUnVsZU1hcC5hZGQocy5pbXBsKCksIGxpc3QpOworICAgIH0KKyAgICBsaXN0LT5j
bGVhcigpOworICAgICAgICAgICAgICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUq
IGtmID0gcnVsZS0+aXRlbShpKTsKKyAgICAgICAgbV9zdHlsZSA9IG5ldyAoZG9jLT5yZW5kZXJB
cmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgICAgICBtX3N0eWxlLT5yZWYoKTsKKyAgICAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBrZi0+c3R5bGUoKTsKKyAgICAgICAg
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKKyAgICAg
ICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQg
PSBkZWNsLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
IGNvbnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gKml0OworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICBsaXN0LT5h
ZGRQcm9wZXJ0eShjdXJyZW50LmlkKCkpOworICAgICAgICB9CisgICAgICAgIGxpc3QtPmluc2Vy
dChrZi0+a2V5KCksICptX3N0eWxlKTsKKyAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZG9jLT5yZW5k
ZXJBcmVuYSgpKTsKKyAgICAgICAgbV9zdHlsZSA9IDA7CiAgICAgfQogfQogCkBAIC0zOTMsNiAr
NDk2LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQogICAgIGRlbGV0
ZSBtX2F1dGhvclN0eWxlOwogICAgIGRlbGV0ZSBtX3VzZXJTdHlsZTsKICAgICBkZWxldGVBbGxW
YWx1ZXMobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzKTsKKyAgICBtX2tleWZy
YW1lUnVsZU1hcC5jbGVhcigpOwogfQogCiBzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNo
ZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUpCkBAIC04NTMsNyArOTU3
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9k
ZSogbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPmlzQ2hlY2tlZCgpICE9IG1f
ZWxlbWVudC0+aXNDaGVja2VkKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpKQorICAgICAg
ICAgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBib29sIGNsYXNzZXNN
YXRjaCA9IHRydWU7CkBAIC0xMzA5LDcgKzE0MTMsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCAqZSkKICAgICBz
dHlsZS0+YWRqdXN0QmFja2dyb3VuZExheWVycygpOwogICAgIHN0eWxlLT5hZGp1c3RNYXNrTGF5
ZXJzKCk7CiAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdHJhbnNpdGlvbnMuCisgICAgLy8gRG8g
dGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zLgorICAgIHN0eWxlLT5hZGp1
c3RBbmltYXRpb25zKCk7CiAgICAgc3R5bGUtPmFkanVzdFRyYW5zaXRpb25zKCk7CiAKICAgICAv
LyBJbXBvcnRhbnQ6IEludHJpbnNpYyBtYXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZv
cmUgdGhlIHRoZW1lIGhhcyBhZGp1c3RlZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxs
CkBAIC00NzI5LDI0ICs0ODM0LDUxIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNm
b3JtT3JpZ2luWShsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb246CisgICAgICAgIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBt
X3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQor
ICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMobV9wYXJlbnRTdHlsZS0+YW5p
bWF0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EZWxheToKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkZWxheSwgRGVs
YXksIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvbkRpcmVjdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkaXJlY3Rp
b24sIERpcmVjdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFM
VUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICAgICAgSEFORExF
X0FOSU1BVElPTl9WQUxVRShpdGVyYXRpb25Db3VudCwgSXRlcmF0aW9uQ291bnQsIHZhbHVlKQor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6
CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUobmFtZSwgTmFtZSwgdmFsdWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRl
OgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKHBsYXlTdGF0ZSwgUGxheVN0YXRlLCB2
YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25UaW1pbmdGdW5jdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRSh0aW1pbmdG
dW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCiAg
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYg
KGlzSW5oZXJpdCkKICAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3Bh
cmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6CisgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9O
X1ZBTFVFKGRlbGF5LCBEZWxheSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgogICAgICAgICBIQU5ETEVfVFJBTlNJ
VElPTl9WQUxVRShkdXJhdGlvbiwgRHVyYXRpb24sIHZhbHVlKQogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRDb3VudDoKLSAgICAgICAg
SEFORExFX1RSQU5TSVRJT05fVkFMVUUocmVwZWF0Q291bnQsIFJlcGVhdENvdW50LCB2YWx1ZSkK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgorICAgICAgICBI
QU5ETEVfVFJBTlNJVElPTl9WQUxVRShwcm9wZXJ0eSwgUHJvcGVydHksIHZhbHVlKQogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodGltaW5nRnVuY3Rpb24sIFRp
bWluZ0Z1bmN0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZB
TFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250U3RyZXRjaDoKQEAgLTQ5ODcsMTAgKzUxMTksMzkgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSog
dmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRlbGF5KFRyYW5zaXRp
b24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1Zh
bHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9u
LT5zZXREdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigpKTsK
KyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRp
b25EZWxheSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykK
KyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGVsYXkoMCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUykKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5n
ZXRGbG9hdFZhbHVlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5z
ZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOworICAgIH0K
K30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EaXJlY3Rpb24oVHJhbnNp
dGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVl
VHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBsYXllci0+c2V0RGly
ZWN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgbGF5ZXItPnNl
dERpcmVjdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsdGVybmF0
ZSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRHVyYXRpb24oVHJh
bnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+
Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIHRyYW5z
aXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24o
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ5OTksMTUgKzUxNjAsMTYgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbiogdHJh
bnNpdGlvbiwgQ1NTVmFsdWUqIHYKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UykKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oaW50KDEwMDAqcHJpbWl0aXZlVmFs
dWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihw
cmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAg
ICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRW
YWx1ZSgpKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVl
LT5nZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwVHJhbnNpdGlvblJlcGVhdENvdW50KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVl
KiB2YWx1ZSkKKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25JdGVyYXRpb25D
b3VudChUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYg
KHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0
aW9uUmVwZWF0Q291bnQoKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldEl0ZXJhdGlvbkNvdW50
KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTUwMTYsMTggKzUxNzgsNjMgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwg
Q1NTVmFsdWUKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRSZXBlYXRDb3VudCgtMSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldEl0ZXJhdGlvbkNvdW50
KC0xKTsKICAgICBlbHNlCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KGludChw
cmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNl
dEl0ZXJhdGlvbkNvdW50KGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7Cit9
CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uTmFtZShUcmFuc2l0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkg
PT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGxheWVyLT5zZXROYW1lKFJlbmRl
clN0eWxlOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIAorICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgbGF5ZXItPnNldElzTm9uZUFu
aW1hdGlvbih0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsYXllci0+c2V0TmFtZShwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgCisgICAgICAgIC8vIHJlc29sdmUg
dG8gdGhlIGtleWZyYW1lcworICAgICAgICBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9
IGZpbmRLZXlmcmFtZVJ1bGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAg
ICAgICBsYXllci0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAgIH0KIH0KIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oVHJhbnNp
dGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBBbmltYXRpb25QbGF5U3RhdGUoVHJhbnNpdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5J
VElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHls
ZTo6aW5pdGlhbFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgbGF5ZXItPnNl
dFBsYXlTdGF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVy
LT5zZXRQbGF5U3RhdGUoKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1
c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZyk7Cit9CisK
K3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uUHJvcGVydHkoVHJhbnNpdGlvbiog
dHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVU
eXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIHRyYW5zaXRpb24tPnNl
dFByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIHRyYW5zaXRp
b24tPnNldFByb3BlcnR5KHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9u
VGltaW5nRnVuY3Rpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFM
KSB7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjpp
bml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKQEAgLTUwNDksMjcgKzUyNTYsMTMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmEKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAgICAgaWYgKHZhbHVlLT5p
c1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKICAgICAgICAgQ1NTVGltaW5nRnVu
Y3Rpb25WYWx1ZSogdGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NUaW1pbmdGdW5jdGlv
blZhbHVlKj4odmFsdWUpOwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihU
aW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCB0aW1pbmdGdW5jdGlvbi0+
eDEoKSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRpbWluZ0Z1bmN0aW9uLT54MigpLCB0aW1pbmdG
dW5jdGlvbi0+eTIoKSkpOwogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBU
cmFuc2l0aW9uUHJvcGVydHkoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklU
SUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0
aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKLSAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSk7Ci19Ci0KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBp
ZWNlSW1hZ2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAg
Ly8gSWYgd2UncmUgYSBwcmltaXRpdmUgdmFsdWUsIHRoZW4gd2UgYXJlICJub25lIiBhbmQgZG9u
J3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oCmluZGV4IDAwYjllNjguLjY5OGM5OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTYw
LDYgKzYwLDcgQEAgY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBT
dHlsZVNoZWV0TGlzdDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CitjbGFzcyBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlOwogCiBjbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IHsKIHB1YmxpYzoKQEAgLTEzMCwx
MCArMTMxLDIzIEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5n
ZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7IH0KICAgICAgICAgdm9p
ZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKHVuc2lnbmVkIHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52
aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQotICAgICAgICAKKwogICAgICAgICB2
b2lkIGFkZFZhcmlhYmxlcyhDU1NWYXJpYWJsZXNSdWxlKiB2YXJpYWJsZXMpOwogICAgICAgICBD
U1NWYWx1ZSogcmVzb2x2ZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZSopOwogCisgICAgICAgIEtleWZyYW1lTGlzdCogZmluZEtleWZyYW1lUnVsZShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQXRvbWljU3RyaW5nIHMobmFtZSk7CisgICAgICAgICAgICBpZiAoIW1fa2V5ZnJhbWVS
dWxlTWFwLmNvbnRhaW5zKHMuaW1wbCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHJldHVybiBtX2tleWZyYW1lUnVsZU1hcC5maW5kKHMuaW1wbCgpKS5nZXQoKS0+
c2Vjb25kLmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxl
KERvY3VtZW50KiBkb2MsIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHJ1bGUpOworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxl
Y3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKIApAQCAtMTYyLDYg
KzE3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CiAg
ICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogCisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lTGlzdD4gPiBLZXlmcmFtZVJ1bGVN
YXA7CisgICAgICAgIEtleWZyYW1lUnVsZU1hcCBtX2tleWZyYW1lUnVsZU1hcDsKKwogICAgIHB1
YmxpYzoKICAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgp
IHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIApAQCAtMjA0LDEwICsyMjEsMTQg
QEAgcHVibGljOgogICAgICAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKICAgICAgICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciosIENTU1Zh
bHVlKik7CiAKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbios
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvblJlcGVhdENvdW50KFRyYW5z
aXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9u
UHJvcGVydHkoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uRGVsYXkoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uRGlyZWN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFu
aW1hdGlvbkR1cmF0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1h
cEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAg
ICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAg
IHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAg
ICAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NW
YWx1ZSopOwogCiAgICAgICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqLCBOaW5l
UGllY2VJbWFnZSYpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRz
LmluIGIvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgppbmRleCAzY2JmYjg1Li5jYzY0
NTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCisrKyBiL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KQEAgLTU2Myw3ICs1NjMsMzAgQEAgdmlzdWFs
CiBsaW5lcwogCiAjCisjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9ERUxBWQorIyBDU1Nf
UFJPUF9fV0VCS0lUX0FOSU1BVElPTl9ERUxBWQorIworbm93CisKKyMKKyMgQ1NTX1BST1BfX1dF
QktJVF9BTklNQVRJT05fRElSRUNUSU9OCisjCisjIGFsdGVybmF0ZQorCisjCisjIENTU19QUk9Q
X19XRUJLSVRfQU5JTUFUSU9OX0lURVJBVElPTl9DT1VOVAorIworIyBpbmZpbml0ZQorCisjCisj
IENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX1BMQVlfU1RBVEUKKyMKK3J1bm5pbmcKK3BhdXNl
ZAorCisjCiAjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT04KKyMg
Q1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBlYXNlCiBsaW5l
YXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5oIGIvV2ViQ29yZS9jc3MvU3R5
bGVCYXNlLmgKaW5kZXggMWYxM2I1My4uZGU1ZDA1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3Mv
U3R5bGVCYXNlLmgKKysrIGIvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKQEAgLTUwLDYgKzUwLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyc2V0UnVs
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRGYWNlUnVs
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9ydFJ1bGUo
KSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1bGUo
KSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZXNSdWxl
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGVzUnVsZSgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlNmViMQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKQEAgLTAs
MCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKworI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQorICAgIDog
Q1NTUnVsZShwYXJlbnQpCisgICAgLCBtX2tleSgwKQoreworfQorCitXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU6On5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKQoreworICAgIGlmIChtX3N0eWxlKQorICAg
ICAgICBtX3N0eWxlLT5zZXRQYXJlbnQoMCk7Cit9CisKK1N0cmluZyBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU6OmtleVRleHQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihtX2tl
eSkgKyAiJSI7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzZXRLZXlUZXh0KGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBtX2tleSA9IGtleVN0cmluZ1RvRmxvYXQocyk7Cit9CisK
K1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSBjb25zdAoreworICAgIFN0
cmluZyByZXN1bHQgPSBTdHJpbmc6Om51bWJlcihtX2tleSk7CisKKyAgICByZXN1bHQgKz0gIiUg
eyAiOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0ICs9ICJ9
IjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypzdHJpY3QqLykK
K3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fc3R5bGUgPSBzdHlsZTsKKyAgICBtX3N0eWxlLT5z
ZXRQYXJlbnQocGFyZW50KCkpOworfQorCisvKiBzdGF0aWMgKi8KK2Zsb2F0IFdlYktpdENTU0tl
eWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgZmxv
YXQga2V5ID0gMDsKKyAgICAKKyAgICAvLyBmb3Igbm93IHRoZSBzeW50YXggTVVTVCBiZSAneHh4
JScgb3IgJ2Zyb20nIG9yICd0bycsIHdoZXJlIHh4eCBpcyBhIGxlZ2FsIGZsb2F0aW5nIHBvaW50
IG51bWJlcgorICAgIGlmIChzID09ICJmcm9tIikKKyAgICAgICAga2V5ID0gMDsKKyAgICBlbHNl
IGlmIChzID09ICJ0byIpCisgICAgICAgIGtleSA9IDEwMDsKKyAgICBlbHNlIHsKKyAgICAgICAg
aWYgKHMuZW5kc1dpdGgoIiUiKSkgeworICAgICAgICAgICAgZmxvYXQgayA9IHMuc3Vic3RyaW5n
KDAsIHMubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCk7CisgICAgICAgICAgICBpZiAoayA+PSAwICYm
IGsgPD0gMTAwKQorICAgICAgICAgICAgICAgIGtleSA9IGs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGtleTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggYi9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMWVjNzAzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlX2gKKyNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gKKworI2lu
Y2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3Mg
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIDogcHVibGljIENTU1J1bGUgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKDApKTsKKyAg
ICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBjcmVhdGUo
Q1NTU3R5bGVTaGVldCogcGFyZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUocGFyZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1
bGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NSdWxlCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gV0VCS0lUX0tF
WUZSQU1FX1JVTEU7IH0KKworICAgIFN0cmluZyBrZXlUZXh0KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRLZXlUZXh0KGNvbnN0IFN0cmluZyYgcyk7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisKKyAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisKKyAgICAvLyBOb3QgcGFydCBvZiB0aGUgQ1NT
T00KKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZh
bHNlKTsKKyAgICAKKyAgICBmbG9hdCBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS8xMDA7IH0K
KyAgICBmbG9hdCBrZXlBc1BlcmNlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAg
dm9pZCBzZXRLZXkoZmxvYXQgaykgeyBtX2tleSA9IGs7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0
aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKworICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgICAgICAgIGRlY2xhcmF0aW9uKCkgICAgICAgeyByZXR1
cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiAgIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIAor
ICAgIHN0YXRpYyBmbG9hdCBrZXlTdHJpbmdUb0Zsb2F0KGNvbnN0IFN0cmluZyYgcyk7CisgCitw
cml2YXRlOgorICAgIFdlYktpdENTU0tleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQp
OworCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAg
IGZsb2F0IG1fa2V5OyAgICAgICAgLy8gMCB0byAxMDAKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdlYktpdENTU0tleWZyYW1lUnVsZV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFkMWQxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlLmNwcApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIldlYktpdENTU0tl
eWZyYW1lc1J1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNs
dWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKKyAgICA6IENTU1J1bGUocGFyZW50KQorICAgICwg
bV9sc3RDU1NSdWxlcyhDU1NSdWxlTGlzdDo6Y3JlYXRlKCkpCit7Cit9CisKK1dlYktpdENTU0tl
eWZyYW1lc1J1bGU6On5XZWJLaXRDU1NLZXlmcmFtZXNSdWxlKCkKK3sKKyAgICBpbnQgbGVuZ3Ro
ID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
CisgICAgICAgIG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPnNldFBhcmVudCgwKTsKK30KKworU3Ry
aW5nIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBt
X25hbWU7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIC8qZWMqLykKK3sKKyAgICBtX25hbWUgPSBuYW1l
OworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OnNldE5hbWUoU3RyaW5nIG5hbWUp
Cit7CisgICAgbV9uYW1lID0gbmFtZTsKK30KKwordW5zaWduZWQgV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy5nZXQoKS0+
bGVuZ3RoKCk7Cit9CisKK1dlYktpdENTU0tleWZyYW1lUnVsZSogV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBDU1NSdWxlKiBydWxlID0gbV9sc3RD
U1NSdWxlcy5nZXQoKS0+aXRlbShpbmRleCk7CisgICAgcmV0dXJuIChydWxlICYmIHJ1bGUtPmlz
S2V5ZnJhbWVSdWxlKCkpID8gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4ocnVs
ZSkgOiAwOworfQorCitjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIFdlYktpdENTU0tleWZy
YW1lc1J1bGU6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQ1NTUnVsZSogcnVs
ZSA9IG1fbHN0Q1NTUnVsZXMuZ2V0KCktPml0ZW0oaW5kZXgpOworICAgIHJldHVybiAocnVsZSAm
JiBydWxlLT5pc0tleWZyYW1lUnVsZSgpKSA/IHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU0tl
eWZyYW1lUnVsZSo+KHJ1bGUpIDogMDsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
OjppbnNlcnQoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBydWxlKQoreworICAgIGZsb2F0IGtleSA9
IHJ1bGUtPmtleUFzUGVyY2VudCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVyY2VudCgpID09IGtl
eSkgeworICAgICAgICAgICAgbV9sc3RDU1NSdWxlcy5nZXQoKS0+ZGVsZXRlUnVsZShpKTsKKyAg
ICAgICAgICAgIG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmluc2VydFJ1bGUocnVsZSwgaSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVy
Y2VudCgpID4ga2V5KSB7CisgICAgICAgICAgICAvLyBpbnNlcnQgYmVmb3JlCisgICAgICAgICAg
ICBtX2xzdENTU1J1bGVzLmdldCgpLT5pbnNlcnRSdWxlKHJ1bGUsIGkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGFwcGVuZAorICAgIG1fbHN0
Q1NTUnVsZXMuZ2V0KCktPmFwcGVuZChydWxlKTsKKyAgICBzdHlsZXNoZWV0KCktPnN0eWxlU2hl
ZXRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6aW5zZXJ0UnVs
ZShjb25zdCBTdHJpbmcmIHJ1bGUpCit7CisgICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0UGFyc2lu
ZygpKTsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gbmV3UnVsZSA9IHAucGFyc2VLZXlmcmFtZVJ1bGUo
cGFyZW50U3R5bGVTaGVldCgpLCBydWxlKTsKKyAgICBpZiAobmV3UnVsZS5nZXQoKSAmJiBuZXdS
dWxlLmdldCgpLT5pc0tleWZyYW1lUnVsZSgpKQorICAgICAgICBpbnNlcnQoc3RhdGljX2Nhc3Q8
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4obmV3UnVsZS5nZXQoKSkpOworfQorCit2b2lkIFdlYktp
dENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUoY29uc3QgU3RyaW5nJiBzKQoreworICAgIGZs
b2F0IGtleSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChzKTsKKyAg
ICBpbnQgaSA9IGZpbmRSdWxlSW5kZXgoa2V5KTsKKyAgICBpZiAoaSA+PSAwKSB7CisgICAgICAg
IG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmRlbGV0ZVJ1bGUoaSk7CisgICAgICAgIHN0eWxlc2hlZXQo
KS0+c3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICB9Cit9CisKK1dlYktpdENTU0tleWZyYW1lUnVs
ZSogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6ZmluZFJ1bGUoY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIGZsb2F0IGtleSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChz
KTsKKyAgICBpbnQgaSA9IGZpbmRSdWxlSW5kZXgoa2V5KTsKKyAgICByZXR1cm4gKGkgPj0gMCkg
PyBpdGVtKGkpIDogMDsKK30KKworaW50IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmZpbmRSdWxl
SW5kZXgoZmxvYXQga2V5KSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtKGkpLT5rZXlBc1BlcmNlbnQoKSA9PSBr
ZXkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisK
K1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBT
dHJpbmcgcmVzdWx0ID0gIkAtd2Via2l0LWtleWZyYW1lcyAiOworICAgIHJlc3VsdCArPSBtX25h
bWU7CisgICAgcmVzdWx0ICs9ICIgeyBcbiI7CisKKyAgICBpZiAobV9sc3RDU1NSdWxlcykgewor
ICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gIiAgIjsKKyAgICAgICAgICAgIHJlc3VsdCArPSBtX2xzdENTU1J1bGVzLT5pdGVtKGkpLT5j
c3NUZXh0KCk7CisgICAgICAgICAgICByZXN1bHQgKz0gIlxuIjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJlc3VsdCArPSAifSI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZS5oIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZV9oCisjZGVmaW5lIFdlYktp
dENTU0tleWZyYW1lc1J1bGVfaAorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lUnVsZTsK
K2NsYXNzIFN0cmluZzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKDApKTsKKyAg
ICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gY3JlYXRl
KENTU1N0eWxlU2hlZXQqIHBhcmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShwYXJlbnQpKTsKKyAgICB9CisKKyAgICB+V2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSgpOworCisgICAgdmlydHVhbCBib29sIGlzS2V5ZnJhbWVzUnVsZSgp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1bGUKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBXRUJLSVRfS0VZRlJB
TUVTX1JVTEU7IH0KKworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1l
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsgICAgCisgICAgdm9pZCBzZXROYW1lKFN0
cmluZyk7ICAgIAorCisgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RD
U1NSdWxlcy5nZXQoKTsgfQorCisgICAgdm9pZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVs
ZSk7CisgICAgdm9pZCBkZWxldGVSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUqIGZpbmRSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKworICAgIC8qIG5vdCBwYXJ0IG9mIHRoZSBET00g
Ki8KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUqICAgICAgICBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUqICBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2b2lkIGluc2VydChX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIHJ1bGUpOworCitwcml2YXRlOgorICAgIFdlYktpdENTU0tl
eWZyYW1lc1J1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KTsKKworICAgIGludCBmaW5kUnVsZUlu
ZGV4KGZsb2F0IGtleSkgY29uc3Q7CisgICAgCisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xz
dENTU1J1bGVzOworICAgIFN0cmluZyBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlX2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmNwcAppbmRleCA1NzY0OTZhLi5hNmU3MWNkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQotICAgIDogQ1NTVmFsdWVMaXN0KGZh
bHNlKQorICAgIDogQ1NTVmFsdWVMaXN0KHRydWUpCiAgICAgLCBtX3R5cGUob3ApCiB7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleCBiL1dlYkNvcmUvY3NzL3Rva2Vu
aXplci5mbGV4CmluZGV4IGNiMTZkOTUuLjc3ODJlZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L3Rva2VuaXplci5mbGV4CisrKyBiL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4CkBAIC02MSw2
ICs2MSw3IEBAIG50aCAgICAgICAgICAgICAoLT9bMC05XSpuW1wrLV1bMC05XSspfCgtP1swLTld
Km4pCiAiQC13ZWJraXQtbWVkaWFxdWVyeSIgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5VG9rID0g
V0VCS0lUX01FRElBUVVFUllfU1lNOyByZXR1cm4geXlUb2s7IH0KICJALXdlYmtpdC12YXJpYWJs
ZXMiICAgIHt5eVRvayA9IFdFQktJVF9WQVJJQUJMRVNfU1lNOyByZXR1cm4geXlUb2s7IH0KICJA
LXdlYmtpdC12YXJpYWJsZXMtZGVjbHMiIHsgeXlUb2sgPSBXRUJLSVRfVkFSSUFCTEVTX0RFQ0xT
X1NZTTsgcmV0dXJuIHl5VG9rOyB9CisiQC13ZWJraXQta2V5ZnJhbWVzIiAgICB7eXlUb2sgPSBX
RUJLSVRfS0VZRlJBTUVTX1NZTTsgcmV0dXJuIHl5VG9rOyB9CiAKICJAIntpZGVudH0gICAgICAg
ICAgICAgIHt5eVRvayA9IEFUS0VZV09SRDsgcmV0dXJuIHl5VG9rOyB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRl
eCA1NWY1NjQzLi4wNWE3ZGIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ0RB
VEFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCkBAIC0yOTcsNiArMjk4LDcgQEAg
RG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogI2lmIFVTRShM
T1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgLCBtX2luTG93QmFuZHdpZHRoRGlzcGxheShmYWxz
ZSkKICNlbmRpZgorICAgICwgbV9sb2FkQ29tcGxldGUoZmFsc2UpCiB7CiAgICAgbV9kb2N1bWVu
dC5yZXNldFNraXBwaW5nUmVmKHRoaXMpOwogCkBAIC0xMTY2LDYgKzExNjgsMTAgQEAgdm9pZCBE
b2N1bWVudDo6dXBkYXRlUmVuZGVyaW5nKCkKIHsKICAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkp
CiAgICAgICAgIHJlY2FsY1N0eWxlKE5vQ2hhbmdlKTsKKyAgICAKKyAgICAvLyB0ZWxsIHRoZSBh
bmltYXRpb24gY29udHJvbGxlciB0aGF0IHRoZSBzdHlsZSBpcyBhdmFpbGFibGUgYW5kIGl0IGNh
biBzdGFydCBhbmltYXRpb25zCisgICAgaWYgKG1fZnJhbWUpCisgICAgICAgIG1fZnJhbWUtPmFu
aW1hdGlvbigpLT5zdHlsZUF2YWlsYWJsZSgpOwogfQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVE
b2N1bWVudHNSZW5kZXJpbmcoKQpAQCAtMTU0Nyw2ICsxNTUzLDggQEAgdm9pZCBEb2N1bWVudDo6
aW1wbGljaXRDbG9zZSgpCiAgICAgaWYgKGYpCiAgICAgICAgIGYtPmxvYWRlcigpLT5zdGFydElj
b25Mb2FkZXIoKTsKIAorICAgIG1fbG9hZENvbXBsZXRlID0gdHJ1ZTsKKwogICAgIGRpc3BhdGNo
SW1hZ2VMb2FkRXZlbnRzTm93KCk7CiAgICAgdGhpcy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChsb2Fk
RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGYpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwMzRjMTFhLi45YjI5
NjZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKQEAgLTc1MSw2ICs3NTEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVG
b2N1c0FwcGVhcmFuY2VTb29uKCk7CiAgICAgdm9pZCBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRh
dGUoKTsKICAgICAKKyAgICAvLyBmb3IgYW5pbWF0aW9ucyB0byBrbm93IHdoZXRoZXIgdGhleSBj
YW4gcnVuIHlldCBvciBub3QKKyAgICBib29sIGxvYWRDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9hZENvbXBsZXRlOyB9CisgICAgCiAgICAgLy8gRkYgbWV0aG9kIGZvciBhY2Nlc3Npbmcg
dGhlIHNlbGVjdGlvbiBhZGRlZCBmb3IgY29tcGF0YWJpbGl0eS4KICAgICBET01TZWxlY3Rpb24q
IGdldFNlbGVjdGlvbigpIGNvbnN0OwogICAgIApAQCAtMTA0Niw2ICsxMDQ5LDggQEAgcHJpdmF0
ZToKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgIGJvb2wgbV9pbkxvd0JhbmR3
aWR0aERpc3BsYXk7CiAjZW5kaWYKKworICAgIGJvb2wgbV9sb2FkQ29tcGxldGU7ICAgIC8vIGZv
ciBhbmltYXRpb25zIHRvIGtub3cgd2hldGhlciBvciBub3QgdGhleSBjYW4gcnVuIHlldAogfTsK
IAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1w
bCogaWQpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDNiYWRlY2YuLmZkMjA0NzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC03
ODQsOSArNzg0LDkgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCiAgICAgICAgICAgICAgICAgbmV3U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVj
dEFkamFjZW50UnVsZXMoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjaCAhPSBOb0NoYW5n
ZSkKKyAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlKSB7CiAgICAgICAgICAgICBzZXRSZW5kZXJT
dHlsZShuZXdTdHlsZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoYW5nZWQoKSAmJiAoZG9jdW1lbnQo
KS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMo
KSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VkKCkgJiYgKHN0eWxlQ2hhbmdlVHlwZSgp
ICE9IEFuaW1hdGlvblN0eWxlQ2hhbmdlKSAmJiAoZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxl
cygpIHx8IGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSkpIHsKICAgICAgICAgICAg
IC8vIEFsdGhvdWdoIG5vIGNoYW5nZSBvY2N1cnJlZCwgd2UgdXNlIHRoZSBuZXcgc3R5bGUgc28g
dGhhdCB0aGUgY291c2luIHN0eWxlIHNoYXJpbmcgY29kZSB3b24ndCBnZXQKICAgICAgICAgICAg
IC8vIGZvb2xlZCBpbnRvIGJlbGlldmluZyB0aGlzIHN0eWxlIGlzIHRoZSBzYW1lLiAgVGhpcyBp
cyBvbmx5IG5lY2Vzc2FyeSBpZiB0aGUgZG9jdW1lbnQgYWN0dWFsbHkgdXNlcwogICAgICAgICAg
ICAgLy8gc2libGluZy9kZXNjZW5kYW50IHJ1bGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgaXNuJ3Qg
cG9zc2libGUgZm9yIGFuY2VzdG9yIHN0eWxlcyB0byBhZmZlY3Qgc2hhcmluZyBvZgpAQCAtNzk1
LDEyICs3OTUsMTMgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGVJbnRlcm5hbChuZXdTdHls
ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0UmVuZGVyU3R5bGUobmV3
U3R5bGUpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkg
PT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpCisgICAgICAgICAgICAgc2V0UmVuZGVyU3R5bGUobmV3
U3R5bGUpOwogCiAgICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVu
YSgpKTsKIAogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKSB7Ci0gICAgICAgICAgICBpZiAo
KGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBoYXNQb3NpdGlvbmFsUnVsZXMp
ICYmIHN0eWxlQ2hhbmdlVHlwZSgpID09IEZ1bGxTdHlsZUNoYW5nZSkKKyAgICAgICAgICAgIGlm
ICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bvc2l0aW9uYWxSdWxl
cykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQogICAgICAgICAgICAg
ICAgIGNoYW5nZSA9IEZvcmNlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNo
YW5nZSA9IGNoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIvV2ViQ29y
ZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDg3MmM2Y2YuLmQyODk4MjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAg
LTExOSw2ICsxMTksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZlbnROYW1l
cyB7CiAgICAgbWFjcm8ocHJvZ3Jlc3MpIFwKICAgICBtYWNybyhzdGFsbGVkKSBcCiAgICAgXAor
ICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlvbkVuZCkgXAorICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlv
blN0YXJ0KSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uKSBcCisgICAgXAor
ICAgIG1hY3JvKHdlYmtpdFRyYW5zaXRpb25FbmQpIFwKKyAgICBcCiAvLyBlbmQgb2YgRE9NX0VW
RU5UX05BTUVTX0ZPUl9FQUNICiAKICNpZm5kZWYgRE9NX0VWRU5UX05BTUVTX0hJREVfR0xPQkFM
UwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAppbmRleCA1MmExYTU4Li4xZjA2OGNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgTm9k
ZTo6c2V0Q2hhbmdlZChTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKICAgICBpZiAoKGNoYW5n
ZVR5cGUgIT0gTm9TdHlsZUNoYW5nZSkgJiYgIWF0dGFjaGVkKCkpIC8vIGNoYW5nZWQgY29tcGFy
ZWQgdG8gd2hhdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCEoY2hhbmdlVHlwZSA9PSBJ
bmxpbmVTdHlsZUNoYW5nZSAmJiBtX3N0eWxlQ2hhbmdlID09IEZ1bGxTdHlsZUNoYW5nZSkpCisg
ICAgaWYgKCEoY2hhbmdlVHlwZSA9PSBJbmxpbmVTdHlsZUNoYW5nZSAmJiAobV9zdHlsZUNoYW5n
ZSA9PSBGdWxsU3R5bGVDaGFuZ2UgfHwgbV9zdHlsZUNoYW5nZSA9PSBBbmltYXRpb25TdHlsZUNo
YW5nZSkpKQogICAgICAgICBtX3N0eWxlQ2hhbmdlID0gY2hhbmdlVHlwZTsKIAogICAgIGlmICht
X3N0eWxlQ2hhbmdlICE9IE5vU3R5bGVDaGFuZ2UpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L05vZGUuaCBiL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA4MzBhYmY1Li5lZGZjNmM0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC02
MSw3ICs2MSw3IEBAIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKIAogdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKIAotZW51bSBTdHlsZUNoYW5nZVR5cGUgeyBOb1N0eWxlQ2hhbmdlLCBJbmxp
bmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hhbmdlIH07CitlbnVtIFN0eWxlQ2hhbmdlVHlwZSB7
IE5vU3R5bGVDaGFuZ2UsIElubGluZVN0eWxlQ2hhbmdlLCBGdWxsU3R5bGVDaGFuZ2UsIEFuaW1h
dGlvblN0eWxlQ2hhbmdlIH07CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPQ1VNRU5UX1BPU0lU
SU9OX0VRVUlWQUxFTlQgPSAweDAwOwogY29uc3QgdW5zaWduZWQgc2hvcnQgRE9DVU1FTlRfUE9T
SVRJT05fRElTQ09OTkVDVEVEID0gMHgwMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaGlzdG9yeS9D
YWNoZWRQYWdlLmNwcCBiL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAppbmRleCBlNWJk
M2MxLi45OGYzOTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAK
KysrIGIvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAg
dm9pZCBDYWNoZWRQYWdlOjpyZXN0b3JlKFBhZ2UqIHBhZ2UpCiAgICAgICAgIG1fZG9jdW1lbnQt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKICNlbmRpZgogCi0g
ICAgbWFpbkZyYW1lLT5hbmltYXRpb24oKS0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIG1haW5G
cmFtZS0+YW5pbWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnMobV9kb2N1bWVudC5nZXQoKSk7CiAK
ICAgICBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRNb3VzZVByZXNzTm9kZShtb3VzZVBy
ZXNzTm9kZSgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5k
ZXggMTY3N2ZiMi4uODk0MGEwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcApA
QCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKQEAgLTQzLDYgKzQ1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0
IGRvdWJsZSBjQW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDI1OwogCitzdGF0aWMgdm9pZCBzZXRD
aGFuZ2VkKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVu
dCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgbm9kZS0+c2V0
Q2hhbmdlZChBbmltYXRpb25TdHlsZUNoYW5nZSk7Cit9CisKIC8vIFRoZSBlcHNpbG9uIHZhbHVl
IHdlIHBhc3MgdG8gVW5pdEJlemllcjo6c29sdmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlz
IGdvaW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBhbmlt
YXRpb24sIHRoZSBtb3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24g
cmVzdWx0IHRvIGF2b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBkb3Vi
bGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1
cmF0aW9uKTsgfQpAQCAtNTUsMTM3ICs2Myw3NDMgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29s
dmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngK
ICAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwogfQog
Ci1jbGFzcyBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjsKKyNwcmFnbWEgbWFyayAtCiAKLWNs
YXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAg
ICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKik7Ci0gICAgfkltcGxpY2l0QW5p
bWF0aW9uKCk7CitjbGFzcyBDb21wb3NpdGVBbmltYXRpb247CitjbGFzcyBBbmltYXRpb25CYXNl
OwogCi0gICAgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiwgUmVuZGVy
T2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0
eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5bGUpOworY2xhc3MgQW5pbWF0aW9uVGltZXJC
YXNlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25UaW1lckJhc2UoQW5pbWF0aW9uQmFzZSogYW5p
bSkKKyAgICA6IG1fdGltZXIodGhpcywgJkFuaW1hdGlvblRpbWVyQmFzZTo6dGltZXJGaXJlZCkK
KyAgICAsIG1fYW5pbShhbmltKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3Qo
MCk7CisgICAgfQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQmFzZSgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQ9MCkKKyAgICB7Cisg
ICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHRpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNhbmNlbFRpbWVyKCkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJh
c2U+KikgPSAwOworICAgIAorcHJpdmF0ZToKKyAgICBUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+
IG1fdGltZXI7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQW5pbWF0aW9uQmFzZSogbV9hbmltOwor
fTsKIAotICAgIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGZyb20sIFJl
bmRlclN0eWxlKiB0byk7CitjbGFzcyBBbmltYXRpb25FdmVudERpc3BhdGNoZXIgOiBwdWJsaWMg
QW5pbWF0aW9uVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25FdmVudERpc3BhdGNo
ZXIoQW5pbWF0aW9uQmFzZSogYW5pbSkgCisgICAgOiBBbmltYXRpb25UaW1lckJhc2UoYW5pbSkK
KyAgICAsIG1fcHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICwgbV9yZXNldChmYWxz
ZSkKKyAgICAsIG1fZWxhcHNlZFRpbWUoLTEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIH5BbmltYXRpb25FdmVudERpc3BhdGNoZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdGFydFRpbWVyKEhUTUxFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGludCBwcm9wZXJ0eSwgYm9vbCByZXNldCwgCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCisgICAgewor
ICAgICAgICBtX2VsZW1lbnQgPSBlbGVtZW50OworICAgICAgICBtX25hbWUgPSBuYW1lOworICAg
ICAgICBtX3Byb3BlcnR5ID0gcHJvcGVydHk7CisgICAgICAgIG1fcmVzZXQgPSByZXNldDsKKyAg
ICAgICAgbV9ldmVudFR5cGUgPSBldmVudFR5cGU7CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBl
bGFwc2VkVGltZTsKKyAgICAgICAgQW5pbWF0aW9uVGltZXJCYXNlOjpzdGFydFRpbWVyKCk7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRp
bWVyQmFzZT4qKTsKICAgICAKLSAgICBkb3VibGUgcHJvZ3Jlc3MoKSBjb25zdDsKK3ByaXZhdGU6
CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgQXRvbWljU3RyaW5nIG1f
bmFtZTsKKyAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBib29sIG1fcmVzZXQ7CisgICAgQXRvbWlj
U3RyaW5nIG1fZXZlbnRUeXBlOworICAgIGRvdWJsZSBtX2VsYXBzZWRUaW1lOworfTsKIAotICAg
IGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KK2NsYXNzIEFuaW1h
dGlvblRpbWVyQ2FsbGJhY2sgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJCYXNlIHsKK3B1YmxpYzoK
KyAgICBBbmltYXRpb25UaW1lckNhbGxiYWNrKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAorICAgIDog
QW5pbWF0aW9uVGltZXJCYXNlKGFuaW0pCisgICAgLCBtX2VsYXBzZWRUaW1lKDApCisgICAgeyB9
CisgICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZXJDYWxsYmFjaygpIHsgfQorICAgIAorICAgIHZp
cnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKTsKICAgICAK
LSAgICBib29sIGZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9maW5pc2hlZDsgfQotICAgIHZv
aWQgc2V0RmluaXNoZWQoYm9vbCBmKSB7IG1fZmluaXNoZWQgPSBmOyB9CisgICAgdm9pZCBzdGFy
dFRpbWVyKGRvdWJsZSB0aW1lb3V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91
YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICAgICAgbV9ldmVudFR5cGUgPSBldmVudFR5cGU7
CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsKKyAgICAgICAgQW5pbWF0aW9u
VGltZXJCYXNlOjpzdGFydFRpbWVyKHRpbWVvdXQpOworICAgIH0KICAgICAKLSAgICBib29sIHN0
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFsZTsgfQotICAgIHZvaWQgc2V0U3RhbGUoKSB7IG1f
c3RhbGUgPSB0cnVlOyB9Citwcml2YXRlOgorICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsK
KyAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsKK307CisKKyNwcmFnbWEgbWFyayAtCisgICAgCitj
bGFzcyBJbXBsaWNpdEFuaW1hdGlvbjsKK2NsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OwogCisvLyBBIENvbXBvc2l0ZUFuaW1hdGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBh
bmltYXRpb25zIHRoYXQKKy8vIGFyZSBydW5uaW5nLCBzdWNoIGFzIGEgbnVtYmVyIG9mIHByb3Bl
cnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgorCitjbGFzcyBDb21wb3NpdGVBbmltYXRpb24g
OiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIENvbXBvc2l0ZUFuaW1hdGlvbihi
b29sIHN1c3BlbmRlZCwgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUqIGFuaW1hdGlvbkNvbnRy
b2xsZXIpCisgICAgOiBtX3N1c3BlbmRlZChzdXNwZW5kZWQpCisgICAgLCBtX2FuaW1hdGlvbkNv
bnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAsIG1fbnVtU3R5bGVBdmFpbGFibGVX
YWl0ZXJzKDApCisgICAgeyB9CisgICAgCisgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpCisgICAg
eworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV90cmFuc2l0aW9ucyk7CisgICAgfQorICAgIAor
ICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgdm9pZCBzZXRB
bmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZyk7CisgICAgYm9vbCBhbmltYXRpbmcoKTsKKyAgICAK
KyAgICBib29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zaXRpb25zLmNvbnRhaW5zKHByb3ApOyB9CisgICAgCisgICAgdm9pZCByZXNldFRy
YW5zaXRpb25zKFJlbmRlck9iamVjdCopOworICAgIHZvaWQgcmVzZXRBbmltYXRpb25zKFJlbmRl
ck9iamVjdCopOworICAgIAorICAgIHZvaWQgY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqKTsKKyAgICAKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgdm9p
ZCByZXN1bWVBbmltYXRpb25zKCk7CisgICAgYm9vbCBzdXNwZW5kZWQoKSBjb25zdCAgICAgIHsg
cmV0dXJuIG1fc3VzcGVuZGVkOyB9CisgICAgCisgICAgdm9pZCBvdmVycmlkZUltcGxpY2l0QW5p
bWF0aW9ucyhpbnQgcHJvcGVydHkpOworICAgIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0
QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpOworICAgIAorICAgIHZvaWQgc3R5bGVBdmFpbGFibGUo
KTsKKyAgICAKKyAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25z
dDsKKyAgICAKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRp
bmcpOworcHJvdGVjdGVkOgorICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKKyAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBh
cmUgYmxlbmRpbmcuCi0gICAgUmVuZGVyU3R5bGUqIG1fZnJvbVN0eWxlOwotICAgIFJlbmRlclN0
eWxlKiBtX3RvU3R5bGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRp
b24qPiBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOworICAgIAorICAgIENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXAgICBtX3RyYW5zaXRpb25zOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N1c3BlbmRlZDsKKyAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogbV9hbmlt
YXRpb25Db250cm9sbGVyOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBtX251bVN0
eWxlQXZhaWxhYmxlV2FpdGVyczsKK307CiAKLSAgICBpbnQgbV9wcm9wZXJ0eTsKLSAgICBUaW1p
bmdGdW5jdGlvbiBtX2Z1bmN0aW9uOwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOworI3ByYWdtYSBt
YXJrIC0KIAotICAgIGludCBtX3JlcGVhdENvdW50OworY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uQmFzZShjb25zdCBUcmFu
c2l0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBBbmltKTsgICAgCisgICAgdmlydHVhbCB+QW5pbWF0aW9uQmFzZSgpCisgICAg
eworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJ
TEFCTEUpCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFi
bGUoZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydFRpbWU7IH0KKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCAgeyByZXR1
cm4gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7IH0KKyAgICAKKyAgICB2b2lkIGNhbmNlbFRpbWVy
cygpCisgICAgeworICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suY2FuY2VsVGltZXIo
KTsKKyAgICAgICAgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXIuY2FuY2VsVGltZXIoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gQW5pbWF0aW9ucyBhbmQgVHJhbnNpdGlvbnMgZ28gdGhyb3VnaCB0
aGUgc3RhdGVzIGJlbG93LiBXaGVuIGVudGVyaW5nIHRoZSBTVEFSVEVEIHN0YXRlCisgICAgLy8g
dGhlIGFuaW1hdGlvbiBpcyBzdGFydGVkLiBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgZGVm
ZXJyZWQgcmVzcG9uc2UgZnJvbSB0aGUgYW5pbWF0b3IuCisgICAgLy8gSWYgc28sIHdlIHN0YXkg
aW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGF0IHJlc3BvbnNlIGlzIHJlY2VpdmVkIChhbmQgaXQgcmV0
dXJucyB0aGUgc3RhcnQgdGltZSkuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIGN1cnJl
bnQgdGltZSBhcyB0aGUgc3RhcnQgdGltZSBhbmQgZ28gaW1tZWRpYXRlbHkgdG8gdGhlIExPT1BJ
Tkcgb3IKKyAgICAvLyBFTkRJTkcgc3RhdGUuCisgICAgZW51bSBBbmltU3RhdGUgeyAKKyAgICAg
ICAgU1RBVEVfTkVXLCAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24ganVzdCBjcmVh
dGVkLCBhbmltYXRpb24gbm90IHJ1bm5pbmcgeWV0CisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRf
VElNRVIsICAgICAgICAgLy8gc3RhcnQgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQor
ICAgICAgICBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRSwgICAvLyB3YWl0aW5nIGZv
ciBzdHlsZSBzZXR1cCBzbyB3ZSBjYW4gc3RhcnQgYW5pbWF0aW9ucworICAgICAgICBTVEFURV9T
VEFSVF9XQUlUX1JFU1BPTlNFLCAgICAgIC8vIGFuaW1hdGlvbiBzdGFydGVkLCB3YWl0aW5nIGZv
ciByZXNwb25zZQorICAgICAgICBTVEFURV9MT09QSU5HLCAgICAgICAgICAgICAgICAgIC8vIHJl
c3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgbG9vcCB0aW1lciBydW5uaW5nLCB3
YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX0VORElORywgICAgICAgICAgICAgICAgICAg
Ly8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBlbmQgdGltZXIgcnVubmlu
Zywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9QQVVTRURfV0FJVF9USU1FUiwgICAg
ICAgIC8vIGFuaW1hdGlvbiBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHN0YXJ0ZWQKKyAg
ICAgICAgU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0UsICAgICAvLyBhbmltYXRpb24gcGF1c2Vk
IHdoZW4gaW4gU1RBUlRJTkcgc3RhdGUKKyAgICAgICAgU1RBVEVfUEFVU0VEX1JVTiwgICAgICAg
ICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gTE9PUElORyBvciBFTkRJTkcgc3Rh
dGUKKyAgICAgICAgU1RBVEVfRE9ORSAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgdGltZXIg
ZmlyZWQsIGFuaW1hdGlvbiBmaW5pc2hlZCBhbmQgcmVtb3ZlZAorICAgIH07CisgICAgCisgICAg
ZW51bSBBbmltU3RhdGVJbnB1dCB7CisgICAgICAgIFNUQVRFX0lOUFVUX01BS0VfTkVXLCAgICAg
ICAgICAgLy8gcmVzZXQgYmFjayB0byBuZXcgZnJvbSBhbnkgc3RhdGUKKyAgICAgICAgU1RBVEVf
SU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAgICAvLyBhbmltYXRpb24gcmVxdWVzdHMgYSBzdGFydAor
ICAgICAgICBTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgIC8vIGZvcmNlIGEgcmVzdGFy
dCBmcm9tIGFueSBzdGF0ZQorICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9USU1FUl9GSVJFRCwg
IC8vIHN0YXJ0IHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX1NUWUxFX0FWQUlMQUJM
RSwgICAgICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFydCBhbmltYXRpbmcKKyAg
ICAgICAgU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsICAgICAvLyBtX3N0YXJ0VGltZSB3YXMg
c2V0CisgICAgICAgIFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQsICAgLy8gbG9vcCB0aW1l
ciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9FTkRfVElNRVJfRklSRUQsICAgIC8vIGVuZCB0
aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSwgICAgIC8vIHBh
dXNlIGFuIGFuaW1hdGlvbiBkdWUgdG8gb3ZlcnJpZGUKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVT
VU1FX09WRVJSSURFLCAgICAvLyByZXN1bWUgYW4gb3ZlcnJpZGRlbiBhbmltYXRpb24KKyAgICAg
ICAgU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HLCAvLyBwbGF5IHN0YXRlIHBhdXNlZCAt
PiBydW5uaW5nCisgICAgICAgIFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VELCAgLy8gcGxh
eSBzdGF0ZSBydW5uaW5nIC0+IHBhdXNlZAorICAgICAgICBTVEFURV9JTlBVVF9FTkRfQU5JTUFU
SU9OICAgICAgIC8vIGZvcmNlIGFuIGVuZCBmcm9tIGFueSBzdGF0ZQorICAgIH07CisgICAgCisg
ICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIE5FVyBzdGF0ZSB0byBzdGFydCBhbmlt
YXRpb24KKyAgICB2b2lkIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwg
ZG91YmxlIHBhcmFtKTsKKyAgICAKKyAgICAvLyBBbmltYXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0
ZWQsIGF0IHBhc3NlZCB0aW1lCisgICAgLy8gVGhpcyBpcyBhIGNhbGxiYWNrIGFuZCBpcyBvbmx5
IHJlY2VpdmVkIHdoZW4gUmVuZGVyT2JqZWN0OjpzdGFydEFuaW1hdGlvbigpIG9yIFJlbmRlck9i
amVjdDo6c3RhcnRUcmFuc2l0aW9uKCkgCisgICAgLy8gcmV0dXJucyB0cnVlLiBJZiBSZW5kZXJP
YmplY3Q6OgorICAgIHZvaWQgb25BbmltYXRpb25TdGFydFJlc3BvbnNlKGRvdWJsZSBzdGFydFRp
bWUpOworICAgIAorICAgIC8vIENhbGxlZCB0byBjaGFuZ2UgdG8gb3IgZnJvbSBwYXVzZWQgc3Rh
dGUKKyAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZShib29sIHJ1bm5pbmcpOworICAgIGJvb2wgcGxh
eVN0YXRlUGxheWluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uOyB9CisgICAgCisgICAg
Ym9vbCB3YWl0aW5nVG9TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRF
X05FVyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOyB9CisgICAgYm9v
bCBwcmVhY3RpdmUoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX05F
VyB8fAorICAgICAgICAgICAgIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfVElNRVIg
fHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FW
QUlMQUJMRSB8fAorICAgICAgICAgICAgIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRf
UkVTUE9OU0U7CisgICAgfQorICAgIGJvb2wgcG9zdGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbVN0YXRlID09IFNUQVRFX0RPTkU7IH0KKyAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuICFwb3N0YWN0aXZlKCkgJiYgIXByZWFjdGl2ZSgpOyB9CisgICAgYm9vbCBydW5uaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXVzZVRpbWUgPCAwOyB9CisgICAgYm9vbCBpc25ldygpIGNvbnN0
IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX05FVzsgfQorICAgIGJvb2wgd2FpdGluZ0Zv
clN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dB
SVRfUkVTUE9OU0U7IH0KKyAgICBib29sIHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxF
OyB9CisgICAgYm9vbCB3YWl0aW5nRm9yRW5kRXZlbnQoKSBjb25zdCAgeyByZXR1cm4gbV93YWl0
aW5nRm9yRW5kRXZlbnQ7IH0KKyAgICAKKyAgICAvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNv
bWV0aGluZyBpcyBydW5uaW5nIHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0byBrZWVwIGZpcmluZwor
ICAgIC8vIChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQorICAgIHZvaWQgc2V0QW5pbWF0aW5n
KGJvb2wgaW5BbmltYXRpbmcgPSB0cnVlKSB7IG1fYW5pbWF0aW5nID0gaW5BbmltYXRpbmc7IH0K
KyAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CisgICAg
CisgICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3Q7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHls
ZSomIGlvQW5pbWF0ZWRTdHlsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tID0gMCwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvID0gMCkgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVu
dHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgYW5pbWF0aW9uVGlt
ZXJDYWxsYmFja0ZpcmVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxh
cHNlZFRpbWUpOworICAgIHZvaWQgYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBi
b29sIHJlc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgIAorICAg
IGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IFRyYW5zaXRpb24qIGFuaW0pIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9uLT50cmFuc2l0aW9uc01hdGNoKGFuaW0pOyB9CisgICAgCisgICAgdm9p
ZCBzZXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogYW5pbSkgeyBtX2FuaW1hdGlvbiA9IGNv
bnN0X2Nhc3Q8VHJhbnNpdGlvbio+KGFuaW0pOyB9CisgICAgCisgICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3aWxsIG9ubHkgYmUgdGhlIGNh
c2UgZm9yCisgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBpcyB1c2VkIHRvIGRldGVybWlu
ZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKKyAgICAvLyBzZXQgdGhlIHN0YXJ0IHRp
bWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3aWxsIHByb2JhYmx5IG5vdCBn
ZXQKKyAgICAvLyBiYWNrIHRoZSBTVEFSVF9USU1FIGV2ZW50LgorICAgIHZpcnR1YWwgYm9vbCBv
dmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICAvLyBEb2VzIHRo
aXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/CisgICAg
dmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoIXdhaXRpbmdUb1N0YXJ0KCkgJiYgIXBvc3RhY3Rp
dmUoKSkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KTsKKyAgICB9CisgICAgICAgIAorcHJv
dGVjdGVkOgorICAgIEhUTUxFbGVtZW50KiBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgpCisgICAg
eworICAgICAgICBpZiAobV9vYmplY3QtPm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgpLT5pc0hU
TUxFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihtX29iamVjdC0+bm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKSB7IH0KKyAgICAKKyAgICBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fY29tcEFuaW07IH0KKyAgICAK
KyAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgdGltZXIgZmly
ZXMgc28gc3ViY2xhc3NlcyBjYW4gZG8gYW55IGV4dHJhIHdvcmsKKyAgICB2aXJ0dWFsIHZvaWQg
b25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAgIHZpcnR1
YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCByZXNldCkgeyB9CisgICAgCisg
ICAgdm9pZCBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQW5pbVN0
YXRlIG1fYW5pbVN0YXRlOwogICAgIGludCBtX2l0ZXJhdGlvbjsKICAgICAKLSAgICBib29sIG1f
ZmluaXNoZWQ7ICAgIAorICAgIGJvb2wgbV9hbmltYXRpbmc7ICAgICAgIC8vIHRyYW5zaXRpb24v
YW5pbWF0aW9uIHJlcXVpcmVzIGNvbnRpbnVhbCB0aW1lciBmaXJpbmcKKyAgICBib29sIG1fd2Fp
dGVkRm9yUmVzcG9uc2U7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAgIGJvb2wgbV9wYXVz
ZWQ7CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAgIFJlbmRlck9iamVjdCogICBtX29iamVj
dDsKICAgICAKLSAgICBib29sIG1fc3RhbGU7CisgICAgQW5pbWF0aW9uVGltZXJDYWxsYmFjayBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2s7CisgICAgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyIG1f
YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyOworICAgIFJlZlB0cjxUcmFuc2l0aW9uPiBtX2FuaW1h
dGlvbjsKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcEFuaW07CisgICAgYm9vbCBtX3dh
aXRpbmdGb3JFbmRFdmVudDsKIH07CiAKLWNsYXNzIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9u
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICB+Q29tcG9zaXRlSW1wbGljaXRB
bmltYXRpb24oKSB7IGRlbGV0ZUFsbFZhbHVlcyhtX2FuaW1hdGlvbnMpOyB9Ci0KLSAgICBSZW5k
ZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotCi0gICAgYm9vbCBhbmltYXRpbmcoKSBjb25z
dDsKLQotICAgIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0Kik7CisjcHJhZ21hIG1hcmsgLQogCitj
bGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKK3B1YmxpYzoK
KyAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQorICAgIDog
QW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCisgICAgLCBtX3By
b3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCisgICAgLCBtX292ZXJyaWRkZW4oZmFsc2Up
CisgICAgLCBtX2Zyb21TdHlsZSgwKQorICAgICwgbV90b1N0eWxlKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgICAgICAKKyAgICAgICAgLy8g
SWYgd2Ugd2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5lZWQgdG8gZmluaXNoIHRo
ZSBhbmltYXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAorICAgICAgICAvLyBhbmltYXRpb25zIHN0
aWNrIGFyb3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisgICAgICAgIGlmICh3YWl0aW5nRm9yRW5k
RXZlbnQoKSAmJiBtX29iamVjdCkKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBjbGFz
cyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCisgICAgICAgIGlmICghcG9z
dGFjdGl2ZSgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VO
RF9BTklNQVRJT04sIC0xKTsgICAgIAorICAgIH0KKyAgICAKKyAgICBpbnQgcHJvcGVydHkoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9uQW5p
bWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRB
bmltYXRpb24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlv
bihib29sIHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5
bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20gPSAwLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKTsKKyAgICAKKyAgICB2b2lkIHNldE92ZXJyaWRkZW4o
Ym9vbCBiKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3ZlcnJpZGRlbjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJv
cGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJU
eXBlIGluTGlzdGVuZXJUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1
bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOworICAgIH0KKyAgICAKKyAg
ICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBpbkV2ZW50VHlw
ZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpOyAgICAKKyAgICAKIHByaXZhdGU6Ci0gICAgSGFzaE1h
cDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj4gbV9hbmltYXRpb25zOworICAgIGludCBtX3Byb3Bl
cnR5OworICAgIGJvb2wgbV9vdmVycmlkZGVuOworICAgIAorICAgIC8vIFRoZSB0d28gc3R5bGVz
IHRoYXQgd2UgYXJlIGJsZW5kaW5nLgorICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKKyAg
ICBSZW5kZXJTdHlsZSogbV90b1N0eWxlOwogfTsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxp
Y2l0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24pCi06IG1fZnJvbVN0eWxl
KDApCi0sIG1fdG9TdHlsZSgwKQotLCBtX3Byb3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkp
Ci0sIG1fZnVuY3Rpb24odHJhbnNpdGlvbi0+dGltaW5nRnVuY3Rpb24oKSkKLSwgbV9kdXJhdGlv
bih0cmFuc2l0aW9uLT5kdXJhdGlvbigpIC8gMTAwMC4wKQotLCBtX3JlcGVhdENvdW50KHRyYW5z
aXRpb24tPnJlcGVhdENvdW50KCkpCi0sIG1faXRlcmF0aW9uKDApCi0sIG1fZmluaXNoZWQoZmFs
c2UpCi0sIG1fc3RhcnRUaW1lKGN1cnJlbnRUaW1lKCkpCi0sIG1fcGF1c2VkKGZhbHNlKQotLCBt
X3BhdXNlVGltZShtX3N0YXJ0VGltZSkKLSwgbV9zdGFsZShmYWxzZSkKKyNwcmFnbWEgbWFyayAt
CisKK3ZvaWQgQW5pbWF0aW9uVGltZXJDYWxsYmFjazo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRp
b25UaW1lckJhc2U+KikKIHsKKyAgICBtX2FuaW0tPmFuaW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJl
ZChtX2V2ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7CiB9CiAKLUltcGxpY2l0QW5pbWF0aW9uOjp+
SW1wbGljaXRBbmltYXRpb24oKQordm9pZCBBbmltYXRpb25FdmVudERpc3BhdGNoZXI6OnRpbWVy
RmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCiB7Ci0gICAgQVNTRVJUKCFtX2Zyb21T
dHlsZSAmJiAhbV90b1N0eWxlKTsKKyAgICBtX2FuaW0tPmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hl
ckZpcmVkKG1fZWxlbWVudC5nZXQoKSwgbV9uYW1lLCBtX3Byb3BlcnR5LCBtX3Jlc2V0LCBtX2V2
ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJl
c2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBmcm9tLCBSZW5kZXJTdHls
ZSogdG8pCisjcHJhZ21hIG1hcmsgLQorCisjcHJhZ21hIG1hcmsgLQorICAgIAorQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQorOiBtX2FuaW1T
dGF0ZShTVEFURV9ORVcpCissIG1faXRlcmF0aW9uKDApCissIG1fYW5pbWF0aW5nKGZhbHNlKQor
LCBtX3dhaXRlZEZvclJlc3BvbnNlKGZhbHNlKQorLCBtX3N0YXJ0VGltZSgwKQorLCBtX3BhdXNl
VGltZSgtMSkKKywgbV9vYmplY3QocmVuZGVyZXIpCissIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFj
ayhjb25zdF9jYXN0PEFuaW1hdGlvbkJhc2UqPih0aGlzKSkKKywgbV9hbmltYXRpb25FdmVudERp
c3BhdGNoZXIoY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0aW9u
KGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+KHRyYW5zaXRpb24pKQorLCBtX2NvbXBBbmltKGNvbXBB
bmltKQorLCBtX3dhaXRpbmdGb3JFbmRFdmVudChmYWxzZSkKIHsKLSAgICBzZXRGaW5pc2hlZChm
YWxzZSk7Cit9CiAKLSAgICBpZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIG1fZnJvbVN0eWxlLT5k
ZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAg
ICAgbV90b1N0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9mcm9t
U3R5bGUgPSBmcm9tOwotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUt
PnJlZigpOwotICAgIG1fdG9TdHlsZSA9IHRvOwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAg
IG1fdG9TdHlsZS0+cmVmKCk7Ci0gICAgaWYgKGZyb20gfHwgdG8pCi0gICAgICAgIG1fc3RhcnRU
aW1lID0gY3VycmVudFRpbWUoKTsKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCit7CisgICAgLy8gaWYgd2Ug
Z2V0IGEgUkVTVEFSVCB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBv
ZiBzdGF0ZQorICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9NQUtFX05FVykgeworICAgICAg
ICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUpCisg
ICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2Up
OworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUg
PSAwOworICAgICAgICBtX3BhdXNlVGltZSA9IC0xOworICAgICAgICBtX3dhaXRlZEZvclJlc3Bv
bnNlID0gZmFsc2U7CisgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklN
QVRJT04pIHsKKyAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0
ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29t
cEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgIG1fYW5p
bVN0YXRlID0gU1RBVEVfTkVXOworICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgIG1f
cGF1c2VUaW1lID0gLTE7CisgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CiAgICAgICAgIAot
ICAgIC8vIElmIHdlIGFyZSBzdGFsZSwgYXR0ZW1wdCB0byB1cGRhdGUgdG8gYSBuZXcgdHJhbnNp
dGlvbiB1c2luZyB0aGUgbmV3IHx0b3wgc3R5bGUuICBJZiB3ZSBhcmUgYWJsZSB0byBmaW5kIGEg
bmV3IHRyYW5zaXRpb24sCi0gICAgLy8gdGhlbiB3ZSB3aWxsIHVubWFyayBvdXJzZWx2ZXMgZm9y
IGRlYXRoLgotICAgIGlmIChzdGFsZSgpICYmIGZyb20gJiYgdG8pIHsKLSAgICAgICAgIGZvciAo
Y29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IHRvLT50cmFuc2l0aW9ucygpOyB0cmFuc2l0
aW9uOyB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbi0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
bV9wcm9wZXJ0eSAhPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaW50IGR1cmF0aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRpb24o
KTsKLSAgICAgICAgICAgIGludCByZXBlYXRDb3VudCA9IHRyYW5zaXRpb24tPnJlcGVhdENvdW50
KCk7Ci0gICAgICAgICAgICBpZiAoZHVyYXRpb24gJiYgcmVwZWF0Q291bnQpIHsKLSAgICAgICAg
ICAgICAgICBtX2R1cmF0aW9uID0gZHVyYXRpb24gLyAxMDAwLjA7Ci0gICAgICAgICAgICAgICAg
bV9yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50OwotICAgICAgICAgICAgICAgIG1fc3RhbGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYg
KHJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9T
VEFSVF9BTklNQVRJT04sIC0xKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlm
IChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OKSB7CisgICAgICAgIGNhbmNlbFRp
bWVycygpOworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlM
RV9BVkFJTEFCTEUpCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVB
dmFpbGFibGUoZmFsc2UpOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAg
ICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNl
IGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSkgeworICAgICAgICBpZiAo
bV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSkgeworICAgICAgICAgICAg
Ly8gSWYgd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFIHN0YXRlLCB0aGUgYW5pbWF0aW9uIHdp
bGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKKyAgICAgICAgICAgIC8vIHdlIGdldCBhIHJlc3BvbnNl
LCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlCisgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFs
c2UpOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJ
TUVfU0VULCBjdXJyZW50VGltZSgpKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSkgewor
ICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfTE9PUElORyB8fCBtX2FuaW1TdGF0ZSA9
PSBTVEFURV9FTkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAg
ICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKG1fc3RhcnRUaW1lKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIElmIHdlIGRpZCBub3QgZmluZCBhIG5ldyB0
cmFuc2l0aW9uLCB0aGVuIG1hcmsgb3Vyc2VsdmVzIGFzIGJlaW5nIGZpbmlzaGVkIHNvIHRoYXQg
d2UgY2FuIGJlIHJlbW92ZWQuCi0gICAgaWYgKHN0YWxlKCkpCi0gICAgICAgIHNldEZpbmlzaGVk
KHRydWUpOworICAgIC8vIGV4ZWN1dGUgc3RhdGUgbWFjaGluZQorICAgIHN3aXRjaChtX2FuaW1T
dGF0ZSkgeworICAgICAgICBjYXNlIFNUQVRFX05FVzoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1
dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRf
UExBWV9TVEFURV9SVU5OSU5HIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFV
U0VEKTsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJ
T04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKSB7CisgICAgICAg
ICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAoMCBp
ZiBubyBkZWxheSkKKyAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOwor
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKG1fYW5p
bWF0aW9uLT5kZWxheSgpLCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBt
X2FuaW1hdGlvbi0+ZGVsYXkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJU
KGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRF
X0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhh
cyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byBy
ZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RB
VEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgbV9jb21wQW5p
bS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKHRydWUpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBh
bmltYXRpb24KKyAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkp
OworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb24oKS0+c3RhcnRVcGRhdGVSZW5k
ZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocnVubmluZygpKTsKKyAgICAgICAgICAgICAgICAvLyBXZSdy
ZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2Uu
IENhbmNlbCB0aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVz
ZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOwor
ICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1dBSVRfVElNRVI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFS
VF9XQUlUX1NUWUxFX0FWQUlMQUJMRToKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFU
RV9JTlBVVF9TVFlMRV9BVkFJTEFCTEUgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFU
RV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0
aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfQVZBSUxBQkxFKSB7CisgICAgICAgICAgICAg
ICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQg
YW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCisgICAgICAgICAgICAg
ICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0aW9ucygpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFNlbmQgc3RhcnQgZXZlbnQsIGlmIG5lZWRlZAorICAg
ICAgICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQoMC4wZik7IC8vIHRoZSBlbGFwc2VkVGltZSBp
cyBhbHdheXMgMCBoZXJlCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3Rh
cnQgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkgfHwgIXN0
YXJ0QW5pbWF0aW9uKDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2lu
ZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ssIHNvIGZpcmUgdGhlIHN0YXJ0IHRpbWUgaGVy
ZQorICAgICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVT
UE9OU0U7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBV
VF9TVEFSVF9USU1FX1NFVCwgY3VycmVudFRpbWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25z
ZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocnVubmluZygpKTsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5n
IGZvciB0aGUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc3R5bGUgaGFzIGJlZW4gc2V0dXAuIElm
IHdlJ3JlIGFza2VkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0
aGUgc3R5bGUgbXVzdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBzbyB3ZSBjYW4gZGVhbCB3aXRoIHRo
aXMgbGlrZSB3ZSB3b3VsZAorICAgICAgICAgICAgICAgIC8vIGZvciBXQUlUX1JFU1BPTlNFLCBl
eGNlcHQgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFuIGVuZEFuaW1hdGlvbigpLgorICAgICAg
ICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9
IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOgorICAgICAgICAg
ICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUIHx8IGlucHV0ID09
IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBz
dGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0Cisg
ICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRUaW1lIDw9IDApCisgICAgICAgICAgICAgICAgICAg
IG1fc3RhcnRUaW1lID0gcGFyYW07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAgICAg
ICAgICAgICAgICBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlv
bgorICAgICAgICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQoKSk7CisgICAg
ICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1hdGlvbigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rp
c3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQgcmVzcG9u
c2UuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0LiBXaGVuIAorICAgICAgICAgICAgICAg
IC8vIHdlIHVucGF1c2UsIHdlIHdpbGwgYWN0IGFzIHRob3VnaCB0aGUgc3RhcnQgdGltZXIganVz
dCBmaXJlZAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAg
ICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RB
VEVfUEFVU0VEX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTVEFURV9MT09QSU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRf
UExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQg
PT0gU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29w
IGFnYWluIG9yIGVuZC4KKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJh
bSk7CisgICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVycygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hp
bGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKKyAgICAgICAgICAgICAg
ICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgICAgICAgICAgY2FuY2VsVGlt
ZXJzKCk7CisgICAgICAgICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9SVU47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9FTkRJTkc6CisgICAgICAgICAgICBB
U1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNU
QVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAgICAgICAvLyBFbmQgdGltZXIgZmly
ZWQsIGZpbmlzaCB1cAorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uRW5kKHBhcmFtKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9u
cygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcmUgb2ZmIGFub3Ro
ZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZpbmFsIHZhbHVlCisgICAgICAgICAg
ICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBt
X2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1h
dGlvbigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgICAg
ICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZSB3aGVuIHdlJ3ZlIGJlZW4gY2FsbGVkIGZy
b20gdGltZXJGaXJlZCgpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFu
aW1hdGlvbiBhbmQgd2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRp
bWUoKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBl
bmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVf
UEFVU0VEX1JVTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUg
ZGVsZXRlZCBoZXJlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9QQVVT
RURfV0FJVF9USU1FUjoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9Q
TEFZX1NUQVRFX1JVTk5JTkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAg
ICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0g
Y3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAt
MTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUg
c3RhcnQgdGltZXIgdG8gZmlyZSwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAg
bV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
U1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFOgorICAgICAgICBjYXNlIFNUQVRF
X1BBVVNFRF9SVU46CisgICAgICAgICAgICAvLyBXZSB0cmVhdCB0aGVzZSB0d28gY2FzZXMgdGhl
IHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwgd2hlbiB3ZSBhcmUgaW4gdGhlIFdB
SVRfUkVTUE9OU0UKKyAgICAgICAgICAgIC8vIHN0YXRlLCB3ZSBkb24ndCB5ZXQgaGF2ZSBhIHZh
bGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRvIHN0YXJ0QW5pbWF0aW9uLiBXaGVuIHRoZSBT
VEFSVF9USU1FCisgICAgICAgICAgICAvLyBldmVudCBjb21lcyBpbiBxbmQgd2Ugd2VyZSBpbiB0
aGUgUlVOIHN0YXRlLCB3ZSB3aWxsIG5vdGljZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZXQgdGhl
IAorICAgICAgICAgICAgLy8gc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KKyAgICAgICAg
ICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpOworICAg
ICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0
aW1lcworICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1BBVVNFRF9SVU4pCisg
ICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1l
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAg
ICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1h
dGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBT
dGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpIHx8ICFzdGFy
dEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3Qg
Z29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFydCB0aW1l
IGhlcmUKKyAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RB
UlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRE9ORToKKyAgICAgICAgICAgIC8vIFdl
J3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBhcmUgZGVsZXRlZAorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIGlm
IHdlIGNhbWUgb3V0IG9mIFNUQVRFX0VORElORyB3aGVuIHdlJ3ZlIGJlZW4gY2FsbGVkIGZyb20g
dGltZXJGaXJlZCgpCit9CisgICAgCit2b2lkIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvblRpbWVy
Q2FsbGJhY2tGaXJlZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBz
ZWRUaW1lKQoreworICAgIEFTU0VSVChtX29iamVjdC0+ZG9jdW1lbnQoKSAmJiAhbV9vYmplY3Qt
PmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOworICAgIAorICAgIC8vIEZJWE1FOiB1c2UgYW4g
ZW51bQorICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCkKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJ
TUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAgICAgICB1cGRhdGVTdGF0
ZU1hY2hpbmUoU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVu
dCkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJ
UkVELCBlbGFwc2VkVGltZSk7CisgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJl
CisgICAgfQogfQogCi1kb3VibGUgSW1wbGljaXRBbmltYXRpb246OnByb2dyZXNzKCkgY29uc3QK
K3ZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBy
ZXNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkK
IHsKLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWU7
CisgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSBmYWxzZTsKICAgICAKLSAgICBpZiAobV9maW5p
c2hlZCB8fCAhbV9kdXJhdGlvbiB8fCBlbGFwc2VkVGltZSA+PSBtX2R1cmF0aW9uKQotICAgICAg
ICByZXR1cm4gMS4wOworICAgIC8vIEtlZXAgYW4gYXRvbWljIHN0cmluZyBvbiB0aGUgc3RhY2sg
dG8ga2VlcCBpdCBhbGl2ZSB1bnRpbCB3ZSBleGl0IHRoaXMgbWV0aG9kCisgICAgLy8gKHNpbmNl
IGRpc3BhdGNoaW5nIHRoZSBldmVudCBtYXkgY2F1c2UgfHRoaXN8IHRvIGJlIGRlbGV0ZWQsIHRo
ZXJlZm9yZSByZW1vdmluZworICAgIC8vIHRoZSBsYXN0IHJlZiB0byB0aGUgYXRvbWljIHN0cmlu
ZykuCisgICAgQXRvbWljU3RyaW5nIGFuaW1OYW1lKG5hbWUpOworICAgIEF0b21pY1N0cmluZyBh
bmltRXZlbnRUeXBlKGV2ZW50VHlwZSk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IHN0
aWNrcyBhcm91bmQgdG9vCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50UmV0YWluZXIo
ZWxlbWVudCk7CisgICAgCisgICAgQVNTRVJUKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVu
dCgpICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRl
UGxheVN0YXRlKGJvb2wgcnVuKQoreworICAgIGlmIChydW5uaW5nKCkgIT0gcnVuIHx8IGlzbmV3
KCkpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKHJ1biA/IFNUQVRFX0lOUFVUX1BMQVlf
U1RBVEVfUlVOTklORyA6IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VELCAtMSk7CisgICAg
fQorfQogCi0gICAgaWYgKG1fZnVuY3Rpb24udHlwZSgpID09IExpbmVhclRpbWluZ0Z1bmN0aW9u
KQotICAgICAgICByZXR1cm4gZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uOworZG91YmxlIEFuaW1h
dGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3QKK3sK
KyAgICBpZiAocHJlYWN0aXZlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGRvdWJs
ZSBlbGFwc2VkVGltZSA9IHJ1bm5pbmcoKSA/IChjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWUp
IDogKG1fcGF1c2VUaW1lIC0gbV9zdGFydFRpbWUpOworICAgIGlmIChydW5uaW5nKCkgJiYgZWxh
cHNlZFRpbWUgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZHVyID0g
bV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgCisgICAgaWYgKHBvc3RhY3RpdmUoKSB8fCAh
bV9hbmltYXRpb24tPmR1cmF0aW9uKCkgfHwgZWxhcHNlZFRpbWUgPj0gZHVyKQorICAgICAgICBy
ZXR1cm4gMS4wOworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGZyYWN0aW9uYWwgdGltZSwgdGFr
aW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24uCisgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB3
b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZlIAorICAg
IC8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUKKyAgICBkb3VibGUgdCA9
IGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgaW50IGkgPSAoaW50
KSB0OworICAgIHQgLT0gaTsKKyAgICAKKyAgICBpZiAoc2NhbGUgIT0gMSB8fCBvZmZzZXQgIT0g
MCkKKyAgICAgICAgdCA9ICh0IC0gb2Zmc2V0KSAqIHNjYWxlOworICAgIAorICAgIGlmIChtX2Fu
aW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24p
CisgICAgICAgIHJldHVybiB0OwogICAgIAogICAgIC8vIEN1YmljIGJlemllci4KLSAgICByZXR1
cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKG1fZnVuY3Rpb24ueDEoKSwgbV9mdW5jdGlvbi55
MSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY3Rpb24ueDIo
KSwgbV9mdW5jdGlvbi55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uLCBtX2R1cmF0aW9uKTsKKyAgICBkb3VibGUgdHQgPSBz
b2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueDEo
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9u
LT50aW1pbmdGdW5jdGlvbigpLnkxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54MigpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0
aW9uKCkueTIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwg
bV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgIHJldHVybiB0dDsKIH0KIAordm9pZCBBbmlt
YXRpb25CYXNlOjpwcmltZUV2ZW50VGltZXJzKCkKK3sKKyAgICAvLyBEZWNpZGUgd2hlbiB0aGUg
ZW5kIG9yIGxvb3AgZXZlbnQgbmVlZHMgdG8gZmlyZQorICAgIGRvdWJsZSBjdCA9IGN1cnJlbnRU
aW1lKCk7CisgICAgY29uc3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN0IC0gbV9zdGFydFRp
bWU7CisgICAgQVNTRVJUKGVsYXBzZWREdXJhdGlvbiA+PSAwKTsKKyAgICAKKyAgICBkb3VibGUg
dG90YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGRvdWJsZSBkdXJh
dGlvbkxlZnQgPSAwOworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IHRvdGFsRHVyYXRp
b247CisgICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJhdGlvbiA8IHRvdGFs
RHVyYXRpb24pIHsKKyAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkgLSBmbW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAg
ICAgICBuZXh0SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsK
KyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IGhhdmUgMCBkdXJhdGlv
bkxlZnQsIGlmIHdlJ3ZlIGdvdHRlbiB0aGUgZXZlbnQgbGF0ZSBhbmQgd2UgYXJlIGFscmVhZHkK
KyAgICAvLyBwYXN0IHRvdGFsRHVyYXRpb24uIEluIHRoaXMgY2FzZSB3ZSBzdGlsbCBmaXJlIGFu
IGVuZCB0aW1lciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZW5kLiAKKyAgICAvLyBUaGlzIGRlZmVy
cyB0aGUgY2FsbCB0byBzZW5kQW5pbWF0aW9uRXZlbnRzIHRvIGF2b2lkIHJlLWVudHJhbnQgY2Fs
bHMgdGhhdCBkZXN0cm95CisgICAgLy8gdGhlIFJlbmRlck9iamVjdCwgYW5kIHRoZXJlZm9yZSB8
dGhpc3wgYmVmb3JlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKyAgICBpZiAodG90YWxEdXJhdGlvbiA8
IDAgfHwgbmV4dEl0ZXJhdGlvblRpbWUgPCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIC8vIFdl
IGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBsb29wIGV2ZW50CisgICAgICAgIEFTU0VS
VChuZXh0SXRlcmF0aW9uVGltZSA+IDApOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0xP
T1BJTkc7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0
aW9uTGVmdCwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIG5leHRJ
dGVyYXRpb25UaW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBhdCB0
aGUgZW5kLCBzZW5kIGFuIGVuZCBldmVudAorICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0VO
RElORzsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRp
b25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgbmV4dEl0ZXJhdGlv
blRpbWUpOworICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0KKwogc3RhdGljIGlubGluZSBpbnQg
YmxlbmRGdW5jKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJl
dHVybiBpbnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwpAQCAtMjIzLDcgKzgzNyw4
IEBAIHN0YXRpYyBpbmxpbmUgSW50U2l6ZSBibGVuZEZ1bmMoY29uc3QgSW50U2l6ZSYgZnJvbSwg
Y29uc3QgSW50U2l6ZSYgdG8sIGRvdWJsZSBwCiBzdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJs
ZW5kRnVuYyhjb25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91
YmxlIHByb2dyZXNzKQogeyAgCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwotICAgIHJldHVybiBu
ZXcgU2hhZG93RGF0YShibGVuZEZ1bmMoZnJvbS0+eCwgdG8tPngsIHByb2dyZXNzKSwgYmxlbmRG
dW5jKGZyb20tPnksIHRvLT55LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+
Ymx1ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jl
c3MpKTsKKyAgICByZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54
LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9n
cmVzcyksIGJsZW5kRnVuYyhmcm9tLT5jb2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykpOwogfQog
CiBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCkBAIC0yMzcsNyArODUyLDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1P
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24K
ICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBpIDwgZnJvbVNpemUgPyBmcm9t
W2ldLmdldCgpIDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0b09wID0gaSA8IHRv
U2l6ZSA/IHRvW2ldLmdldCgpIDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVu
ZGVkT3AgPSB0b09wID8gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcykgOiBmcm9tT3AtPmJs
ZW5kKDAsIHByb2dyZXNzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3Ap
OworICAgICAgICBpZiAoYmxlbmRlZE9wKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibGVu
ZGVkT3ApOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjU0LDMxMSArODcwLDgw
NyBAQCBzdGF0aWMgaW5saW5lIEVWaXNpYmlsaXR5IGJsZW5kRnVuYyhFVmlzaWJpbGl0eSBmcm9t
LCBFVmlzaWJpbGl0eSB0bywgZG91YmxlIHBybwogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJ
U0lCTEUgOiAodG8gIT0gVklTSUJMRSA/IHRvIDogZnJvbSk7CiB9CiAKLSNkZWZpbmUgQkxFTkQo
cHJvcCwgZ2V0dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1f
dG9TdHlsZS0+Z2V0dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSB7XAotICAgICAgICBy
ZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYg
KHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3By
b3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAg
IGlmIChtX2Zyb21TdHlsZS0+Z2V0dGVyKCkgIT0gbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAg
ICAgICAgICAgIHNldEZpbmlzaGVkKGZhbHNlKTsgXAotICAgICAgICAgICAgaWYgKCFhbmltYXRl
ZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXIt
PnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAg
IGFuaW1hdGVkU3R5bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBt
X3RvU3R5bGUtPmdldHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1fcHJv
cGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9XAot
ICAgIH1cCi0KLSNkZWZpbmUgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihwcm9wLCBnZXR0ZXIs
IHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgbV90b1N0eWxlLT5nZXR0
ZXIoKSAhPSB0YXJnZXRTdHlsZS0+Z2V0dGVyKCkpIHsgXAotICAgICAgICByZXNldChyZW5kZXJl
ciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwK
LSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNB
bmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIENvbG9yIGZyb21D
b2xvciA9IG1fZnJvbVN0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBDb2xvciB0b0NvbG9yID0g
bV90b1N0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBpZiAoZnJvbUNvbG9yLmlzVmFsaWQoKSB8
fCB0b0NvbG9yLmlzVmFsaWQoKSkgeyBcCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5pc1Zh
bGlkKCkpIFwKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Y29sb3Io
KTsgXAotICAgICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkgXAotICAgICAgICAgICAg
ICAgIHRvQ29sb3IgPSBtX3RvU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmIChmcm9t
Q29sb3IgIT0gdG9Db2xvcikge1wKLSAgICAgICAgICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7
IFwKLSAgICAgICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAg
ICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRl
clN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5z
ZXR0ZXIoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAg
ICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsgXAotICAgICAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICB9XAotCi0jZGVmaW5l
IEJMRU5EX1NIQURPVyhwcm9wLCBnZXR0ZXIsIHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5
ID09IHByb3AgJiYgKCFtX3RvU3R5bGUtPmdldHRlcigpIHx8ICF0YXJnZXRTdHlsZS0+Z2V0dGVy
KCkgfHwgKm1fdG9TdHlsZS0+Z2V0dGVyKCkgIT0gKnRhcmdldFN0eWxlLT5nZXR0ZXIoKSkpIHsg
XAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwK
LSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAot
ICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkg
eyBcCi0gICAgICAgIGlmIChtX2Zyb21TdHlsZS0+Z2V0dGVyKCkgJiYgbV90b1N0eWxlLT5nZXR0
ZXIoKSAmJiAqbV9mcm9tU3R5bGUtPmdldHRlcigpICE9ICptX3RvU3R5bGUtPmdldHRlcigpKSB7
XAotICAgICAgICAgICAgc2V0RmluaXNoZWQoZmFsc2UpOyBcCi0gICAgICAgICAgICBpZiAoIWFu
aW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5k
ZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsgXAotICAgICAg
ICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhtX2Zyb21TdHlsZS0+Z2V0dGVy
KCksIG1fdG9TdHlsZS0+Z2V0dGVyKCksIHByb2dyZXNzKCkpKTtcCi0gICAgICAgICAgICBpZiAo
bV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAg
IH1cCi0gICAgfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUlt
cGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5
bGUqJiBhbmltYXRlZFN0eWxlKQotewotICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIG5vIHRyYW5z
aXRpb24tcHJvcGVydHksIHRoZW4gdGhlIG9ubHkgd2F5IHRvIHRlbGwgaWYgb3VyIGdvYWwgc3Rh
dGUgY2hhbmdlZCBpcyB0byBjaGVjawotICAgIC8vIGV2ZXJ5IHNpbmdsZSBhbmltYXRhYmxlIHBy
b3BlcnR5LiAgRm9yIG5vdyB3ZSdsbCBqdXN0IGRpZmYgdGhlIHN0eWxlcyB0byBhc2sgdGhhdCBx
dWVzdGlvbiwKLSAgICAvLyBidXQgd2Ugc2hvdWxkIHJlYWxseSBleGNsdWRlIG5vbi1hbmltYXRh
YmxlIHByb3BlcnRpZXMuCi0gICAgaWYgKCFtX3RvU3R5bGUgfHwgKG1fcHJvcGVydHkgPT0gY0Fu
aW1hdGVBbGwgJiYgdGFyZ2V0U3R5bGUtPmRpZmYobV90b1N0eWxlKSkpIHsKLSAgICAgICAgcmVz
ZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgICAgICBpZiAoc3Rh
bGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQmxvdyB1
cCBzaG9ydGhhbmRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZC4KLSAgICBzZXRGaW5pc2hl
ZCh0cnVlKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIHNldExlZnQpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5UmlnaHQsIHJpZ2h0LCBzZXRSaWdodCk7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlUb3AsIHRvcCwgc2V0VG9wKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvdHRvbSwg
Ym90dG9tLCBzZXRCb3R0b20pOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBz
ZXRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlIZWlnaHQsIGhlaWdodCwgc2V0SGVpZ2h0
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgYm9yZGVyTGVmdFdpZHRo
LCBzZXRCb3JkZXJMZWZ0V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRX
aWR0aCwgYm9yZGVyUmlnaHRXaWR0aCwgc2V0Qm9yZGVyUmlnaHRXaWR0aCk7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9wV2lkdGgsIHNldEJvcmRlclRvcFdp
ZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0
b21XaWR0aCwgc2V0Qm9yZGVyQm90dG9tV2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFy
Z2luTGVmdCwgbWFyZ2luTGVmdCwgc2V0TWFyZ2luTGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlNYXJnaW5SaWdodCwgbWFyZ2luUmlnaHQsIHNldE1hcmdpblJpZ2h0KTsKLSAgICBCTEVORChD
U1NQcm9wZXJ0eU1hcmdpblRvcCwgbWFyZ2luVG9wLCBzZXRNYXJnaW5Ub3ApOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBtYXJnaW5Cb3R0b20sIHNldE1hcmdpbkJvdHRvbSk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgcGFkZGluZ0xlZnQsIHNldFBhZGRp
bmdMZWZ0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0
LCBzZXRQYWRkaW5nUmlnaHQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcGFk
ZGluZ1RvcCwgc2V0UGFkZGluZ1RvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90
dG9tLCBwYWRkaW5nQm90dG9tLCBzZXRQYWRkaW5nQm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eU9wYWNpdHksIG9wYWNpdHksIHNldE9wYWNpdHkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5
Q29sb3IsIGNvbG9yLCBzZXRDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsIGJhY2tncm91bmRDb2xvciwgc2V0QmFja2dyb3VuZENvbG9yKTsKLSAgICBCTEVORF9N
QVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBjb2x1
bW5SdWxlQ29sb3IsIHNldENvbHVtblJ1bGVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlV2lkdGgsIGNvbHVtblJ1bGVXaWR0aCwgc2V0Q29sdW1uUnVsZVdpZHRo
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgY29sdW1uR2FwLCBzZXRD
b2x1bW5HYXApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQsIGNvbHVt
bkNvdW50LCBzZXRDb2x1bW5Db3VudCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5XaWR0aCwgY29sdW1uV2lkdGgsIHNldENvbHVtbldpZHRoKTsKLSAgICBCTEVORF9NQVlCRV9J
TlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tl
Q29sb3IsIHNldFRleHRTdHJva2VDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xP
UihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIHRleHRGaWxsQ29sb3IsIHNldFRleHRG
aWxsQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNw
YWNpbmcsIGhvcml6b250YWxCb3JkZXJTcGFjaW5nLCBzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2lu
Zyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZl
cnRpY2FsQm9yZGVyU3BhY2luZywgc2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKTsKLSAgICBCTEVO
RF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBib3JkZXJM
ZWZ0Q29sb3IsIHNldEJvcmRlckxlZnRDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9D
T0xPUihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIHNldEJv
cmRlclJpZ2h0Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvciwgYm9yZGVyVG9wQ29sb3IsIHNldEJvcmRlclRvcENvbG9yKTsKLSAg
ICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3Is
IGJvcmRlckJvdHRvbUNvbG9yLCBzZXRCb3JkZXJCb3R0b21Db2xvcik7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlaSW5kZXgsIHpJbmRleCwgc2V0WkluZGV4KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIGxpbmVIZWlnaHQsIHNldExpbmVIZWlnaHQpOwotICAgIEJMRU5EX01BWUJF
X0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIG91dGxpbmVDb2xvciwgc2V0
T3V0bGluZUNvbG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsIG91dGxp
bmVPZmZzZXQsIHNldE91dGxpbmVPZmZzZXQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5T3V0bGlu
ZVdpZHRoLCBvdXRsaW5lV2lkdGgsIHNldE91dGxpbmVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nLCBzZXRMZXR0ZXJTcGFjaW5nKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCB3b3JkU3BhY2luZywgc2V0V29yZFNwYWNp
bmcpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgYm94U2hh
ZG93LCBzZXRCb3hTaGFkb3cpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVRleHRTaGFk
b3csIHRleHRTaGFkb3csIHNldFRleHRTaGFkb3cpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtLCB0cmFuc2Zvcm0sIHNldFRyYW5zZm9ybSk7Ci0gICAgQkxFTkQoQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCB0cmFuc2Zvcm1PcmlnaW5YLCBzZXRUcmFuc2Zv
cm1PcmlnaW5YKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblks
IHRyYW5zZm9ybU9yaWdpblksIHNldFRyYW5zZm9ybU9yaWdpblkpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgYm9yZGVyVG9wTGVmdFJhZGl1cywgc2V0
Qm9yZGVyVG9wTGVmdFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJU
b3BSaWdodFJhZGl1cywgYm9yZGVyVG9wUmlnaHRSYWRpdXMsIHNldEJvcmRlclRvcFJpZ2h0UmFk
aXVzKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMs
IGJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIHNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyk7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlWaXNpYmlsaXR5LCB2aXNpYmlsaXR5LCBzZXRWaXNpYmlsaXR5KTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eVpvb20sIHpvb20sIHNldFpvb20pOwotfQotCi1SZW5kZXJTdHlsZSog
Q29tcG9zaXRlSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQot
ewotICAgIGNvbnN0IFRyYW5zaXRpb24qIGN1cnJlbnRUcmFuc2l0aW9ucyA9IGN1cnJlbnRTdHls
ZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiB0YXJnZXRUcmFuc2l0aW9u
cyA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpOwotICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFu
Z2VkID0gbV9hbmltYXRpb25zLmlzRW1wdHkoKSB8fCAoY3VycmVudFRyYW5zaXRpb25zICE9IHRh
cmdldFRyYW5zaXRpb25zICYmICEoY3VycmVudFRyYW5zaXRpb25zICYmIHRhcmdldFRyYW5zaXRp
b25zICYmICpjdXJyZW50VHJhbnNpdGlvbnMgPT0gKnRhcmdldFRyYW5zaXRpb25zKSk7Ci0KLSAg
ICBpZiAodHJhbnNpdGlvbnNDaGFuZ2VkKSB7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBJbXBsaWNp
dEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAg
ICAKLSAgICAgICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0
b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgLy8gTWFyayBhbnkgcnVubmluZyBhbmltYXRpb25zIGFzIHN0YWxlIGlmIHRoZSBzZXQgb2Yg
dHJhbnNpdGlvbnMgY2hhbmdlZC4gIFN0YWxlIGFuaW1hdGlvbnMgY29udGludWUKLSAgICAgICAg
ICAgIC8vIHRvIGJsZW5kIG9uIGEgdGltZXIsIGFuZCB0aGVuIHJlbW92ZSB0aGVtc2VsdmVzIHdo
ZW4gZmluaXNoZWQuCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdGFsZSgpOwotCi0gICAg
ICAgIC8vIElmIG91ciB0cmFuc2l0aW9ucyBjaGFuZ2VkIHdlIG5lZWQgdG8gYWRkIG5ldyBhbmlt
YXRpb25zIGZvciBhbnkgdHJhbnNpdGlvbnMgdGhhdAotICAgICAgICAvLyBkb24ndCBleGlzdCB5
ZXQuICBJZiBhIG5ldyB0cmFuc2l0aW9uIGNvbmZsaWN0cyB3aXRoIGEgY3VycmVudGx5IHJ1bm5p
bmcgc3RhbGUgdHJhbnNpdGlvbiwgdGhlbiB3ZSB3aWxsIG5vdCBhZGQgaXQuCi0gICAgICAgIC8v
IFRoZSBzdGFsZSB0cmFuc2l0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpdHNlbGYg
dG8gdGhlIG5ldyB0cmFuc2l0aW9uIGlmIGl0IGV2ZXIgZ2V0cyByZXNldCBvciBmaW5pc2hlcy4K
LSAgICAgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gdGFyZ2V0VHJhbnNp
dGlvbnM7IHRyYW5zaXRpb247IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAg
ICAgICAgICAgIGludCBwcm9wZXJ0eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAg
ICAgICBpbnQgZHVyYXRpb24gPSB0cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAg
aW50IHJlcGVhdENvdW50ID0gdHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0eSAmJiBkdXJhdGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25z
LmNvbnRhaW5zKHByb3BlcnR5KSkgewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiBhbmltYXRpb24gPSBuZXcgSW1wbGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25zLnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKLSAgICAgICAg
ICAgIH0KKyNwcmFnbWEgbWFyayAtCisKKy8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFueXRo
aW5nIHRvIGRvCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKQoreworICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW0gPSB0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAKKyAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlIGRv
bid0IGhhdmUgYW55IHRyYW5zaXRpb25zIG9yIGlmIHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgdHJh
bnNpdGlvbnMgYXJlIHRoZSBzYW1lCisgICAgaWYgKG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpICYm
ICFhbmltKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG51bUFuaW1zID0gMDsKKyAg
ICBib29sIHRyYW5zaXRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIC8vIFNlZSBpZiB0
aGUgbGlzdHMgbWF0Y2gKKyAgICBmb3IgKCA7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsK
KyAgICAgICAgKytudW1BbmltczsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmlt
ID0gKGFuaW0tPnByb3BlcnR5KCkgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSA/IDAgOgorICAgICAg
ICBtX3RyYW5zaXRpb25zLmdldChhbmltLT5wcm9wZXJ0eSgpKTsKKyAgICAgICAgaWYgKCFpbXBs
QW5pbSB8fCAhaW1wbEFuaW0tPmFuaW1hdGlvbnNNYXRjaChhbmltKSkgeworICAgICAgICAgICAg
dHJhbnNpdGlvbnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIGlmICghdHJhbnNpdGlvbnNDaGFuZ2VkICYmIG1fdHJhbnNpdGlv
bnMuc2l6ZSgpICE9IG51bUFuaW1zKQorICAgICAgICB0cmFuc2l0aW9uc0NoYW5nZWQgPSB0cnVl
OworICAgIAorICAgIGlmICghdHJhbnNpdGlvbnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gVHJhbnNpdGlvbnMgaGF2ZSBjaGFuZ2VkLCB1cGRhdGUgdGhlIGxpc3QKKyAg
ICByZXNldFRyYW5zaXRpb25zKHJlbmRlcmVyKTsKKyAgICAKKyAgICBpZiAoIXRhcmdldFN0eWxl
LT50cmFuc2l0aW9ucygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWRkIGFsbCB0
aGUgbmV3IGFuaW1hdGlvbnMKKyAgICBmb3IgKGFuaW0gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlv
bnMoKTsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAgICAgICAKKyAgICAgICAgaW50
IHByb3BlcnR5ICAgICAgICA9IGFuaW0tPnByb3BlcnR5KCk7CisgICAgICAgIGRvdWJsZSBkdXJh
dGlvbiAgICAgPSBhbmltLT5kdXJhdGlvbigpOworICAgICAgICBkb3VibGUgZGVsYXkgICAgICAg
ID0gYW5pbS0+ZGVsYXkoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eSAmJiAoZHVy
YXRpb24gfHwgZGVsYXkpICYmICFtX3RyYW5zaXRpb25zLmNvbnRhaW5zKHByb3BlcnR5KSkgewor
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG5ldyBJbXBsaWNpdEFu
aW1hdGlvbihjb25zdF9jYXN0PFRyYW5zaXRpb24qPihhbmltKSwgcmVuZGVyZXIsIHRoaXMpOwor
ICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcGVydHksIGFuaW1hdGlvbik7CisgICAg
ICAgIH0KKyAgICB9Cit9CiAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBvYmpl
Y3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdh
bnQgdGhlbQotICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVk
LgotICAgIFJlbmRlclN0eWxlKiByZXN1bHQgPSAwOwotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNp
dEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgVmVj
dG9yPGludD4gb2Jzb2xldGVUcmFuc2l0aW9uczsKK1JlbmRlclN0eWxlKiBDb21wb3NpdGVBbmlt
YXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIFJlbmRlclN0eWxlKiBy
ZXN1bHRTdHlsZSA9IDA7CisgICAgCisgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25z
IGlmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApCisgICAgdXBkYXRl
VHJhbnNpdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIAor
ICAgIGlmIChjdXJyZW50U3R5bGUpIHsKKyAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0cmFu
c2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0
YXRlLiAgV2Ugd2FudCB0aGVtCisgICAgICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSom
IG9ubHkgaWYgbmVlZGVkLgorICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiAgYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoYW5pbSkgeworICAgICAgICAg
ICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0
U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAg
ICAKLSAgICAvLyBMb29rIGF0IHRoZSAiYWxsIiBhbmltYXRpb24gZmlyc3QuCi0gICAgSW1wbGlj
aXRBbmltYXRpb24qIGFsbEFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy5nZXQoY0FuaW1hdGVBbGwp
OwotICAgIGlmIChhbGxBbmltYXRpb24pIHsKLSAgICAgICAgYWxsQW5pbWF0aW9uLT5hbmltYXRl
KHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHQpOworICAg
IHJldHVybiByZXN1bHRTdHlsZSA/IHJlc3VsdFN0eWxlIDogdGFyZ2V0U3R5bGU7Cit9CisKKy8v
ICJhbmltYXRpbmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJl
cyB0aGUgdGltZXIgdG8ga2VlcCBmaXJpbmcKKy8vIChlLmcuIGEgdHJhbnNpdGlvbikKK3ZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZykKK3sKKyAg
ICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOworICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoaW5BbmltYXRpbmcpOworICAgIH0gICAgCit9
CisKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRpbmcoKQoreworICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICh0
cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPmFuaW1hdGluZygpICYmIHRyYW5zaXRpb24tPnJ1bm5p
bmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQogCi0gICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJl
IG1hcmtlZCBhcyBzdGFsZSwgdGhlbiB3ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAg
ICAgLy8gaXRlcmF0aW9uIG9mIHRoZSBoYXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAo
YWxsQW5pbWF0aW9uLT5maW5pc2hlZCgpICYmIGFsbEFuaW1hdGlvbi0+c3RhbGUoKSkKLSAgICAg
ICAgICAgIG9ic29sZXRlVHJhbnNpdGlvbnMuYXBwZW5kKGNBbmltYXRlQWxsKTsKK3ZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpyZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
Cit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgdHJhbnNpdGlvbi0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICBkZWxldGUg
dHJhbnNpdGlvbjsKICAgICB9CisgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworfQorCit2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQoreworICAgIGlmIChzdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIC8vIE5vdyBsb29rIGF0IHRoZSBzcGVjaWFsaXplZCBhbmltYXRpb25zLgotICAg
IGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9h
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBTa2lwIG92
ZXIgdGhlICJhbGwiIGFuaW1hdGlvbiwgc2luY2Ugd2UgYW5pbWF0ZWQgaXQgYWxyZWFkeS4KLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpCisgICAgLy8g
UmVzZXQgdHJhbnNpdGlvbnMKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAKLSAgICAgICAgaXQtPnNlY29uZC0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0KTsKKyAgICAgICAgaWYgKGFuaW0tPnBvc3RhY3Rp
dmUoKSAmJiAhYW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpIHsKKyAgICAgICAgICAgIGFuaW0t
PnVwZGF0ZVN0YXRlTWFjaGluZShhbmltLT5TVEFURV9JTlBVVF9NQUtFX05FVywgLTEpOworICAg
ICAgICAgICAgYW5pbS0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICB9CisgICAgfQorfQogCi0g
ICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBhcyBz
dGFsZSwgdGhlbiB3ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gaXRlcmF0
aW9uIG9mIHRoZSBoYXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAoaXQtPnNlY29uZC0+
ZmluaXNoZWQoKSAmJiBpdC0+c2Vjb25kLT5zdGFsZSgpKQotICAgICAgICAgICAgb2Jzb2xldGVU
cmFuc2l0aW9ucy5hcHBlbmQoaXQtPnNlY29uZC0+cHJvcGVydHkoKSk7Cit2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQoreworICAgIGlmIChtX3N1c3BlbmRlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKIAorICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFu
aW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0
YXRlKGZhbHNlKTsKKyAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIGlmICghbV9zdXNwZW5kZWQpCisgICAgICAg
IHJldHVybjsKICAgICAKLSAgICAvLyBOb3cgY3VsbCBvdXQgYW55IHN0YWxlIGFuaW1hdGlvbnMg
dGhhdCBhcmUgZmluaXNoZWQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9ic29sZXRl
VHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKG9ic29sZXRlVHJhbnNpdGlvbnNbaV0pOwotICAg
ICAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyLCAwLCAwKTsKLSAgICAgICAgZGVsZXRlIGFu
aW1hdGlvbjsKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5o
YXNTdHlsZSgpKSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7Cisg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVz
dWx0Owordm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25z
KGludCBwcm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIChhbmltLT5wcm9wZXJ0eSgpID09IHByb3Bl
cnR5IHx8IGFuaW0tPnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5p
bS0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKKyAgICB9Cit9CiAKLSAgICByZXR1cm4gdGFyZ2V0U3R5
bGU7Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5p
bWF0aW9ucyhpbnQgcHJvcGVydHkpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiAoYW5pbS0+cHJvcGVydHkoKSA9
PSBwcm9wZXJ0eSB8fCBhbmltLT5wcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAg
ICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOworICAgIH0KIH0KIAotYm9vbCBDb21wb3Np
dGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKK3ZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpzdHlsZUF2YWlsYWJsZSgpCiB7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5p
bWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmICghaXQt
PnNlY29uZC0+ZmluaXNoZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMgPT0gMCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQt
PnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFz
ZTo6U1RBVEVfSU5QVVRfU1RZTEVfQVZBSUxBQkxFLCAtMSk7CisgICAgfQogfQogCi12b2lkIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
Ym9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5
KSBjb25zdAogewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwg
SW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5yZXNldChyZW5kZXJl
ciwgMCwgMCk7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKKyNwcmFnbWEgbWFyayAtCisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGlj
OgorICAgIFByb3BlcnR5V3JhcHBlckJhc2UoaW50IHByb3ApCisgICAgOiBtX3Byb3AocHJvcCkK
KyAgICB7IH0KKyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgeyB9CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0PTA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNv
bnN0PTA7CisgICAgCisgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9
CisgICAgCitwcml2YXRlOgorICAgIGludCBtX3Byb3A7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK2NsYXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoaW50IHByb3AsIFQg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFz
ZShwcm9wKQorICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1
YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPipt
X2dldHRlcikoKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5bGU6
OiptX2dldHRlcikoKSBjb25zdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
UHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CitwdWJs
aWM6CisgICAgUHJvcGVydHlXcmFwcGVyKGludCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQorICAgIDogUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikK
KyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykg
Y29uc3QKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKChhLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgor
ICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOworfTsKKworY2xhc3MgUHJvcGVy
dHlXcmFwcGVyU2hhZG93IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRh
Kj4geworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhpbnQgcHJvcCwgU2hhZG93
RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoU2hhZG93RGF0YSosIGJvb2wpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFNoYWRvd0RhdGEqPihwcm9wLCBnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAg
eyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBz
aGFkb3dhID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9
IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNoYWRvd2EgJiYgc2hh
ZG93YiB8fCBzaGFkb3dhICYmICFzaGFkb3diKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoc2hhZG93YSAmJiBzaGFkb3diICYmICgqc2hhZG93YSAhPSAqc2hhZG93Yikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAg
ICB7CisgICAgICAgIFNoYWRvd0RhdGEqIHNoYWRvd2EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBTaGFkb3dEYXRhKiBzaGFkb3diID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hh
ZG93RGF0YSBkZWZhdWx0U2hhZG93RGF0YSgwLCAwLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnQpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFzaGFkb3dhKQorICAgICAgICAgICAgc2hhZG93YSA9ICZk
ZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgaWYgKCFzaGFkb3diKQorICAgICAgICAgICAgc2hh
ZG93YiA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgCisgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKHNoYWRvd2EsIHNoYWRvd2IsIHByb2cpLCBmYWxzZSk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShTaGFkb3dE
YXRhKiwgYm9vbCk7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplIDogcHVibGlj
IFByb3BlcnR5V3JhcHBlckdldHRlcjxJbnRTaXplPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlX
cmFwcGVySW50U2l6ZShpbnQgcHJvcCwgSW50U2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBJbnRTaXplJikpCisgICAg
OiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgSW50U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUg
c2l6ZWIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChzaXpl
YSA9PSBzaXplYik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgSW50U2l6ZSBzaXplYSA9IChhLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6ZWIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhzaXplYSwg
c2l6ZWIsIHByb2cpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgKFJlbmRlclN0
eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IEludFNpemUmKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3Jh
cHBlck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKGludCBwcm9wLCBjb25z
dCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckJhc2UocHJv
cCkKKyAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xv
ciA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBm
cm9tQ29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBi
bGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNv
bG9yID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0
dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9nKSk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29u
c3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKK307
CisKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSgpOwotCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGdldChSZW5kZXJP
YmplY3QqLCBSZW5kZXJTdHlsZSopOworICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYWNj
ZXNzQ29tcG9zaXRlQW5pbWF0aW9uKFJlbmRlck9iamVjdCopOwogICAgIGJvb2wgY2xlYXIoUmVu
ZGVyT2JqZWN0Kik7CiAgICAgCi0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlPiopOwotICAgIHZvaWQgdXBkYXRlVGltZXIoKTsKLQotICAgIGJvb2wg
aGFzSW1wbGljaXRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0aW9ucy5pc0Vt
cHR5KCk7IH0KLQorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4qKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Cisg
ICAgCisgICAgdm9pZCB1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU+Kik7CisgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rp
c3BhdGNoZXIoKTsKKyAgICAKKyAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVy
biAhbV9jb21wb3NpdGVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIAorICAgIHZvaWQgc3Vz
cGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICAKKyAgICB2b2lkIGNsZWFudXBGaW5pc2hl
ZEFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7CisgICAgCisg
ICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwg
aW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1
YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7
CisgICAgCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBh
bmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIGJvb2wgYmxlbmRQcm9wZXJ0aWVzKGludCBwcm9w
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9nKTsKKyAgICAKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2
YWlsYWJsZShib29sIHdhaXRpbmcpIHsgaWYgKHdhaXRpbmcpIG1fbnVtU3R5bGVBdmFpbGFibGVX
YWl0ZXJzKys7IGVsc2UgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsgfQorICAgIAogcHJp
dmF0ZToKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0
aW9uKj4gbV9hbmltYXRpb25zOwotICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
PiBtX3RpbWVyOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCk7CisgICAgCisg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUFuaW1hdGlvbio+IFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXAgbV9jb21wb3NpdGVBbmltYXRpb25zOworICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiBtX2FuaW1hdGlvblRpbWVyOworICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXI7CiAgICAgRnJhbWUqIG1fZnJhbWU7
CisgICAgdWludDMyX3QgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnM7CisgICAgCisgICAgc3Rh
dGljIFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4qIGdfcHJvcGVydHlXcmFwcGVyczsKKyAg
ICBzdGF0aWMgaW50IGdfcHJvcGVydHlXcmFwcGVyTWFwW251bUNTU1Byb3BlcnRpZXNdOwogfTsK
IAorI3ByYWdtYSBtYXJrIC0KKworVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmdfcHJvcGVydHlXcmFwcGVycyA9IDA7CitpbnQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmdfcHJvcGVydHlXcmFwcGVyTWFwW107CisKIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSogZnJh
bWUpCi0gICAgOiBtX3RpbWVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGlt
ZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCis6IG1fYW5pbWF0aW9uVGltZXIodGhpcywg
JkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKQorLCBtX3Vw
ZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojp1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQpCissIG1fZnJhbWUoZnJhbWUpCissIG1f
bnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKDApCiB7CisgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsK
IH0KIAogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5BbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSgpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7CisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fY29tcG9zaXRlQW5pbWF0aW9ucyk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlUHJvcGVydHlNYXAoKQoreworICAgIC8v
IEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBzaG91bGQgcmVm
IGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQW5pbWF0aW9uQ29udHJvbGxlciBp
cyBkZXN0cm95ZWQ/CisgICAgaWYgKGdfcHJvcGVydHlXcmFwcGVycyA9PSAwKSB7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycyA9IG5ldyBWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KCk7
CisgICAgICAgIAorICAgICAgICAvLyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVy
cyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlMZWZ0
LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TGVmdCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NT
UHJvcGVydHlSaWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdo
dCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPExlbmd0aD4oQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5
bGU6OnNldFRvcCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90
dG9tLCAmUmVuZGVyU3R5bGU6OnNldEJvdHRvbSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlXaWR0aCwg
JlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NT
UHJvcGVydHlIZWlnaHQsICZSZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhl
aWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRl
clN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRo
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0
eWxlOjpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0aCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSk7Cisg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoPihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVmdCwgJlJl
bmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0
LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3As
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpbkJv
dHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2lu
Qm90dG9tKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSk7CisgICAgICAgIGdfcHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9w
ZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHls
ZTo6c2V0UGFkZGluZ1JpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwg
JlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0
eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNpdHkpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBDb2xvciY+KENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0Q29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
LCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lk
dGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVt
blJ1bGVXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgJlJlbmRlclN0
eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hv
cnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291
bnQsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uQ291bnQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5XaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxT
cGFjaW5nLCAmUmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyVmVydGljYWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnZlcnRpY2FsQm9yZGVyU3BhY2lu
ZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3Bl
cnR5WkluZGV4LCAmUmVuZGVyU3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxMZW5ndGg+KENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpsaW5lSGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVPZmZzZXQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVXaWR0aCkpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGlu
dD4oQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcs
ICZSZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZykpOworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlXb3JkU3Bh
Y2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3Bh
Y2luZykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSk7
CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6
dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZKSk7Cisg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRT
aXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcExlZnRSYWRpdXMp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdo
dFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJCb3R0b21MZWZ0UmFkaXVzKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90
dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxFVmlzaWJpbGl0eT4oQ1NT
UHJvcGVydHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHls
ZTo6c2V0VmlzaWJpbGl0eSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20sICZSZW5kZXJTdHlsZTo6
em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogdGhlc2UgbWlnaHQgYmUgaW52YWxpZCBjb2xvcnMsIG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3Ip
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29s
b3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgJlJl
bmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3Ip
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxl
Ojpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tQ29sb3IpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZXNlIGFyZSBmb3Igc2hhZG93cworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hh
ZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
clNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6dGV4dFNoYWRvdywg
JlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtl
IHN1cmUgdW51c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpIG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVyTWFwW2ldID0gQ1NTUHJvcGVydHlJbnZhbGlkOworICAg
ICAgICAKKyAgICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAg
IEFTU0VSVCgoKmdfcHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCkgLSBmaXJzdENTU1By
b3BlcnR5IDwgbnVtQ1NTUHJvcGVydGllcyk7CisgICAgICAgICAgICBnX3Byb3BlcnR5V3JhcHBl
ck1hcFsoKmdfcHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCkgLSBmaXJzdENTU1Byb3Bl
cnR5XSA9IGk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIHN0YXRpYworYm9vbCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgaWYgKHByb3AgPT0gY0Fu
aW1hdGVBbGwpIHsKKyAgICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5lcXVhbHMoYSwgYikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ugewor
ICAgICAgICBpbnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0Q1NTUHJvcGVydHk7CisgICAgICAg
IAorICAgICAgICBpZiAocHJvcEluZGV4ID49IDAgJiYgcHJvcEluZGV4IDwgbnVtQ1NTUHJvcGVy
dGllcykgeworICAgICAgICAgICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtwcm9wSW5k
ZXhdOworICAgICAgICAgICAgcmV0dXJuIChpID49IDApID8gKCpnX3Byb3BlcnR5V3JhcHBlcnMp
W2ldLT5lcXVhbHMoYSwgYikgOiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0
cnVlOwogfQogCi1Db21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmdldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpCisvLyBzdGF0aWMgLSByZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3
YXJlIGFuaW1hdGlvbiB0aW1lcnMKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJs
ZW5kUHJvcGVydGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykKIHsKLSAgICBDb21wb3Np
dGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9hbmltYXRpb25zLmdldChyZW5kZXJl
cik7Ci0gICAgaWYgKCFhbmltYXRpb24gJiYgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpIHsK
LSAgICAgICAgYW5pbWF0aW9uID0gbmV3IENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKCk7Ci0g
ICAgICAgIG1fYW5pbWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CisgICAgaWYgKHBy
b3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAgICAgYm9vbCBuZWVkc1RpbWVyID0gZmFsc2U7Cisg
ICAgCisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBQ
cm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldOwor
ICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwgYikpIHsKKyAgICAgICAgICAgICAg
ICB3cmFwcGVyLT5ibGVuZChkc3QsIGEsIGIsIHByb2cpOworICAgICAgICAgICAgICAgIG5lZWRz
VGltZXIgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
ZWVkc1RpbWVyOworICAgIH0KKyAgICAKKyAgICBpbnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0
Q1NTUHJvcGVydHk7CisgICAgaWYgKHByb3BJbmRleCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNT
U1Byb3BlcnRpZXMpIHsKKyAgICAgICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtwcm9w
SW5kZXhdOworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldOworICAgICAgICAgICAg
d3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9nKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworQ29tcG9z
aXRlQW5pbWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWNjZXNzQ29tcG9zaXRl
QW5pbWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKKyAg
ICBpZiAoIWFuaW1hdGlvbikgeworICAgICAgICBhbmltYXRpb24gPSBuZXcgQ29tcG9zaXRlQW5p
bWF0aW9uKCFyZW5kZXJlci0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCksIHRoaXMpOworICAg
ICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBhbmltYXRpb24pOwogICAg
IH0KICAgICByZXR1cm4gYW5pbWF0aW9uOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpjbGVhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIENvbXBvc2l0ZUlt
cGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMudGFrZShyZW5kZXJlcik7
CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUg
c3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KKyAgICAvLyBkbyBhIHNldENoYW5nZWQoKSB3
aGVuIHN1c3BlbmRlZAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLnRha2UocmVuZGVyZXIpOwogICAgIGlmICghYW5pbWF0aW9uKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5yZXNldChyZW5kZXJlcik7CisgICAg
YW5pbWF0aW9uLT5yZXNldFRyYW5zaXRpb25zKHJlbmRlcmVyKTsKKyAgICBib29sIHdhc1N1c3Bl
bmRlZCA9IGFuaW1hdGlvbi0+c3VzcGVuZGVkKCk7CiAgICAgZGVsZXRlIGFuaW1hdGlvbjsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdhc1N1c3BlbmRlZDsKIH0KIAotdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlVGltZXIoKQordm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpCit7CisgICAgUmVuZGVy
T2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAg
ICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
QW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbXBBbmltLT5jbGVhbnVwRmluaXNoZWRBbmlt
YXRpb25zKHJlbmRlcmVyKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnN0eWxlQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdh
aXRlcnMgPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1h
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAh
PSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIGl0LT5zZWNvbmQtPnN0eWxlQXZhaWxh
YmxlKCk7CisgICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVBbmltYXRpb25UaW1lcigpCiB7CiAgICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJh
dG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2Jq
ZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25k
LT5hbmltYXRpbmcoKSkgeworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsK
KyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25z
RW5kOyArK2l0KSB7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+
YW5pbWF0aW5nKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoYW5pbWF0aW5nKSB7Ci0g
ICAgICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV90aW1lci5zdGFy
dFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Ci0gICAgfSBlbHNlIGlmIChtX3RpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgICAgICBpZiAoIW1fYW5p
bWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRSZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAgIH0gZWxzZSBpZiAobV9hbmlt
YXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsK
K30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlz
cGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopCit7CisgICAg
aWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICB9CiB9CiAKLXZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VXBk
YXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpCiB7CisgICAgaWYgKCFtX3VwZGF0ZVJlbmRlcmluZ0Rp
c3BhdGNoZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNo
ZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZT4qIHRpbWVyKQoreworICAgIC8vY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpOworICAg
IAogICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFu
Z2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8g
YW4gaW1tZWRpYXRlCiAgICAgLy8gdXBkYXRlUmVuZGVyaW5nLiAgSXQgd2lsbCB0aGVuIGNhbGwg
YmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KICAgICBib29sIGFuaW1hdGluZyA9IGZh
bHNlOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRp
b24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1h
cDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBp
dCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPmFuaW1hdGluZygpKSB7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVu
ZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5m
aXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRp
bmcoKSkgewogICAgICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGl0LT5m
aXJzdC0+ZWxlbWVudCgpLT5zZXRDaGFuZ2VkKCk7CisgICAgICAgICAgICBjb21wQW5pbS0+c2V0
QW5pbWF0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNldENoYW5nZWQocmVuZGVyZXItPmVsZW1l
bnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgCi0gICAgdXBkYXRlVGltZXIoKTsKKyAgICB1cGRhdGVB
bmltYXRpb25UaW1lcigpOwogfQogCi1BbmltYXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250
cm9sbGVyKEZyYW1lKiBmcmFtZSkKLTptX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlKGZyYW1lKSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzQW5pbWF0aW5n
UHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0
CiB7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZ2V0KG9iaik7CisgICAgaWYgKCFhbmltYXRpb24pIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KTsKK30K
IAordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoRG9j
dW1lbnQqIGRvY3VtZW50KQoreworICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBjb21w
QW5pbS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQW5pbWF0
aW9uVGltZXIoKTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1l
QW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRp
b25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9
IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKKyAg
ICAgICAgICAgIGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgfQorICAgIAorICAg
IHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKK3ZvaWQgSW1w
bGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKQoreworICAgIGlmICghcnVubmlu
ZygpIHx8ICFtX29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBub3QgcnVubmluZyBhbnkgYW5pbWF0aW9ucyBh
bmQgdGhlcmUgaXMgbm8gY2hhbmdlIGluIG91ciBwcm9wLCBqdXN0IHJldHVybiAKKyAgICBpZiAo
aXNuZXcoKSAmJiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKG1f
cHJvcGVydHksIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUs
IGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgor
ICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIHJlc2V0IGFuZCBzZW5kIGJhY2sgdGhlIHRhcmdldFN0
eWxlCisgICAgaWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
U1RBVEVfSU5QVVRfTUFLRV9ORVcsIC0xKTsKKyAgICAgICAgcmVzZXQocmVuZGVyZXIpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICBpb0FuaW1h
dGVkU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odGFyZ2V0U3R5bGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuZCB0aGUg
dGFyZ2V0U3R5bGUgdmFsdWUgaGFzIGNoYW5nZWQgZnJvbSBvdXIgY3VycmVudCB0b1N0eWxlIHZh
bHVlLCB3ZSBuZWVkIHRvIHJlc2V0LgorICAgIC8vIFdlIGFsc28gbmVlZCB0byByZXNldCBpZiB3
ZSBhcmUgbmV3LgorICAgIGlmIChpc25ldygpIHx8ICFtX3RvU3R5bGUgfHwgIUFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwobV9wcm9wZXJ0eSwgbV90b1N0eWxlLCB0
YXJnZXRTdHlsZSkpIHsKKyAgICAgICAgLy8gT3BhY2l0eSBpcyBzcGVjaWFsLiBUaGlzIGlzIGNo
YW5naW5nIGEgY29uc3QgUmVuZGVyU3R5bGUsIGJ1dCB3ZSBrbm93IHdoYXQgd2UgYXJlIGRvaW5n
LCByZWFsbHkgOi0pCisgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gZG8gdGhpcz8KKyAgICAgICAg
aWYgKCFpc25ldygpICYmIG1fZnJvbVN0eWxlICYmIChtX3Byb3BlcnR5ID09IENTU1Byb3BlcnR5
T3BhY2l0eSB8fCBtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsKSkgeworICAgICAgICAgICAgLy8g
R2V0IHRoZSBibGVuZGVkIHZhbHVlIG9mIG9wYWNpdHkgaW50byB0aGUgY3VycmVudFN0eWxlICh3
aGljaCB3aWxsIGJlIHRoZSBuZXcgZnJvbVN0eWxlKQorICAgICAgICAgICAgZG91YmxlIHByb2cg
PSBwcm9ncmVzcygxLCAwKTsKKyAgICAgICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpibGVuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlPcGFjaXR5LCBjb25zdF9jYXN0PFJlbmRlclN0
eWxlKj4oY3VycmVudFN0eWxlKSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUp
OworICAgIH0KKyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCisgICAgLy8g
V2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBu
ZWVkZWQKKyAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgaW9BbmltYXRlZFN0eWxl
ID0gbmV3IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxl
KTsKKyAgICAKKyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDApOworICAgIGJvb2wgbmVl
ZHNBbmltID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcyhtX3By
b3BlcnR5LCBpb0FuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOwor
ICAgIGlmIChuZWVkc0FuaW0pCisgICAgICAgIHNldEFuaW1hdGluZygpOworCisgICAgLy9BU1NF
UlQobmVlZHNBbmltICE9IG1fd2FpdGVkRm9yUmVzcG9uc2UgfHwgcHJlYWN0aXZlKCkpOworfQor
Citib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1l
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5k
QW5pbWF0aW9uKGJvb2wgcmVzZXQpCit7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246Om9u
QW5pbWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIC8vIHdlJ3JlIGNvbnZl
cnRpbmcgdGhlIGFuaW1hdGlvbiBpbnRvIGEgdHJhbnNpdGlvbiBoZXJlCisgICAgaWYgKCFzZW5k
VHJhbnNpdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgaW5F
bGFwc2VkVGltZSkpIHsKKyAgICAgICAgLy8gd2UgZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3
aGljaCB3b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigpLCBzbyB3ZSdsbCBqdXN0IGVuZAorICAgICAg
ICAvLyBpdCBoZXJlLgorICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgfQorfQorCiti
b29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHJldHVybiBm
YWxzZTsgLy8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisKK3ZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBm
cm9tIC8qID0gMCAqLywgY29uc3QgUmVuZGVyU3R5bGUqIHRvIC8qID0gMCAqLykKK3sKKyAgICBB
U1NFUlQoKCFtX3RvU3R5bGUgJiYgIXRvKSB8fCBtX3RvU3R5bGUgIT0gdG8pOworICAgIEFTU0VS
VCgoIW1fZnJvbVN0eWxlICYmICFmcm9tKSB8fCBtX2Zyb21TdHlsZSAhPSBmcm9tKTsKKyAgICBp
ZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVu
ZGVyQXJlbmEoKSk7CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5kZXJl
ZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7CisgICAgCisgICAgbV9mcm9tU3R5bGUgPSBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMgcmVhZC1vbmx5LCBvdGhlciB0
aGFuIHRoZSByZWYKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5y
ZWYoKTsKKyAgICAKKyAgICBtX3RvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odG8p
OyAgICAgICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmICht
X3RvU3R5bGUpCisgICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7CisgICAgCisgICAgLy8gcmVzdGFy
dCB0aGUgdHJhbnNpdGlvbgorICAgIGlmIChmcm9tICYmIHRvKQorICAgICAgICB1cGRhdGVTdGF0
ZU1hY2hpbmUoU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sIC0xKTsKK30KKwordm9pZCBJ
bXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRlbihib29sIGIpCit7CisgICAgaWYgKGIgIT0g
bV9vdmVycmlkZGVuKSB7CisgICAgICAgIG1fb3ZlcnJpZGRlbiA9IGI7CisgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShtX292ZXJyaWRkZW4gPyBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSA6
IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSwgLTEpOworICAgIH0KK30KKworYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSB8fAorICAgIChtX3Byb3BlcnR5ID09IGNB
bmltYXRlQWxsICYmICFBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFs
KHByb3BlcnR5LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSk7Cit9CisKKyNwcmFnbWEgbWFyayAt
CisKK0FuaW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1l
KQorOiBtX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkKK3sKKyAg
ICAKIH0KIAogQW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNvbnRyb2xsZXIoKQpAQCAt
NTY2LDUwICsxNjc4LDg2IEBAIEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRpb25Db250cm9s
bGVyKCkKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBB
bmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0gICAgaWYgKCFtX2RhdGEtPmhhc0ltcGxpY2l0QW5pbWF0aW9ucygpKQorICAgIGlm
ICghbV9kYXRhLT5oYXNBbmltYXRpb25zKCkpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAg
IGlmIChtX2RhdGEtPmNsZWFyKHJlbmRlcmVyKSkKLSAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQo
KS0+c2V0Q2hhbmdlZCgpOworICAgICAgICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkp
OwogfQogCi1SZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW1wbGljaXRB
bmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkK
LXsKK1JlbmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sgICAgCisgICAg
Ly8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCisgICAgaWYgKCFyZW5k
ZXJlci0+ZG9jdW1lbnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkK
KyAgICAgICAgcmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxlKiBvbGRTdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIAorICAgIGlmICgoIW9sZFN0eWxlIHx8ICFvbGRT
dHlsZS0+dHJhbnNpdGlvbnMoKSkgJiYgIW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKQorICAgICAg
ICByZXR1cm4gbmV3U3R5bGU7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9
IG5ld1N0eWxlOworICAgIAogICAgIC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNp
dCBhbmltYXRpb25zIGZyb20gYSBoYXNodGFibGUuICBXZSB0aGVuIGNvbXBhcmUgdGhlbQogICAg
IC8vIGFnYWluc3QgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2Un
cmUgaW4gc3luYy4gIElmIGRlc3RpbmF0aW9uIHZhbHVlcwogICAgIC8vIGhhdmUgY2hhbmdlZCwg
d2UgcmVzZXQgdGhlIGFuaW1hdGlvbi4gIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZh
bHVlcyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAgICAgQVNTRVJUKHJlbmRl
cmVyLT5lbGVtZW50KCkpOyAvLyBGSVhNRTogV2UgZG8gbm90IGFuaW1hdGUgZ2VuZXJhdGVkIGNv
bnRlbnQgeWV0LgotCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9
IG1fZGF0YS0+Z2V0KHJlbmRlcmVyLCBuZXdTdHlsZSk7Ci0gICAgaWYgKCFhbmltYXRpb24gJiYg
IW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gbmV3U3R5bGU7Ci0KLSAg
ICBSZW5kZXJTdHlsZSogYmxlbmRlZFN0eWxlID0gYW5pbWF0aW9uLT5hbmltYXRlKHJlbmRlcmVy
LCByZW5kZXJlci0+c3R5bGUoKSwgbmV3U3R5bGUpOwotICAgIG1fZGF0YS0+dXBkYXRlVGltZXIo
KTsKLQorICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0g
bV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ocmVuZGVyZXIpOworICAgIGJsZW5kZWRT
dHlsZSA9IHJlbmRlcmVyQW5pbWF0aW9ucy0+YW5pbWF0ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5l
d1N0eWxlKTsKKyAgICAKKyAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAg
CiAgICAgaWYgKGJsZW5kZWRTdHlsZSAhPSBuZXdTdHlsZSkgewotICAgICAgICAvLyBEbyBzb21l
IG9mIHRoZSB3b3JrIHRoYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoKSBk
b2VzLCB0byBpbXBvc2UgcnVsZXMKLSAgICAgICAgLy8gbGlrZSBvcGFjaXR5IGNyZWF0aW5nIHN0
YWNraW5nIGNvbnRleHQuCi0gICAgICAgIGlmIChibGVuZGVkU3R5bGUtPmhhc0F1dG9aSW5kZXgo
KSAmJiAoYmxlbmRlZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IGJsZW5kZWRTdHlsZS0+aGFz
VHJhbnNmb3JtKCkpKQorICAgICAgICAvLyBJZiB0aGUgYW5pbWF0aW9ucy90cmFuc2l0aW9ucyBj
aGFuZ2Ugb3BhY2l0eSwgdHJhbnNmb3JtIG9yIHBlcnNwZWN0aXZlLCB3ZSBuZWVlZCB0byB1cGRh
dGUKKyAgICAgICAgLy8gdGhlIHN0eWxlIHRvIGltcG9zZSB0aGUgc3RhY2tpbmcgcnVsZXMuIE5v
dGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSBpbiBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZSgpLgorICAgICAgICBpZiAoYmxlbmRlZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYg
KChibGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYpKSkgLy8gRklYTUUgfHwgYmxlbmRlZFN0
eWxlLT5oYXNUcmFuc2Zvcm1PclBlcnNwZWN0aXZlKCkpKSkKICAgICAgICAgICAgIGJsZW5kZWRT
dHlsZS0+c2V0WkluZGV4KDApOwogICAgIH0KLQogICAgIHJldHVybiBibGVuZGVkU3R5bGU7CiB9
CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKQorYm9vbCBB
bmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJP
YmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPmlz
QW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKG9iaiwgcHJvcGVydHkpOworfQorCit2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkK
IHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRhYmxlIGFuZCBjYWxsIHBhdXNl
IG9uIGVhY2ggYW5pbWF0aW9uLgotICAgIC8vIEtpbGwgb3VyIHRpbWVyLgorI2lmZGVmIERFQlVH
X1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIg
JXAgc3VzcGVuZEFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwXG4iLCB0aGlzLCBkb2N1bWVudCk7
CisjZW5kaWYKKyAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKGRvY3VtZW50KTsKIH0KIAot
dm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKCkKK3ZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0g
ICAgLy8gRklYTUU6IFdhbGsgdGhlIHdob2xlIGhhc2h0YWJsZSBhbmQgY2FsbCByZXN1bWUgb24g
ZWFjaCBhbmltYXRpb24uCi0gICAgLy8gU3RhcnQgb3VyIHRpbWVyLgorI2lmZGVmIERFQlVHX1NU
QVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAg
cmVzdW1lQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNl
bmRpZgorICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9ucyhkb2N1bWVudCk7CiB9CiAKK3ZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkKK3sK
KyAgICBtX2RhdGEtPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworfQorCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0eWxlQXZhaWxhYmxlKCkKK3sKKyAgICBtX2RhdGEtPnN0
eWxlQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRXYWl0aW5n
Rm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3YWl0aW5nKQoreworICAgIGlmICh3YWl0aW5nKQorICAg
ICAgICBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycysrOworICAgIGVsc2UKKyAgICAgICAgbV9u
dW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnNl
dFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSh3YWl0aW5nKTsKK30KKyAgICAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmggYi9XZWJDb3JlL3BhZ2UvQW5p
bWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGZkYTExNDMuLjkwYzQ5ZDkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0FuaW1h
dGlvbkNvbnRyb2xsZXIuaApAQCAtMjksOSArMjksMTIgQEAKICNpZm5kZWYgQW5pbWF0aW9uQ29u
dHJvbGxlcl9oCiAjZGVmaW5lIEFuaW1hdGlvbkNvbnRyb2xsZXJfaAogCisjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwpAQCAtNDIsMTQgKzQ1LDIyIEBAIHB1
YmxpYzoKICAgICBBbmltYXRpb25Db250cm9sbGVyKEZyYW1lKik7CiAgICAgfkFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKICAgICAKLSAgICB2b2lkIGNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqKTsKLSAgICBSZW5kZXJTdHlsZSogdXBkYXRlSW1wbGljaXRBbmltYXRpb25zKFJl
bmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisgICAgdm9pZCBjYW5jZWxBbmlt
YXRpb25zKFJlbmRlck9iamVjdCopOworICAgIFJlbmRlclN0eWxlKiB1cGRhdGVBbmltYXRpb25z
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisgICAgCisgICAgYm9vbCBp
c0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3Bl
cnR5KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBk
b2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7
CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigpOwogICAgIAotICAgIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHN0
YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgIAorICAgIHZvaWQgc3R5bGVBdmFp
bGFibGUoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUq
IG1fZGF0YTsKKyAgICAKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDMzMGM5NzIuLjhhYWUzYTQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cApAQCAtMTQ4MCw3ICsxNDgwLDcgQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3
ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQpCiAgICAgICAgIGlmICh2aWV3LT5mcmFtZSgpKSB7
CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9j
dW1lbnQtPnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQt
PnJlbmRlcmVyKCktPmxheWVyKCktPnN1c3BlbmRNYXJxdWVlcygpOwotICAgICAgICAgICAgdmll
dy0+ZnJhbWUoKS0+YW5pbWF0aW9uKCktPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAg
ICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb24oKS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQp
OwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
MTQ1ZTQ3Ni4uMTA3ZDYxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMTU2
LDkgKzIxNTYsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0
aW9uQ2hhbmdlKCkKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQogewogICAgIGlmICghaXNUZXh0KCkgJiYgbV9zdHlsZSAmJiBzdHlsZSkK
LSAgICAgICAgc3R5bGUgPSBhbmltYXRpb24oKS0+dXBkYXRlSW1wbGljaXRBbmltYXRpb25zKHRo
aXMsIHN0eWxlKTsKKyAgICAgICAgc3R5bGUgPSBhbmltYXRpb24oKS0+dXBkYXRlQW5pbWF0aW9u
cyh0aGlzLCBzdHlsZSk7CiAKLSAgICBzZXRTdHlsZShzdHlsZSk7CisgICAgaWYgKHN0eWxlKQor
ICAgICAgICBzZXRTdHlsZShzdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0yNTM1LDcgKzI1MzYsNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6ZGVzdHJveSgpCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKHRoaXMp
OwogCi0gICAgYW5pbWF0aW9uKCktPmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyh0aGlzKTsKKyAg
ICBhbmltYXRpb24oKS0+Y2FuY2VsQW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIC8vIEJ5IGRlZmF1
bHQgbm8gcmVmLWNvdW50aW5nLiBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKSBkb2Vzbid0IGNhbGwK
ICAgICAvLyB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgbmVlZHMgdG8gZG8gcmVmLWNvdW50aW5n
LiBJZiBhbnl0aGluZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggODdkODQ0NS4u
YTM3N2FkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC03Miw3ICs3Miw3IEBA
IHZvaWQgUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkKICAgICAvLyBTbyB0aGUgY29kZSBiZWxvdyBp
bmNsdWRlcyBjb3BpZWQgYW5kIHBhc3RlZCBjb250ZW50cyBvZgogICAgIC8vIGJvdGggUmVuZGVy
Qm94OjpkZXN0cm95KCkgYW5kIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpLgogICAgIC8vIEZpeCBv
cmlnaW5hbGx5IG1hZGUgZm9yIDxyZGFyOi8vcHJvYmxlbS80MjI4ODE4Pi4KLSAgICBhbmltYXRp
b24oKS0+Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1hdGlvbigpLT5j
YW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkp
CiAgICAgICAgIHYtPnJlbW92ZVdpZGdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAppbmRleCBmYWZmN2UwLi4yYWI4ZmNhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC02NjQsMTExICs2NjQsMTg0IEBAIFRyYW5zZm9ybU9w
ZXJhdGlvbiogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJv
bUYgKyAobV9mIC0gZnJvbUYpICogcHJvZ3Jlc3MpOwogfQogCitib29sIEtleWZyYW1lTGlzdDo6
b3BlcmF0b3I9PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0Cit7CisgICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSAhPSBvLm1fa2V5ZnJhbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9y
IGl0MiA9IG8ubV9rZXlmcmFtZXMuYmVnaW4oKTsgICAgCisgICAgZm9yIChWZWN0b3I8S2V5ZnJh
bWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IG1fa2V5ZnJhbWVzLmJlZ2luKCk7IGl0MSAh
PSBtX2tleWZyYW1lcy5lbmQoKTsgKytpdDEpIHsKKyAgICAgICAgaWYgKGl0MS0+a2V5ICE9IGl0
Mi0+a2V5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUxID0gaXQxLT5zdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlMiA9IGl0Mi0+c3R5bGU7CisgICAgICAgIGlmICghKHN0eWxlMSA9PSBzdHlsZTIpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK2l0MjsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQKK0tleWZyYW1lTGlzdDo6aW5zZXJ0KGZsb2F0IGluS2V5
LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5TdHlsZSkKK3sKKyAgICBpZiAoaW5LZXkgPCAwIHx8IGlu
S2V5ID4gMSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2tleWZyYW1l
c1tpXS5rZXkgPT0gaW5LZXkpIHsKKyAgICAgICAgICAgIG1fa2V5ZnJhbWVzW2ldLnN0eWxlID0g
aW5TdHlsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9r
ZXlmcmFtZXNbaV0ua2V5ID4gaW5LZXkpIHsKKyAgICAgICAgICAgIC8vIGluc2VydCBiZWZvcmUK
KyAgICAgICAgICAgIG1fa2V5ZnJhbWVzLmluc2VydChpLCBLZXlmcmFtZVZhbHVlKCkpOworICAg
ICAgICAgICAgbV9rZXlmcmFtZXNbaV0ua2V5ID0gaW5LZXk7CisgICAgICAgICAgICBtX2tleWZy
YW1lc1tpXS5zdHlsZSA9IGluU3R5bGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgLy8gYXBwZW5kCisgICAgbV9rZXlmcmFtZXMuYXBwZW5kKEtleWZy
YW1lVmFsdWUoKSk7CisgICAgbV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpLTFdLmtleSA9
IGluS2V5OworICAgIG1fa2V5ZnJhbWVzW21fa2V5ZnJhbWVzLnNpemUoKS0xXS5zdHlsZSA9IGlu
U3R5bGU7Cit9CisKIFRyYW5zaXRpb246OlRyYW5zaXRpb24oKQotICAgIDogbV9kdXJhdGlvbihS
ZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigpKQotICAgICwgbV9yZXBlYXRD
b3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25SZXBlYXRDb3VudCgpKQotICAgICwg
bV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbigpKQotICAgICwgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25Q
cm9wZXJ0eSgpKQorICAgIDogbV9kZWxheShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRl
bGF5KCkpCisgICAgLCBtX2RpcmVjdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRp
cmVjdGlvbigpKQorICAgICwgbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlv
bkR1cmF0aW9uKCkpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50KFJlbmRlclN0eWxlOjppbml0aWFs
QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSkKKyAgICAsIG1fbmFtZShSZW5kZXJTdHlsZTo6aW5p
dGlhbEFuaW1hdGlvbk5hbWUoKSkKKyAgICAsIG1fcGxheVN0YXRlKFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uUGxheVN0YXRlKCkpCisgICAgLCBtX3Byb3BlcnR5KFJlbmRlclN0eWxlOjpp
bml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKQorICAgICwgbV9kZWxheVNl
dChmYWxzZSkKKyAgICAsIG1fZGlyZWN0aW9uU2V0KGZhbHNlKQogICAgICwgbV9kdXJhdGlvblNl
dChmYWxzZSkKLSAgICAsIG1fcmVwZWF0Q291bnRTZXQoZmFsc2UpCi0gICAgLCBtX3RpbWluZ0Z1
bmN0aW9uU2V0KGZhbHNlKQorICAgICwgbV9pdGVyYXRpb25Db3VudFNldChmYWxzZSkKKyAgICAs
IG1fbmFtZVNldChmYWxzZSkKKyAgICAsIG1fcGxheVN0YXRlU2V0KGZhbHNlKQogICAgICwgbV9w
cm9wZXJ0eVNldChmYWxzZSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb25TZXQoZmFsc2UpCisgICAg
LCBtX2lzTm9uZShmYWxzZSkKICAgICAsIG1fbmV4dCgwKQogewogfQogCiBUcmFuc2l0aW9uOjpU
cmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pCi0gICAgOiBtX2R1cmF0aW9uKG8ubV9kdXJh
dGlvbikKLSAgICAsIG1fcmVwZWF0Q291bnQoby5tX3JlcGVhdENvdW50KQotICAgICwgbV90aW1p
bmdGdW5jdGlvbihvLm1fdGltaW5nRnVuY3Rpb24pCisgICAgOiBSZWZDb3VudGVkPFRyYW5zaXRp
b24+KCkKKyAgICAsIG1fZGVsYXkoby5tX2RlbGF5KQorICAgICwgbV9kaXJlY3Rpb24oby5tX2Rp
cmVjdGlvbikKKyAgICAsIG1fZHVyYXRpb24oby5tX2R1cmF0aW9uKQorICAgICwgbV9pdGVyYXRp
b25Db3VudChvLm1faXRlcmF0aW9uQ291bnQpCisgICAgLCBtX25hbWUoby5tX25hbWUpCisgICAg
LCBtX3BsYXlTdGF0ZShvLm1fcGxheVN0YXRlKQogICAgICwgbV9wcm9wZXJ0eShvLm1fcHJvcGVy
dHkpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikKKyAgICAsIG1f
ZGVsYXlTZXQoby5tX2RlbGF5U2V0KQorICAgICwgbV9kaXJlY3Rpb25TZXQoby5tX2RpcmVjdGlv
blNldCkKICAgICAsIG1fZHVyYXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQotICAgICwgbV9yZXBl
YXRDb3VudFNldChvLm1fcmVwZWF0Q291bnRTZXQpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0
KG8ubV90aW1pbmdGdW5jdGlvblNldCkKKyAgICAsIG1faXRlcmF0aW9uQ291bnRTZXQoby5tX2l0
ZXJhdGlvbkNvdW50U2V0KQorICAgICwgbV9uYW1lU2V0KG8ubV9uYW1lU2V0KQorICAgICwgbV9w
bGF5U3RhdGVTZXQoby5tX3BsYXlTdGF0ZVNldCkKICAgICAsIG1fcHJvcGVydHlTZXQoby5tX3By
b3BlcnR5U2V0KQotICAgICwgbV9uZXh0KG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9u
ZXh0KSA6IDApCi17Ci19Ci0KLVRyYW5zaXRpb246On5UcmFuc2l0aW9uKCkKKyAgICAsIG1fdGlt
aW5nRnVuY3Rpb25TZXQoby5tX3RpbWluZ0Z1bmN0aW9uU2V0KQorICAgICwgbV9pc05vbmUoby5t
X2lzTm9uZSkKKyAgICAsIG1fbmV4dChvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCooby5tX25l
eHQuZ2V0KCkpKSA6IDApCiB7Ci0gICAgZGVsZXRlIG1fbmV4dDsKIH0KIAogVHJhbnNpdGlvbiYg
VHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24mIG8pCiB7CiAgICAgaWYgKG1f
bmV4dCAhPSBvLm1fbmV4dCkgewotICAgICAgICBkZWxldGUgbV9uZXh0OwotICAgICAgICBtX25l
eHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCpvLm1fbmV4dCkgOiAwOworICAgICAgICBt
X25leHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCooby5tX25leHQuZ2V0KCkpKSA6IDA7
CiAgICAgfQogCisgICAgbV9kZWxheSA9IG8ubV9kZWxheTsKKyAgICBtX2RpcmVjdGlvbiA9IG8u
bV9kaXJlY3Rpb247CiAgICAgbV9kdXJhdGlvbiA9IG8ubV9kdXJhdGlvbjsKLSAgICBtX3JlcGVh
dENvdW50ID0gby5tX3JlcGVhdENvdW50OwotICAgIG1fdGltaW5nRnVuY3Rpb24gPSBvLm1fdGlt
aW5nRnVuY3Rpb247CisgICAgbV9pdGVyYXRpb25Db3VudCA9IG8ubV9pdGVyYXRpb25Db3VudDsK
KyAgICBtX25hbWUgPSBvLm1fbmFtZTsKKyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5U3RhdGU7
CiAgICAgbV9wcm9wZXJ0eSA9IG8ubV9wcm9wZXJ0eTsKKyAgICBtX3RpbWluZ0Z1bmN0aW9uID0g
by5tX3RpbWluZ0Z1bmN0aW9uOwogCisgICAgbV9kZWxheVNldCA9IG8ubV9kZWxheVNldDsKKyAg
ICBtX2RpcmVjdGlvblNldCA9IG8ubV9kaXJlY3Rpb25TZXQ7CiAgICAgbV9kdXJhdGlvblNldCA9
IG8ubV9kdXJhdGlvblNldDsKLSAgICBtX3JlcGVhdENvdW50U2V0ID0gby5tX3JlcGVhdENvdW50
U2V0OwotICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPSBvLm1fdGltaW5nRnVuY3Rpb25TZXQ7Cisg
ICAgbV9pdGVyYXRpb25Db3VudFNldCA9IG8ubV9pdGVyYXRpb25Db3VudFNldDsKKyAgICBtX25h
bWVTZXQgPSBvLm1fbmFtZVNldDsKKyAgICBtX3BsYXlTdGF0ZVNldCA9IG8ubV9wbGF5U3RhdGVT
ZXQ7CiAgICAgbV9wcm9wZXJ0eVNldCA9IG8ubV9wcm9wZXJ0eVNldDsKKyAgICBtX3RpbWluZ0Z1
bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0OworCisgICAgbV9pc05vbmUgPSBvLm1f
aXNOb25lOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFRyYW5zaXRpb246Om9wZXJh
dG9yPT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QKK2Jvb2wgVHJhbnNpdGlvbjo6dHJhbnNp
dGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiBvLCBib29sIG1hdGNoUGxheVN0YXRlcyAvKiA9
IHRydWUgKi8pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb24gPT0gby5tX2R1cmF0aW9u
ICYmIG1fcmVwZWF0Q291bnQgPT0gby5tX3JlcGVhdENvdW50ICYmIG1fdGltaW5nRnVuY3Rpb24g
PT0gby5tX3RpbWluZ0Z1bmN0aW9uICYmCi0gICAgICAgICAgIG1fcHJvcGVydHkgPT0gby5tX3By
b3BlcnR5ICYmIG1fZHVyYXRpb25TZXQgPT0gby5tX2R1cmF0aW9uU2V0ICYmIG1fcmVwZWF0Q291
bnRTZXQgPT0gby5tX3JlcGVhdENvdW50U2V0ICYmCi0gICAgICAgICAgIG1fdGltaW5nRnVuY3Rp
b25TZXQgPT0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0ICYmIG1fcHJvcGVydHlTZXQgPT0gby5tX3By
b3BlcnR5U2V0ICYmCi0gICAgICAgICAgICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICptX25leHQg
PT0gKm8ubV9uZXh0IDogbV9uZXh0ID09IG8ubV9uZXh0KTsKKyAgICBpZiAoIW8pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IG1fZGVsYXkgPT0gby0+bV9k
ZWxheSAmJgorICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPT0gby0+bV9kaXJlY3Rpb24g
JiYKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb24gPT0gby0+bV9kdXJhdGlvbiAmJgorICAg
ICAgICAgICAgICAgICAgbV9pdGVyYXRpb25Db3VudCA9PSBvLT5tX2l0ZXJhdGlvbkNvdW50ICYm
CisgICAgICAgICAgICAgICAgICBtX25hbWUgPT0gby0+bV9uYW1lICYmCisgICAgICAgICAgICAg
ICAgICBtX3Byb3BlcnR5ID09IG8tPm1fcHJvcGVydHkgJiYgCisgICAgICAgICAgICAgICAgICBt
X3RpbWluZ0Z1bmN0aW9uID09IG8tPm1fdGltaW5nRnVuY3Rpb24gJiYKKyAgICAgICAgICAgICAg
ICAgIG1fZGVsYXlTZXQgPT0gby0+bV9kZWxheVNldCAmJgorICAgICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb25TZXQgPT0gby0+bV9kaXJlY3Rpb25TZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1f
ZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9p
dGVyYXRpb25Db3VudFNldCA9PSBvLT5tX2l0ZXJhdGlvbkNvdW50U2V0ICYmCisgICAgICAgICAg
ICAgICAgICBtX25hbWVTZXQgPT0gby0+bV9uYW1lU2V0ICYmIAorICAgICAgICAgICAgICAgICAg
bV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5U2V0ICYmCisgICAgICAgICAgICAgICAgICBt
X3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYKKyAgICAgICAg
ICAgICAgICAgIG1faXNOb25lID09IG8tPm1faXNOb25lOworICAgIAorICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1hdGNoUGxheVN0YXRlcyAm
JiAobV9wbGF5U3RhdGUgIT0gby0+bV9wbGF5U3RhdGUgfHwgbV9wbGF5U3RhdGVTZXQgIT0gby0+
bV9wbGF5U3RhdGVTZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gbm93
IGNoZWNrIGtleWZyYW1lcworICAgIGlmICgobV9rZXlmcmFtZUxpc3QuZ2V0KCkgJiYgIW8tPm1f
a2V5ZnJhbWVMaXN0LmdldCgpKSB8fCAoIW1fa2V5ZnJhbWVMaXN0LmdldCgpICYmIG8tPm1fa2V5
ZnJhbWVMaXN0LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghKG1fa2V5
ZnJhbWVMaXN0LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICptX2tl
eWZyYW1lTGlzdCA9PSAqby0+bV9rZXlmcmFtZUxpc3Q7CisgICAgCit9CisKKyNkZWZpbmUgRklM
TF9VTlNFVF9QUk9QRVJUWSh0ZXN0LCBwcm9wKSBcCitmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYm
IGN1cnItPnRlc3QoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9IFwKK2lmIChjdXJyICYmIGN1
cnIgIT0gdGhpcykgeyBcCisvKiBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1
ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQuICovIFwKK2ZvciAoVHJhbnNpdGlvbiogcGF0
dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgXAorY3Vyci0+cHJvcCA9
IHBhdHRlcm4tPnByb3A7IFwKK3BhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7IFwKK2lmIChwYXR0
ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pIFwKK3BhdHRlcm4gPSB0aGlzOyBcCit9IFwKIH0KIAog
dm9pZCBUcmFuc2l0aW9uOjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKIHsKICAgICBUcmFuc2l0aW9u
KiBjdXJyOwotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNEdXJhdGlvblNl
dCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRo
aXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVz
IHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBh
dHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBj
dXJyLT5tX2R1cmF0aW9uID0gcGF0dGVybi0+bV9kdXJhdGlvbjsKLSAgICAgICAgICAgIHBhdHRl
cm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8
ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNSZXBlYXRD
b3VudFNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJy
ICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcg
dmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRp
b24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAg
ICAgICBjdXJyLT5tX3JlcGVhdENvdW50ID0gcGF0dGVybi0+bV9yZXBlYXRDb3VudDsKLSAgICAg
ICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVy
biA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vy
ci0+aXNUaW1pbmdGdW5jdGlvblNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBp
ZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGlu
IHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAg
ICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5tX3RpbWluZ0Z1bmN0aW9uID0gcGF0dGVybi0+bV90
aW1pbmdGdW5jdGlvbjsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAg
ICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChjdXJyID0g
dGhpczsgY3VyciAmJiBjdXJyLT5pc1Byb3BlcnR5U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkp
IHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVk
IHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZp
ZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fcHJvcGVydHkgPSBwYXR0ZXJu
LT5tX3Byb3BlcnR5OwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAg
ICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAg
ICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRklMTF9VTlNFVF9QUk9Q
RVJUWShpc0RlbGF5U2V0LCBtX2RlbGF5KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzRGly
ZWN0aW9uU2V0LCBtX2RpcmVjdGlvbik7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1cmF0
aW9uU2V0LCBtX2R1cmF0aW9uKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzSXRlcmF0aW9u
Q291bnRTZXQsIG1faXRlcmF0aW9uQ291bnQpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNO
YW1lU2V0LCBtX25hbWUpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNQbGF5U3RhdGVTZXQs
IG1fcGxheVN0YXRlKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzUHJvcGVydHlTZXQsIG1f
cHJvcGVydHkpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNUaW1pbmdGdW5jdGlvblNldCwg
bV90aW1pbmdGdW5jdGlvbik7CiB9CiAKIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEoKQpAQCAtNzg0LDYgKzg1Nyw3IEBAIFN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoKQogICAgICwgbV9hcHBlYXJh
bmNlKFJlbmRlclN0eWxlOjppbml0aWFsQXBwZWFyYW5jZSgpKQogICAgICwgbV9ib3JkZXJGaXQo
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJGaXQoKSkKICAgICAsIG1fYm94U2hhZG93KDApCisg
ICAgLCBtX2FuaW1hdGlvbigwKQogICAgICwgbV90cmFuc2l0aW9uKDApCiAgICAgLCBtX21hc2so
RmlsbExheWVyKE1hc2tGaWxsTGF5ZXIpKQogI2lmIEVOQUJMRShYQkwpCkBAIC04MTEsNiArODg1
LDcgQEAgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YShjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWQKICAgICAsIG1fYm9yZGVyRml0KG8ubV9ib3Jk
ZXJGaXQpCiAgICAgLCBtX2JveFNoYWRvdyhvLm1fYm94U2hhZG93ID8gbmV3IFNoYWRvd0RhdGEo
Km8ubV9ib3hTaGFkb3cpIDogMCkKICAgICAsIG1fYm94UmVmbGVjdChvLm1fYm94UmVmbGVjdCkK
KyAgICAsIG1fYW5pbWF0aW9uKG8ubV90cmFuc2l0aW9uID8gbmV3IFRyYW5zaXRpb24oKm8ubV9h
bmltYXRpb24pIDogMCkKICAgICAsIG1fdHJhbnNpdGlvbihvLm1fdHJhbnNpdGlvbiA/IG5ldyBU
cmFuc2l0aW9uKCpvLm1fdHJhbnNpdGlvbikgOiAwKQogICAgICwgbV9tYXNrKG8ubV9tYXNrKQog
ICAgICwgbV9tYXNrQm94SW1hZ2Uoby5tX21hc2tCb3hJbWFnZSkKQEAgLTgyNSw3ICs5MDAsNiBA
QCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp+U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgp
CiAgICAgZGVsZXRlIG1fY29udGVudDsKICAgICBkZWxldGUgbV9jb3VudGVyRGlyZWN0aXZlczsK
ICAgICBkZWxldGUgbV9ib3hTaGFkb3c7Ci0gICAgZGVsZXRlIG1fdHJhbnNpdGlvbjsKICNpZiBF
TkFCTEUoWEJMKQogICAgIGRlbGV0ZSBiaW5kaW5nVVJJOwogI2VuZGlmCkBAIC04NjUsNiArOTM5
LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGMKICAgICAgICAgJiYgbV9ib3JkZXJGaXQgPT0g
by5tX2JvcmRlckZpdAogICAgICAgICAmJiBzaGFkb3dEYXRhRXF1aXZhbGVudChvKQogICAgICAg
ICAmJiByZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQobykKKyAgICAgICAgJiYgYW5pbWF0aW9uRGF0
YUVxdWl2YWxlbnQobykKICAgICAgICAgJiYgdHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KG8pCiAg
ICAgICAgICYmIG1fbWFzayA9PSBvLm1fbWFzawogICAgICAgICAmJiBtX21hc2tCb3hJbWFnZSA9
PSBvLm1fbWFza0JveEltYWdlCkBAIC04OTQsNiArOTY5LDMzIEBAIGJvb2wgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6cmVmbGVjdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5v
bkluaGVyCiAKIH0KIAordm9pZCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp1cGRhdGVLZXlm
cmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK3sKKyAgICBUcmFu
c2l0aW9uKiBhbmltOworICAgIGZvciAoYW5pbSA9IG1fdHJhbnNpdGlvbi5nZXQoKTsgYW5pbTsg
YW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAgICAgICBpZiAoIWFuaW0tPm5hbWUoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IHJlYWxseSBzdXBwb3J0IGtleWZyYW1lcyBm
b3IgdHJhbnNpdGlvbnMgeWV0CisgICAgICAgICAgICAvL1JlZlB0cjxLZXlmcmFtZUxpc3Q+IGtl
eWZyYW1lID0gc3R5bGVTZWxlY3Rvci0+ZmluZEtleWZyYW1lUnVsZShhbmltLT5uYW1lKCkpOwor
ICAgICAgICAgICAgLy9hbmltLT5zZXRBbmltYXRpb25LZXlmcmFtZShrZXlmcmFtZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZm9yIChhbmltID0gbV9hbmltYXRpb24uZ2V0KCk7IGFuaW07IGFu
aW0gPSBhbmltLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGFuaW0tPmlzVmFsaWRBbmltYXRpb24o
KSkgeworICAgICAgICAgICAgLy9SZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0eWxl
U2VsZWN0b3ItPmZpbmRLZXlmcmFtZVJ1bGUoYW5pbS0+bmFtZSgpKTsKKyAgICAgICAgICAgIC8v
YW5pbS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAgICAgICB9CisgICAgfQor
fQorCitib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmFuaW1hdGlvbkRhdGFFcXVpdmFs
ZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Cit7CisgICAgaWYg
KCFtX2FuaW1hdGlvbiAmJiBvLm1fYW5pbWF0aW9uIHx8IG1fYW5pbWF0aW9uICYmICFvLm1fYW5p
bWF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fYW5pbWF0aW9uICYmIG8u
bV9hbmltYXRpb24gJiYgKCptX2FuaW1hdGlvbiAhPSAqby5tX2FuaW1hdGlvbikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjp0cmFuc2l0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YSYgbykgY29uc3QKIHsKICAgICBpZiAoIW1fdHJhbnNpdGlvbiAmJiBvLm1f
dHJhbnNpdGlvbiB8fCBtX3RyYW5zaXRpb24gJiYgIW8ubV90cmFuc2l0aW9uKQpAQCAtMTg2OCwz
NSArMTk3MCwxMDYgQEAgY29uc3QgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYgUmVuZGVy
U3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkKIH0KICNlbmRpZgogCit2b2lkIFJlbmRlclN0
eWxlOjphZGp1c3RBbmltYXRpb25zKCkKK3sKKyAgICBpZiAoYW5pbWF0aW9ucygpKSB7CisgICAg
ICAgIGlmIChhbmltYXRpb25zKCktPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CisgICAgICAg
ICAgICBjbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIGdldCByaWQgb2YgYW55IHRyYWlsaW5nIGVtcHR5IGFuaW1hdGlvbnMKKyAg
ICAgICAgVHJhbnNpdGlvbiogbmV4dDsKKyAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwID0gYWNj
ZXNzQW5pbWF0aW9ucygpOyBwOyBwID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IHAtPm5l
eHQoKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIHAtPnNldE5leHQoMCk7IC8vIHJlbW92ZXMgdGhlIHJlZiwgc28gbmV4dCBnZXRz
IGRlbGV0ZWQKKyAgICAgICAgICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghYW5pbWF0aW9ucygp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBpbnRv
IGxheWVycyB0aGF0IGRvbid0IGhhdmUgc29tZSBwcm9wZXJ0aWVzIHNldC4KKyAgICAgICAgYWNj
ZXNzQW5pbWF0aW9ucygpLT5maWxsVW5zZXRQcm9wZXJ0aWVzKCk7CisgICAgfQorfQorCiB2b2lk
IFJlbmRlclN0eWxlOjphZGp1c3RUcmFuc2l0aW9ucygpCiB7CiAgICAgaWYgKHRyYW5zaXRpb25z
KCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb25zKCktPmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAodHJhbnNpdGlvbnMoKS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKICAgICAgICAgICAg
IGNsZWFyVHJhbnNpdGlvbnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIFRyYW5zaXRpb24qIG5leHQ7CiAgICAgICAgIGZvciAoVHJhbnNpdGlvbiogcCA9IGFj
Y2Vzc1RyYW5zaXRpb25zKCk7IHA7IHAgPSBuZXh0KSB7Ci0gICAgICAgICAgICBuZXh0ID0gcC0+
bV9uZXh0OworICAgICAgICAgICAgbmV4dCA9IHAtPm5leHQoKTsKICAgICAgICAgICAgIGlmIChu
ZXh0ICYmIG5leHQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXh0Owot
ICAgICAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7CisgICAgICAgICAgICAgICAgcC0+c2V0TmV4
dCgwKTsgLy8gcmVtb3ZlcyB0aGUgcmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAgICAgICAg
ICAgICAgIG5leHQgPSAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgCisKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9ucygpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBpbnRvIGxheWVycyB0aGF0
IGRvbid0IGhhdmUgc29tZSBwcm9wZXJ0aWVzIHNldC4KICAgICAgICAgYWNjZXNzVHJhbnNpdGlv
bnMoKS0+ZmlsbFVuc2V0UHJvcGVydGllcygpOworICAgICAgICAKKyAgICAgICAgLy8gbWFrZSBz
dXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgcHJvcGVydGllcy4gVGhpcyBpcyBhbiBPKG5eMikg
YWxnb3JpdGhtCisgICAgICAgIC8vIGJ1dCB0aGUgbGlzdHMgdGVuZCB0byBiZSB2ZXJ5IHNob3J0
LCBzbyBpdCBpcyBwcm9iYWJseSBvaworICAgICAgICBUcmFuc2l0aW9uKiBwcmV2aSA9IDA7Cisg
ICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGkgPSBhY2Nlc3NUcmFuc2l0aW9ucygpOyBwaTsgKSB7
CisgICAgICAgICAgICBUcmFuc2l0aW9uKiBuZXh0aSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAg
ICBmb3IgKFRyYW5zaXRpb24qIHBqID0gbmV4dGk7IHBqOyApIHsKKyAgICAgICAgICAgICAgICBp
ZiAocGktPnByb3BlcnR5KCkgPT0gcGotPnByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdG9zcyBwaQorICAgICAgICAgICAgICAgICAgICBwaSA9IHBpLT5uZXh0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmV2aSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp
LT5zZXROZXh0KHBpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IHBp
OworICAgICAgICAgICAgICAgICAgICBuZXh0aSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAgICAg
ICAgICAgIHBqID0gbmV4dGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcGogPSBwai0+bmV4dCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcHJldmkgPSBwaTsKKyAgICAgICAgICAgIHBpID0gbmV4dGk7CisgICAgICAg
IH0KICAgICB9CiB9CiAKK1RyYW5zaXRpb24qIFJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25z
KCkKK3sKKyAgICBUcmFuc2l0aW9uKiBsYXllciA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vz
cygpLT5tX2FuaW1hdGlvbi5nZXQoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9hbmltYXRpb24gPSBuZXcgVHJhbnNpdGlvbigpOwor
ICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbmltYXRpb24uZ2V0KCk7Cit9CisK
IFRyYW5zaXRpb24qIFJlbmRlclN0eWxlOjphY2Nlc3NUcmFuc2l0aW9ucygpCiB7Ci0gICAgVHJh
bnNpdGlvbiogbGF5ZXIgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0
aW9uOworICAgIFRyYW5zaXRpb24qIGxheWVyID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNz
KCktPm1fdHJhbnNpdGlvbi5nZXQoKTsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gbmV3IFRyYW5zaXRpb24oKTsK
LSAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbjsKKyAgICByZXR1
cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbi5nZXQoKTsKK30KKworY29uc3Qg
VHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVy
dHkpCit7CisgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiBwID0gdHJhbnNpdGlvbnMoKTsgcDsg
cCA9IHAtPm5leHQoKSkgeworICAgICAgICBpZiAocC0+cHJvcGVydHkoKSA9PSBjQW5pbWF0ZUFs
bCB8fCBwLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5KSB7CisgICAgICAgICAgICByZXR1cm4gcDsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggZWJhYjhiNi4uNmQzMWUxYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC03Miw2ICs3Miw3IEBAIGNsYXNzIENTU1ZhbHVlTGlz
dDsKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBDdXJz
b3JMaXN0OworY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUGFpcjsKIGNsYXNzIFJlbmRlckFy
ZW5hOwogY2xhc3MgU2hhZG93VmFsdWU7CkBAIC0xMjU3LDU4ICsxMjU4LDExMiBAQCBwcml2YXRl
OgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAotc3RydWN0IFRyYW5zaXRpb24geworZW51bSBFQW5p
bVBsYXlTdGF0ZSB7IEFuaW1QbGF5U3RhdGVQbGF5aW5nLCBBbmltUGxheVN0YXRlUGF1c2VkIH07
CisKK2NsYXNzIFRyYW5zaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2l0aW9uPiB7CiBw
dWJsaWM6CiAgICAgVHJhbnNpdGlvbigpOwotICAgIH5UcmFuc2l0aW9uKCk7CiAKLSAgICBUcmFu
c2l0aW9uKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAgVHJhbnNpdGlvbiog
bmV4dCgpIHsgcmV0dXJuIG1fbmV4dDsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24qIG5leHQoKSBj
b25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBUcmFuc2l0aW9uKiBuZXh0KCkgeyBy
ZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAKKyAgICBib29sIGlzRGVsYXlTZXQoKSBjb25zdCB7IHJl
dHVybiBtX2RlbGF5U2V0OyB9CisgICAgYm9vbCBpc0RpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uU2V0OyB9CiAgICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNSZXBlYXRDb3VudFNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwZWF0Q291bnRTZXQ7IH0KLSAgICBib29sIGlzVGltaW5nRnVuY3Rpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9CisgICAgYm9vbCBpc0l0
ZXJhdGlvbkNvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudFNldDsgfQor
ICAgIGJvb2wgaXNOYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2V0OyB9CisgICAgYm9v
bCBpc1BsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlU2V0OyB9CiAgICAg
Ym9vbCBpc1Byb3BlcnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQotICAg
IAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2R1cmF0aW9uU2V0ICYmICFt
X3JlcGVhdENvdW50U2V0ICYmICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0
OyB9CisgICAgYm9vbCBpc1RpbWluZ0Z1bmN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1p
bmdGdW5jdGlvblNldDsgfQorCisgICAgLy8gaXMgdGhlIHNwZWNpYWwgIm5vbmUiIGFuaW1hdGlv
biAoYW5pbWF0aW9uLW5hbWU6IG5vbmUpCisgICAgYm9vbCBpc05vbmVBbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2lzTm9uZTsgfQorICAgIC8vIHdlIGNhbiBtYWtlIHBsYWNlaG9sZGVyIFRy
YW5zaXRpb24gb2JqZWN0cyB0byBrZWVwIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMKKyAgICAv
LyBvZiBwcm9wZXJ0aWVzIGluIHN5bmMuIGlzVmFsaWRBbmltYXRpb24gbWVhbnMgdGhpcyBpcyBu
b3QgYSBwbGFjZWhvbGRlci4KKyAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdCB7IHJl
dHVybiAhbV9pc05vbmUgJiYgIW1fbmFtZS5pc0VtcHR5KCk7IH0KKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKCFtX2RpcmVjdGlvblNldCAmJiAhbV9k
dXJhdGlvblNldCAmJiAhbV9uYW1lU2V0ICYmICFtX3BsYXlTdGF0ZVNldCAmJiAKKyAgICAgICAg
ICAgICAgICFtX2l0ZXJhdGlvbkNvdW50U2V0ICYmICFtX2RlbGF5U2V0ICYmICFtX3RpbWluZ0Z1
bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHlP
clplcm9EdXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbXB0eSgpIHx8
IChtX2R1cmF0aW9uID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyRGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJEaXJlY3Rp
b24oKSB7IG1fZGlyZWN0aW9uU2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNsZWFyRHVyYXRpb24o
KSB7IG1fZHVyYXRpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJSZXBlYXRDb3VudCgp
IHsgbV9yZXBlYXRDb3VudFNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0
aW9uKCkgeyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGNsZWFySXRl
cmF0aW9uQ291bnQoKSB7IG1faXRlcmF0aW9uQ291bnRTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQg
Y2xlYXJOYW1lKCkgeyBtX25hbWVTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJQbGF5U3Rh
dGUoKSB7IG1fcGxheVN0YXRlU2V0ID0gQW5pbVBsYXlTdGF0ZVBsYXlpbmc7IH0KICAgICB2b2lk
IGNsZWFyUHJvcGVydHkoKSB7IG1fcHJvcGVydHlTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xl
YXJUaW1pbmdGdW5jdGlvbigpIHsgbV90aW1pbmdGdW5jdGlvblNldCA9IGZhbHNlOyB9CiAKLSAg
ICBpbnQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgaW50IHJl
cGVhdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRDb3VudDsgfQotICAgIGNvbnN0IFRp
bWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVu
Y3Rpb247IH0KKyAgICBkb3VibGUgZGVsYXkoKSBjb25zdCB7IHJldHVybiBtX2RlbGF5OyB9Cisg
ICAgYm9vbCBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICBpbnQgaXRl
cmF0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbkNvdW50OyB9CisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgRUFuaW1QbGF5
U3RhdGUgcGxheVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5U3RhdGU7IH0KICAgICBpbnQg
cHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9Ci0gICAgCi0gICAgdm9pZCBz
ZXREdXJhdGlvbihpbnQgZCkgeyBtX2R1cmF0aW9uID0gZDsgbV9kdXJhdGlvblNldCA9IHRydWU7
IH0KLSAgICB2b2lkIHNldFJlcGVhdENvdW50KGludCBjKSB7IG1fcmVwZWF0Q291bnQgPSBjOyBt
X3JlcGVhdENvdW50U2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb24oY29u
c3QgVGltaW5nRnVuY3Rpb24mIGYpIHsgbV90aW1pbmdGdW5jdGlvbiA9IGY7IG1fdGltaW5nRnVu
Y3Rpb25TZXQgPSB0cnVlOyB9CisgICAgY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvbjsgfQorCisgICAgY29uc3QgUmVm
UHRyPEtleWZyYW1lTGlzdD4mIGtleWZyYW1lTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJh
bWVMaXN0OyB9CisKKyAgICB2b2lkIHNldERlbGF5KGRvdWJsZSBjKSB7IG1fZGVsYXkgPSBjOyBt
X2RlbGF5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0RGlyZWN0aW9uKGJvb2wgZCkgeyBtX2Rp
cmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0RHVyYXRp
b24oZG91YmxlIGQpIHsgQVNTRVJUKGQgPj0gMCk7IG1fZHVyYXRpb24gPSBkOyBtX2R1cmF0aW9u
U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXRlcmF0aW9uQ291bnQoaW50IGMpIHsgbV9pdGVy
YXRpb25Db3VudCA9IGM7IG1faXRlcmF0aW9uQ291bnRTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYgbikgeyBtX25hbWUgPSBuOyBtX25hbWVTZXQgPSB0cnVlOyB9
CisgICAgdm9pZCBzZXRQbGF5U3RhdGUoRUFuaW1QbGF5U3RhdGUgZCkgeyBtX3BsYXlTdGF0ZSA9
IGQ7IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0UHJvcGVydHkoaW50IHQp
IHsgbV9wcm9wZXJ0eSA9IHQ7IG1fcHJvcGVydHlTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRU
aW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiYgZikgeyBtX3RpbWluZ0Z1bmN0aW9u
ID0gZjsgbV90aW1pbmdGdW5jdGlvblNldCA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0SXNOb25l
QW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47IH0KKworICAgIHZvaWQgc2V0TmV4dChU
cmFuc2l0aW9uKiBuKSB7IGlmIChtX25leHQuZ2V0KCkgIT0gbikgeyBtX25leHQgPSBuOyB9IH0K
IAotICAgIHZvaWQgc2V0TmV4dChUcmFuc2l0aW9uKiBuKSB7IGlmIChtX25leHQgIT0gbikgeyBk
ZWxldGUgbV9uZXh0OyBtX25leHQgPSBuOyB9IH0KKyAgICB2b2lkIHNldEFuaW1hdGlvbktleWZy
YW1lKGNvbnN0IFJlZlB0cjxLZXlmcmFtZUxpc3Q+IGtleWZyYW1lKSAgeyBtX2tleWZyYW1lTGlz
dCA9IGtleWZyYW1lOyB9CiAKLSAgICBUcmFuc2l0aW9uJiBvcGVyYXRvcj0oY29uc3QgVHJhbnNp
dGlvbiYgbyk7ICAgIAorICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBUcmFuc2l0aW9u
JiBvKTsKICAgICBUcmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pOwogCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09
IG8pOwotICAgIH0KKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNs
YXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQorICAgIGJvb2wgdHJhbnNpdGlvbnNNYXRjaChj
b25zdCBUcmFuc2l0aW9uKiB0LCBib29sIG1hdGNoUGxheVN0YXRlcz10cnVlKSBjb25zdDsKKwor
ICAgIC8vIHJldHVybiB0cnVlIGV2ZXJ5IHRyYW5zaXRpb24gaW4gdGhlIGNoYWluIChkZWZpbmVk
IGJ5IG1fbmV4dCkgbWF0Y2ggCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zaXRpb24m
IG8pIGNvbnN0IHsgcmV0dXJuIHRyYW5zaXRpb25zTWF0Y2goJm8pICYmICgobV9uZXh0ICYmIG8u
bV9uZXh0KSA/ICgqbV9uZXh0ID09ICpvLm1fbmV4dCkgOiAobV9uZXh0ID09IG8ubV9uZXh0KSk7
IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvKTsgfQogCiAgICAgdm9pZCBmaWxsVW5zZXRQcm9wZXJ0aWVzKCk7CiAK
LSAgICBpbnQgbV9kdXJhdGlvbjsKLSAgICBpbnQgbV9yZXBlYXRDb3VudDsKLSAgICBUaW1pbmdG
dW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9uOworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kZWxheTsK
KyAgICBib29sIG1fZGlyZWN0aW9uOworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIGludCBt
X2l0ZXJhdGlvbkNvdW50OworICAgIFN0cmluZyBtX25hbWU7CisgICAgRUFuaW1QbGF5U3RhdGUg
bV9wbGF5U3RhdGU7CiAgICAgaW50IG1fcHJvcGVydHk7CisgICAgVGltaW5nRnVuY3Rpb24gbV90
aW1pbmdGdW5jdGlvbjsKIAotICAgIGJvb2wgbV9kdXJhdGlvblNldDsKLSAgICBib29sIG1fcmVw
ZWF0Q291bnRTZXQ7Ci0gICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0OwotICAgIGJvb2wgbV9w
cm9wZXJ0eVNldDsKKyAgICBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBtX2tleWZyYW1lTGlzdDsKIAot
ICAgIFRyYW5zaXRpb24qIG1fbmV4dDsKKyAgICBib29sIG1fZGVsYXlTZXQgICAgICAgICAgOiAx
OworICAgIGJvb2wgbV9kaXJlY3Rpb25TZXQgICAgICA6IDE7CisgICAgYm9vbCBtX2R1cmF0aW9u
U2V0ICAgICAgIDogMTsKKyAgICBib29sIG1faXRlcmF0aW9uQ291bnRTZXQgOiAxOworICAgIGJv
b2wgbV9uYW1lU2V0ICAgICAgICAgICA6IDE7CisgICAgYm9vbCBtX3BsYXlTdGF0ZVNldCAgICAg
IDogMTsKKyAgICBib29sIG1fcHJvcGVydHlTZXQgICAgICAgOiAxOworICAgIGJvb2wgbV90aW1p
bmdGdW5jdGlvblNldCA6IDE7CisgICAgCisgICAgYm9vbCBtX2lzTm9uZSAgICAgICAgICAgIDog
MTsKKyAgICAKKyAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV9uZXh0OwogfTsKIAogY2xhc3MgU3R5
bGVSZWZsZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVSZWZsZWN0aW9uPiB7CkBAIC0x
MzYyLDcgKzE0MTcsOSBAQCBwdWJsaWM6CiAgCiAgICAgYm9vbCBzaGFkb3dEYXRhRXF1aXZhbGVu
dChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHJl
ZmxlY3Rpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBv
KSBjb25zdDsKKyAgICBib29sIGFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29sIHRyYW5zaXRpb25EYXRhRXF1aXZh
bGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7CisgICAgdm9pZCB1
cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcik7CiAK
ICAgICBpbnQgbGluZUNsYW1wOyAvLyBBbiBBcHBsZSBleHRlbnNpb24uCiAjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQpAQCAtMTM4OSw3ICsxNDQ2LDggQEAgcHVibGljOgogICAgIAogICAg
IFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IG1fYm94UmVmbGVjdDsKIAotICAgIFRyYW5zaXRpb24q
IG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV9hbmltYXRpb247CisgICAg
UmVmUHRyPFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbjsKIAogICAgIEZpbGxMYXllciBtX21hc2s7
CiAgICAgTmluZVBpZWNlSW1hZ2UgbV9tYXNrQm94SW1hZ2U7CkBAIC0yMDMwLDkgKzIwODgsOSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLT5tX291dGxpbmUuX29mZnNldDsK
ICAgICB9CiAgICAgU2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJ
bmhlcml0ZWREYXRhLT50ZXh0U2hhZG93OyB9Ci0gICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQorICAg
IGNvbnN0IENvbG9yJiB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJp
dGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9yOyB9CiAgICAgZmxvYXQgdGV4dFN0cm9rZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VXaWR0aDsgfQotICAg
IENvbG9yIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+
dGV4dEZpbGxDb2xvcjsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KICAgICBmbG9hdCBv
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm9wYWNpdHk7IH0K
ICAgICBFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RUFwcGVhcmFuY2U+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FwcGVhcmFuY2UpOyB9CiAgICAg
RUJveEFsaWdubWVudCBib3hBbGlnbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVCb3hB
bGlnbm1lbnQ+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5mbGV4aWJsZUJveC0+YWxpZ24pOyB9CkBA
IC0yMDg3LDggKzIxNDUsMTIgQEAgcHVibGljOgogICAgIC8vIEVuZCBDU1MzIEdldHRlcnMKIAog
ICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IGdldHRlciBtZXRob2RzCisgICAgVHJhbnNp
dGlvbiogYWNjZXNzQW5pbWF0aW9ucygpOwogICAgIFRyYW5zaXRpb24qIGFjY2Vzc1RyYW5zaXRp
b25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVy
biByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uOyB9CisgICAgLy8gcmV0dXJuIHRo
ZSBmaXJzdCBmb3VuZCBUcmFuc2l0aW9uIChpbmNsdWRpbmcgJ2FsbCcgdHJhbnNpdGlvbnMpCisg
ICAgY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0eSk7
CisgICAgY29uc3QgVHJhbnNpdGlvbiogYW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IFRyYW5zaXRp
b24qIHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
dHJhbnNpdGlvbi5nZXQoKTsgfQogICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVz
dCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQog
ICAgIEVUZXh0U2VjdXJpdHkgdGV4dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8RVRleHRTZWN1cml0eT4ocmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAg
LTIzNTIsOSArMjQxNCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gRW5kIENTUzMgU2V0dGVycwogICAg
CiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJvcGVydHkgc2V0dGVycwotICAgIHZvaWQgY2xlYXJU
cmFuc2l0aW9ucygpIHsgZGVsZXRlIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3Ry
YW5zaXRpb247IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSAw
OyB9CisgICAgdm9pZCBjbGVhckFuaW1hdGlvbnMoKSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFj
Y2VzcygpLT5tX2FuaW1hdGlvbiA9IDA7IH0KKyAgICB2b2lkIGNsZWFyVHJhbnNpdGlvbnMoKSB7
IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSAwOyB9CisgICAg
dm9pZCBpbmhlcml0QW5pbWF0aW9ucyhjb25zdCBUcmFuc2l0aW9uKiBwYXJlbnQpIHsgY2xlYXJB
bmltYXRpb25zKCk7IGlmIChwYXJlbnQpIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5t
X2FuaW1hdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpwYXJlbnQpOyB9CiAgICAgdm9pZCBpbmhlcml0
VHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvbiogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMo
KTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlv
biA9IG5ldyBUcmFuc2l0aW9uKCpwYXJlbnQpOyB9CisgICAgdm9pZCBhZGp1c3RBbmltYXRpb25z
KCk7CiAgICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJh
bWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgaWYgKHJhcmVOb25J
bmhlcml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+dXBkYXRl
S2V5ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CiAgICAgdm9pZCBzZXRMaW5lQ2xhbXAoaW50IGMp
IHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbGluZUNsYW1wLCBjKTsgfQogICAgIHZv
aWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEs
IHRleHRTaXplQWRqdXN0LCBiKTsgfQogICAgIHZvaWQgc2V0VGV4dFNlY3VyaXR5KEVUZXh0U2Vj
dXJpdHkgYVRleHRTZWN1cml0eSkgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0U2Vj
dXJpdHksIGFUZXh0U2VjdXJpdHkpOyB9IApAQCAtMjUxMSwxMCArMjU3NywxNCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsVHJhbnNmb3JtT3JpZ2luWSgpIHsgcmV0dXJuIExl
bmd0aCg1MC4wLCBQZXJjZW50KTsgfQogICAgIAogICAgIC8vIEtlZXAgdGhlc2UgYXQgdGhlIGVu
ZC4KLSAgICBzdGF0aWMgaW50IGluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSB7IHJldHVybiAw
OyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlvblJlcGVhdENvdW50KCkgeyByZXR1
cm4gMTsgfQotICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uKCkgeyByZXR1cm4gVGltaW5nRnVuY3Rpb24oKTsgfQotICAgIHN0YXRpYyBpbnQg
aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpIHsgcmV0dXJuIGNBbmltYXRlQWxsOyB9CisgICAg
c3RhdGljIGZsb2F0IGluaXRpYWxBbmltYXRpb25EZWxheSgpIHsgcmV0dXJuIDA7IH0KKyAgICBz
dGF0aWMgYm9vbCBpbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7
IH0KKyAgICBzdGF0aWMgaW50IGluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpIHsgcmV0
dXJuIDE7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGluaXRpYWxBbmltYXRpb25OYW1lKCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICBzdGF0aWMgRUFuaW1QbGF5U3RhdGUgaW5pdGlhbEFuaW1hdGlv
blBsYXlTdGF0ZSgpIHsgcmV0dXJuIEFuaW1QbGF5U3RhdGVQbGF5aW5nOyB9CisgICAgc3RhdGlj
IGludCBpbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSB7IHJldHVybiBjQW5pbWF0ZUFsbDsgfQor
ICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
KSB7IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CiAgICAgc3RhdGljIGludCBpbml0aWFsTGlu
ZUNsYW1wKCkgeyByZXR1cm4gLTE7IH0KICAgICBzdGF0aWMgYm9vbCBpbml0aWFsVGV4dFNpemVB
ZGp1c3QoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIEVUZXh0U2VjdXJpdHkgaW5pdGlh
bFRleHRTZWN1cml0eSgpIHsgcmV0dXJuIFRTTk9ORTsgfQpAQCAtMjUyNCw2ICsyNTk0LDQ1IEBA
IHB1YmxpYzoKICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJrIC0KKworY2xhc3MgS2V5ZnJhbWVW
YWx1ZSB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVWYWx1ZSgpIDoga2V5KC0xKSB7IH0KKyAgICBm
bG9hdCBrZXk7CisgICAgUmVuZGVyU3R5bGUgc3R5bGU7Cit9OworCitjbGFzcyBLZXlmcmFtZUxp
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlmcmFtZUxpc3Q+IHsKK3B1YmxpYzoKKyAgICBLZXlm
cmFtZUxpc3QoY29uc3QgQXRvbWljU3RyaW5nJiBpbkFuaW1OYW1lKQorICAgIDogbV9hbmltYXRp
b25OYW1lKGluQW5pbU5hbWUpCisgICAgeworICAgICAgICBpbnNlcnQoMCwgUmVuZGVyU3R5bGUo
KSk7IGluc2VydCgxLCBSZW5kZXJTdHlsZSgpKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEtleWZyYW1lTGlzdCYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQorICAgIAor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9uTmFtZTsgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KGZsb2F0IGluS2V5LCBjb25z
dCBSZW5kZXJTdHlsZSYgaW5TdHlsZSk7CisgICAgCisgICAgdm9pZCBhZGRQcm9wZXJ0eShpbnQg
cHJvcCkgeyBtX3Byb3BlcnRpZXMuYWRkKHByb3ApOyB9CisgICAgYm9vbCBjb250YWluc1Byb3Bl
cnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJvcCk7
IH0KKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luUHJvcGVydGllcygpIHsg
cmV0dXJuIG1fcHJvcGVydGllcy5iZWdpbigpOyB9CisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBlbmRQcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmVuZCgpOyB9Cisg
ICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV9rZXlmcmFtZXMuY2xlYXIoKTsgbV9wcm9wZXJ0aWVz
LmNsZWFyKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1l
cy5pc0VtcHR5KCk7IH0KKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9y
IGJlZ2luS2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYmVnaW4oKTsgfQor
ICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kS2V5ZnJhbWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuZW5kKCk7IH0KKworcHJvdGVjdGVkOgorICAgIEF0
b21pY1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IG1f
a2V5ZnJhbWVzOworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3BlcnRpZXM7ICAgICAgIC8vIHRoZSBw
cm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgo=
</data>
<flag name="review"
          id="9870"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22646</attachid>
            <date>2008-08-04 17:19:37 -0700</date>
            <delta_ts>2008-08-05 15:01:41 -0700</delta_ts>
            <desc>Updated patch that adds keyframes correctly</desc>
            <filename>patch7-css-animation-properties-update2.patch</filename>
            <type>text/plain</type>
            <size>66857</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGJiY2QwMTEuLjUzNGM3OTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjMzLDYgKzYzMyw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9jc3MvU3R5bGVMaXN0LmNwcCBcCiAJV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldC5jcHAgXAogCVdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBc
CisJV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBcCisJV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgXAogCVdlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlLmNwcCBcCiAJV2ViQ29yZS9kb20vQXR0ci5jcHAgXAogCVdlYkNvcmUvZG9tL0F0
dHJpYnV0ZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggOWIwYWExNS4uZDM1YWRjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC00ODEsNiArNDgxLDggQEAg
U09VUkNFUyArPSBcCiAgICAgY3NzL1N0eWxlTGlzdC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0
LmNwcCBcCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBcCisgICAgY3NzL1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAgXAorICAgIGNzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBcCiAg
ICAgY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBcCiAgICAgZG9tL0F0dHIuY3BwIFwK
ICAgICBkb20vQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBhY2Q1NzdjLi5hODhkMTJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTg5NDIsNiArODk0MiwzOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCIN
CisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdP
fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tleWZyYW1lUnVsZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJ
TmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0
cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cY3NzXFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDg4ZWE4OWIuLmVlODQyNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDEwIEBACiAJCTI5OTk4NkExMEREMERFRUEwMEY4RDI2
MSAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOTk5ODY5RDBERDBERUVBMDBGOEQyNjEgLyogQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwICovOyB9OwogCQkyRDkwNjYwNjBCRTE0MUQ0MDA5NTY5OTggLyogTGF5
b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCAqLzsgfTsKIAkJ
MkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9
OworCQkzMTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RjBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CisJCTMxMjg4
RTc0MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUzMDA1RDYw
MDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKKwkJMzEyODhFNzUw
RTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcxMEUzMDA1RDYwMDM2MTlB
RSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07CiAJCTMxNjExRTU1MEUxQzRENEEw
MEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAv
KiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgKi87IH07CiAJCTMxNjExRTVBMEUxQzRERTAw
MEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJMzE2MTFFNUIwRTFDNERF
MDAwRjZBNTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjExRTU5MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IH07CkBAIC00OTEyLDYgKzQ5MTYsMTAg
QEAKIAkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBi
b2FyZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENsaXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CisJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEy
ODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMjg4RTcxMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5
IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTYxMUU1OTBFMUM0
REUwMDBGNkE1NzkgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjc1Nyw3ICsxMjc2NSw2IEBACiAJCUY1MjNEMTg0MDJE
RTQyRTgwMTg2MzVDQSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5pZGwgKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIu
aCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJ
CQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICov
LApAQCAtMTI4NDcsOCArMTI4NTQsNiBAQAogCQkJCTg1OEMzOTEwMEFBOEZGMDAwMEIxODdBNCAv
KiBDU1NTdHlsZVNoZWV0LmlkbCAqLywKIAkJCQlCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgKi8sCiAJCQkJQkM4MEM5ODYwQ0QyOTRFRTAwQTBC
N0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLywKLQkJCQlCQzlBREQ3RjBDQzQwOTIy
MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAotCQkJCUJDOUFERDIy
MENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTM3
MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8sCiAJ
CQkJMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8s
CiAJCQkJQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCkBA
IC0xMjkxMiw2ICsxMjkxNywxMyBAQAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovLAogCQkJCTkzQ0E0Q0EzMDlERjkzRkEwMERGODY3NyAv
KiB0b2tlbml6ZXIuZmxleCAqLywKIAkJCQlCQzVFQzE3NjBBNTA3RTNFMDA2MDA3RjUgLyogdmll
dy1zb3VyY2UuY3NzICovLAorCQkJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuY3BwICovLAorCQkJCTMxMjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLywKKwkJCQkzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUg
LyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8sCisJCQkJMzEyODhFNzEwRTMwMDVENjAw
MzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCAqLywKKwkJCQlCQzlBREQ3RjBDQzQw
OTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAorCQkJCUJDOUFE
RDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAorCQkJ
CTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNzczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0xNTI5OCw2ICsxNTMxMCw4IEBACiAJCQkJQTgyNEI0NjUwRTJFRjJFQTAwODFBN0I3IC8qIFRl
eHRSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAwMDlEMTBBRCAvKiBY
TUxIdHRwUmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OTYwRTMwNTky
RjAwOUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMjg4RTc1MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MDY4LDYgKzE3MDgyLDggQEAKIAkJCQlC
Q0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNERkQ0OTIwRTMwNTZCRDAwOUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVl
c3RVcGxvYWRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERkQ0OTUwRTMwNTkyRjAw
OUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzEyODhFNzIwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTI4OEU3NDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggNGQ0NDljOS4u
NGVhMjJkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wKQEAgLTE4MCw2ICsxODAsOCBAQCBUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAg
IGNzcy9TdHlsZUxpc3QuY3BwCiAgICAgICAgIGNzcy9TdHlsZVNoZWV0LmNwcAogICAgICAgICBj
c3MvU3R5bGVTaGVldExpc3QuY3BwCisgICAgICAgIGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
Y3BwCisgICAgICAgIGNzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAogICAgICAgICBjc3Mv
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCiAgICAgPC9zZXQ+CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRleCAy
OTkyZGExLi5iZDRlYzRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysr
IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3Qu
aCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAKQEAgLTcwLDYgKzcyLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKICAgICBD
U1NQYXJzZXJWYWx1ZSB2YWx1ZTsKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdDsK
ICAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBtZWRpYVF1ZXJ5RXhwTGlzdDsKKyAgICBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZTsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKiBrZXlmcmFtZXNSdWxlOworICAgIGZsb2F0IHZhbDsKIH0KIAogJXsKQEAgLTEyMCw2ICsx
MjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgdm9pZCogcGFyc2Vy
KQogJXRva2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBXRUJLSVRfUlVMRV9TWU0KICV0b2tlbiBX
RUJLSVRfREVDTFNfU1lNCisldG9rZW4gV0VCS0lUX0tFWUZSQU1FU19TWU0KICV0b2tlbiBXRUJL
SVRfVkFMVUVfU1lNCiAldG9rZW4gV0VCS0lUX01FRElBUVVFUllfU1lNCiAldG9rZW4gV0VCS0lU
X1NFTEVDVE9SX1NZTQpAQCAtMTcyLDYgKzE3OCw3IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlT
VFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIpCiAldHlwZSA8cnVsZT4gaW1wb3J0CiAldHlwZSA8
cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGtleWZyYW1l
cwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sKICV0
eXBlIDxydWxlPiBpbnZhbGlkX2F0CkBAIC0yMDUsNiArMjEyLDExIEBAIHN0YXRpYyBpbnQgY3Nz
eXlsZXgoWVlTVFlQRSogeXlsdmFsLCB2b2lkKiBwYXJzZXIpCiAldHlwZSA8bWVkaWFRdWVyeUV4
cExpc3Q+IG1lZGlhX3F1ZXJ5X2V4cF9saXN0CiAldHlwZSA8bWVkaWFRdWVyeUV4cExpc3Q+IG1h
eWJlX2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdAogCisldHlwZSA8c3RyaW5nPiBrZXlmcmFtZV9u
YW1lCisldHlwZSA8a2V5ZnJhbWVSdWxlPiBrZXlmcmFtZV9ydWxlCisldHlwZSA8a2V5ZnJhbWVz
UnVsZT4ga2V5ZnJhbWVzX3J1bGUKKyV0eXBlIDx2YWw+IGtleQorCiAldHlwZSA8aW50ZWdlcj4g
cHJvcGVydHkKIAogJXR5cGUgPHNlbGVjdG9yPiBzcGVjaWZpZXIKQEAgLTM3OCw2ICszOTAsNyBA
QCB2YWxpZF9ydWxlOgogICB8IG1lZGlhCiAgIHwgcGFnZQogICB8IGZvbnRfZmFjZQorICB8IGtl
eWZyYW1lcwogICA7CiAKIHJ1bGU6CkBAIC02NTgsNiArNjcxLDQ3IEBAIG1lZGl1bToKICAgfQog
ICA7CiAKK2tleWZyYW1lczoKKyAgICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBr
ZXlmcmFtZV9uYW1lIG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBrZXlmcmFtZXNfcnVsZSAn
fScgeworICAgICAgICAkJCA9ICQ3OworICAgICAgICAkNy0+c2V0TmFtZSgkMyk7CisgICAgfQor
ICAgIDsKKyAgCitrZXlmcmFtZV9uYW1lOgorICAgIElERU5UCisgICAgfCBTVFJJTkcKKyAgICA7
CisKK2tleWZyYW1lc19ydWxlOgorICAgIC8qIGVtcHR5ICovIHsgJCQgPSBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVLZXlmcmFtZXNSdWxlKCk7IH0KKyAgICB8IGtleWZy
YW1lc19ydWxlIGtleWZyYW1lX3J1bGUgbWF5YmVfc3BhY2UgeworICAgICAgICAkJCA9ICQxOwor
ICAgICAgICBpZiAoJDIpCisgICAgICAgICAgICAkJC0+aW5zZXJ0KCQyKTsKKyAgICB9CisgICAg
OworCitrZXlmcmFtZV9ydWxlOgorICAgIGtleSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2Ug
ZGVjbGFyYXRpb25fbGlzdCAnfScgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlciktPmNyZWF0ZUtleWZyYW1lUnVsZSgkMSk7CisgICAgfQorICAgIDsKKwora2V5
OgorICAgIFBFUkNFTlRBR0UgeyAkJCA9IChmbG9hdCkgJDE7IH0KKyAgICB8IElERU5UIHsKKyAg
ICAgICAgJCQgPSAtMTsKKyAgICAgICAgQ1NTUGFyc2VyU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHN0ciks
ICJmcm9tIikpCisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHN0ciksICJ0byIpKQorICAgICAg
ICAgICAgJCQgPSAxMDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFlZRVJST1I7CisgICAg
fQorICAgIDsKKwogLyoKIHBhZ2U6CiAgICAgUEFHRV9TWU0gbWF5YmVfc3BhY2UgSURFTlQ/IHBz
ZXVkb19wYWdlPyBtYXliZV9zcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNzQwZWQ2YS4uNTE2OTQ5ZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCkBAIC02NSw2ICs2NSw4IEBACiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1
ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIldlYktpdENT
U0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNp
bmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgPGtqcy9kdG9hLmg+
CiAKQEAgLTIzMSw2ICsyMzMsMTQgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBDU1NQYXJzZXI6OnBh
cnNlUnVsZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHIKICAgICByZXR1
cm4gbV9ydWxlLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxDU1NSdWxlPiBDU1NQYXJzZXI6
OnBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQgKnNoZWV0LCBjb25zdCBTdHJpbmcgJnN0
cmluZykKK3sKKyAgICBtX3N0eWxlU2hlZXQgPSBzaGVldDsKKyAgICBzZXR1cFBhcnNlcigiQC13
ZWJraXQta2V5ZnJhbWUtcnVsZXsgIiwgc3RyaW5nLCAifSAiKTsKKyAgICBjc3N5eXBhcnNlKHRo
aXMpOworICAgIHJldHVybiBtX2tleWZyYW1lLnJlbGVhc2UoKTsKK30KKwogYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBp
bnQgaWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKIHsKICAgICBBU1NF
UlQoIWRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkgfHwgZGVjbGFyYXRpb24tPnN0eWxlc2hlZXQo
KS0+aXNDU1NTdHlsZVNoZWV0KCkpOwpAQCAtMTI5NCwxMiArMTMwNCwxOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EZWxheToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0
aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
VGltaW5nRnVuY3Rpb246CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxh
eToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogewogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbDsKLSAgICAgICAgaWYgKHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KHByb3BJZCwg
dmFsKSkgeworICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wSWQsIHZhbCkp
IHsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsLnJlbGVhc2UoKSwgaW1wb3J0
YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNTUzLDYgKzE1
NzAsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZVdpZHRoLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciB9Owog
ICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCAyLCBpbXBv
cnRhbnQpOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgorICAg
ICAgICByZXR1cm4gcGFyc2VBbmltYXRpb25TaG9ydGhhbmQoaW1wb3J0YW50KTsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNp
dGlvblNob3J0aGFuZChpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgpA
QCAtMTY5MCw3ICsxNzA5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChp
bnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NT
VmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQordm9pZCBDU1NQYXJzZXI6
OmFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsKICAgICAgICAgaWYgKGx2YWwtPmlzVmFs
dWVMaXN0KCkpCkBAIC0xNzA3LDYgKzE3MjYsNjYgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRyYW5z
aXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPgog
ICAgICAgICBsdmFsID0gcnZhbDsKIH0KIAorYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
U2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQoreworICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10g
PSB7ICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5n
RnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uRGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uIH07CisgICAg
Y29uc3QgaW50IG51bVByb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyBzaXplb2YocHJv
cGVydGllc1swXSk7CisgICAgCisgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJv
cGVydHlXZWJraXRBbmltYXRpb24pOworCisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9w
ZXJ0aWVzXSA9IHsgZmFsc2UgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgZmFsc2UgYXMgbmVj
ZXNzYXJ5CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107CisgICAg
CisgICAgaW50IGk7CisgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgICAg
IGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbC0+aVZhbHVl
ID09ICcsJykgeworICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQuICBGaWxsIGluIGFsbCBy
ZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCisgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRp
ZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCisgICAg
ICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZh
bHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtp
XSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAm
JiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3Bl
cnR5W2ldKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CisgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsKSkg
eworICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCB2YWwucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMg
YW4KKyAgICAgICAgLy8gaW52YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0
CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGlu
aXRpYWwgdmFsdWUuCisgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewor
ICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQorICAgICAgICAgICAgYWRkQW5pbWF0aW9u
VmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOworICAg
IH0KKyAgICAKKyAgICAvLyBOb3cgYWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3ZSBmb3VuZC4K
KyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKQorICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWx1ZXNbaV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9u
U2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogewogICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10g
PSB7IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LApAQCAtMTcyNyw3ICsxODA2
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9y
dGFudCkKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFw
YXJzZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVl
KHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6
OmNyZWF0ZUltcGxpY2l0KCkpOwogICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCkBAIC0xNzM4LDkgKzE4MTcsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0
aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQg
JiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9w
ZXJ0eVtpXSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwotICAgICAg
ICAgICAgICAgIGlmIChwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWwp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHkocHJvcGVydGll
c1tpXSwgdmFsKSkgewogICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVl
c1tpXSwgdmFsLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZh
bHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xNzU0LDcgKzE4MzMsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAgIC8vIEZpbGwgaW4g
YW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgZm9y
IChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICBpZiAoIXBhcnNlZFBy
b3BlcnR5W2ldKQotICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgQ1NT
SW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKKyAgICAgICAgICAgIGFkZEFuaW1hdGlv
blZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQu
CkBAIC0yMjA3LDcgKzIyODYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHko
aW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRGVsYXkoKQorUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRlbGF5KCkKIHsKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3cpCkBAIC0yMjE3LDcgKzIyOTYsMTUgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZURlbGF5KCkKICAgICByZXR1cm4gMDsKIH0K
IAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUR1cmF0aW9uKCkKK1Bhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKQorewor
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAg
aWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVB
bHRlcm5hdGUpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRp
Zmllcih2YWx1ZS0+aWQpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKQogewogICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbGlkVW5pdCh2
YWx1ZSwgRlRpbWV8Rk5vbk5lZywgbV9zdHJpY3QpKQpAQCAtMjIyNSw2ICsyMzEyLDUyIEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VEdXJhdGlvbigpCiAgICAgcmV0dXJu
IDA7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25J
dGVyYXRpb25Db3VudCgpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5maW5pdGUpCisg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+
aWQpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyfEZOb25OZWcsIG1fc3RyaWN0
KSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1
ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
TmFtZSgpCit7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKKyAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAg
ICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0
cmluZywgIm5vbmUiKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
UGxheVN0YXRlKCkKK3sKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOworICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVBhdXNlZCkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSgpCit7Cisg
ICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBp
ZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaW50IHJlc3VsdCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7
CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHJlc3VsdCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5z
dHJpbmcsICJhbGwiKSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKGNBbmltYXRlQWxsKTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVlQWxs
IGluc3RlYWQ/CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJub25l
IikpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihj
QW5pbWF0ZU5vbmUpOyAvLyBGSVhNRTogV2h5IG5vdCB1c2UgQ1NTVmFsdWVOb25lIGluc3RlYWQ/
CisgICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1bmN0aW9u
VmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7CiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHYgPSBhcmdzLT5jdXJyZW50KCk7CkBAIC0yMjQzLDcgKzIzNzYsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVl
TGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rpb24oKQorUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKIHsK
ICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxp
bmVhciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1Zh
bHVlRWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQpCkBAIC0yMjczLDIy
ICsyNDA2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1
bmN0aW9uKCkKICAgICByZXR1cm4gQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLCB5
MSwgeDIsIHkyKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRy
YW5zaXRpb25Qcm9wZXJ0eSgpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IHJlc3VsdCA9IGNzc1By
b3BlcnR5SUQodmFsdWUtPnN0cmluZyk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHJlc3VsdCk7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHZhbHVlLT5zdHJpbmcsICJhbGwiKSkKLSAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGNBbmltYXRlQWxsKTsgLy8gRklYTUU6
IFdoeSBub3QgdXNlIENTU1ZhbHVlQWxsIGluc3RlYWQ/Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlLT5zdHJpbmcsICJub25lIikpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihjQW5pbWF0ZU5vbmUpOyAvLyBGSVhNRTogV2h5IG5vdCB1
c2UgQ1NTVmFsdWVOb25lIGluc3RlYWQ/Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+
JiByZXN1bHQpCitib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShpbnQgcHJv
cElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gdmFsdWVzOwogICAgIENTU1BhcnNlclZhbHVlKiB2YWw7CkBAIC0yMzA3LDIzICsyNDI1LDQ2
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBS
ZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25EZWxheToKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvbkRlbGF5OgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBw
YXJzZURlbGF5KCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0
aW9uRGVsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25E
aXJlY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9u
RGlyZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
RHVyYXRpb246CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EdXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlv
bigpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkR1cmF0
aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRpbWluZ0Z1
bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bkl0ZXJhdGlvbkNvdW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uTmFtZToKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VB
bmltYXRpb25OYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uUGxheVN0YXRlOgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1h
dGlvblBsYXlTdGF0ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFu
c2l0aW9uUHJvcGVydHkoKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VB
bmltYXRpb25Qcm9wZXJ0eSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJW
YWx1ZSA9IHBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM2Miw2ICsyNTAzLDggQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0
cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKworCiAjaWYgRU5B
QkxFKERBU0hCT0FSRF9TVVBQT1JUKQogCiAjZGVmaW5lIERBU0hCT0FSRF9SRUdJT05fTlVNX1BB
UkFNRVRFUlMgIDYKQEAgLTQwNDIsNiArNDE4NSw3IEBAIGludCBDU1NQYXJzZXI6OmxleCh2b2lk
KiB5eWx2YWxXaXRob3V0VHlwZSkKICAgICBjYXNlIEZPTlRfRkFDRV9TWU06CiAgICAgY2FzZSBD
SEFSU0VUX1NZTToKICAgICBjYXNlIE5BTUVTUEFDRV9TWU06CisgICAgY2FzZSBXRUJLSVRfS0VZ
RlJBTUVTX1NZTToKIAogICAgIGNhc2UgSU1QT1JUQU5UX1NZTToKICAgICAgICAgYnJlYWs7CkBA
IC00MzgzLDYgKzQ1MjcsMTQgQEAgQ1NTUnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxp
c3QoKQogICAgIHJldHVybiBsaXN0UHRyOwogfQogCitXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBD
U1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUoKQoreworICAgIFJlZlB0cjxXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlPiBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKG1fc3R5
bGVTaGVldCk7CisgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZVB0ciA9IHJ1bGUuZ2V0
KCk7CisgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAg
ICByZXR1cm4gcnVsZVB0cjsKK30KKwogQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIENTU1N0eWxlUnVsZSogcmVzdWx0ID0g
MDsKQEAgLTQ1MzIsNiArNDY4NCwxOSBAQCB2b2lkIENTU1BhcnNlcjo6ZGVsZXRlRm9udEZhY2VP
bmx5VmFsdWVzKCkKICAgICBtX251bVBhcnNlZFByb3BlcnRpZXMgLT0gZGVsZXRlZFByb3BlcnRp
ZXM7CiB9CiAKK1dlYktpdENTU0tleWZyYW1lUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFt
ZVJ1bGUoZmxvYXQga2V5KQoreworICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtl
eWZyYW1lID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKKwor
ICAgIGtleWZyYW1lLT5zZXRLZXkoa2V5KTsKKyAgICBrZXlmcmFtZS0+c2V0RGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgwLCBtX3BhcnNlZFByb3BlcnRpZXMs
IG1fbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIGNsZWFyUHJvcGVydGllcygpOworCisgICAg
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZXlmcmFtZVB0ciA9IGtleWZyYW1lLmdldCgpOworICAg
IG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChrZXlmcmFtZS5yZWxlYXNlKCkpOworICAgIHJl
dHVybiBrZXlmcmFtZVB0cjsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVD
aGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKaW5kZXggODgwNDcxYS4uMWU0Yjg0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTQ2LDYgKzQ2LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE1lZGlhUXVlcnlFeHA7CiAgICAgY2xhc3Mg
U3R5bGVCYXNlOwogICAgIGNsYXNzIFN0eWxlTGlzdDsKKyAgICBjbGFzcyBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGU7CisgICAgY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKIAogICAgIGNsYXNz
IENTU1BhcnNlciB7CiAgICAgcHVibGljOgpAQCAtNTQsNiArNTYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdm9pZCBwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBT
dHJpbmcmKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVT
aGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNl
S2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9v
bCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29u
c3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZUNv
bG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwog
ICAgICAgICBib29sIHBhcnNlQ29sb3IoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25z
dCBTdHJpbmcmKTsKQEAgLTgzLDE2ICs4NiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCBhZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcnZhbCk7CiAKLSAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVm
UHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CisgICAgICAg
IHZvaWQgYWRkQW5pbWF0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcnZhbCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VE
ZWxheSgpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUR1cmF0aW9uKCk7Ci0g
ICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRpb25EZWxheSgpOworICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOworICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvbkR1cmF0aW9uKCk7CisgICAgICAgIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRpb25OYW1lKCk7CisgICAgICAgIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCk7CisgICAgICAgIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uUHJvcGVydHkoKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpOwogCiAgICAg
ICAgIGJvb2wgcGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFy
Z3MsIGRvdWJsZSYgcmVzdWx0KTsKLSAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0
eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgICAgIGJvb2wgcGFyc2VBbmlt
YXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJv
b2wgcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKKyAgICAgICAgYm9v
bCBwYXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCk7CiAgICAgICAgIAogICAg
ICAgICBib29sIHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFu
dCk7CiAKQEAgLTE1Nyw2ICsxNjUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1l
ZGlhTGlzdCogY3JlYXRlTWVkaWFMaXN0KCk7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZUNoYXJz
ZXRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYpOwogICAgICAgICBDU1NSdWxlKiBjcmVhdGVJ
bXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYsIE1lZGlhTGlzdCopOworICAgICAgICBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGNyZWF0ZUtleWZyYW1lUnVsZShmbG9hdCBrZXkpOworICAg
ICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBjcmVhdGVLZXlmcmFtZXNSdWxlKCk7CiAgICAg
ICAgIENTU1J1bGUqIGNyZWF0ZU1lZGlhUnVsZShNZWRpYUxpc3QqLCBDU1NSdWxlTGlzdCopOwog
ICAgICAgICBDU1NSdWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKICAgICAgICAgQ1NTUnVsZSog
Y3JlYXRlU3R5bGVSdWxlKENTU1NlbGVjdG9yKik7CkBAIC0xODIsNiArMTkyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9pZDsKICAgICAgICAgQ1NTU3R5bGVTaGVldCog
bV9zdHlsZVNoZWV0OwogICAgICAgICBSZWZQdHI8Q1NTUnVsZT4gbV9ydWxlOworICAgICAgICBS
ZWZQdHI8Q1NTUnVsZT4gbV9rZXlmcmFtZTsKICAgICAgICAgTWVkaWFRdWVyeSogbV9tZWRpYVF1
ZXJ5OwogICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIG1fdmFsdWVMaXN0OwogICAgICAgICBD
U1NQcm9wZXJ0eSoqIG1fcGFyc2VkUHJvcGVydGllczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3Nz
L0NTU1Byb3BlcnR5TmFtZXMuaW4gYi9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmlu
ZGV4IDQzYTcwMjEuLjA2MDAwYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
TmFtZXMuaW4KKysrIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgpAQCAtMTQyLDYg
KzE0MiwxNCBAQCB3b3JkLXNwYWNpbmcKIHdvcmQtd3JhcAogei1pbmRleAogem9vbQorLXdlYmtp
dC1hbmltYXRpb24KKy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Cistd2Via2l0LWFuaW1hdGlvbi1k
aXJlY3Rpb24KKy13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uCistd2Via2l0LWFuaW1hdGlvbi1p
dGVyYXRpb24tY291bnQKKy13ZWJraXQtYW5pbWF0aW9uLW5hbWUKKy13ZWJraXQtYW5pbWF0aW9u
LXBsYXktc3RhdGUKKy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbgogLXdlYmtpdC1h
cHBlYXJhbmNlCiAtd2Via2l0LWJhY2tncm91bmQtY2xpcAogLXdlYmtpdC1iYWNrZ3JvdW5kLWNv
bXBvc2l0ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oIGIvV2ViQ29yZS9jc3Mv
Q1NTUnVsZS5oCmluZGV4IDcxODIyMGUuLmIzMGI1NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU1J1bGUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgKQEAgLTM5LDcgKzM5LDkgQEAg
cHVibGljOgogICAgICAgICBNRURJQV9SVUxFLAogICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKICAg
ICAgICAgUEFHRV9SVUxFLAotICAgICAgICBWQVJJQUJMRVNfUlVMRQorICAgICAgICBWQVJJQUJM
RVNfUlVMRSwKKyAgICAgICAgV0VCS0lUX0tFWUZSQU1FU19SVUxFLAorICAgICAgICBXRUJLSVRf
S0VZRlJBTUVfUlVMRQogICAgIH07CiAKICAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIHJldHVybiBD
U1NSdWxlVHlwZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
IGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZjZiMzc4Yy4uMWM2MmYy
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTcwLDYgKzcwLDggQEAKICNpbmNsdWRl
ICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgi
CkBAIC0xODIsNiArMTg0LDU1IEBAIEhBTkRMRV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJ
QUwobWFzaywgTWFzaywgcHJvcCwgUHJvcCkKICNkZWZpbmUgSEFORExFX01BU0tfVkFMVUUocHJv
cCwgUHJvcCwgdmFsdWUpIFwKIEhBTkRMRV9GSUxMX0xBWUVSX1ZBTFVFKG1hc2ssIE1hc2ssIHBy
b3AsIFByb3AsIHZhbHVlKQogCisjZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fSU5IRVJJVF9BTkRf
SU5JVElBTChwcm9wLCBQcm9wKSBcCitpZiAoaXNJbmhlcml0KSB7IFwKKyAgICBBbmltYXRpb25M
aXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzQW5pbWF0aW9ucygpOyBcCisgICAgY29uc3QgQW5p
bWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKTsgXAor
ICAgIHNpemVfdCBpID0gMDsgXAorICAgIGZvciAoIDsgaSA8IHBhcmVudExpc3QtPnNpemUoKSAm
JiAoKnBhcmVudExpc3QpW2ldLT5pcyMjUHJvcCMjU2V0KCk7ICsraSkgeyBcCisgICAgICAgIGlm
IChsaXN0LT5zaXplKCkgPD0gaSkgXAorICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlv
bjo6Y3JlYXRlKCkpOyBcCisgICAgICAgICgqbGlzdClbaV0tPnNldCMjUHJvcCgoKnBhcmVudExp
c3QpW2ldLT5wcm9wKCkpOyBcCisgICAgfSBcCisgICAgXAorICAgIC8qIFJlc2V0IGFueSByZW1h
aW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAgICBmb3Ig
KCA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAorICAgICAgICAoKmxpc3QpW2ldLT5jbGVhciMj
UHJvcCgpOyBcCit9IFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIEFuaW1hdGlvbkxpc3QqIGxp
c3QgPSBtX3N0eWxlLT5hY2Nlc3NBbmltYXRpb25zKCk7IFwKKyAgICAoKmxpc3QpWzBdLT5zZXQj
I1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb24jI1Byb3AoKSk7IFwKKyAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSBcCisgICAgICAgICgqbGlzdClb
MF0tPmNsZWFyIyNQcm9wKCk7IFwKK30KKworI2RlZmluZSBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVF
KHByb3AsIFByb3AsIHZhbHVlKSB7IFwKK0hBTkRMRV9BTklNQVRJT05fSU5IRVJJVF9BTkRfSU5J
VElBTChwcm9wLCBQcm9wKSBcCitpZiAoaXNJbmhlcml0IHx8IGlzSW5pdGlhbCkgXAorICAgIHJl
dHVybjsgXAorQW5pbWF0aW9uTGlzdCogbGlzdCA9IG1fc3R5bGUtPmFjY2Vzc0FuaW1hdGlvbnMo
KTsgXAorc2l6ZV90IGNoaWxkSW5kZXggPSAwOyBcCitpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkp
IHsgXAorICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3Jl
YXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQuICovIFwKKyAgICBDU1NWYWx1ZUxpc3QqIHZhbHVl
TGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAorICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICAg
ICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCisgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9w
KCgqbGlzdClbY2hpbGRJbmRleF0uZ2V0KCksIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7IFwKKyAgICAgICAgKytjaGlsZEluZGV4OyBcCisgICAgfSBcCit9IGVsc2UgeyBc
CisgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgXAorICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0
aW9uOjpjcmVhdGUoKSk7IFwKKyAgICBtYXBBbmltYXRpb24jI1Byb3AoKCpsaXN0KVtjaGlsZElu
ZGV4XS5nZXQoKSwgdmFsdWUpOyBcCisgICAgY2hpbGRJbmRleCA9IDE7IFwKK30gXAorZm9yICgg
OyBjaGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsgXAorICAgIC8qIFJl
c2V0IGFsbCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICov
IFwKKyAgICAoKmxpc3QpW2NoaWxkSW5kZXhdLT5jbGVhciMjUHJvcCgpOyBcCit9IFwKK30KKwog
I2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3Ap
IFwKIGlmIChpc0luaGVyaXQpIHsgXAogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxl
LT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCkBAIC0yMTYsMTMgKzI2NywxMyBAQCBpZiAodmFsdWUt
PmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFs
dWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlz
dC0+c2l6ZSgpKSBcCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUo
KSk7IFwKLSAgICAgICAgbWFwIyNQcm9wKCgqbGlzdClbY2hpbGRJbmRleF0uZ2V0KCksIHZhbHVl
TGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9u
IyNQcm9wKCgqbGlzdClbY2hpbGRJbmRleF0uZ2V0KCksIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSk7IFwKICAgICAgICAgKytjaGlsZEluZGV4OyBcCiAgICAgfSBcCiB9IGVs
c2UgeyBcCiAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgXAogICAgICAgICBsaXN0LT5hcHBlbmQo
QW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICBtYXAjI1Byb3AoKCpsaXN0KVtjaGlsZEluZGV4
XS5nZXQoKSwgdmFsdWUpOyBcCisgICAgbWFwQW5pbWF0aW9uIyNQcm9wKCgqbGlzdClbY2hpbGRJ
bmRleF0uZ2V0KCksIHZhbHVlKTsgXAogICAgIGNoaWxkSW5kZXggPSAxOyBcCiB9IFwKIGZvciAo
IDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7IFwKQEAgLTM2Nyw2
ICs0MTgsMzYgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCog
ZG9jLCBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LAogICAgIH0KIH0KIAorLy8gdGhpcyBp
cyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVz
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5bGUoRG9jdW1lbnQqIGRvYywg
Y29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSkKK3sKKyAgICBBdG9taWNTdHJpbmcg
cyhydWxlLT5uYW1lKCkpOworICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IGxpc3Q7CisgICAgaWYg
KG1fa2V5ZnJhbWVSdWxlTWFwLmNvbnRhaW5zKHMuaW1wbCgpKSkKKyAgICAgICAgbGlzdCA9IG1f
a2V5ZnJhbWVSdWxlTWFwLmdldChzLmltcGwoKSkuZ2V0KCk7CisgICAgZWxzZSB7CisgICAgICAg
IGxpc3QgPSBLZXlmcmFtZUxpc3Q6OmNyZWF0ZShzKTsKKyAgICAgICAgbV9rZXlmcmFtZVJ1bGVN
YXAuYWRkKHMuaW1wbCgpLCBsaXN0KTsKKyAgICB9CisgICAgbGlzdC0+Y2xlYXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGUtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZiA9IHJ1
bGUtPml0ZW0oaSk7CisgICAgICAgIG1fc3R5bGUgPSBuZXcgKGRvYy0+cmVuZGVyQXJlbmEoKSkg
UmVuZGVyU3R5bGUoKTsKKyAgICAgICAgbV9zdHlsZS0+cmVmKCk7CisgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0ga2YtPnN0eWxlKCk7CisgICAgICAgIERlcHJlY2F0
ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7CisgICAgICAgIGZvciAo
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gZGVjbC0+
dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBD
U1NQcm9wZXJ0eSYgY3VycmVudCA9ICppdDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3Vy
cmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgbGlzdC0+YWRkUHJvcGVy
dHkoY3VycmVudC5pZCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaXN0LT5pbnNlcnQoa2YtPmtl
eSgpLCAqbV9zdHlsZSk7CisgICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvYy0+cmVuZGVyQXJlbmEo
KSk7CisgICAgICAgIG1fc3R5bGUgPSAwOworICAgIH0KK30KKwogdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjppbml0KCkKIHsKICAgICBtX2VsZW1lbnQgPSAwOwpAQCAtMzg0LDYgKzQ2NSw3IEBAIENT
U1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKICAgICBkZWxldGUgbV9hdXRob3JT
dHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAgbV9rZXlmcmFtZVJ1bGVNYXAu
Y2xlYXIoKTsKIH0KIAogc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzaXplKQpAQCAtODY0LDcgKzk0Niw3IEBAIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG4pCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5pc0NoZWNrZWQoKSAhPSBtX2VsZW1lbnQtPmlz
Q2hlY2tlZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSkKKyAgICAgICAgICAgIGlmIChz
dHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgYm9vbCBjbGFzc2VzTWF0Y2ggPSB0cnVl
OwpAQCAtMTMyMCw3ICsxNDAyLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQgKmUpCiAgICAgc3R5bGUtPmFkanVz
dEJhY2tncm91bmRMYXllcnMoKTsKICAgICBzdHlsZS0+YWRqdXN0TWFza0xheWVycygpOwogCi0g
ICAgLy8gRG8gdGhlIHNhbWUgZm9yIHRyYW5zaXRpb25zLgorICAgIC8vIERvIHRoZSBzYW1lIGZv
ciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KKyAgICBzdHlsZS0+YWRqdXN0QW5pbWF0aW9u
cygpOwogICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOwogCiAgICAgLy8gSW1wb3J0YW50
OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVt
ZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbApAQCAtMjMxNSwx
MCArMjM5OCwxNCBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxl
U2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdAogICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hp
bGRJdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBy
dWxlLT5zZWxlY3RvcigpOyBzOyBzID0gcy0+bmV4dCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFJ1bGUocnVsZSwgcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXRlbS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2Vs
ZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0
byBvdXIgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxl
KiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpdGVtKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRG
b250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaGlsZEl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdENTU0tleWZyYW1lc1J1bGUqIGtl
eWZyYW1lc1J1bGUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJ
dGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1l
U3R5bGUoc2hlZXQtPmRvYygpLCBrZXlmcmFtZXNSdWxlKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKICAgICAgICAgICAgIH0gICAvLyBp
ZiBydWxlcwpAQCAtMjMzMSw2ICsyNDE4LDkgQEAgdm9pZCBDU1NSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXQKICAg
ICAgICAgICAgIENTU1ZhcmlhYmxlc1J1bGUqIHZhcmlhYmxlcyA9IHN0YXRpY19jYXN0PENTU1Zh
cmlhYmxlc1J1bGUqPihpdGVtKTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGVzLT5tZWRpYSgp
IHx8IG1lZGl1bS5ldmFsKHZhcmlhYmxlcy0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCiAgICAg
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkVmFyaWFibGVzKHZhcmlhYmxlcyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkpIHsKKyAgICAgICAgICAgIFdl
YktpdENTU0tleWZyYW1lc1J1bGUqIHIgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKj4oaXRlbSk7CisgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxl
KHNoZWV0LT5kb2MoKSwgcik7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NzQzLDYgKzQ4MzMs
MzMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFs
dWUgKnZhbHVlKQogICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1PcmlnaW5ZKGwpOwogICAg
ICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoK
KyAgICAgICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0
aW9ucygpOworICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBtX3N0eWxl
LT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgorICAg
ICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRlbGF5LCBEZWxheSwgdmFsdWUpCisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgor
ICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRpcmVjdGlvbiwgRGlyZWN0aW9uLCB2YWx1
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25E
dXJhdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkdXJhdGlvbiwgRHVyYXRp
b24sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50OgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGl0
ZXJhdGlvbkNvdW50LCBJdGVyYXRpb25Db3VudCwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICAgICAgSEFORExFX0FO
SU1BVElPTl9WQUxVRShuYW1lLCBOYW1lLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6CisgICAgICAgIEhBTkRMRV9B
TklNQVRJT05fVkFMVUUocGxheVN0YXRlLCBQbGF5U3RhdGUsIHZhbHVlKQorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgor
ICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKHRpbWluZ0Z1bmN0aW9uLCBUaW1pbmdGdW5j
dGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKICAgICAgICAgICAgIG1fc3R5bGUt
PmNsZWFyVHJhbnNpdGlvbnMoKTsKQEAgLTUwMDEsMTAgKzUxMTgsMzkgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwogfQogCi12b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcER1cmF0aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFu
aW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBl
KCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0RGVs
YXkoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EZWxheSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgYW5pbWF0aW9uLT5zZXREZWxh
eSgwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQorICAgICAgICAgICAgYW5pbWF0aW9u
LT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpLzEwMDAuMGYpOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFM
KSB7CisgICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmlt
YXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKKyAgICBsYXllci0+c2V0RGlyZWN0aW9uKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlQWx0ZXJuYXRlKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19J
TklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjpp
bml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRp
b24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNTAxMywzMyArNTE1OSw3NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcER1cmF0aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQog
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQotICAgICAgICB0cmFuc2l0aW9u
LT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsK
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKHByaW1p
dGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7CisgICAgICAgIGFuaW1hdGlvbi0+
c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLjBmKTsKIH0K
IAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEZWxheShBbmltYXRpb24qIHRyYW5zaXRpb24s
IENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewot
ICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlv
bkRlbGF5KCkpOworICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KFJlbmRlclN0
eWxlOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGVsYXko
MCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAgICAgIHRyYW5zaXRpb24t
PnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpLzEwMDAuMGYpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUluZmluaXRlKQorICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50
KC0xKTsKKyAgICBlbHNlCisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoaW50
KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKK30KKwordm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5J
VElBTCkgeworICAgICAgICBsYXllci0+c2V0TmFtZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1h
dGlvbk5hbWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKKyAgICAKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKSB7CisgICAgICAgIGxheWVyLT5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOworICAgIAorICAgICAgICAvLyByZXNvbHZlIHRvIHRoZSBrZXlmcmFtZXMKKyAg
ICAgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4ga2V5ZnJhbWUgPSBmaW5kS2V5ZnJhbWVSdWxlKHBy
aW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgbGF5ZXItPnNldEFuaW1h
dGlvbktleWZyYW1lKGtleWZyYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRp
b24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5
cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlv
bigpKTsKKyAgICAgICAgbGF5ZXItPnNldFBsYXlTdGF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFu
aW1hdGlvblBsYXlTdGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRQbGF5U3RhdGUoKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmlt
UGxheVN0YXRlUGxheWluZyk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewor
ICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uUHJvcGVydHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOworICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKK30KKwordm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NT
VmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTUwNDcsMTkgKzUyMzcsMTkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIHRyYW5zaXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIHN3aXRj
aCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMaW5lYXI6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24o
VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBh
bmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1
bmN0aW9uKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlRWFzZToKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihU
aW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
LCAuNDIsIC4wLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjQy
LCAuMCwgMS4wLCAxLjApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVFYXNlT3V0OgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIC4wLCAu
MCwgLjU4LCAxLjApKTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0
aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIC4wLCAuMCwgLjU4
LCAxLjApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVFYXNlSW5PdXQ6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjQyLCAuMCwgLjU4
LCAxLjApKTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRp
bWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIC40MiwgLjAsIC41OCwgMS4w
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpA
QCAtNTA2NywyMiArNTI1Nyw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVGltaW5nRnVu
Y3Rpb24oQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgCiAgICAg
aWYgKHZhbHVlLT5pc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewogICAgICAgICBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlKiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1bmN0
aW9uVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9u
KFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIHRpbWluZ0Z1bmN0aW9u
LT54MSgpLCB0aW1pbmdGdW5jdGlvbi0+eTEoKSwgdGltaW5nRnVuY3Rpb24tPngyKCksIHRpbWlu
Z0Z1bmN0aW9uLT55MigpKSk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cFByb3BlcnR5KEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uUHJvcGVydHkoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRU
aW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCB0
aW1pbmdGdW5jdGlvbi0+eDEoKSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRpbWluZ0Z1bmN0aW9u
LT54MigpLCB0aW1pbmdGdW5jdGlvbi0+eTIoKSkpOwogICAgIH0KLQotICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdl
JiBpbWFnZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCBiOTE2NzE4Li5iM2E1NDMxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCkBAIC02MCw2ICs2MCw3IEBAIGNsYXNzIFN0eWxlSW1hZ2U7CiBj
bGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBTdHlsZWRFbGVt
ZW50OworY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKIAogY2xhc3MgTWVkaWFRdWVyeVJl
c3VsdCB7CiBwdWJsaWM6CkBAIC0xMzAsMTEgKzEzMSwyNCBAQCBwdWJsaWM6CiAKICAgICAgICAg
dm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBtX2NoZWNrZXIuYWxsVmlzaXRlZFN0YXRl
Q2hhbmdlZCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZCh1bnNpZ25lZCB2
aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlzaXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7
IH0KLSAgICAgICAgCisKICAgICAgICAgdm9pZCBhZGRWYXJpYWJsZXMoQ1NTVmFyaWFibGVzUnVs
ZSogdmFyaWFibGVzKTsKICAgICAgICAgQ1NTVmFsdWUqIHJlc29sdmVWYXJpYWJsZURlcGVuZGVu
dFZhbHVlKENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUqKTsKICAgICAgICAgdm9pZCByZXNvbHZl
VmFyaWFibGVzRm9yRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2ws
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBuZXdEZWNsLCBIYXNoU2V0PFN0cmluZz4mIHVz
ZWRCbG9ja1ZhcmlhYmxlcyk7CiAKKyAgICAgICAgS2V5ZnJhbWVMaXN0KiBmaW5kS2V5ZnJhbWVS
dWxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgcyhuYW1lKTsKKyAgICAgICAgICAgIGlmICghbV9r
ZXlmcmFtZVJ1bGVNYXAuY29udGFpbnMocy5pbXBsKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVSdWxlTWFwLmZpbmQocy5pbXBsKCkp
LmdldCgpLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEtleWZy
YW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVs
ZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rv
ck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9
OwogCkBAIC0xNjMsNiArMTc3LDkgQEAgcHVibGljOgogICAgICAgICBGaWxsTGF5ZXIgbV9iYWNr
Z3JvdW5kRGF0YTsKICAgICAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiA+
IEtleWZyYW1lUnVsZU1hcDsKKyAgICAgICAgS2V5ZnJhbWVSdWxlTWFwIG1fa2V5ZnJhbWVSdWxl
TWFwOworCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90
WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCkBAIC0y
MDUsMTAgKzIyMiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1hcERlbGF5KEFuaW1hdGlvbios
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFs
dWUqKTsKLSAgICAgICAgdm9pZCBtYXBUaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1
ZSopOwotICAgICAgICB2b2lkIG1hcFByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Cisg
ICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAg
ICAgICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENT
U1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NW
YWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBD
U1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbios
IENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENT
U1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVLZXl3b3Jkcy5pbiBiL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KaW5kZXgg
YjM5ZTE1MS4uY2M2NDUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jk
cy5pbgorKysgYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCkBAIC01NjQsMTEgKzU2
NCwyOSBAQCBsaW5lcwogCiAjCiAjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9ERUxBWQor
IyBDU1NfUFJPUF9fV0VCS0lUX0FOSU1BVElPTl9ERUxBWQogIwogbm93CiAKICMKKyMgQ1NTX1BS
T1BfX1dFQktJVF9BTklNQVRJT05fRElSRUNUSU9OCisjCisjIGFsdGVybmF0ZQorCisjCisjIENT
U19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX0lURVJBVElPTl9DT1VOVAorIworIyBpbmZpbml0ZQor
CisjCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX1BMQVlfU1RBVEUKKyMKK3J1bm5pbmcK
K3BhdXNlZAorCisjCiAjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJ
T04KKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBlYXNl
CiBsaW5lYXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5oIGIvV2ViQ29yZS9j
c3MvU3R5bGVCYXNlLmgKaW5kZXggNmRkZjE3ZC4uM2RjNTM4OCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9jc3MvU3R5bGVCYXNlLmgKKysrIGIvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKQEAgLTUwLDYg
KzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFy
c2V0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRG
YWNlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9y
dFJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFt
ZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFt
ZXNSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFS
dWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGVz
UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lUnVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlNmViMQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKworI2luY2x1ZGUgIkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQor
ICAgIDogQ1NTUnVsZShwYXJlbnQpCisgICAgLCBtX2tleSgwKQoreworfQorCitXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGU6On5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKQoreworICAgIGlmIChtX3N0eWxl
KQorICAgICAgICBtX3N0eWxlLT5zZXRQYXJlbnQoMCk7Cit9CisKK1N0cmluZyBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGU6OmtleVRleHQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmc6Om51bWJl
cihtX2tleSkgKyAiJSI7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzZXRLZXlU
ZXh0KGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBtX2tleSA9IGtleVN0cmluZ1RvRmxvYXQocyk7
Cit9CisKK1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSBjb25zdAorewor
ICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6Om51bWJlcihtX2tleSk7CisKKyAgICByZXN1bHQg
Kz0gIiUgeyAiOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0
ICs9ICJ9IjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypzdHJp
Y3QqLykKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fc3R5bGUgPSBzdHlsZTsKKyAgICBtX3N0
eWxlLT5zZXRQYXJlbnQocGFyZW50KCkpOworfQorCisvKiBzdGF0aWMgKi8KK2Zsb2F0IFdlYktp
dENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChjb25zdCBTdHJpbmcmIHMpCit7Cisg
ICAgZmxvYXQga2V5ID0gMDsKKyAgICAKKyAgICAvLyBmb3Igbm93IHRoZSBzeW50YXggTVVTVCBi
ZSAneHh4JScgb3IgJ2Zyb20nIG9yICd0bycsIHdoZXJlIHh4eCBpcyBhIGxlZ2FsIGZsb2F0aW5n
IHBvaW50IG51bWJlcgorICAgIGlmIChzID09ICJmcm9tIikKKyAgICAgICAga2V5ID0gMDsKKyAg
ICBlbHNlIGlmIChzID09ICJ0byIpCisgICAgICAgIGtleSA9IDEwMDsKKyAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKHMuZW5kc1dpdGgoIiUiKSkgeworICAgICAgICAgICAgZmxvYXQgayA9IHMuc3Vi
c3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCk7CisgICAgICAgICAgICBpZiAoayA+
PSAwICYmIGsgPD0gMTAwKQorICAgICAgICAgICAgICAgIGtleSA9IGs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGtleTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggYi9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMWVjNzAzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gKKyNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gK
KworI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwor
Y2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIDogcHVibGljIENTU1J1bGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKDAp
KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiBj
cmVhdGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUocGFyZW50KSk7CisgICAgfQorCisgICAgdmly
dHVhbCB+V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlm
cmFtZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NS
dWxlCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gV0VC
S0lUX0tFWUZSQU1FX1JVTEU7IH0KKworICAgIFN0cmluZyBrZXlUZXh0KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRLZXlUZXh0KGNvbnN0IFN0cmluZyYgcyk7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisKKyAgICAvLyBOb3QgcGFydCBvZiB0
aGUgQ1NTT00KKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9v
bCA9IGZhbHNlKTsKKyAgICAKKyAgICBmbG9hdCBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS8x
MDA7IH0KKyAgICBmbG9hdCBrZXlBc1BlcmNlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQor
CisgICAgdm9pZCBzZXRLZXkoZmxvYXQgaykgeyBtX2tleSA9IGs7IH0KKyAgICB2b2lkIHNldERl
Y2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKworICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgICAgICAgIGRlY2xhcmF0aW9uKCkgICAgICAg
eyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiAgIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQor
ICAgIAorICAgIHN0YXRpYyBmbG9hdCBrZXlTdHJpbmdUb0Zsb2F0KGNvbnN0IFN0cmluZyYgcyk7
CisgCitwcml2YXRlOgorICAgIFdlYktpdENTU0tleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiBw
YXJlbnQpOworCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxl
OworICAgIGZsb2F0IG1fa2V5OyAgICAgICAgLy8gMCB0byAxMDAKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYktpdENTU0tleWZyYW1lUnVsZV9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjFkMWQxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlLmNwcApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIldlYktp
dENTU0tleWZyYW1lc1J1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKKyAgICA6IENTU1J1bGUocGFyZW50KQor
ICAgICwgbV9sc3RDU1NSdWxlcyhDU1NSdWxlTGlzdDo6Y3JlYXRlKCkpCit7Cit9CisKK1dlYktp
dENTU0tleWZyYW1lc1J1bGU6On5XZWJLaXRDU1NLZXlmcmFtZXNSdWxlKCkKK3sKKyAgICBpbnQg
bGVuZ3RoID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aCA9PSAwKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCisgICAgICAgIG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPnNldFBhcmVudCgwKTsKK30K
KworU3RyaW5nIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Om5hbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25hbWU7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIC8qZWMqLykKK3sKKyAgICBtX25hbWUg
PSBuYW1lOworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OnNldE5hbWUoU3RyaW5n
IG5hbWUpCit7CisgICAgbV9uYW1lID0gbmFtZTsKK30KKwordW5zaWduZWQgV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy5n
ZXQoKS0+bGVuZ3RoKCk7Cit9CisKK1dlYktpdENTU0tleWZyYW1lUnVsZSogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBDU1NSdWxlKiBydWxlID0g
bV9sc3RDU1NSdWxlcy5nZXQoKS0+aXRlbShpbmRleCk7CisgICAgcmV0dXJuIChydWxlICYmIHJ1
bGUtPmlzS2V5ZnJhbWVSdWxlKCkpID8gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
Kj4ocnVsZSkgOiAwOworfQorCitjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIFdlYktpdENT
U0tleWZyYW1lc1J1bGU6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQ1NTUnVs
ZSogcnVsZSA9IG1fbHN0Q1NTUnVsZXMuZ2V0KCktPml0ZW0oaW5kZXgpOworICAgIHJldHVybiAo
cnVsZSAmJiBydWxlLT5pc0tleWZyYW1lUnVsZSgpKSA/IHN0YXRpY19jYXN0PGNvbnN0IFdlYktp
dENTU0tleWZyYW1lUnVsZSo+KHJ1bGUpIDogMDsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlOjppbnNlcnQoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBydWxlKQoreworICAgIGZsb2F0
IGtleSA9IHJ1bGUtPmtleUFzUGVyY2VudCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVyY2VudCgp
ID09IGtleSkgeworICAgICAgICAgICAgbV9sc3RDU1NSdWxlcy5nZXQoKS0+ZGVsZXRlUnVsZShp
KTsKKyAgICAgICAgICAgIG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmluc2VydFJ1bGUocnVsZSwgaSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0oaSktPmtl
eUFzUGVyY2VudCgpID4ga2V5KSB7CisgICAgICAgICAgICAvLyBpbnNlcnQgYmVmb3JlCisgICAg
ICAgICAgICBtX2xzdENTU1J1bGVzLmdldCgpLT5pbnNlcnRSdWxlKHJ1bGUsIGkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGFwcGVuZAorICAg
IG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmFwcGVuZChydWxlKTsKKyAgICBzdHlsZXNoZWV0KCktPnN0
eWxlU2hlZXRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6aW5z
ZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUpCit7CisgICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0
UGFyc2luZygpKTsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gbmV3UnVsZSA9IHAucGFyc2VLZXlmcmFt
ZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxlKTsKKyAgICBpZiAobmV3UnVsZS5nZXQoKSAm
JiBuZXdSdWxlLmdldCgpLT5pc0tleWZyYW1lUnVsZSgpKQorICAgICAgICBpbnNlcnQoc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4obmV3UnVsZS5nZXQoKSkpOworfQorCit2b2lk
IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUoY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIGZsb2F0IGtleSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChz
KTsKKyAgICBpbnQgaSA9IGZpbmRSdWxlSW5kZXgoa2V5KTsKKyAgICBpZiAoaSA+PSAwKSB7Cisg
ICAgICAgIG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmRlbGV0ZVJ1bGUoaSk7CisgICAgICAgIHN0eWxl
c2hlZXQoKS0+c3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICB9Cit9CisKK1dlYktpdENTU0tleWZy
YW1lUnVsZSogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6ZmluZFJ1bGUoY29uc3QgU3RyaW5nJiBz
KQoreworICAgIGZsb2F0IGtleSA9IFdlYktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9G
bG9hdChzKTsKKyAgICBpbnQgaSA9IGZpbmRSdWxlSW5kZXgoa2V5KTsKKyAgICByZXR1cm4gKGkg
Pj0gMCkgPyBpdGVtKGkpIDogMDsKK30KKworaW50IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmZp
bmRSdWxlSW5kZXgoZmxvYXQga2V5KSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtKGkpLT5rZXlBc1BlcmNlbnQo
KSA9PSBrZXkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7
Cit9CisKK1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjc3NUZXh0KCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgcmVzdWx0ID0gIkAtd2Via2l0LWtleWZyYW1lcyAiOworICAgIHJlc3VsdCAr
PSBtX25hbWU7CisgICAgcmVzdWx0ICs9ICIgeyBcbiI7CisKKyAgICBpZiAobV9sc3RDU1NSdWxl
cykgeworICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBy
ZXN1bHQgKz0gIiAgIjsKKyAgICAgICAgICAgIHJlc3VsdCArPSBtX2xzdENTU1J1bGVzLT5pdGVt
KGkpLT5jc3NUZXh0KCk7CisgICAgICAgICAgICByZXN1bHQgKz0gIlxuIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJlc3VsdCArPSAifSI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5oIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYyYzQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKQEAgLTAsMCArMSw4OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZV9oCisjZGVmaW5l
IFdlYktpdENTU0tleWZyYW1lc1J1bGVfaAorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIFdlYktpdENTU0tleWZyYW1l
UnVsZTsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKDAp
KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4g
Y3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShwYXJlbnQpKTsKKyAgICB9CisKKyAgICB+
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSgpOworCisgICAgdmlydHVhbCBib29sIGlzS2V5ZnJhbWVz
UnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1bGUK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBXRUJLSVRf
S0VZRlJBTUVTX1JVTEU7IH0KKworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsgICAgCisgICAgdm9pZCBzZXRO
YW1lKFN0cmluZyk7ICAgIAorCisgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVzKCkgeyByZXR1cm4g
bV9sc3RDU1NSdWxlcy5nZXQoKTsgfQorCisgICAgdm9pZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmlu
ZyYgcnVsZSk7CisgICAgdm9pZCBkZWxldGVSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGZpbmRSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsKKworICAg
IHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKworICAgIC8qIG5vdCBwYXJ0IG9mIHRo
ZSBET00gKi8KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUqICAgICAgICBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUqICBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2b2lkIGlu
c2VydChXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIHJ1bGUpOworCitwcml2YXRlOgorICAgIFdlYktp
dENTU0tleWZyYW1lc1J1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KTsKKworICAgIGludCBmaW5k
UnVsZUluZGV4KGZsb2F0IGtleSkgY29uc3Q7CisgICAgCisgICAgUmVmUHRyPENTU1J1bGVMaXN0
PiBtX2xzdENTU1J1bGVzOworICAgIFN0cmluZyBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4IGIvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZs
ZXgKaW5kZXggM2EyZTViYS4uN2U1YTgxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvdG9rZW5p
emVyLmZsZXgKKysrIGIvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXgKQEAgLTY1LDYgKzY1LDcg
QEAgbnRoICAgICAgICAgICAgICgtP1swLTldKm5bXCstXVswLTldKyl8KC0/WzAtOV0qbikKICJA
LXdlYmtpdC12YXJpYWJsZXMiICAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBXRUJLSVRf
VkFSSUFCTEVTX1NZTTsgcmV0dXJuIHl5VG9rOyB9CiAiQC13ZWJraXQtZGVmaW5lIiAgICAgICB7
QkVHSU4oZm9ya2V5d29yZCk7IHl5VG9rID0gV0VCS0lUX0RFRklORV9TWU07IHJldHVybiB5eVRv
azsgfQogIkAtd2Via2l0LXZhcmlhYmxlcy1kZWNscyIgeyB5eVRvayA9IFdFQktJVF9WQVJJQUJM
RVNfREVDTFNfU1lNOyByZXR1cm4geXlUb2s7IH0KKyJALXdlYmtpdC1rZXlmcmFtZXMiICAgIHt5
eVRvayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOyByZXR1cm4geXlUb2s7IH0KIAogIkAie2lkZW50
fSAgICAgICAgICAgICAge3l5VG9rID0gQVRLRVlXT1JEOyByZXR1cm4geXlUb2s7IH0KIAo=
</data>
<flag name="review"
          id="10022"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>