<?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>141446</bug_id>
          
          <creation_ts>2015-02-10 15:05:26 -0800</creation_ts>
          <short_desc>WebGL2: Make sure various WebGL1 extensions promoted to core on now enabled by default.</short_desc>
          <delta_ts>2015-02-18 12:49:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roger Fong">roger_fong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068155</commentid>
    <comment_count>0</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-10 15:05:26 -0800</bug_when>
    <thetext>I will be handling these 6 extensions and promoting them to core.

OES_standard_derivatives 
OES_element_index_uint 
EXT_sRGB 
EXT_blend_minmax 
EXT_frag_depth 
EXT_shader_texture_lod 

The other 3 already have other bugs tracking their progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068159</commentid>
    <comment_count>1</comment_count>
      <attachid>246346</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-10 15:11:56 -0800</bug_when>
    <thetext>Created attachment 246346
patch

I don&apos;t yet have finalized tests ready to be landed for these changes (though I&apos;ve confirmed that it works some hacked together tests locally). I&apos;m working on other stuff now though so I just wanted to stick this patch up here for now to let EWS do its thing and for safe keeping (in case I run into a situation where I have to wipe my machine and all its data...which has happened to me more than once...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068160</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-10 15:13:14 -0800</bug_when>
    <thetext>Attachment 246346 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 6 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>1068258</commentid>
    <comment_count>3</comment_count>
      <attachid>246346</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-10 21:47:09 -0800</bug_when>
    <thetext>Comment on attachment 246346
patch

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

r=me, but please deal with the missing Bugzilla entry?

&gt; Source/WebCore/ChangeLog:4
&gt; +        rdar://problem/19633715.

Please file a related Bugzilla entry as well.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1151
&gt; +                maxIndex = std::max(maxIndex, static_cast&lt;int&gt;(p[i]));

These snippets of code are scattered all through these WebGL classes. Couldn&apos;t we make these into templates of some kind to simplify the code?

Although, I guess this is just code moved from elsewhere. But could we do a clean-up pass to reduce some of this code duplication?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070199</commentid>
    <comment_count>4</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-18 12:49:44 -0800</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/180285
Many of these methods in the WebGL2 implementation are still subject to change. 
I think before I start creating lots of helper methods that take lots of parameters to avoid code duplication, I&apos;d like the implementation to become a little more finalized.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246346</attachid>
            <date>2015-02-10 15:11:56 -0800</date>
            <delta_ts>2015-02-10 21:47:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>extensionpatch.patch</filename>
            <type>text/plain</type>
            <size>67670</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTg4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTAyLTEwICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViR0wyOiBQcm9tb3RlIHZh
cmlvdXMgV2ViR0wxIGV4dGVuc2lvbnMgdG8gY29yZSBmb3IgV2ViR0wyLgorICAgICAgICByZGFy
Oi8vcHJvYmxlbS8xOTYzMzcxNS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0cyBoYXZlIGJlZW4gd3JpdHRlbiBhbmQgdmVyaWZpZWQgYnV0IEkg
d291bGQgbGlrZSB0byBnZXQgdGhlbSBhY2NlcHRlZCBpbnRvIHRoZQorICAgICAgICBLaHJvbm9z
IGNvbmZvcm1hbmNlIHN1aXRlcyBiZWZvcmUgbGFuZGluZyB0aGVtLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggcHJvbW90ZXMgdGhlIGZvbGxvd2luZyBXZWJHTDEgZXh0ZW5zaW9ucyB0byBjb3JlIGlu
IFdlYkdMMjoKKyAgICAgICAgT0VTX2VsZW1lbnRfaW5kZXhfdWludCAKKyAgICAgICAgRVhUX3NS
R0IgCisgICAgICAgIEVYVF9ibGVuZF9taW5tYXggCisgICAgICAgIEVYVF9mcmFnX2RlcHRoIAor
ICAgICAgICBFWFRfc2hhZGVyX3RleHR1cmVfbG9kCisgICAgICAgIE9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyAKKyAgICAgICAgCisgICAgICAgIFRoZSBsYXR0ZXIgMyBhcmUgZW5hYmxlZCBieSBk
ZWZhdWx0IG5vdyBmb3IgR0xTTDEsIHRob3VnaCB3ZSB3aWxsIGdldCB0aGVzZSBleHRlbnNpb25z
IAorICAgICAgICBmb3IgZnJlZSB3aGVuIEdMU0wzIGJlY29tZXMgYXZhaWxhYmxlLgorCisgICAg
ICAgIFdlYkdMMiBiaW5kaW5nIGNvZGUgc2hvdWxkIGFjdHVhbGx5IGZhbGwgYmFjayB0byBiYXNl
IGltcGxlbWVudGF0aW9uIGZvciBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIuCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDog
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw6IERpdHRvLgorCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24pOiBFbmFibGUgV0VCR0xfbG9zZV9jb250ZXh0
IGFzIGFuIGV4dGVuc2lvbiBhZ2Fpbi4KKyAgICAgICAgSXQgd2FzIG5vdCBwcm9tb3RlZCB0byBj
b3JlIGFzIEkgb3JpZ2luYWxseSB0aG91Z2h0IGl0IGhhZCBiZWVuLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVy
aW5nQ29udGV4dCk6IFByb21vdGUgdGhlIDMgc2hhZGVyIGV4dGVuc2lvbnMgZm9yIEdMU0wxIHRv
IGNvcmUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFs
aXplU2hhZGVyRXh0ZW5zaW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKTogUHJvbW90
ZSBTUkdCIGV4dGVuc2lvbiB0byBjb3JlLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aGludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogUHJvbW90ZSBPRVNfZWxlbWVudF9pbmRleF91aW50
IGV4dGVuc2lvbiB0byBjb3JlLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbik6IFByb21vdGUgRVhU
X2JsZW5kX21pbm1heCBleHRlbnNpb24gdG8gY29yZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOiBDb3BpZWQgZm9ybSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJh
d0VsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbik6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3
RWxlbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpo
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisKIDIw
MTUtMDItMDkgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIHRleHQt
dW5kZXJsaW5lLXBvc2l0aW9uOiB1bmRlciBpcyBicm9rZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc5Nzg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksMTIgKzY5LDYgQEAgdm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaQog
ewogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKIH0KLSAgICAKLUpTVmFsdWUg
SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLX0KIAogSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiAxNzk4NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QAogI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKICNpbmNsdWRlICJXZWJHTERl
YnVnU2hhZGVycy5oIgogI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCisjaW5jbHVkZSAi
V2ViR0xMb3NlQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkdMUXVlcnkuaCIKICNpbmNsdWRlICJX
ZWJHTFNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJHTFN5bmMuaCIKQEAgLTU5LDExICs2MCwyMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKHBhc3NlZENhbnZhcywgYXR0cmlidXRlcykKIHsKKyAgICBpbml0aWFsaXplU2hhZGVy
RXh0ZW5zaW9ucygpOwogfQogCiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJp
bmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZhcywg
Y29udGV4dCwgYXR0cmlidXRlcykKIHsKKyAgICBpbml0aWFsaXplU2hhZGVyRXh0ZW5zaW9ucygp
OworfQorCit2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVTaGFkZXJFeHRl
bnNpb25zKCkKK3sKKyAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxl
ZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NoYWRlcl90ZXh0
dXJlX2xvZCIpOworICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVk
KCJHTF9FWFRfZnJhZ19kZXB0aCIpOwogfQogCiB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFy
Z2V0LCBHQzNEaW50NjQgcmVhZE9mZnNldCwgR0MzRGludDY0IHdyaXRlT2Zmc2V0LCBHQzNEaW50
NjQgc2l6ZSkKQEAgLTg5LDE1ICsxMDAsNiBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmdldEJ1ZmZlclN1CiAgICAgVU5VU0VEX1BBUkFNKHJldHVybmVkRGF0YSk7CiB9CiAKLVdlYkdM
R2V0SW5mbyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci19Ci0KIHZv
aWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdDM0RpbnQgc3JjWDAs
IEdDM0RpbnQgc3JjWTAsIEdDM0RpbnQgc3JjWDEsIEdDM0RpbnQgc3JjWTEsIEdDM0RpbnQgZHN0
WDAsIEdDM0RpbnQgZHN0WTAsIEdDM0RpbnQgZHN0WDEsIEdDM0RpbnQgZHN0WTEsIEdDM0RiaXRm
aWVsZCBtYXNrLCBHQzNEZW51bSBmaWx0ZXIpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsK
QEAgLTgzMCw2ICs4MzIsMTEgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuZ2V0KCk7CiAgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xf
bG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCisgICAg
ICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNv
bnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwor
ICAgIH0KICAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX2F0YyIpKQogICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKICAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMpCkBAIC04OTgsNyArOTA1LDcgQEAgVmVjdG9yPFN0cmluZz4gV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6ZwogICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfczN0YyIpOwogICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBo
aWNzQ29udGV4dDNEKCkpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0
dXJlIik7Ci0gICAgCisgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7CiAg
ICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgewogICAgICAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRl
cl9zb3VyY2UiKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRl
cnMiKTsKQEAgLTkwOCw2ICs5MTUsMTU2IEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitXZWJHTEdldEluZm8gV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIFdlYkdM
U2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0YWNobWVu
dE9iamVjdChhdHRhY2htZW50KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAocG5h
bWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpO
T05FKTsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJRF9FTlVNIGlu
IHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAorICAgICAgICAvLyBzcGVjaWZpZXMgSU5WQUxJ
RF9PUEVSQVRJT04uCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+aXNS
ZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVycHJl
dF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9
IDA7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcgOiB7
CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAgICBHQzNEZW51
bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTUkdCOF9BTFBIQTgKKyAgICAgICAgICAgICAgICB8fCByZW5kZXJCdWZmZXJGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMgorICAgICAgICAgICAgICAg
IHx8IHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfRVRDMl9FQUMKKyAgICAgICAgICAgICAgICB8fCByZW5kZXJCdWZmZXJGb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9FVEMyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGlj
c0NvbnRleHQzRDo6U1JHQik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3Jh
Z2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2VUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgorICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQo
dHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgz
MkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lM
ODoKKyAgICAgICAgaWYgKCFpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9y
YWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsK
KyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJT
dG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxp
ZCA9IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVDoKKyAgICAgICAgaXNWYWxpZCA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAi
aW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQt
PmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwogdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQpAQCAtMTMyMyw2ICsxNDgwLDcgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleAogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJOgogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhVSToKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEY6CiAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCOV9FNToKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMy
RjoKQEAgLTIwMzQsNiArMjE5MiwxNTkgQEAgV2ViR0xHZXRJbmZvIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmdldAogICAgIH0KIH0KIAorYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzUmVxdWlyZWQpCit7CisgICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRp
b24gYnkgY2FjaGluZyBhIG1heGltdW0gaW5kZXggb2YKKyAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBw
ZXIgZWxlbWVudCBhcnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKKyAgICAvLyBhcnJh
eSBidWZmZXJzIGhhdmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCisg
ICAgLy8gaW5kZXgsIHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24g
aW4KKyAgICAvLyB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgorICAgIAorICAgIFJlZlB0cjxX
ZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEdDM0RzaXplaXB0ciBudW1F
bGVtZW50cyA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgIC8vIFRoZSBj
YXNlIGNvdW50PT0wIGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3Jl
IHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZS4KKyAgICBpZiAoIW51bUVsZW1lbnRzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgQVNTRVJUKGJ1ZmZl
cik7CisgICAgCisgICAgaW50IG1heEluZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNo
ZWRNYXhJbmRleCh0eXBlKTsKKyAgICBpZiAobWF4SW5kZXggPCAwKSB7CisgICAgICAgIC8vIENv
bXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZl
biB0eXBlIG9mIGluZGV4LgorICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTogeworICAgICAgICAgICAgY29uc3QgR0Mz
RHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkp
OworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsg
aSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRp
Y19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdXNob3J0KTsKKyAgICAgICAgICAgIGNvbnN0IEdD
M0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRh
KCkpOworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50
czsgaSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0
YXRpY19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgICAg
ICBudW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICAgICAgY29uc3QgR0Mz
RHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNf
Y2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxlbWVudEFycmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7Cisg
ICAgfQorICAgIAorICAgIGlmIChtYXhJbmRleCA+PSAwKSB7CisgICAgICAgIC8vIFRoZSBudW1i
ZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMgaXMgb25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bQorICAg
ICAgICAvLyBpbmRleCB0aGF0IHdpbGwgYmUgYWNjZXNzZWQuCisgICAgICAgIG51bUVsZW1lbnRz
UmVxdWlyZWQgPSBtYXhJbmRleCArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25O
YW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghdmFsaWRh
dGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGNv
dW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZz
ZXQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFj
b3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPCAwKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZG
RVIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICAvLyBF
bnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBpZiAoIXZhbGlk
YXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQgb2YgYm91
bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAg
ICAgIGlmIChjaGVja2VkQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVD
b3VudC5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1w
dCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUodHlwZSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsK
KyAgICAgICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjaGVja2VkQ291bnQu
dW5zYWZlR2V0KCksIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVs
ZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2Vk
UHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvbnN0IGNo
YXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0Nv
bnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGVU5DX0FERDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNU
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNSU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBh
YmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKQogewogICAgIHN3
aXRjaCAoY2FwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzk4NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQ2NCBvZmZzZXQsIEFycmF5QnVmZmVyKiByZXR1cm5lZERhdGEp
OwogICAgIAogICAgIC8qIEZyYW1lYnVmZmVyIG9iamVjdHMgKi8KLSAgICBXZWJHTEdldEluZm8g
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIFdlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdDM0RpbnQgc3JjWDAs
IEdDM0RpbnQgc3JjWTAsIEdDM0RpbnQgc3JjWDEsIEdDM0RpbnQgc3JjWTEsIEdDM0RpbnQgZHN0
WDAsIEdDM0RpbnQgZHN0WTAsIEdDM0RpbnQgZHN0WDEsIEdDM0RpbnQgZHN0WTEsIEdDM0RiaXRm
aWVsZCBtYXNrLCBHQzNEZW51bSBmaWx0ZXIpOwogICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJl
TGF5ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEdWludCB0ZXh0
dXJlLCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGxheWVyKTsKICAgICBXZWJHTEdldEluZm8gZ2V0
SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gcG5hbWUpOwpAQCAtMTY3LDkgKzE2NywxMCBAQCBwdWJsaWM6CiAg
ICAgLyogRXh0ZW5zaW9ucyAqLwogICAgIHZpcnR1YWwgV2ViR0xFeHRlbnNpb24qIGdldEV4dGVu
c2lvbihjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+
IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKLQogICAgIHZpcnR1YWwgV2ViR0xH
ZXRJbmZvIGdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJy
aWRlOwotICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGludChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRleFN1
YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Y29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBi
b29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlk
ZTsKQEAgLTE4OCw2ICsxODksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlw
ZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnQgbGV2ZWwpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgVGV4RnVuY1ZhbGlk
YXRpb25GdW5jdGlvblR5cGUsCkBAIC0yMDQsNiArMjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIAog
cHJpdmF0ZToKICAgICBHQzNEZW51bSBiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3Jt
YXQoR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQpOworICAgIHZvaWQgaW5pdGlhbGl6ZVNoYWRlckV4
dGVuc2lvbnMoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRs
CShyZXZpc2lvbiAxNzk3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw2IEBAIHR5
cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0IEdMY2xhbXBmOwogICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgZ2V0QnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQs
IEFycmF5QnVmZmVyIHJldHVybmVkRGF0YSk7CiAKICAgICAvKiBGcmFtZWJ1ZmZlciBvYmplY3Rz
ICovCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gcG5hbWUpOwogICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgYmxpdEZyYW1lYnVmZmVy
KEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGlu
dCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xiaXRmaWVs
ZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKICAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
THVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKICAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHTGVudW0g
dGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSBwbmFtZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDE3OTg0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2ICsyODcsMTM1IEBA
IFZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2UKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsIHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICAKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICB9CisgICAgCisgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpOworICAgIGlm
ICghb2JqZWN0KSB7CisgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgICAgICAvLyBPcGVuR0wgRVMg
Mi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdM
CisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG9iamVj
dC0+aXNUZXh0dXJlKCkgfHwgb2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKKyAgICBpZiAob2Jq
ZWN0LT5pc1RleHR1cmUoKSkgeworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1Jl
ZlB0cjxXZWJHTFRleHR1cmU+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4ob2JqZWN0
KSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6IHsK
KyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBu
YW1lLCAmdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2ht
ZW50Iik7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIp
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRy
PFdlYkdMUmVuZGVyYnVmZmVyPihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4o
b2JqZWN0KSkpOworICAgICAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6IHsKKyAgICAgICAgICAgIGlmICghbV9leHRzUkdCKSB7
CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFdlYkdM
UmVuZGVyYnVmZmVyKj4ob2JqZWN0KTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHJlbmRlckJ1ZmZl
ckZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAg
IEFTU0VSVChyZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCAmJiBy
ZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyQnVmZmVyRm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQjhfQUxQ
SEE4X0VYVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEV4dGVuc2lvbnMz
RDo6U1JHQl9FWFQpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0YXJn
ZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9i
amVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVy
YnVmZmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNpemUo
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lO
REVYODoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVDoKKyAgICAgICAg
aWYgKGludGVybmFsZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVCAmJiAh
bV9leHRzUkdCKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVy
bmFsZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9j
b250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJ
c1ZhbGlkKHRydWUpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6CisgICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5z
aW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Cisg
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3Rv
cmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9
IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJ
VkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCkBAIC05NzYsNiArMTEwNSwxNjggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0UAogICAgIH0KIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxl
bWVudHNSZXF1aXJlZCkKK3sKKyAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlv
biBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgorICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBl
ciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAorICAgIC8vIGFycmF5
IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KKyAg
ICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBp
bgorICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCisgICAgCisgICAgUmVmUHRyPFdl
YkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgR0MzRHNpemVpcHRyIG51bUVs
ZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgLy8gVGhlIGNh
c2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50cyBiZWZvcmUg
dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgorICAgIGlmICghbnVtRWxlbWVudHMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVmZmVyID0gZWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICBBU1NFUlQoYnVmZmVy
KTsKKyAgICAKKyAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hl
ZE1heEluZGV4KHR5cGUpOworICAgIGlmIChtYXhJbmRleCA8IDApIHsKKyAgICAgICAgLy8gQ29t
cHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVu
IHR5cGUgb2YgaW5kZXguCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAgICAgICBjb25zdCBHQzNE
dWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7
CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBp
KyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGlj
X2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogeworICAgICAgICAgICAg
bnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICAgICAgY29uc3QgR0Mz
RHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEo
KSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRz
OyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3Rh
dGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKKyAgICAgICAgICAg
IGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7CisgICAgICAg
ICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVm
ZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBu
dW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4
SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgZWxlbWVudEFycmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRl
eCk7CisgICAgfQorICAgIAorICAgIGlmIChtYXhJbmRleCA+PSAwKSB7CisgICAgICAgIC8vIFRo
ZSBudW1iZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMgaXMgb25lIG1vcmUgdGhhbiB0aGUgbWF4aW11
bQorICAgICAgICAvLyBpbmRleCB0aGF0IHdpbGwgYmUgYWNjZXNzZWQuCisgICAgICAgIG51bUVs
ZW1lbnRzUmVxdWlyZWQgPSBtYXhJbmRleCArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5j
dGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCF2
YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UOgorICAgICAgICBpZiAobV9vZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvdW50IDwgMCB8fCBv
ZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAg
ICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJw
cmltY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
aWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFy
cmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQgb2YgYm91bmRzIGZvciBjdXJy
ZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVj
a2VkQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVy
Zmxvd2VkKCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mg
b3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRp
dmUodHlwZSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxl
bWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAg
IGlmICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjaGVja2VkQ291bnQudW5zYWZlR2V0KCks
IHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKSB8fCAh
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291
bnQudW5zYWZlR2V0KCkpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0
IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9
ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAh
aXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJs
ZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQorewor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQURE
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpNSU5fRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfRVhUOgorICAgICAg
ICBpZiAoKG1vZGUgPT0gRXh0ZW5zaW9uczNEOjpNSU5fRVhUIHx8IG1vZGUgPT0gRXh0ZW5zaW9u
czNEOjpNQVhfRVhUKSAmJiAhbV9leHRCbGVuZE1pbk1heCkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKQogewogICAgIHN3aXRjaCAoY2Fw
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc5ODQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViR0xHZXRJbmZvIGdldFBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpIG92ZXJyaWRlOwogCisgICAgdmlydHVh
bCBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGV4
U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJy
aWRlOwpAQCAtNTgsNiArNjEsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlw
ZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCiAgICAg
ICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAogICAgICAgICBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMTc5ODQy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjAsNjggKzE3MjAsNiBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZl
KEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIC8v
IFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hpbmcgYSBtYXhpbXVtIGlu
ZGV4IG9mCi0gICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQgYXJyYXkgYnVmZmVyLiBJ
ZiBhbGwgb2YgdGhlIGJvdW5kCi0gICAgLy8gYXJyYXkgYnVmZmVycyBoYXZlIGVub3VnaCBlbGVt
ZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQotICAgIC8vIGluZGV4LCBza2lwcyB0aGUgZXhw
ZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCi0gICAgLy8gdmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZS4KLSAgICAKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1
ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7
Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCk7Ci0gICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRo
IGluIGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgot
ICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBB
cnJheUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZm
ZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyKTsKLQotICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRB
cnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7Ci0gICAgaWYgKG1heEluZGV4IDwg
MCkgewotICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUg
YnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KLSAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKLSAg
ICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0
ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAw
OyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6
bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUOiB7Ci0gICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0g
ICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVz
aG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkg
PSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0
ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVDogewotICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9m
KEdDM0R1aW50KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0Rz
aXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4
SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0
Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgpOwotICAgIH0KLQotICAgIGlmIChtYXhJbmRl
eCA+PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMgaXMg
b25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bQotICAgICAgICAvLyBpbmRleCB0aGF0IHdpbGwgYmUg
YWNjZXNzZWQuCi0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBtYXhJbmRleCArIDE7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVk
JiBudW1FbGVtZW50c1JlcXVpcmVkKQogewogICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNl
dCA+PSAwKTsKQEAgLTE5NzQsODYgKzE5MTIsNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdBcnJhCiAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHBy
aW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb3VudCA8
IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwg
MCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewot
ICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInBy
aW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlk
IHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1F
TlRfQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFjb3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwot
ICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZl
Q291bnQocHJpbWl0aXZlQ291bnQpOwotICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJm
bG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJy
YXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwg
IXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNv
dW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQ
cmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
bnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMg
YXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAg
Y29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25B
Y2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKQEAgLTIzNjMsMjI5ICsyMjIxLDYgQEAgR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RQogICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEVycm9yKCk7CiB9CiAKLVdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxlbmRfbWlubWF4IikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4Iikp
IHsKLSAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWluTWF4KSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIp
OwotICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxl
bmRNaW5NYXg+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWlu
TWF4LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9z
UkdCIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfc1JHQiIpKSB7Ci0gICAgICAgIGlmICghbV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsK
LSAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0c1JHQi5nZXQoKTsKLSAgICB9Ci0gICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfZnJhZ19kZXB0aCIpCi0gICAgICAgICYm
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgi
KSkgewotICAgICAgICBpZiAoIW1fZXh0RnJhZ0RlcHRoKSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsK
LSAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVw
dGg+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQo
KTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAg
ICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2Qi
KTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8
RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
ZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAg
ICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAg
ICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAg
ICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0
aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVu
YWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNT
dGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRp
dmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2
YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9F
U190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNU
ZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNU
ZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0K
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVG
bG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVu
c3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAg
bV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9h
dExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZs
b2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
Ik9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAg
ICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQi
KTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8
T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
b2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVh
cikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29l
c1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1
cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikp
IHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAg
ICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVu
dF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRl
eFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0Iikp
IHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmds
TG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwot
ICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAo
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJl
X2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQo
dGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAg
ICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENv
bXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAg
ICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0g
ICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1f
d2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRo
X3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBo
aWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1
cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBw
b3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5z
dGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5z
dGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAg
bV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRB
cnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2Vk
QXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygp
KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVu
ZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5m
bykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJu
IG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAg
ICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFu
c2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdT
aGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dl
YmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLQotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLQotICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+Z2V0QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KTsKLSAgICBpZiAo
IW9iamVjdCkgewotICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKLSAgICAgICAgLy8gT3BlbkdMIEVTIDIu
MCBzcGVjaWZpZXMgSU5WQUxJRF9FTlVNIGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAot
ICAgICAgICAvLyBzcGVjaWZpZXMgSU5WQUxJRF9PUEVSQVRJT04uCi0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG9iamVjdC0+aXNU
ZXh0dXJlKCkgfHwgb2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKLSAgICBpZiAob2JqZWN0LT5p
c1RleHR1cmUoKSkgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFKTsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfTkFNRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTFRleHR1cmU+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4ob2JqZWN0KSkpOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEVWRUw6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6IHsKLSAgICAg
ICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAm
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7
Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdM
UmVuZGVyYnVmZmVyPihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0
KSkpOwotICAgICAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T0xPUl9FTkNPRElOR19FWFQ6IHsKLSAgICAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5k
ZXJCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0KTsK
LSAgICAgICAgICAgIEdDM0RlbnVtIHJlbmRlckJ1ZmZlckZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZW5kZXJCdWZmZXJGb3Jt
YXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCAmJiByZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0
ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVy
Rm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQpOwotICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNo
bWVudCIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJv
Z3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwpAQCAtMzAwOSwyNyArMjY0
NCw2IEBAIGxvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBi
b29sIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICBpc1ZhbGlkID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIGlzVmFsaWQg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJo
aW50IiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYg
KCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQpAQCAtMzI4OSw1MSArMjkwMyw2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVsZWFzZVMKICAgICBtX2NvbnRl
eHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1
ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJl
bmRlcmJ1ZmZlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVT
aXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9JTkRFWDg6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQ6Ci0gICAg
ICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQg
JiYgIW1fZXh0c1JHQikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBp
bnRlcm5hbGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+
c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXpl
KHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
RXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
fQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNp
bFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBH
QzNEYm9vbGVhbiBpbnZlcnQpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
QEAgLTQ4ODksMjYgKzQ0NTgsNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRS
QUNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUlOX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
TUFYX0VYVDoKLSAgICAgICAgaWYgKChtb2RlID09IEV4dGVuc2lvbnMzRDo6TUlOX0VYVCB8fCBt
b2RlID09IEV4dGVuc2lvbnMzRDo6TUFYX0VYVCkgJiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBzcmMsIEdDM0RlbnVtIGRzdCkKIHsKICAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X0NPTlNUQU5UX0NPTE9SKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMTc5ODQyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQzNE
ZW51bSBnZXRFcnJvcigpOwogICAgIHZpcnR1YWwgV2ViR0xFeHRlbnNpb24qIGdldEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLSAgICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFdlYkdMR2V0
SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgV2ViR0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIo
V2ViR0xQcm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAt
MjQyLDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmli
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGxv
bmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lKTsKIAotICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgPSAw
OwogICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFdlYkdMQnVmZmVyKik7CiAgICAgYm9vbCBpc0Nv
bnRleHRMb3N0KCkgY29uc3Q7CiAgICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNh
cCk7CkBAIC0yNTgsNyArMjU4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9seWdvbk9mZnNldChH
QzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOwogICAgIHZvaWQgcmVhZFBpeGVscyhH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLSAgICB2
b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKICAgICB2
b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsK
ICAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7CiAgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0zOTgsNyArMzk4LDcgQEAgcHJvdGVj
dGVkOgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VD
YWxsYmFjazsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKIAot
ICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZU5ld0NvbnRleHQoKTsKICAgICB2b2lkIHNldHVwRmxhZ3MoKTsKIAogICAgIC8vIEFjdGl2
ZURPTU9iamVjdApAQCAtNDMyLDcgKzQzMiw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIHZhbGlk
YXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0KTsKIAogICAgIC8vIENvbnNlcnZhdGl2ZSBidXQgcXVpY2sgaW5kZXggdmFs
aWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVt
IHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBu
dW1FbGVtZW50c1JlcXVpcmVkKSA9IDA7CiAKICAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4
IHZhbGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAogICAg
IGJvb2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7
CkBAIC00NDEsNyArNDQxLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9i
amVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKIAogICAgIGJvb2wgdmFsaWRhdGVEcmF3
QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICBib29sIHZh
bGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNp
Z25lZCYgbnVtRWxlbWVudHMsIEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
dW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7CiAKICAgICAv
LyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4KICAgICB2b2lkIGFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKQEAgLTc3MCw3ICs3NzAsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0g
ICAgYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSk7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKSA9IDA7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgogICAgIGJvb2wgdmFsaWRhdGVCbGVu
ZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNE
ZW51bSBkc3QpOwo=
</data>
<flag name="review"
          id="271310"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="271311"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>