<?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>175184</bug_id>
          
          <creation_ts>2017-08-04 03:56:50 -0700</creation_ts>
          <short_desc>WebDriver: implement unhandled prompt behavior</short_desc>
          <delta_ts>2017-08-07 23:44:38 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174614</dependson>
    
    <dependson>174618</dependson>
          <blocked>166679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1335209</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-08-04 03:56:50 -0700</bug_when>
    <thetext>https://w3c.github.io/webdriver/webdriver-spec.html#dfn-user-prompt-handler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336022</commentid>
    <comment_count>1</comment_count>
      <attachid>317435</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-08-07 10:35:07 -0700</bug_when>
    <thetext>Created attachment 317435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336024</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-07 10:37:23 -0700</bug_when>
    <thetext>Attachment 317435 did not pass style-queue:


ERROR: Source/WebDriver/Session.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebDriver/Session.h:107:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebDriver/Session.cpp:146:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebDriver/Session.cpp:197:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336033</commentid>
    <comment_count>3</comment_count>
      <attachid>317435</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-08-07 10:53:12 -0700</bug_when>
    <thetext>Comment on attachment 317435
Patch

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

r=me

&gt; Source/WebDriver/ChangeLog:16
&gt; +        as part fo the result error message.

Nit: of

&gt; Source/WebDriver/ChangeLog:19
&gt; +        (WebDriver::Session::handleUserPrompts): Check if therre&apos;s an active JavaScript dialog and deal with it depeding

Nit: there&apos;s

&gt; Source/WebDriver/Session.cpp:167
&gt; +        bool shouldFailOnDismiss = false;

I think it would be cleaner here to use a std::optional&lt;UnhandledPromptBehavior&gt;. The !value() case can go before the switch and you can move the most complicated part of the switch case (the if branch) out of the switch entirely.

&gt; Source/WebDriver/Session.cpp:210
&gt; +            errorResult.setAdditonalErrorData(WTFMove(additonalData));

Nit: setAdditionalErrorData

&gt; Source/WebDriver/Session.cpp:223
&gt; +    handleUserPrompts([this, url, completionHandler = WTFMove(completionHandler)](CommandResult&amp;&amp; result) mutable {

This significantly indents most of the session code. Is there a way we can extract it into a separate method to cut down on async indent noise? (this situation always makes me miss JS promises..)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336388</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-08-07 23:40:24 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #3)
&gt; Comment on attachment 317435 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=317435&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebDriver/ChangeLog:16
&gt; &gt; +        as part fo the result error message.
&gt; 
&gt; Nit: of
&gt; 
&gt; &gt; Source/WebDriver/ChangeLog:19
&gt; &gt; +        (WebDriver::Session::handleUserPrompts): Check if therre&apos;s an active JavaScript dialog and deal with it depeding
&gt; 
&gt; Nit: there&apos;s
&gt; 
&gt; &gt; Source/WebDriver/Session.cpp:167
&gt; &gt; +        bool shouldFailOnDismiss = false;
&gt; 
&gt; I think it would be cleaner here to use a
&gt; std::optional&lt;UnhandledPromptBehavior&gt;. The !value() case can go before the
&gt; switch and you can move the most complicated part of the switch case (the if
&gt; branch) out of the switch entirely.
&gt; 
&gt; &gt; Source/WebDriver/Session.cpp:210
&gt; &gt; +            errorResult.setAdditonalErrorData(WTFMove(additonalData));
&gt; 
&gt; Nit: setAdditionalErrorData

Oops.

&gt; &gt; Source/WebDriver/Session.cpp:223
&gt; &gt; +    handleUserPrompts([this, url, completionHandler = WTFMove(completionHandler)](CommandResult&amp;&amp; result) mutable {
&gt; 
&gt; This significantly indents most of the session code. Is there a way we can
&gt; extract it into a separate method to cut down on async indent noise? (this
&gt; situation always makes me miss JS promises..)

That&apos;s the problem of lambdas :-/ things are even worse when we end up nesting several lambdas. Fortunately, I think waiting for navigation and handling prompts are the only global things we have to do before running commands, so this is the last time we have to reindent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336390</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-08-07 23:43:35 -0700</bug_when>
    <thetext>Committed r220388: &lt;http://trac.webkit.org/changeset/220388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336391</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-07 23:44:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/33770251&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317435</attachid>
            <date>2017-08-07 10:35:07 -0700</date>
            <delta_ts>2017-08-07 10:53:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wd-handle-user-prompts.diff</filename>
            <type>text/plain</type>
            <size>77738</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ2FwYWJpbGl0aWVzLmggYi9Tb3VyY2UvV2Vi
RHJpdmVyL0NhcGFiaWxpdGllcy5oCmluZGV4IGUxMTU3M2RkZTg3Li4yMzMzNWVjYjEwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9DYXBhYmlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2Vi
RHJpdmVyL0NhcGFiaWxpdGllcy5oCkBAIC00NCw2ICs0NCwxMiBAQCBlbnVtIGNsYXNzIFBhZ2VM
b2FkU3RyYXRlZ3kgewogICAgIEVhZ2VyCiB9OwogCitlbnVtIGNsYXNzIFVuaGFuZGxlZFByb21w
dEJlaGF2aW9yIHsKKyAgICBEaXNtaXNzLAorICAgIEFjY2VwdCwKKyAgICBJZ25vcmUKK307CisK
IHN0cnVjdCBDYXBhYmlsaXRpZXMgewogICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBicm93c2Vy
TmFtZTsKICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gYnJvd3NlclZlcnNpb247CkBAIC01MSw2
ICs1Nyw3IEBAIHN0cnVjdCBDYXBhYmlsaXRpZXMgewogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
YWNjZXB0SW5zZWN1cmVDZXJ0czsKICAgICBzdGQ6Om9wdGlvbmFsPFRpbWVvdXRzPiB0aW1lb3V0
czsKICAgICBzdGQ6Om9wdGlvbmFsPFBhZ2VMb2FkU3RyYXRlZ3k+IHBhZ2VMb2FkU3RyYXRlZ3k7
CisgICAgc3RkOjpvcHRpb25hbDxVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcj4gdW5oYW5kbGVkUHJv
bXB0QmVoYXZpb3I7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBicm93c2VyQmluYXJ5OwogICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IGJyb3dz
ZXJBcmd1bWVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJEcml2ZXIvQ2hhbmdlTG9nCmluZGV4IDdlMzQ0MzBlZjE1Li4wZDAyNDNlNTgwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkRy
aXZlci9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1NCBAQAogMjAxNy0wOC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgV2ViRHJpdmVyOiBpbXBs
ZW1lbnQgdW5oYW5kbGVkIHByb21wdCBiZWhhdmlvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIHVzZXIgcHJvbXB0cyBiZWZvcmUgcnVubmlu
ZyBzb21lIG9mIHRoZSBjb21tYW5kcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24uCisK
KyAgICAgICAgKiBDYXBhYmlsaXRpZXMuaDogQWRkIFVuaGFuZGxlZFByb21wdEJlaGF2aW9yIGNh
cGFiaWxpdHkuCisgICAgICAgICogQ29tbWFuZFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJEcml2
ZXI6OkNvbW1hbmRSZXN1bHQ6Omh0dHBTdGF0dXNDb2RlIGNvbnN0KTogQWRkIFVuZXhwZWN0ZWRB
bGVydE9wZW4gZXJyb3IuCisgICAgICAgIChXZWJEcml2ZXI6OkNvbW1hbmRSZXN1bHQ6OmVycm9y
U3RyaW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogQ29tbWFuZFJlc3VsdC5oOgorICAgICAg
ICAoV2ViRHJpdmVyOjpDb21tYW5kUmVzdWx0OjpzZXRBZGRpdG9uYWxFcnJvckRhdGEpOiBOZXcg
bWV0aG9kIHRvIHNldCBhbiBhZGRpdGlvbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZW50
CisgICAgICAgIGFzIHBhcnQgZm8gdGhlIHJlc3VsdCBlcnJvciBtZXNzYWdlLgorICAgICAgICAo
V2ViRHJpdmVyOjpDb21tYW5kUmVzdWx0OjphZGRpdGlvbmFsRXJyb3JEYXRhIGNvbnN0KTogUmV0
dXJuIHRoZSBhZGRpdGlvbmFsIGRhdGEgb2JqZWN0LgorICAgICAgICAqIFNlc3Npb24uY3BwOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpoYW5kbGVVc2VyUHJvbXB0cyk6IENoZWNrIGlm
IHRoZXJyZSdzIGFuIGFjdGl2ZSBKYXZhU2NyaXB0IGRpYWxvZyBhbmQgZGVhbCB3aXRoIGl0IGRl
cGVkaW5nCisgICAgICAgIG9uIHRoZSB1bmhhbmRsZWQgcHJvbXB0IGJlaGF2aW9yLgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKTogR2VuZXJh
dGUgYW4gZXJyb3IgbWVzc2FnZSB3aXRoIFVuZXhwZWN0ZWRBbGVydE9wZW4gZXJyb3IgYW5kCisg
ICAgICAgIGluY2x1ZGluZyB0aGUgYWxlcnQgdGV4dCBhcyBhZGRpdGlvbmFsIGVycm9yIGRhdGEu
CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdvKTogSGFuZGxlIHVzZXIgcHJvbXB0cyBi
ZWZvcmUgcnVubmluZyB0aGUgY29tbWFuZC4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
Z2V0Q3VycmVudFVSTCk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpiYWNr
KTogRGl0dG8uCisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZvcndhcmQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVmcmVzaCk6IERpdHRvLgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRUaXRsZSk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVy
OjpTZXNzaW9uOjpjbG9zZVdpbmRvdyk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpzd2l0Y2hUb0ZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246
OnN3aXRjaFRvUGFyZW50RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6aXNFbGVtZW50U2VsZWN0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6Z2V0RWxlbWVudFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
Z2V0RWxlbWVudFRhZ05hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
Z2V0RWxlbWVudFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aXNF
bGVtZW50RW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjppc0Vs
ZW1lbnREaXNwbGF5ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
RWxlbWVudEF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpl
bGVtZW50U2VuZEtleXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZWxl
bWVudFN1Ym1pdCk6IERpdHRvLgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpleGVjdXRl
U2NyaXB0KTogRGl0dG8uCisgICAgICAgICogU2Vzc2lvbi5oOgorICAgICAgICAqIFdlYkRyaXZl
clNlcnZpY2UuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpzZW5k
UmVzcG9uc2UgY29uc3QpOiBTZW5kIGRhdGEgb2JqZWN0IGFzIHBhcnQgb2YgdGhlIHJlc3VsdCBl
cnJvciBtZXNzYWdlIGlmIHByZXNlbnQuCisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXpl
VW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChX
ZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6Om5ld1Nlc3Npb24pOgorCisyMDE3LTA4LTA3ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBXZWIg
QXV0b21hdGlvbjogc2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQgc2hvdWxk
IGZhaWwgaWYgY3VycmVudCBkaWFsb2cgaXMgbm90IGEgcHJvbXB0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNjEKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFu
ZFJlc3VsdC5jcHAKaW5kZXggNjMxYjM5ZTljYWMuLmJlOGM4MTc2YTY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIv
Q29tbWFuZFJlc3VsdC5jcHAKQEAgLTE0NSw2ICsxNDUsNyBAQCB1bnNpZ25lZCBDb21tYW5kUmVz
dWx0OjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiA0MDg7CiAgICAgY2Fz
ZSBFcnJvckNvZGU6OkphdmFzY3JpcHRFcnJvcjoKICAgICBjYXNlIEVycm9yQ29kZTo6U2Vzc2lv
bk5vdENyZWF0ZWQ6CisgICAgY2FzZSBFcnJvckNvZGU6OlVuZXhwZWN0ZWRBbGVydE9wZW46CiAg
ICAgY2FzZSBFcnJvckNvZGU6OlVua25vd25FcnJvcjoKICAgICBjYXNlIEVycm9yQ29kZTo6VW5z
dXBwb3J0ZWRPcGVyYXRpb246CiAgICAgICAgIHJldHVybiA1MDA7CkBAIC0xODksNiArMTkwLDgg
QEAgU3RyaW5nIENvbW1hbmRSZXN1bHQ6OmVycm9yU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgic3RhbGUgZWxlbWVudCByZWZlcmVuY2UiKTsKICAgICBjYXNlIEVy
cm9yQ29kZTo6VGltZW91dDoKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidGltZW91dCIp
OworICAgIGNhc2UgRXJyb3JDb2RlOjpVbmV4cGVjdGVkQWxlcnRPcGVuOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKTsKICAgICBjYXNlIEVycm9y
Q29kZTo6VW5rbm93bkNvbW1hbmQ6CiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInVua25v
d24gY29tbWFuZCIpOwogICAgIGNhc2UgRXJyb3JDb2RlOjpVbmtub3duRXJyb3I6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRSZXN1bHQuaCBiL1NvdXJjZS9XZWJEcml2ZXIv
Q29tbWFuZFJlc3VsdC5oCmluZGV4IGE2NjI5ZmRhMTRlLi4wYzM1OWIyZjFiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmgKKysrIGIvU291cmNlL1dlYkRyaXZl
ci9Db21tYW5kUmVzdWx0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBJbnNwZWN0b3JPYmpl
Y3Q7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIH0KIApAQCAtNTQsNiArNTUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFNlc3Npb25Ob3RDcmVhdGVkLAogICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVu
Y2UsCiAgICAgICAgIFRpbWVvdXQsCisgICAgICAgIFVuZXhwZWN0ZWRBbGVydE9wZW4sCiAgICAg
ICAgIFVua25vd25Db21tYW5kLAogICAgICAgICBVbmtub3duRXJyb3IsCiAgICAgICAgIFVuc3Vw
cG9ydGVkT3BlcmF0aW9uLApAQCAtNzYsMTAgKzc4LDEyIEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGh0dHBTdGF0dXNDb2RlKCkgY29uc3Q7CiAgICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+JiByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfTsKKyAg
ICB2b2lkIHNldEFkZGl0b25hbEVycm9yRGF0YShSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgZXJyb3JEYXRhKSB7IG1fZXJyb3JBZGRpdGlvbmFsRGF0YSA9IFdURk1vdmUoZXJy
b3JEYXRhKTsgfQogICAgIGJvb2wgaXNFcnJvcigpIGNvbnN0IHsgcmV0dXJuICEhbV9lcnJvckNv
ZGU7IH0KICAgICBFcnJvckNvZGUgZXJyb3JDb2RlKCkgY29uc3QgeyBBU1NFUlQoaXNFcnJvcigp
KTsgcmV0dXJuIG1fZXJyb3JDb2RlLnZhbHVlKCk7IH0KICAgICBTdHJpbmcgZXJyb3JTdHJpbmco
KSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZXJyb3JNZXNzYWdlKCkgY29uc3Qg
eyBBU1NFUlQoaXNFcnJvcigpKTsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisgICAgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgYWRkaXRpb25hbEVycm9yRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JBZGRpdGlvbmFsRGF0YTsgfQogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IENvbW1hbmRSZXN1bHQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
JiYsIHN0ZDo6b3B0aW9uYWw8RXJyb3JDb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CkBAIC04OCw2ICs5
Miw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG1f
cmVzdWx0OwogICAgIHN0ZDo6b3B0aW9uYWw8RXJyb3JDb2RlPiBtX2Vycm9yQ29kZTsKICAgICBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gbV9lcnJvck1lc3NhZ2U7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtX2Vycm9yQWRkaXRpb25hbERhdGE7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJEcml2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCmluZGV4IGFmNGNiNWEzZDcwLi5mM2U2
OGM1ZTZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCkBAIC0xNDMsNiArMTQzLDc2IEBAIHZvaWQgU2Vz
c2lvbjo6Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjCiAgICAgfSk7CiB9CiAKK3ZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclBy
b21wdHMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKKyAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiaXNT
aG93aW5nSmF2YVNjcmlwdERpYWxvZyIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9u
c2UpIG11dGFibGUgeworICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sIGlzU2hvd2luZ0phdmFTY3JpcHRE
aWFsb2c7CisgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEJvb2xlYW4o
InJlc3VsdCIsIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cpKSB7CisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cpIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBVbmhhbmRsZWRQcm9tcHRCZWhhdmlvciB1bmhhbmRs
ZWRQcm9tcHRCZWhhdmlvciA9IFVuaGFuZGxlZFByb21wdEJlaGF2aW9yOjpEaXNtaXNzOworICAg
ICAgICBib29sIHNob3VsZEZhaWxPbkRpc21pc3MgPSBmYWxzZTsKKyAgICAgICAgaWYgKGNhcGFi
aWxpdGllcygpLnVuaGFuZGxlZFByb21wdEJlaGF2aW9yKQorICAgICAgICAgICAgdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IgPSBjYXBhYmlsaXRpZXMoKS51bmhhbmRsZWRQcm9tcHRCZWhhdmlvci52
YWx1ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaG91bGRGYWlsT25EaXNtaXNzID0g
dHJ1ZTsKKyAgICAgICAgc3dpdGNoICh1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikgeworICAgICAg
ICBjYXNlIFVuaGFuZGxlZFByb21wdEJlaGF2aW9yOjpEaXNtaXNzOgorICAgICAgICAgICAgaWYg
KHNob3VsZEZhaWxPbkRpc21pc3MpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRVbmV4cGVjdGVk
QWxlcnRPcGVuKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGlzbWlzc0FsZXJ0KFt0aGlzLCBlcnJvclJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJl
c3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvclJlc3VsdCkpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGRpc21pc3NBbGVydChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcjo6QWNj
ZXB0OgorICAgICAgICAgICAgYWNjZXB0QWxlcnQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW5oYW5kbGVkUHJvbXB0QmVoYXZp
b3I6Oklnbm9yZToKKyAgICAgICAgICAgIHJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9KTsKK30KKwordm9pZCBTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
Z2V0QWxlcnRUZXh0KFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSB7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBhbGVydFRleHQ7CisgICAgICAgIGlmICghcmVzdWx0LmlzRXJyb3IoKSkgewor
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOworICAgICAgICAgICAgaWYgKHJlc3VsdC5y
ZXN1bHQoKS0+YXNTdHJpbmcodmFsdWVTdHJpbmcpKQorICAgICAgICAgICAgICAgIGFsZXJ0VGV4
dCA9IHZhbHVlU3RyaW5nOworICAgICAgICB9CisgICAgICAgIGF1dG8gZXJyb3JSZXN1bHQgPSBD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5leHBlY3RlZEFs
ZXJ0T3Blbik7CisgICAgICAgIGlmIChhbGVydFRleHQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGFkZGl0b25hbERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICAgICAgYWRkaXRvbmFsRGF0YS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidGV4
dCIpLCBhbGVydFRleHQudmFsdWUoKSk7CisgICAgICAgICAgICBlcnJvclJlc3VsdC5zZXRBZGRp
dG9uYWxFcnJvckRhdGEoV1RGTW92ZShhZGRpdG9uYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvclJlc3VsdCkpOworICAgIH0pOworfQor
CiB2b2lkIFNlc3Npb246OmdvKGNvbnN0IFN0cmluZyYgdXJsLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dCkgewpAQCAtMTUwLDIwICsyMjAsMjcgQEAgdm9pZCBTZXNzaW9uOjpn
byhjb25zdCBTdHJpbmcmIHVybCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInVybCIpLCB1cmwpOwotICAgIGlmIChtX3RpbWVvdXRzLnBhZ2VMb2FkKQotICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicGFnZUxvYWRUaW1lb3V0IiksIG1f
dGltZW91dHMucGFnZUxvYWQudmFsdWUoKS5taWxsaXNlY29uZHNBczxpbnQ+KCkpOwotICAgIGlm
IChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCi0gICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhZ2VMb2FkU3RyYXRlZ3ki
KSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpKTsKLSAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9C
YWNrZW5kKEFTQ0lJTGl0ZXJhbCgibmF2aWdhdGVCcm93c2luZ0NvbnRleHQiKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNv
bW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9y
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdU
Rk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CisgICAgaGFuZGxlVXNlclByb21wdHMo
W3RoaXMsIHVybCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQu
aXNFcnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHN3aXRjaFRvQnJv
d3NpbmdDb250ZXh0KHN0ZDo6bnVsbG9wdCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJ1cmwiKSwgdXJsKTsKKyAgICAgICAgaWYgKG1fdGltZW91dHMucGFnZUxvYWQpCisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicGFnZUxvYWRU
aW1lb3V0IiksIG1fdGltZW91dHMucGFnZUxvYWQudmFsdWUoKS5taWxsaXNlY29uZHNBczxpbnQ+
KCkpOworICAgICAgICBpZiAoYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVn
eVN0cmluZygpKQorICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicGFnZUxvYWRTdHJhdGVneSIpLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkpOworICAgICAg
ICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgibmF2aWdhdGVCcm93
c2luZ0NvbnRleHQiKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CisgICAg
ICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9i
amVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChzdGQ6Om51bGxvcHQpOworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKKyAgICAgICAgfSk7
CiAgICAgfSk7CiB9CiAKQEAgLTE3NCwyNCArMjUxLDMxIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0Q3Vy
cmVudFVSTChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJoYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKLSAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0
ZXJhbCgiZ2V0QnJvd3NpbmdDb250ZXh0IiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNw
b25zZSkgewotICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicm93c2lu
Z0NvbnRleHQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVj
dCgiY29udGV4dCIsIGJyb3dzaW5nQ29udGV4dCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKKyAgICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhpcywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkg
bXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0LT5nZXRTdHJpbmcoInVybCIsIHVybCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEluc3BlY3RvclZhbHVlOjpjcmVhdGUo
dXJsKSkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJoYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKKyAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoImdl
dEJyb3dzaW5nQ29udGV4dCIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsK
KyAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9i
amVjdCkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicm93c2luZ0NvbnRleHQ7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiLCBicm93c2luZ0NvbnRleHQpKSB7CisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgICAgICBpZiAo
IWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJ1cmwiLCB1cmwpKSB7CisgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh1cmwpKSk7CisgICAgICAgIH0pOwogICAgIH0p
OwogfQogCkBAIC0yMDIsMTkgKzI4NiwyNSBAQCB2b2lkIFNlc3Npb246OmJhY2soRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoImhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwot
ICAgIGlmIChtX3RpbWVvdXRzLnBhZ2VMb2FkKQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRl
Z2VyKEFTQ0lJTGl0ZXJhbCgicGFnZUxvYWRUaW1lb3V0IiksIG1fdGltZW91dHMucGFnZUxvYWQu
dmFsdWUoKS5taWxsaXNlY29uZHNBczxpbnQ+KCkpOwotICAgIGlmIChhdXRvIHBhZ2VMb2FkU3Ry
YXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInBhZ2VMb2FkU3RyYXRlZ3kiKSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpKTsKLSAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJh
bCgiZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQiKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJl
c3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpKSk7CisgICAgaGFuZGxlVXNlclByb21wdHMoW3RoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChzdGQ6Om51bGxv
cHQpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkp
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiaGFuZGxlIiksIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAg
ICAgIGlmIChtX3RpbWVvdXRzLnBhZ2VMb2FkKQorICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoInBhZ2VMb2FkVGltZW91dCIpLCBtX3RpbWVvdXRzLnBhZ2VM
b2FkLnZhbHVlKCkubWlsbGlzZWNvbmRzQXM8aW50PigpKTsKKyAgICAgICAgaWYgKGF1dG8gcGFn
ZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhZ2VMb2FkU3RyYXRlZ3kiKSwgcGFn
ZUxvYWRTdHJhdGVneS52YWx1ZSgpKTsKKyAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFj
a2VuZChBU0NJSUxpdGVyYWwoImdvQmFja0luQnJvd3NpbmdDb250ZXh0IiksIFdURk1vdmUocGFy
YW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJy
b3IpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRl
eHQoc3RkOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OnN1Y2Nlc3MoKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC0yMjUsMTkg
KzMxNSwyNSBAQCB2b2lkIFNlc3Npb246OmZvcndhcmQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImhhbmRs
ZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIGlmIChtX3RpbWVv
dXRzLnBhZ2VMb2FkKQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgicGFnZUxvYWRUaW1lb3V0IiksIG1fdGltZW91dHMucGFnZUxvYWQudmFsdWUoKS5taWxsaXNl
Y29uZHNBczxpbnQ+KCkpOwotICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nKCkpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInBhZ2VMb2FkU3RyYXRlZ3kiKSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpKTsKLSAg
ICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZ29Gb3J3YXJkSW5C
cm93c2luZ0NvbnRleHQiKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Ci0g
ICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CisgICAgaGFuZGxlVXNlclByb21wdHMoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUg
eworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChzdGQ6Om51bGxvcHQpOwotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiaGFuZGxl
IiksIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAgICAgIGlmIChtX3Rp
bWVvdXRzLnBhZ2VMb2FkKQorICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoInBhZ2VMb2FkVGltZW91dCIpLCBtX3RpbWVvdXRzLnBhZ2VMb2FkLnZhbHVlKCku
bWlsbGlzZWNvbmRzQXM8aW50PigpKTsKKyAgICAgICAgaWYgKGF1dG8gcGFnZUxvYWRTdHJhdGVn
eSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInBhZ2VMb2FkU3RyYXRlZ3kiKSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpKTsKKyAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxp
dGVyYWwoImdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0IiksIFdURk1vdmUocGFyYW1ldGVycyks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1v
dmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoc3RkOjpu
dWxsb3B0KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC0yNDgsMTkgKzM0NCwyNSBA
QCB2b2lkIFNlc3Npb246OnJlZnJlc2goRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImhhbmRsZSIpLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIGlmIChtX3RpbWVvdXRzLnBhZ2VM
b2FkKQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicGFnZUxv
YWRUaW1lb3V0IiksIG1fdGltZW91dHMucGFnZUxvYWQudmFsdWUoKS5taWxsaXNlY29uZHNBczxp
bnQ+KCkpOwotICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5
U3RyaW5nKCkpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBh
Z2VMb2FkU3RyYXRlZ3kiKSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpKTsKLSAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgicmVsb2FkQnJvd3NpbmdDb250ZXh0
IiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNl
c3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewotICAgICAgICBpZiAocmVz
cG9uc2UuaXNFcnJvcikgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOworICAgIGhhbmRs
ZVVzZXJQcm9tcHRzKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYg
KHJlc3VsdC5pc0Vycm9yKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3dp
dGNoVG9Ccm93c2luZ0NvbnRleHQoc3RkOjpudWxsb3B0KTsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImhhbmRsZSIpLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBpZiAobV90aW1lb3V0cy5wYWdlTG9h
ZCkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwYWdl
TG9hZFRpbWVvdXQiKSwgbV90aW1lb3V0cy5wYWdlTG9hZC52YWx1ZSgpLm1pbGxpc2Vjb25kc0Fz
PGludD4oKSk7CisgICAgICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0
cmF0ZWd5U3RyaW5nKCkpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJwYWdlTG9hZFN0cmF0ZWd5IiksIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSk7Cisg
ICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJyZWxvYWRC
cm93c2luZ0NvbnRleHQiKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Cisg
ICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChzdGQ6Om51bGxvcHQpOworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKKyAgICAgICAg
fSk7CiAgICAgfSk7CiB9CiAKQEAgLTI3MSwyNiArMzczLDMyIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoImZ1bmN0aW9uIiksIEFTQ0lJTGl0ZXJhbCgiZnVuY3Rpb24oKSB7IHJldHVy
biBkb2N1bWVudC50aXRsZTsgfSIpKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImFyZ3VtZW50cyIpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOwotICAgIG1faG9z
dC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJldmFsdWF0ZUphdmFTY3JpcHRG
dW5jdGlvbiIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKLSAgICAgICAg
aWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVz
cG9uc2UucmVzcG9uc2VPYmplY3QpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgdmFsdWVTdHJpbmcp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1
ZTsKLSAgICAgICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICBo
YW5kbGVVc2VyUHJvbXB0cyhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChyZXN1bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRW
YWx1ZSkpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVycyA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJmdW5jdGlvbiIpLCBBU0NJSUxpdGVyYWwoImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1l
bnQudGl0bGU7IH0iKSk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiYXJndW1lbnRzIiksIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIG1faG9z
dC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJldmFsdWF0ZUphdmFTY3JpcHRG
dW5jdGlvbiIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKKyAgICAgICAg
ICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CisgICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJyZXN1bHQiKSwgdmFsdWVTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgICAgICAgICBp
ZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIH0p
OwogICAgIH0pOwogfQogCkBAIC0zMjksNyArNDM3LDEzIEBAIHZvaWQgU2Vzc2lvbjo6Y2xvc2VX
aW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNsb3NlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhpcywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkg
bXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGNsb3NlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1dpbmRvdyhjb25zdCBTdHJpbmcmIHdp
bmRvd0hhbmRsZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTM5Nyw0NCArNTExLDUwIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9GcmFt
ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgZnJhbWVJRCwgRnVuY3Rpb248dm9pZCAoQ29tCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
KQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRs
ZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0KLSAgICBpbnQgZnJhbWVJ
bmRleDsKLSAgICBpZiAoZnJhbWVJRC0+YXNJbnRlZ2VyKGZyYW1lSW5kZXgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZUluZGV4IDwgMCB8fCBmcmFtZUluZGV4ID4gVVNIUlRfTUFYKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6Tm9TdWNoRnJhbWUpKTsKKyAgICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhpcywg
ZnJhbWVJRCA9IFdURk1vdmUoZnJhbWVJRCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAg
ICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgib3JkaW5hbCIpLCBmcmFt
ZUluZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgZnJhbWVFbGVtZW50SUQgPSBl
eHRyYWN0RWxlbWVudElEKCpmcmFtZUlEKTsKLSAgICAgICAgaWYgKCFmcmFtZUVsZW1lbnRJRC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub2RlSGFuZGxlIiksIGZyYW1lRWxlbWVudElEKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgZnJhbWVOYW1lOwotICAgICAgICAgICAgaWYgKCFmcmFtZUlELT5hc1N0cmlu
ZyhmcmFtZU5hbWUpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRl
cnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKyAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZy
YW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKworICAgICAg
ICBpbnQgZnJhbWVJbmRleDsKKyAgICAgICAgaWYgKGZyYW1lSUQtPmFzSW50ZWdlcihmcmFtZUlu
ZGV4KSkgeworICAgICAgICAgICAgaWYgKGZyYW1lSW5kZXggPCAwIHx8IGZyYW1lSW5kZXggPiBV
U0hSVF9NQVgpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6Tm9TdWNoRnJhbWUpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJuYW1lIiksIGZyYW1lTmFtZSk7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgib3JkaW5hbCIpLCBmcmFtZUlu
ZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBmcmFtZUVsZW1lbnRJ
RCA9IGV4dHJhY3RFbGVtZW50SUQoKmZyYW1lSUQpOworICAgICAgICAgICAgaWYgKCFmcmFtZUVs
ZW1lbnRJRC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm9kZUhhbmRsZSIpLCBmcmFtZUVsZW1lbnRJRCk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZnJhbWVOYW1lOworICAgICAgICAgICAg
ICAgIGlmICghZnJhbWVJRC0+YXNTdHJpbmcoZnJhbWVOYW1lKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6Tm9TdWNoRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJuYW1lIiksIGZyYW1lTmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICB9CiAKLSAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJh
bCgicmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUiKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJl
c3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKLSAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVz
dWx0IiksIGZyYW1lSGFuZGxlKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaFRvQnJvd3Np
bmdDb250ZXh0KGZyYW1lSGFuZGxlKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6c3VjY2VzcygpKTsKKyAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2Vu
ZChBU0NJSUxpdGVyYWwoInJlc29sdmVDaGlsZEZyYW1lSGFuZGxlIiksIFdURk1vdmUocGFyYW1l
dGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5k
UmVzcG9uc2UmJiByZXNwb25zZSkgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3Ig
fHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0KSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKKyAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBmcmFtZUhhbmRsZSkp
IHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0Nv
bnRleHQoZnJhbWVIYW5kbGUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6c3VjY2VzcygpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTQ1MCwy
MSArNTcwLDI3IEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25ICiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRs
ZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAgbV9ob3N0LT5zZW5k
Q29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoInJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZSIp
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNz
aW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKHJlc3Bv
bnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpKSk7CisgICAgaGFuZGxlVXNlclByb21wdHMoW3RoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgZnJhbWVIYW5kbGU7Ci0gICAgICAgIGlmICgh
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIp
LCBmcmFtZUhhbmRsZSkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29u
dGV4dChmcmFtZUhhbmRsZSk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoKSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRl
cnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgiZnJhbWVIYW5kbGUiKSwgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOworICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgi
cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNw
b25zZSkgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBmcmFt
ZUhhbmRsZTsKKyAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBmcmFtZUhhbmRsZSkpIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5k
bGUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2Vz
cygpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc2MSw0MSArODg3LDQ3IEBAIHZv
aWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
LSAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pT
T05TdHJpbmcoKSk7Ci0gICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEluc3BlY3RvclZhbHVlOjpj
cmVhdGUoInNlbGVjdGVkIiktPnRvSlNPTlN0cmluZygpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIp
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIGlmIChtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBFbGVtZW50
QXR0cmlidXRlSmF2YVNjcmlwdCk7Ci0gICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhcmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBtX2hvc3QtPnNlbmRD
b21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24i
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNw
b25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHZhbHVlU3RyaW5nKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAg
ICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdFZhbHVlLT5pc051bGwoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhJbnNw
ZWN0b3JWYWx1ZTo6Y3JlYXRlKGZhbHNlKSkpOworICAgIGhhbmRsZVVzZXJQcm9tcHRzKFt0aGlz
LCBlbGVtZW50SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0
LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgYm9v
bGVhblJlc3VsdDsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoYm9vbGVhblJl
c3VsdCkgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEluc3BlY3RvclZhbHVlOjpj
cmVhdGUodHJ1ZSkpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKKyAgICAgICAgYXJn
dW1lbnRzLT5wdXNoU3RyaW5nKEluc3BlY3RvclZhbHVlOjpjcmVhdGUoInNlbGVjdGVkIiktPnRv
SlNPTlN0cmluZygpKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYnJvd3NpbmdDb250ZXh0SGFuZGxlIiksIG1fdG9wbGV2ZWxC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJm
cmFtZUhhbmRsZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZ1bmN0aW9uIiksIEVsZW1lbnRB
dHRyaWJ1dGVKYXZhU2NyaXB0KTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJhcmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgbV9ob3N0
LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoImV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgeworICAgICAgICAg
ICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7Cisg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZN
b3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKKyAgICAgICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwo
InJlc3VsdCIpLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKKyAgICAgICAgICAgIGlm
ICghSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1ZS0+aXNO
dWxsKCkpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpzdWNjZXNzKEluc3BlY3RvclZhbHVlOjpjcmVhdGUoZmFsc2UpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGJvb2xlYW5SZXN1
bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhib29sZWFuUmVzdWx0
KSB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEluc3Bl
Y3RvclZhbHVlOjpjcmVhdGUodHJ1ZSkpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAg
LTgwNiwzMiArOTM4LDM4IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxl
bWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwg
bV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBpZiAobV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0KQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJmcmFtZUhhbmRsZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAg
Ly8gRklYTUU6IEFkZCBhbiBhdG9tIHRvIHByb3Blcmx5IGltcGxlbWVudCB0aGlzIGluc3RlYWQg
b2YganVzdCB1c2luZyBpbm5lclRleHQuCi0gICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiZnVuY3Rpb24iKSwgQVNDSUlMaXRlcmFsKCJmdW5jdGlvbihlbGVtZW50KSB7IHJl
dHVybiBlbGVtZW50LmlubmVyVGV4dC5yZXBsYWNlKC9eW15cXFNcXHhhMF0rfFteXFxTXFx4YTBd
KyQvZywgJycpIH0iKSk7Ci0gICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJh
cmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24iKSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhv
c3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZS5p
c0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFN0cmlu
ZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgIGhhbmRsZVVzZXJQcm9tcHRzKFt0aGlzLCBl
bGVtZW50SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0Lmlz
RXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJz
ZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgewotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVF
bGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKKworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYnJvd3NpbmdDb250ZXh0
SGFuZGxlIiksIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CisgICAgICAgIGlm
IChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRsZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYW4gYXRvbSB0byBwcm9wZXJseSBp
bXBsZW1lbnQgdGhpcyBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgaW5uZXJUZXh0LgorICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBBU0NJSUxpdGVy
YWwoImZ1bmN0aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaW5uZXJUZXh0LnJlcGxhY2Uo
L15bXlxcU1xceGEwXSt8W15cXFNcXHhhMF0rJC9nLCAnJykgfSIpKTsKKyAgICAgICAgcGFyYW1l
dGVycy0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhcmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVu
dHMpKTsKKyAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwo
ImV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiBy
ZXNwb25zZSkgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyB2
YWx1ZVN0cmluZzsKKyAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRW
YWx1ZTsKKyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZywgcmVzdWx0VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRW
YWx1ZSkpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTg0MiwzMSArOTgwLDM3IEBA
IHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQs
IEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKLSAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50
b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJicm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKLSAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQotICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRsZSIpLCBt
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiZnVuY3Rpb24iKSwgQVNDSUlMaXRlcmFsKCJmdW5jdGlvbihlbGVt
ZW50KSB7IHJldHVybiBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSB9IikpOwotICAgIHBh
cmFtZXRlcnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJn
dW1lbnRzKSk7Ci0gICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwo
ImV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiBy
ZXNwb25zZSkgewotICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICBoYW5kbGVV
c2VyUHJvbXB0cyhbdGhpcywgZWxlbWVudElELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKHJlc3VsdC5pc0Vycm9yKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgdmFsdWVTdHJpbmcpKSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pT
T05TdHJpbmcoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVy
cyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250
ZXh0KQorICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnJh
bWVIYW5kbGUiKSwgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBBU0NJSUxpdGVy
YWwoImZ1bmN0aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpIH0iKSk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJn
dW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9u
SG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGlmIChyZXNw
b25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CisgICAgICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwg
dmFsdWVTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgICAgICAgICBpZiAoIUluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIH0pOwogICAgIH0pOwog
fQogCkBAIC04NzcsMTcgKzEwMjEsMjMgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UmVjdChj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbXB1dGVFbGVtZW50TGF5b3V0KGVsZW1lbnRJRCwg
eyB9LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShzdGQ6Om9wdGlvbmFsPFJlY3Q+JiYg
cmVjdCwgc3RkOjpvcHRpb25hbDxQb2ludD4mJiwgYm9vbCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBlcnJvcikgewotICAgICAgICBpZiAoIXJlY3QgfHwgZXJyb3IpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShlcnJvcikpKTsK
KyAgICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhpcywgZWxlbWVudElELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3VsdC5pc0Vycm9yKCkpIHsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjdE9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJ4IiksIHJlY3QudmFsdWUoKS5vcmlnaW4ueCk7Ci0gICAgICAgIHJlY3RP
YmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJ5IiksIHJlY3QudmFsdWUoKS5vcmlnaW4u
eSk7Ci0gICAgICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJ3aWR0aCIp
LCByZWN0LnZhbHVlKCkuc2l6ZS53aWR0aCk7Ci0gICAgICAgIHJlY3RPYmplY3QtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJoZWlnaHQiKSwgcmVjdC52YWx1ZSgpLnNpemUuaGVpZ2h0KTsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJl
Y3RPYmplY3QpKSk7CisgICAgICAgIGNvbXB1dGVFbGVtZW50TGF5b3V0KGVsZW1lbnRJRCwgeyB9
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShzdGQ6Om9wdGlvbmFsPFJlY3Q+JiYgcmVj
dCwgc3RkOjpvcHRpb25hbDxQb2ludD4mJiwgYm9vbCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBlcnJvcikgeworICAgICAgICAgICAgaWYgKCFyZWN0IHx8IGVycm9yKSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKGVycm9y
KSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY3RPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgcmVjdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
IngiKSwgcmVjdC52YWx1ZSgpLm9yaWdpbi54KTsKKyAgICAgICAgICAgIHJlY3RPYmplY3QtPnNl
dEludGVnZXIoQVNDSUlMaXRlcmFsKCJ5IiksIHJlY3QudmFsdWUoKS5vcmlnaW4ueSk7CisgICAg
ICAgICAgICByZWN0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgid2lkdGgiKSwgcmVj
dC52YWx1ZSgpLnNpemUud2lkdGgpOworICAgICAgICAgICAgcmVjdE9iamVjdC0+c2V0SW50ZWdl
cihBU0NJSUxpdGVyYWwoImhlaWdodCIpLCByZWN0LnZhbHVlKCkuc2l6ZS5oZWlnaHQpOworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3Zl
KHJlY3RPYmplY3QpKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC04OTgsMzEgKzEw
NDgsMzcgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgZWxl
bWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1l
bnRJRCktPnRvSlNPTlN0cmluZygpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFu
ZGxlIiksIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBBU0NJSUxpdGVyYWwoImZ1bmN0
aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRy
dWUgOiAhZWxlbWVudC5kaXNhYmxlZCB9IikpOwotICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgbV9ob3N0
LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoImV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewotICAgICAgICBp
ZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCB2YWx1ZVN0cmluZykp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJl
c3VsdFZhbHVlKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgIGhh
bmRsZVVzZXJQcm9tcHRzKFt0aGlzLCBlbGVtZW50SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUg
eworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1v
dmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1l
bnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CisKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OworICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQorICAgICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnJhbWVIYW5kbGUiKSwgbV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBBU0NJSUxpdGVyYWwoImZ1bmN0aW9uKGVsZW1lbnQp
IHsgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhZWxlbWVu
dC5kaXNhYmxlZCB9IikpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheShBU0NJSUxpdGVy
YWwoImFyZ3VtZW50cyIpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBtX2hvc3QtPnNl
bmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rp
b24iKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
U2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBp
ZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOworICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVz
dWx0IiksIHZhbHVlU3RyaW5nKSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOworICAgICAgICAgICAgaWYgKCFJ
bnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOworICAgICAgICB9KTsKICAg
ICB9KTsKIH0KIApAQCAtOTMzLDMxICsxMDg5LDM3IEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50
RGlzcGxheWVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQotICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRsZSIpLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7Ci0gICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnVuY3Rp
b24iKSwgRWxlbWVudERpc3BsYXllZEphdmFTY3JpcHQpOwotICAgIHBhcmFtZXRlcnMtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAg
bV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoImV2YWx1YXRlSmF2YVNj
cmlwdEZ1bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewotICAg
ICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92
ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhp
cywgZWxlbWVudElELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3Vs
dC5pc0Vycm9yKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZh
bHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgdmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgaWYgKCFJ
bnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNz
KFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CisK
KyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoImJyb3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOworICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQorICAgICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnJhbWVIYW5kbGUiKSwgbV9j
dXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBFbGVtZW50RGlzcGxheWVkSmF2YVNjcmlw
dCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRz
IiksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0Jh
Y2tlbmQoQVNDSUlMaXRlcmFsKCJldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6
Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS5p
c0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgdmFsdWVT
dHJpbmcpKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAgICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNj
ZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBA
IC05NjgsMzIgKzExMzAsMzggQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50QXR0cmlidXRlKGNv
bnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGF0dHJpYnUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVF
bGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKLSAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZShhdHRyaWJ1dGUpLT50b0pTT05TdHJpbmcoKSk7
Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKLSAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQotICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmcmFtZUhhbmRsZSIpLCBtX2N1cnJlbnRCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7Ci0gICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiZnVuY3Rpb24iKSwgRWxlbWVudEF0dHJpYnV0ZUphdmFTY3JpcHQpOwotICAgIHBhcmFtZXRl
cnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRz
KSk7Ci0gICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZChBU0NJSUxpdGVyYWwoImV2YWx1
YXRlSmF2YVNjcmlwdEZ1bmN0aW9uIiksIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewotICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICgh
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJlc3VsdCIp
LCB2YWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAg
ICBoYW5kbGVVc2VyUHJvbXB0cyhbdGhpcywgZWxlbWVudElELCBhdHRyaWJ1dGUsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiBy
ZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZh
bHVlOwotICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcs
IHJlc3VsdFZhbHVlKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCkt
PnRvSlNPTlN0cmluZygpKTsKKyAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEluc3BlY3Rv
clZhbHVlOjpjcmVhdGUoYXR0cmlidXRlKS0+dG9KU09OU3RyaW5nKCkpOworCisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKyAg
ICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiZnVuY3Rpb24iKSwgRWxlbWVudEF0dHJpYnV0ZUphdmFTY3JpcHQpOworICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpLCBXVEZNb3Zl
KGFyZ3VtZW50cykpOworICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJ
TGl0ZXJhbCgiZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24iKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNw
b25zZSYmIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAh
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOworICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHZhbHVlU3RyaW5nKSkgewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHJlc3VsdFZhbHVlOworICAgICAgICAgICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09O
KHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3Zl
KHJlc3VsdFZhbHVlKSkpOworICAgICAgICB9KTsKICAgICB9KTsKIH0KIApAQCAtMTIxMiw2OCAr
MTM4MCw3NCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRTZW5kS2V5cyhjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgVmVjdG9yPFN0cmluZz4mJiBrZXlzLCBGdQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhbiBhdG9tLgotICAgIHN0YXRpYyBjb25z
dCBjaGFyIGZvY3VzU2NyaXB0W10gPQotICAgICAgICAiZnVuY3Rpb24gZm9jdXMoZWxlbWVudCkg
eyIKLSAgICAgICAgIiAgICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1l
bnQ7IgotICAgICAgICAiICAgIHZhciBwcmV2QWN0aXZlRWxlbWVudCA9IGRvYy5hY3RpdmVFbGVt
ZW50OyIKLSAgICAgICAgIiAgICBpZiAoZWxlbWVudCAhPSBwcmV2QWN0aXZlRWxlbWVudCAmJiBw
cmV2QWN0aXZlRWxlbWVudCkiCi0gICAgICAgICIgICAgICAgIHByZXZBY3RpdmVFbGVtZW50LmJs
dXIoKTsiCi0gICAgICAgICIgICAgZWxlbWVudC5mb2N1cygpOyIKLSAgICAgICAgIiAgICBpZiAo
ZWxlbWVudCAhPSBwcmV2QWN0aXZlRWxlbWVudCAmJiBlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQu
dmFsdWUubGVuZ3RoICYmIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIgotICAgICAgICAiICAg
ICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKGVsZW1lbnQudmFsdWUubGVuZ3RoLCBlbGVt
ZW50LnZhbHVlLmxlbmd0aCk7IgotICAgICAgICAiICAgIGlmIChlbGVtZW50ICE9IGRvYy5hY3Rp
dmVFbGVtZW50KSIKLSAgICAgICAgIiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZm9j
dXMgZWxlbWVudCcpOyIKLSAgICAgICAgIn0iOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgYXJndW1lbnRzLT5w
dXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5n
Q29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAg
IGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmdW5j
dGlvbiIpLCBmb2N1c1NjcmlwdCk7Ci0gICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhcmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBtX2hvc3QtPnNlbmRD
b21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24i
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwga2V5cyA9IFdURk1vdmUoa2V5cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaGFuZGxlVXNlclByb21wdHMoW3RoaXMsIGVsZW1l
bnRJRCwga2V5cyA9IFdURk1vdmUoa2V5cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAg
ICAgICBpZiAocmVzdWx0LmlzRXJyb3IoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGFuIGF0b20uCisgICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyIGZvY3VzU2NyaXB0W10gPQorICAgICAgICAgICAgImZ1bmN0aW9uIGZvY3VzKGVsZW1l
bnQpIHsiCisgICAgICAgICAgICAiICAgIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQg
fHwgZWxlbWVudDsiCisgICAgICAgICAgICAiICAgIHZhciBwcmV2QWN0aXZlRWxlbWVudCA9IGRv
Yy5hY3RpdmVFbGVtZW50OyIKKyAgICAgICAgICAgICIgICAgaWYgKGVsZW1lbnQgIT0gcHJldkFj
dGl2ZUVsZW1lbnQgJiYgcHJldkFjdGl2ZUVsZW1lbnQpIgorICAgICAgICAgICAgIiAgICAgICAg
cHJldkFjdGl2ZUVsZW1lbnQuYmx1cigpOyIKKyAgICAgICAgICAgICIgICAgZWxlbWVudC5mb2N1
cygpOyIKKyAgICAgICAgICAgICIgICAgaWYgKGVsZW1lbnQgIT0gcHJldkFjdGl2ZUVsZW1lbnQg
JiYgZWxlbWVudC52YWx1ZSAmJiBlbGVtZW50LnZhbHVlLmxlbmd0aCAmJiBlbGVtZW50LnNldFNl
bGVjdGlvblJhbmdlKSIKKyAgICAgICAgICAgICIgICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9u
UmFuZ2UoZWxlbWVudC52YWx1ZS5sZW5ndGgsIGVsZW1lbnQudmFsdWUubGVuZ3RoKTsiCisgICAg
ICAgICAgICAiICAgIGlmIChlbGVtZW50ICE9IGRvYy5hY3RpdmVFbGVtZW50KSIKKyAgICAgICAg
ICAgICIgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZvY3VzIGVsZW1lbnQnKTsiCisg
ICAgICAgICAgICAifSI7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcmd1bWVu
dHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0
cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwor
ICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQorICAgICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnJhbWVIYW5kbGUiKSwgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJmdW5jdGlvbiIpLCBmb2N1c1NjcmlwdCk7CisgICAgICAgIHBhcmFtZXRlcnMt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRzKSk7
CisgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJldmFs
dWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBrZXlzID0gV1RGTW92ZShrZXlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNv
bW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChyZXNw
b25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3RpY2t5TW9kaWZpZXJzID0gMDsKLSAgICAgICAgVmVj
dG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+IGludGVyYWN0aW9uczsKLSAgICAgICAgaW50ZXJhY3Rp
b25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5cy5zaXplKCkpOwotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgIEtleWJvYXJkSW50ZXJhY3Rpb24g
aW50ZXJhY3Rpb247Ci0gICAgICAgICAgICBLZXlNb2RpZmllciBtb2RpZmllcjsKLSAgICAgICAg
ICAgIGF1dG8gdmlydHVhbEtleSA9IHZpcnR1YWxLZXlGb3JLZXlTZXF1ZW5jZShrZXksIG1vZGlm
aWVyKTsKLSAgICAgICAgICAgIGlmICghdmlydHVhbEtleS5pc051bGwoKSkgewotICAgICAgICAg
ICAgICAgIGludGVyYWN0aW9uLmtleSA9IHZpcnR1YWxLZXk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1vZGlmaWVyICE9IEtleU1vZGlmaWVyOjpOb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0
aWNreU1vZGlmaWVycyBePSBtb2RpZmllcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNr
eU1vZGlmaWVycyAmIG1vZGlmaWVyKQotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rp
b24udHlwZSA9IEtleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlQcmVzczsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24udHlwZSA9
IEtleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxlYXNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLnRleHQgPSBr
ZXk7Ci0gICAgICAgICAgICBpbnRlcmFjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW50
ZXJhY3Rpb24pKTsKLSAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQgc3RpY2t5TW9kaWZp
ZXJzID0gMDsKKyAgICAgICAgICAgIFZlY3RvcjxLZXlib2FyZEludGVyYWN0aW9uPiBpbnRlcmFj
dGlvbnM7CisgICAgICAgICAgICBpbnRlcmFjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShr
ZXlzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IGtleXMpIHsK
KyAgICAgICAgICAgICAgICBLZXlib2FyZEludGVyYWN0aW9uIGludGVyYWN0aW9uOworICAgICAg
ICAgICAgICAgIEtleU1vZGlmaWVyIG1vZGlmaWVyOworICAgICAgICAgICAgICAgIGF1dG8gdmly
dHVhbEtleSA9IHZpcnR1YWxLZXlGb3JLZXlTZXF1ZW5jZShrZXksIG1vZGlmaWVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZpcnR1YWxLZXkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW50ZXJhY3Rpb24ua2V5ID0gdmlydHVhbEtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1vZGlmaWVyICE9IEtleU1vZGlmaWVyOjpOb25lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGlja3lNb2RpZmllcnMgXj0gbW9kaWZpZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RpY2t5TW9kaWZpZXJzICYgbW9kaWZpZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ZXJhY3Rpb24udHlwZSA9IEtleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlQcmVzczsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmFjdGlvbi50eXBlID0gS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVJlbGVhc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJhY3Rpb24udGV4dCA9IGtleTsKKyAgICAgICAgICAgICAgICBpbnRl
cmFjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW50ZXJhY3Rpb24pKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAvLyBSZXNldCBzdGlja3kgbW9kaWZpZXJzIGlmIG5lZWRlZC4KLSAg
ICAgICAgaWYgKHN0aWNreU1vZGlmaWVycykgewotICAgICAgICAgICAgaWYgKHN0aWNreU1vZGlm
aWVycyAmIEtleU1vZGlmaWVyOjpTaGlmdCkKLSAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbnMu
YXBwZW5kKHsgS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVJlbGVhc2UsIHN0ZDo6bnVsbG9w
dCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCgiU2hpZnQiKSkgfSk7Ci0gICAg
ICAgICAgICBpZiAoc3RpY2t5TW9kaWZpZXJzICYgS2V5TW9kaWZpZXI6OkNvbnRyb2wpCi0gICAg
ICAgICAgICAgICAgaW50ZXJhY3Rpb25zLmFwcGVuZCh7IEtleWJvYXJkSW50ZXJhY3Rpb25UeXBl
OjpLZXlSZWxlYXNlLCBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPihBU0NJSUxp
dGVyYWwoIkNvbnRyb2wiKSkgfSk7Ci0gICAgICAgICAgICBpZiAoc3RpY2t5TW9kaWZpZXJzICYg
S2V5TW9kaWZpZXI6OkFsdGVybmF0ZSkKLSAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbnMuYXBw
ZW5kKHsgS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVJlbGVhc2UsIHN0ZDo6bnVsbG9wdCwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCgiQWx0ZXJuYXRlIikpIH0pOwotICAg
ICAgICAgICAgaWYgKHN0aWNreU1vZGlmaWVycyAmIEtleU1vZGlmaWVyOjpNZXRhKQotICAgICAg
ICAgICAgICAgIGludGVyYWN0aW9ucy5hcHBlbmQoeyBLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6
S2V5UmVsZWFzZSwgc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4oQVNDSUlMaXRl
cmFsKCJNZXRhIikpIH0pOwotICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXNldCBzdGlja3kg
bW9kaWZpZXJzIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChzdGlja3lNb2RpZmllcnMpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc3RpY2t5TW9kaWZpZXJzICYgS2V5TW9kaWZpZXI6OlNoaWZ0
KQorICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbnMuYXBwZW5kKHsgS2V5Ym9hcmRJbnRl
cmFjdGlvblR5cGU6OktleVJlbGVhc2UsIHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxTdHJp
bmc+KEFTQ0lJTGl0ZXJhbCgiU2hpZnQiKSkgfSk7CisgICAgICAgICAgICAgICAgaWYgKHN0aWNr
eU1vZGlmaWVycyAmIEtleU1vZGlmaWVyOjpDb250cm9sKQorICAgICAgICAgICAgICAgICAgICBp
bnRlcmFjdGlvbnMuYXBwZW5kKHsgS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVJlbGVhc2Us
IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCgiQ29udHJv
bCIpKSB9KTsKKyAgICAgICAgICAgICAgICBpZiAoc3RpY2t5TW9kaWZpZXJzICYgS2V5TW9kaWZp
ZXI6OkFsdGVybmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25zLmFwcGVuZCh7
IEtleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxlYXNlLCBzdGQ6Om51bGxvcHQsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPihBU0NJSUxpdGVyYWwoIkFsdGVybmF0ZSIpKSB9KTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RpY2t5TW9kaWZpZXJzICYgS2V5TW9kaWZpZXI6Ok1ldGEpCisgICAgICAg
ICAgICAgICAgICAgIGludGVyYWN0aW9ucy5hcHBlbmQoeyBLZXlib2FyZEludGVyYWN0aW9uVHlw
ZTo6S2V5UmVsZWFzZSwgc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4oQVNDSUlM
aXRlcmFsKCJNZXRhIikpIH0pOworICAgICAgICAgICAgfQogCi0gICAgICAgIHBlcmZvcm1LZXli
b2FyZEludGVyYWN0aW9ucyhXVEZNb3ZlKGludGVyYWN0aW9ucyksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhXVEZN
b3ZlKGludGVyYWN0aW9ucyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAg
fSk7CiAgICAgfSk7CiB9CiAKQEAgLTEyODQsMjEgKzE0NTgsMjcgQEAgdm9pZCBTZXNzaW9uOjpl
bGVtZW50U3VibWl0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGFyZ3VtZW50
cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsK
LQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwotICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCi0gICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJmdW5jdGlvbiIpLCBGb3JtU3VibWl0SmF2YVNjcmlwdCk7Ci0gICAgcGFyYW1ldGVycy0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJhcmd1bWVudHMiKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAg
ICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb24iKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7Ci0g
ICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CisgICAgaGFuZGxlVXNlclByb21wdHMoW3RoaXMsIGVsZW1lbnRJRCwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3Vs
dCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoKSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3Jl
YXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CisKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dzaW5nQ29u
dGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOworICAgICAg
ICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQorICAgICAgICAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZnJhbWVIYW5kbGUiKSwgbV9jdXJyZW50QnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJmdW5jdGlvbiIpLCBGb3JtU3VibWl0SmF2YVNjcmlwdCk7CisgICAgICAgIHBhcmFtZXRl
cnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1vdmUoYXJndW1lbnRz
KSk7CisgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJl
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVz
cG9uc2UpIHsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0KSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoKSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC0xMzM1LDQ4ICsxNTE1LDU0IEBA
IHZvaWQgU2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYmIGFyZ3VtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKLSAgICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHNBcnJheS0+bGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChhdXRvIGFyZ3VtZW50ID0gYXJndW1lbnRzQXJyYXktPmdldChpKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudCA9IGV4dHJhY3RFbGVtZW50KCphcmd1bWVudCkp
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGVsZW1lbnQtPnRvSlNPTlN0
cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoYXJndW1lbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSIpLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwot
ICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCi0gICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKLSAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJm
dW5jdGlvbiIpLCAiZnVuY3Rpb24oKXsiICsgc2NyaXB0ICsgJ30nKTsKLSAgICBwYXJhbWV0ZXJz
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpLCBXVEZNb3ZlKGFyZ3VtZW50cykp
OwotICAgIGlmIChtb2RlID09IEV4ZWN1dGVTY3JpcHRNb2RlOjpBc3luYykgewotICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiZXhwZWN0c0ltcGxpY2l0Q2FsbGJh
Y2tBcmd1bWVudCIpLCB0cnVlKTsKLSAgICAgICAgaWYgKG1fdGltZW91dHMuc2NyaXB0KQotICAg
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNhbGxiYWNrVGlt
ZW91dCIpLCBtX3RpbWVvdXRzLnNjcmlwdC52YWx1ZSgpLm1pbGxpc2Vjb25kc0FzPGludD4oKSk7
Ci0gICAgfQotICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoQVNDSUlMaXRlcmFsKCJl
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVz
cG9uc2UpIHsKLSAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CisgICAgaGFuZGxlVXNl
clByb21wdHMoW3RoaXMsIHNjcmlwdCwgYXJndW1lbnRzQXJyYXkgPSBXVEZNb3ZlKGFyZ3VtZW50
c0FycmF5KSwgbW9kZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1
bHQuaXNFcnJvcigpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
c3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2
YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh2YWx1ZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJndW1lbnRzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVu
dHNBcnJheS0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1
bWVudHNMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGF1dG8gYXJndW1lbnQgPSBhcmd1
bWVudHNBcnJheS0+Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudCA9
IGV4dHJhY3RFbGVtZW50KCphcmd1bWVudCkpCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
cy0+cHVzaFN0cmluZyhlbGVtZW50LT50b0pTT05TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoYXJndW1lbnQt
PnRvSlNPTlN0cmluZygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICBpZiAoIUluc3BlY3RvclZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiKSwgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKKyAg
ICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSGFuZGxlIiksIG1fY3VycmVudEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKKyAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiZnVuY3Rpb24iKSwgImZ1bmN0aW9uKCl7IiArIHNjcmlwdCArICd9Jyk7CisgICAg
ICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIiksIFdURk1v
dmUoYXJndW1lbnRzKSk7CisgICAgICAgIGlmIChtb2RlID09IEV4ZWN1dGVTY3JpcHRNb2RlOjpB
c3luYykgeworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwo
ImV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQiKSwgdHJ1ZSk7CisgICAgICAgICAgICBp
ZiAobV90aW1lb3V0cy5zY3JpcHQpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50
ZWdlcihBU0NJSUxpdGVyYWwoImNhbGxiYWNrVGltZW91dCIpLCBtX3RpbWVvdXRzLnNjcmlwdC52
YWx1ZSgpLm1pbGxpc2Vjb25kc0FzPGludD4oKSk7CiAgICAgICAgIH0KLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQoV1RG
TW92ZShyZXN1bHRWYWx1ZSkpKSk7CisgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoQVNDSUlMaXRlcmFsKCJldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbiIpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vy
cm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgdmFsdWVTdHJp
bmcpKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZVN0cmlu
Zy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpzdWNjZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CisgICAg
ICAgICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3Vs
dFZhbHVlKSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3Zl
KHJlc3VsdFZhbHVlKSkpKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgK
aW5kZXggOTdlMjNiZWQwNTAuLjc1YjRhYjMwOWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJp
dmVyL1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uaApAQCAtMTA3LDYg
KzEwNyw5IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcGFnZUxvYWRT
dHJhdGVneVN0cmluZygpIGNvbnN0OwogCisgICAgdm9pZCBoYW5kbGVVc2VyUHJvbXB0cyhGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmKTsKKyAgICB2b2lkIHJlcG9ydFVuZXhwZWN0
ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJik7CisKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gY3JlYXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCk7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBleHRyYWN0RWxlbWVudChJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRy
aXZlclNlcnZpY2UuY3BwIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcApp
bmRleCBlMmM4NWVkMTliNy4uMjI0MmJiOWM5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2
ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJT
ZXJ2aWNlLmNwcApAQCAtMjQ4LDYgKzI0OCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2Vu
ZFJlc3BvbnNlKEZ1bmN0aW9uPHZvaWQgKEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAg
ICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBy
ZXN1bHQuZXJyb3JTdHJpbmcoKSk7CiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHJlc3VsdC5lcnJvck1lc3NhZ2UoKS52YWx1ZV9vcihl
bXB0eVN0cmluZygpKSk7CiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzdGFja3RyYWNlIiksIGVtcHR5U3RyaW5nKCkpOworICAgICAgICBpZiAoYXV0byYg
YWRkaXRpb25hbERhdGEgPSByZXN1bHQuYWRkaXRpb25hbEVycm9yRGF0YSgpKQorICAgICAgICAg
ICAgcmVzcG9uc2VPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImRhdGEiKSwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4geyBhZGRpdGlvbmFsRGF0YSB9KTsKICAgICB9IGVsc2UgewogICAg
ICAgICByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVzdWx0KCk7CkBAIC0yOTMsNiArMjk1LDE3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBhZ2VMb2FkU3RyYXRlZ3k+IGRlc2VyaWFsaXplUGFnZUxv
YWRTdHJhdGVneShjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8VW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I+IGRlc2VyaWFsaXpl
VW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IoY29uc3QgU3RyaW5nJiB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvcikKK3sKKyAgICBpZiAodW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPT0gImRpc21pc3MiKQor
ICAgICAgICByZXR1cm4gVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I6OkRpc21pc3M7CisgICAgaWYg
KHVuaGFuZGxlZFByb21wdEJlaGF2aW9yID09ICJhY2NlcHQiKQorICAgICAgICByZXR1cm4gVW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3I6OkFjY2VwdDsKKyAgICBpZiAodW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IgPT0gImlnbm9yZSIpCisgICAgICAgIHJldHVybiBVbmhhbmRsZWRQcm9tcHRCZWhhdmlv
cjo6SWdub3JlOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKIHZvaWQgV2ViRHJpdmVy
U2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtYXRjaGVk
Q2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcykgY29uc3QKIHsKICAgICAv
LyBNYXRjaGVkIGNhcGFiaWxpdGllcyBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCkBAIC0z
MTQsNiArMzI3LDkgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyhj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1hdGNoZWRDYXBhYmlsaXQKICAgICBTdHJpbmcgcGFnZUxv
YWRTdHJhdGVneTsKICAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJwYWdlTG9hZFN0cmF0ZWd5IiksIHBhZ2VMb2FkU3RyYXRlZ3kpKQogICAgICAgICBj
YXBhYmlsaXRpZXMucGFnZUxvYWRTdHJhdGVneSA9IGRlc2VyaWFsaXplUGFnZUxvYWRTdHJhdGVn
eShwYWdlTG9hZFN0cmF0ZWd5KTsKKyAgICBTdHJpbmcgdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I7
CisgICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3IiKSwgdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpKQorICAgICAg
ICBjYXBhYmlsaXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBkZXNlcmlhbGl6ZVVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKICAgICBwbGF0Zm9y
bVBhcnNlQ2FwYWJpbGl0aWVzKG1hdGNoZWRDYXBhYmlsaXRpZXMsIGNhcGFiaWxpdGllcyk7CiB9
CiAKQEAgLTM2Nyw5ICszODMsOCBAQCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBXZWJEcml2ZXJT
ZXJ2aWNlOjp2YWxpZGF0ZWRDYXBhYmlsaXRpZXMoY29uc3QgSW5zcGVjdG9yTwogICAgICAgICAg
ICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KGl0LT52
YWx1ZSkpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInVuaGFuZGxlZFByb21wdEJl
aGF2aW9yIikgewogICAgICAgICAgICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwot
ICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzU3RyaW5nKHVuaGFuZGxlZFByb21wdEJlaGF2
aW9yKSkKKyAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyh1bmhhbmRsZWRQcm9t
cHRCZWhhdmlvcikgfHwgIWRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBwcm9tcHRzIHN1cHBvcnQuCiAgICAgICAgICAg
ICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcik7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleS5maW5kKCI6IikgIT0gbm90Rm91bmQpIHsKICAgICAg
ICAgICAgIGlmICghcGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoaXQtPmtleSwgaXQtPnZhbHVl
KSkKQEAgLTU5MSw2ICs2MDYsMTkgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpuZXdTZXNzaW9u
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNhcGFiaWxpdGllcy51bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0aWVzLnVuaGFuZGxlZFByb21wdEJlaGF2aW9y
LnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVuaGFuZGxlZFByb21wdEJlaGF2aW9y
OjpEaXNtaXNzOgorICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInVuaGFuZGxlZFByb21wdEJlaGF2aW9yIiksICJkaXNtaXNzIik7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3I6OkFjY2VwdDoKKyAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0
aWVzT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlv
ciIpLCAiYWNjZXB0Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I6Oklnbm9yZToKKyAgICAgICAgICAgICAg
ICAgICAgY2FwYWJpbGl0aWVzT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ1bmhhbmRs
ZWRQcm9tcHRCZWhhdmlvciIpLCAiaWdub3JlIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWUiKSwgV1RGTW92ZShjYXBhYmlsaXRp
ZXNPYmplY3QpKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRPYmplY3QpKSk7CiAgICAgICAgIH0pOwo=
</data>
<flag name="review"
          id="337993"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>